diff --git a/demo/AffineTestBase.hs b/demo/AffineTestBase.hs
--- a/demo/AffineTestBase.hs
+++ b/demo/AffineTestBase.hs
@@ -47,8 +47,8 @@
 runATA :: AffineTrafoAlg -> IO ()
 runATA ata = do 
     { putStrLn $ ata_console_msg ata
-    ; writeEPS_latin1 (ata_eps_file ata) pic
-    ; writeSVG_latin1 (ata_svg_file ata) pic 
+    ; writeEPS (ata_eps_file ata) pic
+    ; writeSVG (ata_svg_file ata) pic 
     }
   where
     pic = buildPictureATA (ata_prim_constructor ata) 
@@ -92,8 +92,8 @@
 runCPA :: ControlPointAlg -> IO ()
 runCPA cpa = do 
     { putStrLn $ cpa_console_msg cpa
-    ; writeEPS_latin1 (cpa_eps_file cpa) pic
-    ; writeSVG_latin1 (cpa_svg_file cpa) pic
+    ; writeEPS (cpa_eps_file cpa) pic
+    ; writeSVG (cpa_svg_file cpa) pic
     }
   where
     pic = cpPicture (cpa_prim_constructor cpa) (cpa_prim_transformer cpa)
@@ -125,13 +125,13 @@
 
 
 dog_kennel :: DPrimPath
-dog_kennel = path zeroPt [ lineTo  (P2 0 60) 
-                         , lineTo  (P2 40 100)
-                         , lineTo  (P2 80 60)
-                         , lineTo  (P2 80 0)
-                         , lineTo  (P2 60 0)  
-                         , lineTo  (P2 60 30)
-                         , curveTo (P2 60 50) (P2 50 60) (P2 40 60)
-                         , curveTo (P2 30 60) (P2 20 50) (P2 20 30)
-                         , lineTo  (P2 20 0)
-                         ]
+dog_kennel = primPath zeroPt [ lineTo  (P2 0 60) 
+                             , lineTo  (P2 40 100)
+                             , lineTo  (P2 80 60)
+                             , lineTo  (P2 80 0)
+                             , lineTo  (P2 60 0)  
+                             , lineTo  (P2 60 30)
+                             , curveTo (P2 60 50) (P2 50 60) (P2 40 60)
+                             , curveTo (P2 30 60) (P2 20 50) (P2 20 30)
+                             , lineTo  (P2 20 0)
+                             ]
diff --git a/demo/DeltaPic.hs b/demo/DeltaPic.hs
--- a/demo/DeltaPic.hs
+++ b/demo/DeltaPic.hs
@@ -7,7 +7,7 @@
 module DeltaPic where
 
 import Wumpus.Core
-
+import Wumpus.Core.Text.StandardEncoding
 import System.Directory
 
 
@@ -23,8 +23,8 @@
 main :: IO ()
 main = do 
     createDirectoryIfMissing True "./out/"
-    writeEPS_latin1 "./out/delta_pic01.eps" pic1
-    writeSVG_latin1 "./out/delta_pic01.svg" pic1
+    writeEPS "./out/delta_pic01.eps" pic1
+    writeSVG "./out/delta_pic01.svg" pic1
 
 
 pic1 :: DPicture
@@ -38,7 +38,7 @@
    frame1 a   = frame [a] 
 
 common_ff :: FontFace
-common_ff = FontFace "Helvetica" "Helvetica" SVG_REGULAR latin1_font_encoder
+common_ff = FontFace "Helvetica" "Helvetica" SVG_REGULAR standard_encoding
 
 
 -- Note - each label is fully attributed with the font style.
diff --git a/demo/FontMetrics.hs b/demo/FontMetrics.hs
--- a/demo/FontMetrics.hs
+++ b/demo/FontMetrics.hs
@@ -3,6 +3,8 @@
 module FontMetrics where
 
 import Wumpus.Core
+import Wumpus.Core.FontSize
+import Wumpus.Core.Text.StandardEncoding
 
 import Data.AffineSpace                 -- package: vector-space
 
@@ -13,8 +15,8 @@
 main :: IO ()
 main = do 
     createDirectoryIfMissing True "./out/"
-    writeEPS_latin1 "./out/font_metrics.eps" metrics_pic
-    writeSVG_latin1 "./out/font_metrics.svg" metrics_pic
+    writeEPS "./out/font_metrics.eps" metrics_pic
+    writeSVG "./out/font_metrics.svg" metrics_pic
 
 
 peru :: RGBi
@@ -28,45 +30,33 @@
 
 courier_attr :: FontAttr
 courier_attr = FontAttr 48 (FontFace "Courier" "Courier New" 
-                                     SVG_REGULAR latin1_font_encoder)
+                                     SVG_REGULAR standard_encoding)
 
 metrics_pic :: DPicture
 metrics_pic = char_pic `picOver` lines_pic
 
 lines_pic   :: DPicture
 lines_pic   = frame $ 
-    [ ascender_line, numeral_line, xheight_line, baseline, descender_line ]
+    [ ascender_line, cap_line, xheight_line, baseline, descender_line ]
   where
-    descender_pos   = 0 - courier48_descender_depth
-  
-    ascender_line   = haxis peru (descender_pos + courier48_height)
-    numeral_line    = haxis peru courier48_numeral_height
-    xheight_line    = haxis peru courier48_xheight
+    ascender_line   = haxis peru (ascenderHeight 48)
+    cap_line        = haxis peru (capHeight 48)
+    xheight_line    = haxis peru (xcharHeight 48)
     baseline        = haxis peru 0
-    descender_line  = haxis peru descender_pos
+    descender_line  = haxis peru (descenderDepth 48)
 
 
 
 char_pic :: Picture Double
 char_pic = frame $ zipWith ($) chars (iterate (.+^ hvec 32) zeroPt)
   where
-    chars = (map letter "ABXabdgjxy12") ++ [agraveU]
+    chars = map letter "ABXabdgjxy12"
 
-type PrimF = DPoint2 -> DPrimitive
 
-bodyHeight  :: PrimF
-bodyHeight  = vertLine peru $ fromPtSize courier48_numeral_height
 
-agraveU     :: PrimF
-agraveU     = textlabel black courier_attr "&#Agrave"
-
 letter :: Char -> DPoint2 -> DPrimitive
 letter ch pt = textlabel black courier_attr [ch] pt
 
-
-vertLine :: RGBi -> Double -> DPoint2 -> DPrimitive
-vertLine rgb height pt = 
-    ostroke rgb default_stroke_attr $ vertexPath [pt, pt .+^ vvec height]
 
 haxis :: RGBi -> PtSize -> DPrimitive
 haxis rgb ypos = 
diff --git a/demo/Hyperlink.hs b/demo/Hyperlink.hs
new file mode 100644
--- /dev/null
+++ b/demo/Hyperlink.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS -Wall #-}
+
+module Hyperlink where
+
+import Wumpus.Core
+
+import System.Directory
+
+
+
+main :: IO ()
+main = do 
+    createDirectoryIfMissing True "./out/"
+    writeEPS "./out/svg_link01.eps"  link_pic
+    writeSVG "./out/svg_link01.svg"  link_pic
+
+
+link_pic :: DPicture
+link_pic = frame [ xlink xref $ ztextlabel "www.haskell.org" zeroPt ]
+  where    
+     xref = xlinkhref "http://www.haskell.org"
diff --git a/demo/KernPic.hs b/demo/KernPic.hs
--- a/demo/KernPic.hs
+++ b/demo/KernPic.hs
@@ -4,7 +4,8 @@
 
 import Wumpus.Core
 import Wumpus.Core.Colour
-
+import Wumpus.Core.Text.StandardEncoding
+import Wumpus.Core.Text.Symbol
 import System.Directory
 
 
@@ -12,38 +13,50 @@
 main :: IO ()
 main = do 
     createDirectoryIfMissing True "./out/"
-    writeEPS_latin1 "./out/kern_pic01.eps" kern_pic
-    writeSVG_latin1 "./out/kern_pic01.svg" kern_pic
-
+    putStrLn $ unlines warn_msg
+    writeEPS "./out/kern_pic01.eps" kern_pic
+    writeSVG "./out/kern_pic01.svg" kern_pic
+  where
+    warn_msg = [ "Note - this demo uses the symbol font which is not"
+               , "recommended for SVG."
+               ]
 
 kern_pic :: DPicture
 kern_pic = pic1 `picOver` pic2 `picOver` pic3 
 
 pic1 :: DPicture
-pic1 = frame [ helveticaLabelH mystere   (P2 0 50)
-             , helveticaLabelH mystere   (P2 0 25)
+pic1 = frame [ helveticaLabelH universal   (P2 0 50)
+             , helveticaLabelH universal   (P2 0 25)
              ]
 
 pic2 :: DPicture
 pic2 = illustrateBoundsPrim blue_violet $ 
-          helveticaLabelV mystere   (P2 100 140)
+          helveticaLabelV universal (P2 200 180)
 
 pic3 :: DPicture
 pic3 = frame [ symbolLabelH uUpsilon (P2 0 0) ]
 
-mystere ::[DKerningChar]
-mystere = [ kernchar 0  'm'
-          , kernchar 15 'y'
-          , kernchar 10 's'
-          , kernchar 10 't'
-          , kernEscInt 6 232
-          , kernchar 10 'r'
-          , kernchar 6 'e'
-          ]
+-- Some attention is paid to kerning - note that the kern between 
+-- @i@ and @v@ is smaller than the norm.
+--
+universal ::[DKerningChar]
+universal = [ kernchar     0  'u'
+            , kernchar    15  'n'
+            , kernchar    15  'i'
+            , kernchar    10  'v'
+            , kernchar    15  'e'
+            , kernchar    15  'r'
+            , kernchar    13  's'
+            , kernchar    15  'a'
+            , kernchar    15  'l'
+            , kernEscName 10  "currency"
+            ]
 
--- Note - to assert that this is working check both the 
--- PostScript and the SVG.
+-- Note - this may not work in SVG, some renderers are intolerant 
+-- towards the Symbol font.
 --
+-- 0o241 is upper-case upsilon in the Symbol encoding vector.
+-- 
 uUpsilon :: [ DKerningChar ]
 uUpsilon = [ kernEscInt 6 0o241, kernchar 12 'a', kernchar 12 'b' ] 
 
@@ -61,14 +74,14 @@
 helvetica18 = FontAttr 18 (FontFace "Helvetica" 
                                     "Helvetica" 
                                     SVG_REGULAR 
-                                    latin1_font_encoder)
+                                    standard_encoding)
 
 
 symbol18 :: FontAttr
 symbol18 = FontAttr 18 (FontFace "Symbol" 
                                  "Symbol" 
                                  SVG_REGULAR
-                                 symbol_font_encoder)
+                                 symbol_encoding)
 
 blue_violet             :: RGBi
 blue_violet             = RGBi 0x8a 0x2b 0xe2
diff --git a/demo/LabelPic.hs b/demo/LabelPic.hs
--- a/demo/LabelPic.hs
+++ b/demo/LabelPic.hs
@@ -4,6 +4,7 @@
 module LabelPic where
 
 import Wumpus.Core
+import Wumpus.Core.Text.StandardEncoding
 
 import System.Directory
 
@@ -18,13 +19,13 @@
 
 demo01 :: IO ()
 demo01 = do 
-    writeEPS_latin1 "./out/label01.eps" lbl1
-    writeSVG_latin1 "./out/label01.svg" lbl1
+    writeEPS "./out/label01.eps" lbl1
+    writeSVG "./out/label01.svg" lbl1
 
 demo02 :: IO ()
 demo02 = do 
-    writeEPS_latin1 "./out/label02.eps" p1
-    writeSVG_latin1 "./out/label02.svg" p1
+    writeEPS "./out/label02.eps" p1
+    writeSVG "./out/label02.svg" p1
   where
     p1 = lbl1 `picBeside` lbl1 
               `picBeside` (rotateAbout (pi/4) (center lbl1) lbl1) 
@@ -32,8 +33,8 @@
 
 demo03 :: IO ()
 demo03 = do 
-    writeEPS_latin1 "./out/label03.eps" p1
-    writeSVG_latin1 "./out/label03.svg" p1
+    writeEPS "./out/label03.eps" p1
+    writeSVG "./out/label03.svg" p1
   where
     p1 = (drawBounds lbl1) `picBeside` 
          (drawBounds lbl1) `picBeside` 
@@ -44,8 +45,8 @@
 
 demo04 :: IO ()
 demo04 = do
-    writeEPS_latin1 "./out/label04.eps" p1
-    writeSVG_latin1 "./out/label04.svg" p1
+    writeEPS "./out/label04.eps" p1
+    writeSVG "./out/label04.svg" p1
   where
     p1 =           (drawBounds lbl1) 
          `picOver` (drawBounds $ scale 2 2 lbl1)
@@ -63,14 +64,14 @@
 bigLetter rgb ch = uniformScale 5 $ frame [textlabel rgb attrs [ch] zeroPt]
   where
     attrs = FontAttr 12 (FontFace "Helvetica" "Helvetica" 
-                                  SVG_REGULAR latin1_font_encoder)
+                                  SVG_REGULAR standard_encoding)
 
 
 -- | A should be above B, above T
 demo05 :: IO ()
 demo05 = do 
-    writeEPS_latin1 "./out/label05.eps" p1
-    writeSVG_latin1 "./out/label05.svg" p1
+    writeEPS "./out/label05.eps" p1
+    writeSVG "./out/label05.svg" p1
   where
     p1 = uniformScale 10 $ bigA `picOver` bigB `picOver` bigT
 
@@ -78,8 +79,8 @@
 
 demo06 :: IO ()
 demo06 = do 
-    writeEPS_latin1 "./out/label06.eps" p1
-    writeSVG_latin1 "./out/label06.svg" p1
+    writeEPS "./out/label06.eps" p1
+    writeSVG "./out/label06.svg" p1
   where
     p1 = pA `picBeside` pB `picBeside` pC `picBeside` pA
     
@@ -90,8 +91,8 @@
 
 demo07 :: IO ()
 demo07 = do 
-    writeEPS_latin1 "./out/label07.eps" p1
-    writeSVG_latin1 "./out/label07.svg" p1
+    writeEPS "./out/label07.eps" p1
+    writeSVG "./out/label07.svg" p1
   where
     p1 = pA `picBeside` pB `picBeside` pC
     
@@ -139,5 +140,5 @@
   line1 = frame [textlabel peru attrs "Hello" zeroPt]
   line2 = frame [textlabel peru attrs "World" zeroPt]
   attrs = FontAttr 12 (FontFace "Helvetica" "Helvetica" 
-                                SVG_REGULAR latin1_font_encoder)
+                                SVG_REGULAR standard_encoding)
 
diff --git a/demo/Latin1Pic.hs b/demo/Latin1Pic.hs
--- a/demo/Latin1Pic.hs
+++ b/demo/Latin1Pic.hs
@@ -4,6 +4,7 @@
 
 import Wumpus.Core
 import Wumpus.Core.Colour
+import Wumpus.Core.Text.StandardEncoding
 
 import System.Directory
 
@@ -12,16 +13,39 @@
 main :: IO ()
 main = do 
     createDirectoryIfMissing True "./out/"
-    writeEPS_latin1 "./out/latin1_pic01.eps" pic1
-    writeSVG_latin1 "./out/latin1_pic01.svg" pic1
+    putStr ps_msg
+    writeEPS "./out/latin1_pic01.eps" pic1
+    writeSVG "./out/latin1_pic01.svg" pic1
+  where
+    ps_msg = unlines $ 
+        [ "Expected output:"
+        , "  SVG - egrave in all four lines."
+        , "  GhostScript - Lslash / egrave / Lslash / Lslash." 
+        , ""
+        , "Explanation:"
+        , "The data for this demo uses char code 232 (0xE8) corresponding"
+        , "to (egrave) in the common Latin1 character set."
+        , "This is printed as expected for SVG."
+        , ""
+        , "However, in the PostScript _Standard Encoding_ 232 corresponds"
+        , "to Lslash and the core GhostScript and Adobe fonts generally use" 
+        , "Standard Encoding, so Wumpus matches the font Helvetica with this"
+        , "encoding."
+        , ""
+        , "To get the expected character in both PostScript and SVG use the"
+        , "glyph name as the escape token."
+        , ""
+        ]
 
 
 -- | Provided the respective lookups can be found, Wumpus 
 -- supports escapes as either numbers or names...
 --
+-- Note - 0xE8 corresponds to Lslash in the standard encoding. 
+-- 
 pic1 :: DPicture
 pic1 = frame [ helveticaLabel "myst&#232;re"      (P2 0 60)
-             , helveticaLabel "myst&#egrave;re"   (P2 0 40)
+             , helveticaLabel "myst&egrave;re"    (P2 0 40) -- no HASH!
              , helveticaLabel "myst&#0o350;re"    (P2 0 20)
              , helveticaLabel "myst&#0XE8;re"     (P2 0 00)
              ]
@@ -34,4 +58,4 @@
 
 helvetica18 :: FontAttr
 helvetica18 = FontAttr 18 (FontFace "Helvetica" "Helvetica" 
-                                    SVG_REGULAR latin1_font_encoder)
+                                    SVG_REGULAR standard_encoding)
diff --git a/demo/MultiPic.hs b/demo/MultiPic.hs
--- a/demo/MultiPic.hs
+++ b/demo/MultiPic.hs
@@ -12,8 +12,8 @@
 main :: IO ()
 main = do 
     createDirectoryIfMissing True "./out/"
-    writeEPS_latin1 "./out/multi_pic.eps"  pic1
-    writeSVG_latin1 "./out/multi_pic.svg"  pic1
+    writeEPS "./out/multi_pic.eps"  pic1
+    writeSVG "./out/multi_pic.svg"  pic1
 
 
 
diff --git a/demo/TextBBox.hs b/demo/TextBBox.hs
new file mode 100644
--- /dev/null
+++ b/demo/TextBBox.hs
@@ -0,0 +1,57 @@
+{-# OPTIONS -Wall #-}
+
+module TextBBox where
+
+import Wumpus.Core
+import Wumpus.Core.Text.StandardEncoding
+
+
+import System.Directory
+
+
+
+main :: IO ()
+main = do 
+    createDirectoryIfMissing True "./out/"
+    writeEPS "./out/text_bbox.eps" words_pic
+    writeSVG "./out/text_bbox.svg" words_pic
+
+
+peru :: RGBi
+peru = RGBi 205  133  63
+
+plum :: RGBi
+plum = RGBi 221  160  221
+
+black :: RGBi
+black = RGBi 0 0 0 
+
+courier :: FontAttr
+courier = FontAttr 48 (FontFace "Courier" "Courier New" 
+                                     SVG_REGULAR standard_encoding)
+
+
+words_pic   :: DPicture
+words_pic   = frame $ 
+    [ line1, line2, line3, char1, char2 ]
+  where
+    line1   = boundedCourier "This text is drawn"  (P2  0 180)
+    line2   = boundedCourier "within its bounding" (P2  0 120)
+    line3   = boundedCourier "box."                (P2  0  60)
+    char1   = boundedCourier "1"                   (P2  0   0)
+    char2   = boundedCourier "2"                   (P2 29   0)
+
+
+boundedCourier :: String -> DPoint2 -> DPrimitive
+boundedCourier = boundedText courier
+
+boundedText :: (Num u, Ord u, FromPtSize u) 
+            => FontAttr -> String -> Point2 u -> Primitive u
+boundedText fa@(FontAttr sz _) ss pt = primCat bbox text
+  where
+    esc_text  = escapeString ss  
+    bbox_path = vertexPath $ boundaryCornerList $ textBoundsEsc sz pt esc_text
+    bbox      = cstroke peru default_stroke_attr bbox_path
+    text      = escapedlabel black fa esc_text pt
+
+
diff --git a/demo/TransformEllipse.hs b/demo/TransformEllipse.hs
--- a/demo/TransformEllipse.hs
+++ b/demo/TransformEllipse.hs
@@ -14,16 +14,16 @@
 main :: IO ()
 main = do 
     createDirectoryIfMissing True "./out/"
-    writeEPS_latin1 "./out/transform_ellipse01.eps" pic1
-    writeSVG_latin1 "./out/transform_ellipse01.svg" pic1
-    writeEPS_latin1 "./out/transform_ellipse02.eps" pic2
-    writeSVG_latin1 "./out/transform_ellipse02.svg" pic2
-    writeEPS_latin1 "./out/transform_ellipse03.eps" pic3
-    writeSVG_latin1 "./out/transform_ellipse03.svg" pic3
-    writeEPS_latin1 "./out/transform_ellipse04.eps" pic4
-    writeSVG_latin1 "./out/transform_ellipse04.svg" pic4
-    writeEPS_latin1 "./out/transform_ellipse05.eps" pic5
-    writeSVG_latin1 "./out/transform_ellipse05.svg" pic5
+    writeEPS "./out/transform_ellipse01.eps" pic1
+    writeSVG "./out/transform_ellipse01.svg" pic1
+    writeEPS "./out/transform_ellipse02.eps" pic2
+    writeSVG "./out/transform_ellipse02.svg" pic2
+    writeEPS "./out/transform_ellipse03.eps" pic3
+    writeSVG "./out/transform_ellipse03.svg" pic3
+    writeEPS "./out/transform_ellipse04.eps" pic4
+    writeSVG "./out/transform_ellipse04.svg" pic4
+    writeEPS "./out/transform_ellipse05.eps" pic5
+    writeSVG "./out/transform_ellipse05.svg" pic5
 
 
 
@@ -75,7 +75,8 @@
 
 crossbar :: (Real u, Floating u, FromPtSize u) 
          => u -> u -> Point2 u -> Picture u
-crossbar rx ry ctr = frame [ostroke black default_stroke_attr $ path west ps]
+crossbar rx ry ctr = 
+    frame [ostroke black default_stroke_attr $ primPath west ps]
   where
     ps    = [ lineTo east, lineTo ctr, lineTo north, lineTo south ]
     north = ctr .+^ vvec ry
@@ -92,4 +93,4 @@
           ]
 
   where
-    mkline p1 p2 = ostroke black default_stroke_attr $ path p1 [lineTo p2]
+    mkline p1 p2 = ostroke black default_stroke_attr $ primPath p1 [lineTo p2]
diff --git a/demo/TransformPath.hs b/demo/TransformPath.hs
--- a/demo/TransformPath.hs
+++ b/demo/TransformPath.hs
@@ -13,16 +13,16 @@
 main :: IO ()
 main = do 
     createDirectoryIfMissing True "./out/"
-    writeEPS_latin1 "./out/transform_path01.eps" pic1
-    writeSVG_latin1 "./out/transform_path01.svg" pic1
-    writeEPS_latin1 "./out/transform_path02.eps" pic2
-    writeSVG_latin1 "./out/transform_path02.svg" pic2
-    writeEPS_latin1 "./out/transform_path03.eps" pic3
-    writeSVG_latin1 "./out/transform_path03.svg" pic3
-    writeEPS_latin1 "./out/transform_path04.eps" pic4
-    writeSVG_latin1 "./out/transform_path04.svg" pic4
-    writeEPS_latin1 "./out/transform_path05.eps" pic5
-    writeSVG_latin1 "./out/transform_path05.svg" pic5
+    writeEPS "./out/transform_path01.eps" pic1
+    writeSVG "./out/transform_path01.svg" pic1
+    writeEPS "./out/transform_path02.eps" pic2
+    writeSVG "./out/transform_path02.svg" pic2
+    writeEPS "./out/transform_path03.eps" pic3
+    writeSVG "./out/transform_path03.svg" pic3
+    writeEPS "./out/transform_path04.eps" pic4
+    writeSVG "./out/transform_path04.svg" pic4
+    writeEPS "./out/transform_path05.eps" pic5
+    writeSVG "./out/transform_path05.svg" pic5
 
 
 
@@ -71,7 +71,7 @@
              => (Primitive u -> Primitive u) 
              -> Point2 u -> Picture u
 mkBlackPath trafo bl = 
-    frame [ trafo $ ostroke black custom_stroke_attr $ path bl ps]
+    frame [ trafo $ ostroke black custom_stroke_attr $ primPath bl ps]
   where
     ps = [lineTo p1, lineTo p2, lineTo p3]
     p1 = bl .+^ vec 25 12
@@ -88,7 +88,8 @@
 
 crosshair :: (Real u, Floating u, FromPtSize u) 
           => u -> u -> Point2 u -> Picture u
-crosshair w h bl = frame [ostroke burlywood default_stroke_attr $ path bl ps]
+crosshair w h bl = 
+    frame [ostroke burlywood default_stroke_attr $ primPath bl ps]
   where
     ps    = [ lineTo tr, lineTo br, lineTo tl, lineTo bl ]
     tl    = bl .+^ vvec h
@@ -106,4 +107,4 @@
           ]
 
   where
-    mkline p1 p2 = ostroke black default_stroke_attr $ path p1 [lineTo p2]
+    mkline p1 p2 = ostroke black default_stroke_attr $ primPath p1 [lineTo p2]
diff --git a/demo/TransformTextlabel.hs b/demo/TransformTextlabel.hs
--- a/demo/TransformTextlabel.hs
+++ b/demo/TransformTextlabel.hs
@@ -13,16 +13,16 @@
 main :: IO ()
 main = do 
     createDirectoryIfMissing True "./out/"
-    writeEPS_latin1 "./out/transform_textlabel01.eps" pic1
-    writeSVG_latin1 "./out/transform_textlabel01.svg" pic1
-    writeEPS_latin1 "./out/transform_textlabel02.eps" pic2
-    writeSVG_latin1 "./out/transform_textlabel02.svg" pic2
-    writeEPS_latin1 "./out/transform_textlabel03.eps" pic3
-    writeSVG_latin1 "./out/transform_textlabel03.svg" pic3
-    writeEPS_latin1 "./out/transform_textlabel04.eps" pic4
-    writeSVG_latin1 "./out/transform_textlabel04.svg" pic4
-    writeEPS_latin1 "./out/transform_textlabel05.eps" pic5
-    writeSVG_latin1 "./out/transform_textlabel05.svg" pic5
+    writeEPS "./out/transform_textlabel01.eps" pic1
+    writeSVG "./out/transform_textlabel01.svg" pic1
+    writeEPS "./out/transform_textlabel02.eps" pic2
+    writeSVG "./out/transform_textlabel02.svg" pic2
+    writeEPS "./out/transform_textlabel03.eps" pic3
+    writeSVG "./out/transform_textlabel03.svg" pic3
+    writeEPS "./out/transform_textlabel04.eps" pic4
+    writeSVG "./out/transform_textlabel04.svg" pic4
+    writeEPS "./out/transform_textlabel05.eps" pic5
+    writeSVG "./out/transform_textlabel05.svg" pic5
 
 
 
@@ -78,7 +78,8 @@
 
 crosshair :: (Real u, Floating u, FromPtSize u) 
           => u -> u -> Point2 u -> Picture u
-crosshair w h bl = frame [ostroke burlywood default_stroke_attr $ path bl ps]
+crosshair w h bl = 
+    frame [ostroke burlywood default_stroke_attr $ primPath bl ps]
   where
     ps    = [ lineTo tr, lineTo br, lineTo tl, lineTo bl ]
     tl    = bl .+^ vvec h
@@ -96,4 +97,4 @@
           ]
 
   where
-    mkline p1 p2 = ostroke black default_stroke_attr $ path p1 [lineTo p2]
+    mkline p1 p2 = ostroke black default_stroke_attr $ primPath p1 [lineTo p2]
diff --git a/demo/ZOrderPic.hs b/demo/ZOrderPic.hs
--- a/demo/ZOrderPic.hs
+++ b/demo/ZOrderPic.hs
@@ -13,8 +13,8 @@
 main = do 
     createDirectoryIfMissing True "./out/"
     putStrLn zorder_msg
-    writeEPS_latin1 "./out/zorder01.eps" combined_pic
-    writeSVG_latin1 "./out/zorder01.svg" combined_pic
+    writeEPS "./out/zorder01.eps" combined_pic
+    writeSVG "./out/zorder01.svg" combined_pic
 
 zorder_msg :: String
 zorder_msg = unlines $ 
diff --git a/doc-src/Guide.lhs b/doc-src/Guide.lhs
--- a/doc-src/Guide.lhs
+++ b/doc-src/Guide.lhs
@@ -23,7 +23,7 @@
 \section{About \wumpuscore}
 %-----------------------------------------------------------------
 
-This guide was last updated for \wumpuscore version 0.37.0.
+This guide was last updated for \wumpuscore version 0.40.0.
 
 \wumpuscore is a Haskell library for generating 2D vector 
 pictures. It was written with portability as a priority, so it has 
@@ -65,7 +65,7 @@
 
 \item[\texttt{Wumpus.Core.BoundingBox.}]
 Data type representing bounding boxes and operations on them. 
-Bounding boxes are important for Pictures and they support the 
+Bounding boxes are important for Pictures as they support the 
 definition of \emph{picture composition} operators.
 
 \item[\texttt{Wumpus.Core.Colour.}]
@@ -123,29 +123,54 @@
 (i.e. 1/72 of an inch). The \texttt{PtSize} module is a numeric 
 type to represent them.
 
-\item[\texttt{Wumpus.Core.TextEncoder.}]
-Types for handling extended character codes within fonts e.g. 
-for accented characters or the Symbol font. Special characters 
-generally have to be escaped in the PostScript and SVG output, 
-this module provides data types for lookup tables between the 
-escaped character code and its PostScript or SVG representation. 
-Text encoders are associated with fonts - glyphs within a font 
-are located by their character name / code. Currently 
-\wumpuscore has encoders for the Standard Latin Encoding table 
-and the Symbol font character set. 
+\item[\texttt{Wumpus.Core.Text.Base.}]
+Types for handling escaped \emph{special} charcters within input 
+text. Wumpus mostly follows SVG conventions for escaping strings, 
+although glyph names should \emph{always} correspond to PostScript 
+names and never XML / SVG ones, e.g. for \texttt{\&} use 
+\texttt{\#ampersand;} not \texttt{\#amp;}. 
 
-\item[\texttt{Wumpus.Core.TextLatin1.}]
-A instance of the TextEncoder type for mapping Latin 1 characters
-to the PostScript and SVG escape characters. Typically this 
-encoder is associated with the fonts - Helvetica, Courier and 
-Times-Roman.
+Also note, unless you are generating only SVG output, glyph 
+names should be used rather than char codes. For PostScript the 
+resolution of char codes is dependent on the encoding of the font 
+used to render it. As core fonts do not use the common Latin1 
+encoding, using using numeric char codes in the input text may 
+produce unexpected results.
 
-\item[\texttt{Wumpus.Core.TextSymbol.}]
-A instance of the TextEncoder type for the Symbol font. Note, 
-unfortunately escape codes for the Symbol font seem to cause
-problems for some SVG renderers. Chrome appears fine, but Safari 
-and Firefox currently have problems.
+Unfortunately fonts are often missing characters you might want, 
+and a PostScript renderer cannot do anything about it (SVG appears 
+to support glyph subsitution from other fonts). \wumpuscore is 
+oblivious to the contents of fonts so it cannot issue a warning 
+if a glyph is not present when it generates a document.
 
+
+\item[\texttt{Wumpus.Core.Text.GlyphIndices.}]
+An map of PostScript glyph names to Unicode code points. 
+
+\item[\texttt{Wumpus.Core.Text.GlyphNames.}]
+An map of Unicode code points to PostScript glyph names. 
+Unfortunately this table is \emph{lossy} - some code points have 
+more than one name, and as this file is auto-generated the 
+resolution of which glyph name matches a code point is arbtirary. 
+\wumpuscore uses this table only as a fallback if PostScript glyph 
+name resolution cannot be solved through an encoding vector.
+
+\item[\texttt{Wumpus.Core.Text.Latin1Encoding.}]
+An encoding vector for the Latin 1 character set. 
+
+\item[\texttt{Wumpus.Core.Text.StandardEncoding.}]
+An encoding vector for the PostScript StandardEncoding set. This 
+encoder is associated with the core text fonts - Helvetica, 
+Courier and Times-Roman. Typically core fonts will include further 
+glyphs not indexed by the Standard Encoding, for PostScript these 
+glyphs are addressable only by name and not by index.
+
+\item[\texttt{Wumpus.Core.Text.Symbol.}]
+An encoding vector for the Symbol font which uses distinct glyph 
+names. Unfortunately whilst the Symbol font is useful for 
+PostScript, its use in SVG is actively discouraged by the W3C and
+some browsers.
+
 \item[\texttt{Wumpus.Core.VersionNumber.}]
 Current version number of \wumpuscore.
 
@@ -295,30 +320,31 @@
 Font handling is quite primitive in \wumpuscore. The bounding box 
 of text label is only estimated - based on the length of the 
 label's string rather than the metrics of the individual letters 
-encoded in the font. Accessing the glyph metrics in a font would 
-require a font loader to read TrueType font files. This would be 
-a significant development effort, probably larger than the effort 
-put into \wumpuscore itself; for \wumpuscore's intended use - 
-producing diagrams and pictures rather than high quality text - 
-the primitive font handling is not such a draw back.
-
+encoded in the font. Accessing the glyph metrics in a font 
+requires a font loader - work has been done on this for 
+\texttt{wumpus-basic} but this is considered a special requirement
+and adds a lot of code. As \wumpuscore is considered to be a 
+fairly minimal system for generating pictures it can live without
+font metrics.
 
-In both PostScript and SVG mis-named fonts can cause somewhat
-inscrutable printing anomalies - usually falling back to a default 
-font but not always. At worst, PostScript may do no subsequent 
-drawing after a font load error. \wumpuscore uses @scalefont@ in 
-the generated PostScript, this semingly works for any integer size 
-and not just the regular font sizes (10, 12, 18, 24, 36). 
+In PostScript, mis-named fonts can cause somewhat inscrutable 
+printing anomalies depending on the implementation. At worst, 
+GhostScript may do no subsequent drawing after a failing to load a 
+font. SVG renderers fallback to some common font if a font cannot 
+be found. 
 
+A PostScript interpreter should have built-in support for the 
+\emph{Core 14} fonts. For the \emph{writing} fonts, SVG renderers 
+appear to support literal analogues quite well rather than needing 
+general descriptors (e.g. \texttt{sans-serif} or 
+\texttt{monospace}). The symbolic fonts Symbol and ZapfDingbats 
+should be avoided for SVG - the W3C does not condone their use in 
+SVG or HTML. Likewise, certain browsers reject them out of course.
 
-The following table lists PostScript fonts and their SVG 
-equivalents, the package \texttt{wumpus-basic} includes a module 
+The following table lists the Core 14 PostScript fonts and their 
+SVG analogues, \texttt{wumpus-basic} includes a module 
 \texttt{Wumpus.Basic.SafeFonts} encoding the fonts in this list 
-and matching them to their appropriate \texttt{TextEncoder}.
-
-Note that the Symbol font, whilst incredibly useful, is a taboo
-with the W3C and they do not condone its use in SVG or HTML.
-Likewise, certain browsers reject it out of course.
+and matching them to their appropriate encoding vectors.
 
 \begin{tabular}{ l l }
 PostScript name   & SVG name      \\
@@ -335,7 +361,8 @@
 Courier-Oblique   & Courier New - style="italic" \\
 Courier-Bold      & Courier New - font-weight="bold" \\
 Courier-Bold-Oblique & Courier New - style="italic", font-weight="bold" \\
-Symbol & (Symbol - see text) \\
+Symbol            & (see text) \\
+ZapfDingbats      & (see text) \\
 \hline
 \end{tabular}
 
diff --git a/doc-src/WorldFrame.hs b/doc-src/WorldFrame.hs
--- a/doc-src/WorldFrame.hs
+++ b/doc-src/WorldFrame.hs
@@ -4,10 +4,10 @@
 
 import Wumpus.Core
 import Wumpus.Core.Colour ( black )
-
+import Wumpus.Core.Text.StandardEncoding
 
 main :: IO ()
-main = writeEPS_latin1 "WorldFrame.eps" world_frame
+main = writeEPS "WorldFrame.eps" world_frame
 
 world_frame :: DPicture
 world_frame = uniformScale 0.75 $ 
@@ -30,9 +30,9 @@
 makeLabelPrim = textlabel black attrs 
   where
     attrs     = FontAttr 10 (FontFace "Helvetica" "Helvetica" 
-                                      SVG_REGULAR latin1_font_encoder)
+                                      SVG_REGULAR standard_encoding)
 
 makeLinePrim :: Double -> DPoint2 -> DPoint2 -> DPrimitive
-makeLinePrim lw a b = ostroke black attrs $ path a [lineTo b]
+makeLinePrim lw a b = ostroke black attrs $ primPath a [lineTo b]
   where
     attrs = default_stroke_attr {line_width=lw}
diff --git a/doc/Guide.pdf b/doc/Guide.pdf
Binary files a/doc/Guide.pdf and b/doc/Guide.pdf differ
diff --git a/src/Wumpus/Core.hs b/src/Wumpus/Core.hs
--- a/src/Wumpus/Core.hs
+++ b/src/Wumpus/Core.hs
@@ -22,6 +22,14 @@
 -- colours are needed, "Wumpus.Core.Colour" can be imported 
 -- directly.
 -- 
+-- Courier metrics (charWidth, textHeight, etc.) are hidden from 
+-- the module "Wumpus.Core.FontSize". As these metrics are 
+-- somewhat approximate, it is expected that if higher-level 
+-- software needs these functionality it should define its own
+-- implementations. However the functions may be convenient and if 
+-- they are needed, "Wumpus.Core.FontSize" can be imported 
+-- directly.
+--
 --------------------------------------------------------------------------------
 
 
@@ -37,9 +45,7 @@
   , module Wumpus.Core.OutputSVG
   , module Wumpus.Core.Picture
   , module Wumpus.Core.PtSize
-  , module Wumpus.Core.Text.Encoder
-  , module Wumpus.Core.Text.Latin1
-  , module Wumpus.Core.Text.SymbolFont
+  , module Wumpus.Core.Text.Base
   , module Wumpus.Core.VersionNumber
   , module Wumpus.Core.WumpusTypes
 
@@ -48,18 +54,20 @@
 
 import Wumpus.Core.AffineTrans
 import Wumpus.Core.BoundingBox
-import Wumpus.Core.Colour hiding ( black, white, red, green, blue, yellow, 
-                                   cyan, magenta )
-import Wumpus.Core.FontSize hiding ( textBoundsEnc )
+import Wumpus.Core.Colour hiding 
+    ( black, white, red, green, blue, yellow, cyan, magenta )
+
+import Wumpus.Core.FontSize hiding 
+    ( charWidth, textWidth, capHeight, xcharHeight, totalCharHeight
+    , ascenderHeight, descenderDepth ) 
+
 import Wumpus.Core.Geometry
 import Wumpus.Core.GraphicProps
 import Wumpus.Core.OutputPostScript
 import Wumpus.Core.OutputSVG
 import Wumpus.Core.Picture
 import Wumpus.Core.PtSize
-import Wumpus.Core.Text.Encoder
-import Wumpus.Core.Text.Latin1
-import Wumpus.Core.Text.SymbolFont
+import Wumpus.Core.Text.Base
 import Wumpus.Core.VersionNumber
 import Wumpus.Core.WumpusTypes
 
diff --git a/src/Wumpus/Core/BoundingBox.hs b/src/Wumpus/Core/BoundingBox.hs
--- a/src/Wumpus/Core/BoundingBox.hs
+++ b/src/Wumpus/Core/BoundingBox.hs
@@ -42,6 +42,7 @@
   , retraceBoundary
 
   , boundaryCorners
+  , boundaryCornerList
   , withinBoundary
   , boundaryWidth
   , boundaryHeight
@@ -196,16 +197,36 @@
     fromCorners (bl,br,tr,tl) = [bl,br,tr,tl]
 
 
--- | 'boundaryCorners' : @bbox -> (bottom_left, bottm_right,
+-- | 'boundaryCorners' : @bbox -> (bottom_left, bottom_right,
 --      top_right, top_left)@
 -- 
 -- Generate all the corners of a bounding box, counter-clock 
 -- wise from the bottom left, i.e. @(bl, br, tr, tl)@.
 --
 boundaryCorners :: BoundingBox u -> (Point2 u, Point2 u, Point2 u, Point2 u)
-boundaryCorners (BBox bl@(P2 x0 y0) tr@(P2 x1 y1)) = (bl, br, tr, tl) where
+boundaryCorners (BBox bl@(P2 x0 y0) tr@(P2 x1 y1)) = (bl, br, tr, tl) 
+  where
     br = P2 x1 y0
     tl = P2 x0 y1
+
+
+-- | 'boundaryCornerList' : @bbox -> [bottom_left, bottom_right,
+--      top_right, top_left]@
+-- 
+-- Generate all the corners of a bounding box, counter-clock 
+-- wise from the bottom left, i.e. @[bl, br, tr, tl]@. 
+--
+-- This is a list version of 'boundaryCorners' which is sometimes 
+-- more convenient. For instance, to create a vertex path it is 
+-- more direct to use this list rather than build one from the 
+-- 4-tuple returned by 'boundaryCorners'.
+--
+boundaryCornerList :: BoundingBox u -> [Point2 u]
+boundaryCornerList (BBox bl@(P2 x0 y0) tr@(P2 x1 y1)) = [bl, br, tr, tl]
+  where
+    br = P2 x1 y0
+    tl = P2 x0 y1
+
 
 -- | Within test - is the supplied point within the bounding box?
 --
diff --git a/src/Wumpus/Core/FontSize.hs b/src/Wumpus/Core/FontSize.hs
--- a/src/Wumpus/Core/FontSize.hs
+++ b/src/Wumpus/Core/FontSize.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# OPTIONS -Wall #-}
 
 --------------------------------------------------------------------------------
@@ -10,13 +11,15 @@
 -- Stability   :  unstable
 -- Portability :  GHC
 --
--- Font size calculation for Label\'s and their bounding boxes.
+-- Approximate glyph size calculations for Label\'s and their 
+-- bounding boxes.
 -- 
--- Calculations are based on metrics derived from Courier at 
--- 48pt. As Courier is a monospaced font, applying these metrics
+-- Calculations are based on metrics derived from the Courier 
+-- font. As Courier is a monospaced font, applying these metrics
 -- to other font families will usually produce over-estimates
 -- (bounding boxes will be longer than the true visual length
--- of the text).
+-- of the text). Furthermore, even italic or bold Courier will 
+-- have different metrics.
 -- 
 -- This is a deficiency of Wumpus, and limits its text handling
 -- capabilities - for example, text cannot be reliably centered 
@@ -33,28 +36,30 @@
   -- * Type synonyms
     FontSize
   , CharCount
-
-  -- * Courier metrics at 48 point
-  , courier48_width
-  , courier48_height
-  , courier48_numeral_height
-  , courier48_xheight
-  , courier48_descender_depth
-  , courier48_ascender_height
-  , courier48_spacer_width
+  , PtScale
+  , ptSizeScale
 
+  -- * Scaling values derived from Courier
+  , mono_width
+  , mono_cap_height
+  , mono_x_height
+  , mono_descender
+  , mono_ascender
+  , mono_left_margin
+  , mono_right_margin
 
-  -- * Metrics calculation
-  , widthAt48pt
+  -- * Courier metrics
   , charWidth
-  , spacerWidth
   , textWidth
-  , textHeight
-  , numeralHeight
+  , capHeight
   , xcharHeight
+  , totalCharHeight
+  , ascenderHeight
   , descenderDepth
+
+  -- * Size calculation
   , textBounds
-  , textBoundsEnc       -- hidden by toplevel Wumpus.Core
+  , textBoundsEsc
   , charCount
 
   ) where
@@ -62,157 +67,170 @@
 import Wumpus.Core.BoundingBox
 import Wumpus.Core.Geometry
 import Wumpus.Core.PtSize
-import Wumpus.Core.Text.TextInternal
-
-import Data.AffineSpace                 -- package: vector-space
+import Wumpus.Core.Text.Base
 
 
 
 type CharCount = Int
 type FontSize = Int
 
--- NOTE - I\'ve largely tried to follow the terminoly from 
+
+-- | Wrapped Double representing 1\/1000 of the scale factor
+-- (Point size) of a font. AFM files encode all measurements 
+-- as these units. 
+-- 
+newtype PtScale = PtScale { getPtScale :: Double } 
+  deriving (Eq,Ord,Num,Floating,Fractional,Real,RealFrac,RealFloat)
+
+
+instance Show PtScale where
+  showsPrec p d = showsPrec p (getPtScale d)
+
+ptSizeScale :: PtScale -> PtSize -> PtSize 
+ptSizeScale sc sz = sz * realToFrac sc
+
+
+-- NOTE - I\'ve largely tried to follow the terminoloy from 
 -- Edward Tufte\'s /Visual Explantions/, page 99.
 --
 
 
--- | The width of a letter in Courier at 48 pt.
---
--- The value is not entirely accurate but it is satisfactory.
+-- | The ratio of width to point size of a letter in Courier.
 --
--- > width = 26.0 
+-- > mono_width = 0.6 
 --
-courier48_width :: PtSize
-courier48_width = 26.0
+mono_width :: PtScale
+mono_width = 0.600
 
--- | The point size of a character in Courier at 48 pt.
---
--- \*\* Naturally the height is 48.0 \*\*.
+-- | The ratio of cap height to point size of a letter in Courier.
 --
-courier48_height :: PtSize 
-courier48_height = 48.0
+-- > mono_cap_height = 0.562
+-- 
+mono_cap_height :: PtScale 
+mono_cap_height = 0.562
 
 
 
--- | The height of a numeral without accents, ascenders or 
--- descenders in Courier at 48 pt.
---
--- Note - the height of a numeral in Courier is slightly 
--- larger than a upper-case letter.
---
--- > numeral_height = 30.0 
---
-courier48_numeral_height :: PtSize 
-courier48_numeral_height = 30.0
 
--- | The height of the body of a lower-case letter 
---  (typically the letter  \'x\') in Courier at 48 pt. 
+-- | The ratio of x height to point size of a letter in Courier. 
 --
 -- This is also known as the \"body height\".
 --
--- > xheight = 20.0 
+-- > mono_x_height = 0.426
 -- 
-courier48_xheight :: PtSize
-courier48_xheight = 20.0
+mono_x_height :: PtScale
+mono_x_height = 0.426
 
 
--- | The depth of a descender in Courier at 48 pt.
+-- | The ratio of descender depth to point size of a letter in 
+-- Courier.
 -- 
--- > descender_depth = 9.0
+-- > mono_descender = -0.157
 -- 
-courier48_descender_depth :: PtSize
-courier48_descender_depth = 9.0
+mono_descender :: PtScale
+mono_descender = (-0.157)
 
--- | The depth of an ascender in Courier at 48 pt.
+
+-- | The ratio of ascender to point size of a letter in Courier.
 -- 
--- > ascender_height = 10.0
+-- > mono_ascender = 0.629
 -- 
--- Note - for Courier point size is not the sum of
--- descender, ascender and xheight and lower-case letters with
--- ascenders are slightly taller than upper-case letters:
---
--- > descender_depth + xheight + ascender_height /= point_size
---
--- > xheight + ascender_height /= cap_height
---
--- > xheight + ascender_height == numeral_height
---
-courier48_ascender_height :: PtSize 
-courier48_ascender_height = 10.0
+mono_ascender :: PtScale
+mono_ascender = 0.629
 
 
--- | The spacing between letters printed directly with 
--- PostScript\'s show command for Courier at 48 pt.
---
--- The value is not entirely accurate but it is satisfactory
--- for bounding box calculations.
---
--- > spacer_width = 3.0
---
-courier48_spacer_width :: PtSize
-courier48_spacer_width = 3.0
+-- | The distance from baseline to max height as a ratio to point 
+-- size for Courier.
+-- 
+-- > mono_max_height = 0.805
+-- 
+mono_max_height :: PtScale 
+mono_max_height = 0.805
 
 
--- | Width of the supplied string when printed at 48pt (i.e. n 
--- chars + (n-1) spacers).
---
--- Use 'charCount' to calculate the @CharCount@.
---
-widthAt48pt :: CharCount -> PtSize
-widthAt48pt n = (courier48_width * len) + (courier48_spacer_width * len_sub)
-  where
-    len      = fromIntegral n
-    len_sub  = len - 1.0
+-- | The distance from baseline to max depth as a ratio to point 
+-- size for Courier.
+-- 
+-- > max_depth = -0.250
+-- 
+mono_max_depth :: PtScale 
+mono_max_depth = (-0.250)
 
+
+-- | The left margin for the bounding box of printed text as a 
+-- ratio to point size for Courier.
+-- 
+-- > mono_left_margin = -0.046
+-- 
+mono_left_margin :: PtScale 
+mono_left_margin = (-0.046)
+
+
+-- | The right margin for the bounding box of printed text as a 
+-- ratio to point size for Courier.
+-- 
+-- > mono_right_margin = 0.050
+-- 
+mono_right_margin :: PtScale 
+mono_right_margin = 0.050
+
+
 -- | Approximate the width of a monospace character using 
 -- metrics derived from the Courier font.
 --
 charWidth :: FontSize -> PtSize
-charWidth sz = (fromIntegral sz)/48 * courier48_width
-
-
--- | Approximate the width of a spacer between monospace 
--- characters using metrics derived from the Courier font.
---
-spacerWidth :: FontSize -> PtSize
-spacerWidth sz = (fromIntegral sz)/48 * courier48_spacer_width
+charWidth = ptSizeScale mono_width . fromIntegral
 
 
 
 -- | Text width at @sz@ point size of the string @s@. All
--- characters are counted literally - special chars may cause
--- problems (this a current deficiency of Wumpus).
+-- characters are counted literally - it is expected that 
+-- @CharCount@ has been calculated with the @charCount@ function.
 --
+-- Note - this does not account for left and right margins around
+-- the printed text.
+--
 textWidth :: FontSize -> CharCount -> PtSize
 textWidth _  n | n <= 0 = 0
-textWidth sz n          = (fromIntegral sz)/48 * widthAt48pt n
+textWidth sz n          = fromIntegral n * charWidth sz
 
 
--- | Text height is just identity/double-coercion of the Point size.
--- i.e. @18 == 18.0@. The /size/ of a font is the maximum height:
+-- | Height of capitals e.g. \'A\' using metrics derived 
+-- the Courier monospaced font.
 --
-textHeight :: FontSize -> PtSize
-textHeight = fromIntegral
+capHeight :: FontSize -> PtSize
+capHeight = fromIntegral
 
--- | Approximate the height of a numeral using metrics derived 
--- from the Courier monospaced font.
---
-numeralHeight :: FontSize -> PtSize
-numeralHeight sz = textHeight sz * (courier48_numeral_height / courier48_height)
 
--- | Approximate the height of the lower-case char \'x\' using 
--- metrics derived from the Courier monospaced font.
+-- | Height of the lower-case char \'x\' using metrics derived 
+-- the Courier monospaced font.
 --
 xcharHeight :: FontSize -> PtSize
-xcharHeight sz = textHeight sz * (courier48_xheight / courier48_height)
+xcharHeight = ptSizeScale mono_x_height . fromIntegral
 
+-- | The total height span of the glyph bounding box for the 
+-- Courier monospaced font.
+--
+totalCharHeight :: FontSize -> PtSize
+totalCharHeight sz = let sz' = fromIntegral sz in 
+    ptSizeScale mono_max_height sz' + negate (ptSizeScale mono_max_depth sz')
+  
 
--- | Approximate the descender depth for font size @sz@ using
--- metrics derived from the Courier monospaced font.
+-- | Ascender height for font size @sz@ using metrics from the 
+-- Courier monospaced font.
 -- 
+ascenderHeight :: FontSize -> PtSize
+ascenderHeight = ptSizeScale mono_ascender . fromIntegral 
+
+
+
+-- | Descender depth for font size @sz@ using metrics from the 
+-- Courier monospaced font.
+-- 
 descenderDepth :: FontSize -> PtSize
-descenderDepth sz = (fromIntegral sz) / 48 * courier48_descender_depth
+descenderDepth = ptSizeScale mono_descender . fromIntegral 
 
+
 -- | 'textBounds' : @ font_size * baseline_left * text -> BBox@
 --
 -- Find the bounding box for the character count at the 
@@ -220,12 +238,10 @@
 -- 
 -- The supplied point represents the baseline left corner of the 
 -- a regular upper-case letter (that is without descenders).
--- The bounding box will always be /dropped/ to accommodate 
--- ascenders - no interpretation of the string takes place to 
--- see if it actually contains ascenders or descenders.
+-- The bounding box adds a margin around all sides of the text.
 --  
 -- The metrics used are derived from Courier - a monospaced font.
--- For variable width fonts the calculated bounding box will 
+-- For proportional fonts the calculated bounding box will 
 -- usually be too long.
 --
 textBounds :: (Num u, Ord u, FromPtSize u) 
@@ -233,27 +249,27 @@
 textBounds sz pt ss = textBoundsBody sz pt (charCount ss) 
 
 
--- | 'textBoundsEnc' : @ font_size * baseline_left * encoded_text -> BBox@
--- 
---  Version of textBounds for EncodedText.
+-- | 'textBoundsEnc' : @ font_size * baseline_left * escaped_text -> BBox@
 -- 
--- Note this function is hidded by the top-level module 
--- @Wumpus.Core@.
+--  Version of textBounds for EscapedText.
 --
-textBoundsEnc :: (Num u, Ord u, FromPtSize u) 
-           => FontSize -> Point2 u -> EncodedText -> BoundingBox u
-textBoundsEnc sz pt enc = textBoundsBody sz pt (textLength enc) 
+textBoundsEsc :: (Num u, Ord u, FromPtSize u) 
+           => FontSize -> Point2 u -> EscapedText -> BoundingBox u
+textBoundsEsc sz pt esc = textBoundsBody sz pt (textLength esc) 
 
 
 textBoundsBody :: (Num u, Ord u, FromPtSize u) 
                => FontSize -> Point2 u -> Int -> BoundingBox u
-textBoundsBody sz baseline_left len = boundingBox bl tr 
+textBoundsBody sz (P2 x y) len = boundingBox ll ur
   where
-    h           = fromPtSize $ textHeight sz
+    pt_sz       = fromIntegral sz
     w           = fromPtSize $ textWidth  sz len
-    dd          = fromPtSize $ descenderDepth sz
-    bl          = baseline_left .-^ V2 0 dd 
-    tr          = bl .+^ V2 w h
+    left_m      = fromPtSize $ ptSizeScale mono_left_margin  pt_sz
+    right_m     = fromPtSize $ ptSizeScale mono_right_margin pt_sz
+    max_depth   = fromPtSize $ ptSizeScale mono_max_depth  pt_sz
+    max_height  = fromPtSize $ ptSizeScale mono_max_height pt_sz
+    ll          = P2 (x + left_m)      (y + max_depth)
+    ur          = P2 (x + w + right_m) (y + max_height)
 
 
 
diff --git a/src/Wumpus/Core/Geometry.hs b/src/Wumpus/Core/Geometry.hs
--- a/src/Wumpus/Core/Geometry.hs
+++ b/src/Wumpus/Core/Geometry.hs
@@ -47,6 +47,7 @@
   , vvec
   , avec
   , pvec
+  , vreverse
   , direction
   , vlength
   , vangle
@@ -390,6 +391,12 @@
 --
 pvec :: Num u => Point2 u -> Point2 u -> Vec2 u
 pvec = flip (.-.)
+
+
+-- | Reverse a vector.
+--
+vreverse :: Num u => Vec2 u -> Vec2 u
+vreverse (V2 x y) = V2 (-x) (-y)
 
 -- | Direction of a vector - i.e. the counter-clockwise angle 
 -- from the x-axis.
diff --git a/src/Wumpus/Core/GraphicProps.hs b/src/Wumpus/Core/GraphicProps.hs
--- a/src/Wumpus/Core/GraphicProps.hs
+++ b/src/Wumpus/Core/GraphicProps.hs
@@ -51,8 +51,8 @@
   ) where
 
 import Wumpus.Core.Colour
-import Wumpus.Core.Text.Encoder
-import Wumpus.Core.Text.Latin1
+import Wumpus.Core.Text.Base
+import Wumpus.Core.Text.StandardEncoding
 import Wumpus.Core.Utils.FormatCombinators
 
 
@@ -111,10 +111,10 @@
 -- | 'FontFace' : @ postscript_name * svg_font_family * svg_font_style @
 --
 data FontFace = FontFace
-      { font_name       :: String        -- for PostScript
-      , svg_font_family :: String        -- for SVG
-      , svg_font_style  :: SVGFontStyle
-      , font_enc_name   :: FontEncoderName
+      { ps_font_name            :: String
+      , svg_font_family         :: String
+      , svg_font_style          :: SVGFontStyle
+      , font_enc_vector         :: EncodingVector
       }
   deriving (Eq,Ord,Show)
 
@@ -181,7 +181,7 @@
 
 instance Format LabelProps where
   format (LabelProps rgb attr) = format rgb 
-                             <+> text (font_name $ font_face attr)
+                             <+> text (ps_font_name $ font_face attr)
 
 instance Format EllipseProps where
   format (EFill rgb)          = format rgb <+> text "Fill"
@@ -208,13 +208,22 @@
 -- | Constructor for the default font, which is @Courier@ (aliased 
 -- to @Courier New@ for SVG) at the supplied size.
 --
+-- Note - the font uses the Standard encoding - this is common to 
+-- fonts but uses different indices to the more common Latin1.
+--
+-- For instance 232 is Lslash not egrave. 
+--
+-- Both GhostScript and the standard AFM /Core 14/ metrics 
+-- supplied by Adobe use Standard Encoding but include further 
+-- characters (e.g. egrave) in the non-indexed /higher-region/.
+-- 
 defaultFont :: Int -> FontAttr
 defaultFont sz = FontAttr sz face 
   where
-    face = FontFace { font_name         = "Courier"
+    face = FontFace { ps_font_name      = "Courier"
                     , svg_font_family   = "Courier New"
                     , svg_font_style    = SVG_REGULAR
-                    , font_enc_name     = latin1_font_encoder
+                    , font_enc_vector   = standard_encoding
                     }
 
 
diff --git a/src/Wumpus/Core/OutputPostScript.hs b/src/Wumpus/Core/OutputPostScript.hs
--- a/src/Wumpus/Core/OutputPostScript.hs
+++ b/src/Wumpus/Core/OutputPostScript.hs
@@ -13,6 +13,9 @@
 --
 -- Output PostScript - either PostScript (PS) files or 
 -- EPS (Encapusulated PostScript) files can be generated. 
+-- 
+-- The generated PostScript uses only features from Language 
+-- Level 1.
 --
 --------------------------------------------------------------------------------
 
@@ -21,10 +24,7 @@
   -- * Output PostScript
     writePS
   , writeEPS
-  
-  , writePS_latin1
-  , writeEPS_latin1
-
+ 
   ) where
 
 import Wumpus.Core.BoundingBox
@@ -33,19 +33,22 @@
 import Wumpus.Core.GraphicProps
 import Wumpus.Core.PictureInternal
 import Wumpus.Core.PostScriptDoc
-import Wumpus.Core.Text.DefaultEncoder
-import Wumpus.Core.Text.Encoder
-import Wumpus.Core.Text.TextInternal
+import Wumpus.Core.Text.Base
+import Wumpus.Core.Text.GlyphNames
 import Wumpus.Core.TrafoInternal
 import Wumpus.Core.Utils.Common
-import Wumpus.Core.Utils.JoinList
+import Wumpus.Core.Utils.JoinList hiding ( cons )
 import Wumpus.Core.Utils.FormatCombinators
 
+import Data.AffineSpace                         -- package: vector-space
 
 import Control.Applicative hiding ( empty, some )
 import Control.Monad
 
+import Data.Char
 import qualified Data.Foldable          as F
+import qualified Data.IntMap            as IntMap
+import Data.List ( mapAccumL )
 import Data.Maybe 
 import Data.Time
 
@@ -61,47 +64,45 @@
 -- the diff is with the last drawn object.
 --
 
-
 newtype PsMonad a = PsMonad { 
-            getPsMonad :: TextEncoder -> GraphicsState -> (a,GraphicsState) }
+            getPsMonad :: GraphicsState -> (a,GraphicsState) }
 
 
 instance Functor PsMonad where
-  fmap f mf = PsMonad $ \r s -> let (a,s1) = getPsMonad mf r s in (f a,s1)
+  fmap f mf = PsMonad $ \s -> let (a,s1) = getPsMonad mf s in (f a,s1)
 
 instance Applicative PsMonad where
-  pure a    = PsMonad $ \_ s -> (a,s)
-  mf <*> ma = PsMonad $ \r s -> let (f,s1) = getPsMonad mf r s
-                                    (a,s2) = getPsMonad ma r s1
-                                  in (f a,s2)
+  pure a    = PsMonad $ \s -> (a,s)
+  mf <*> ma = PsMonad $ \s -> let (f,s1) = getPsMonad mf s
+                                  (a,s2) = getPsMonad ma s1
+                                in (f a,s2)
 
 instance Monad PsMonad where
-  return a  = PsMonad $ \_ s  -> (a,s)
-  m >>= k   = PsMonad $ \r s -> let (a,s1) = getPsMonad m r s
-                                in (getPsMonad . k) a r s1
+  return a  = PsMonad $ \s -> (a,s)
+  m >>= k   = PsMonad $ \s -> let (a,s1) = getPsMonad m s
+                              in (getPsMonad . k) a s1
                               
 
-runPsMonad :: TextEncoder -> PsMonad a -> a
-runPsMonad enc mf = fst $ getPsMonad mf enc zeroGS
+runPsMonad :: PsMonad a -> a
+runPsMonad mf = fst $ getPsMonad mf zeroGS
 
-askCharCode :: FontEncoderName -> Int -> PsMonad (Either GlyphName GlyphName)
-askCharCode fen i = PsMonad $ \r s -> 
-    case lookupByCharCode fen i r of
-      Just n  -> (Right n, s)
-      Nothing -> (Left $ getPsFallback fen r, s)
 
+
+
 -- runLocalGS :: GSUpdate -> PsMonad a -> PsMonad a
 -- runLocalGS upd mf = 
---     PsMonad $ \r s -> let (a,_) = getPsMonad mf r (getGSU upd s) in (a,s)
+--     PsMonad $ \s -> let (a,_) = getPsMonad mf (getGSU upd s) in (a,s)
 
+
+
 getsGS :: (GraphicsState -> a) -> PsMonad a
-getsGS fn = PsMonad $ \_ s -> (fn s,s)
+getsGS fn = PsMonad $ \s -> (fn s,s)
 
 setsGS :: (GraphicsState -> GraphicsState) -> PsMonad ()
-setsGS fn = PsMonad $ \_ s -> ((),fn s)
+setsGS fn = PsMonad $ \s -> ((),fn s)
 
 resetGS :: PsMonad ()
-resetGS = PsMonad $ \ _ _ -> ((),zeroGS)
+resetGS = PsMonad $ \_ -> ((),zeroGS)
 
 
 setsSA :: (StrokeAttr -> StrokeAttr) -> PsMonad ()
@@ -163,48 +164,25 @@
 -- | Output a series of pictures to a Postscript file. Each 
 -- picture will be printed on a separate page. 
 --
--- Generally an encoder should always support the principal
--- encoders for the fonts used (e.g. Latin1) /and/ the encoder 
--- for the Symbol font, as characters from the Symbol font may 
--- be used as decorations for plot marks, etc.
---
 writePS :: (Real u, Floating u, PSUnit u) 
-        => FilePath -> TextEncoder -> [Picture u] -> IO ()
-writePS filepath enc pic = 
-    getZonedTime >>= \ztim -> writeFile filepath (show $ psDraw ztim enc pic)
+        => FilePath -> [Picture u] -> IO ()
+writePS filepath pics = 
+    getZonedTime >>= \ztim -> writeFile filepath (show $ psDraw ztim pics)
 
 -- | Output a picture to an EPS (Encapsulated PostScript) file. 
 -- The .eps file can then be imported or embedded in another 
 -- document.
 --
--- Generally an encoder should always support the principal
--- encoders for the fonts used (e.g. Latin1) /and/ the encoder for
--- the Symbol font, as characters from the Symbol font may be used 
--- as decorations for plot marks, etc.
---
 writeEPS :: (Real u, Floating u, PSUnit u)  
-         => FilePath -> TextEncoder -> Picture u -> IO ()
-writeEPS filepath enc pic =
-    getZonedTime >>= \ztim -> writeFile filepath (show $ epsDraw ztim enc pic)
+         => FilePath -> Picture u -> IO ()
+writeEPS filepath pic =
+    getZonedTime >>= \ztim -> writeFile filepath (show $ epsDraw ztim pic)
 
 
--- | Version of 'writePS' - using the /default encoder/ which 
--- supports Latin1 and the Symbol font.
--- 
--- Generally an encoder should always support the principal
--- encoder (e.g. Latin1) /and/ the Symbol font, as characters from
--- the Symbol font may be used as decorations for plot marks, etc.
--- 
-writePS_latin1 :: (Real u, Floating u, PSUnit u) 
-               => FilePath -> [Picture u] -> IO ()
-writePS_latin1 filepath = writePS filepath defaultEncoder
 
--- | Version of 'writeEPS' - using Latin1 encoding. 
---
-writeEPS_latin1 :: (Real u, Floating u, PSUnit u)  
-                => FilePath -> Picture u -> IO ()
-writeEPS_latin1 filepath = writeEPS filepath defaultEncoder
 
+
+
 --------------------------------------------------------------------------------
 -- Internals
 
@@ -216,10 +194,10 @@
 --
 
 psDraw :: (Real u, Floating u, PSUnit u) 
-       => ZonedTime -> TextEncoder -> [Picture u] -> Doc
-psDraw timestamp enc pics = 
-    let body = vcat $ runPsMonad enc $ zipWithM psDrawPage pages pics
-    in vcat [ psHeader 1 timestamp
+       => ZonedTime -> [Picture u] -> Doc
+psDraw timestamp pics = 
+    let body = vcat $ runPsMonad $ zipWithM psDrawPage pages pics
+    in vcat [ psHeader (length pics) timestamp
             , body
             , psFooter 
             ]
@@ -247,10 +225,10 @@
 -- will need translating.
 --
 epsDraw :: (Real u, Floating u, PSUnit u)
-        => ZonedTime -> TextEncoder -> Picture u -> Doc
-epsDraw timestamp enc pic =
+        => ZonedTime -> Picture u -> Doc
+epsDraw timestamp pic =
     let (bb,cmdtrans) = imageTranslation pic 
-        body          = runPsMonad enc (picture pic) 
+        body          = runPsMonad (picture pic) 
     in vcat [ epsHeader bb timestamp
             , ps_gsave
             , cmdtrans
@@ -265,7 +243,47 @@
   (bb, Nothing) -> (bb, empty)
   (bb, Just v)  -> (bb, ps_translate v)
 
+--------------------------------------------------------------------------------
+-- 
 
+
+
+findGlyphName :: Int -> EncodingVector -> Either String String
+findGlyphName i ev = 
+    case IntMap.lookup i ev of
+      Just n  -> Right n
+      Nothing -> Left $ fromMaybe "space" $ IntMap.lookup i ps_glyph_names
+
+
+psText :: EncodingVector -> EscapedText -> Doc
+psText ev enc_text = cons $ foldr fn ([],empty) $ getEscapedText enc_text
+  where
+    cons ([],doc)               = doc
+    cons (cs,doc)               = ps_show cs `vconcat` doc
+
+    fn (CharLiteral c) (cs,doc) | ord c < 0x80  = (c:cs,doc)
+    fn (CharLiteral c) acc      = ([], psSpecial ev (ord c) `vconcat` cons acc) 
+    fn (CharEscInt i)  acc      = ([], psSpecial ev i `vconcat` cons acc)
+    fn (CharEscName s) acc      = ([], ps_glyphshow s `vconcat` cons acc)  
+
+psChar :: EncodingVector -> EscapedChar -> Doc
+psChar _  (CharLiteral c) | ord c < 0x80  = ps_show [c]
+psChar ev (CharLiteral c)                 = psSpecial ev (ord c) 
+psChar ev (CharEscInt i)                  = psSpecial ev i
+psChar _  (CharEscName s)                 = ps_glyphshow s  
+
+
+psSpecial :: EncodingVector -> Int -> Doc
+psSpecial ev i = case findGlyphName i ev of
+    Left fallback  -> missingComment i `vconcat` ps_glyphshow fallback
+    Right ss       -> ps_glyphshow ss     
+
+
+missingComment :: Int -> Doc
+missingComment i = 
+    ps_comment $ "lookup in encoding vector failed for " ++ show i
+
+
 --------------------------------------------------------------------------------
 
 -- Note - PostScript ignotes any FontCtx changes via the @Group@
@@ -304,23 +322,23 @@
 primitive (PLabel props lbl)   = primLabel props lbl
 primitive (PEllipse props ell) = primEllipse props ell
 primitive (PContext _ chi)     = primitive chi
-primitive (PLink _ chi)        = primitive chi
+primitive (PSVG _ chi)         = primitive chi
 primitive (PGroup ones)        = oneConcat primitive ones
 
 
 primPath :: PSUnit u
          => PathProps -> PrimPath u -> PsMonad Doc
 primPath (CFill rgb)     p = 
-    (\rgbd -> vcat [rgbd, makeStartPath p, ps_closepath, ps_fill]) 
+    (\rgbd -> vcat [rgbd, pathBody p, ps_closepath, ps_fill]) 
       <$> deltaDrawColour rgb  
 
 primPath (CStroke attrs rgb) p = 
-    (\rgbd attrd -> vcat [ rgbd, attrd, makeStartPath p
+    (\rgbd attrd -> vcat [ rgbd, attrd, pathBody p
                          , ps_closepath, ps_stroke ])
       <$> deltaDrawColour rgb <*> deltaStrokeAttrs attrs
  
 primPath (OStroke attrs rgb) p = 
-    (\rgbd attrd -> vcat [rgbd, attrd, makeStartPath p, ps_stroke]) 
+    (\rgbd attrd -> vcat [rgbd, attrd, pathBody p, ps_stroke]) 
       <$> deltaDrawColour rgb <*> deltaStrokeAttrs attrs
 
 primPath (CFillStroke fc attrs sc) p = 
@@ -329,20 +347,22 @@
 
 
 clipPath :: PSUnit u => PrimPath u -> PsMonad Doc
-clipPath p = pure $ vcat [makeStartPath p , ps_closepath, ps_clip]
+clipPath p = pure $ vcat [pathBody p , ps_closepath, ps_clip]
 
 
-makeStartPath :: PSUnit u => PrimPath u -> Doc
-makeStartPath (PrimPath start xs) = 
-    vcat $ ps_newpath : ps_moveto start : map makePathSegment xs
+pathBody :: PSUnit u => PrimPath u -> Doc
+pathBody (PrimPath start xs) = 
+    vcat $ ps_newpath : ps_moveto start : (snd $ mapAccumL step start xs)
+  where
+    step pt (RelLineTo v)         = let p1 = pt .+^ v in (p1, ps_lineto p1)
+    step pt (RelCurveTo v1 v2 v3) = let p1 = pt .+^ v1 
+                                        p2 = p1 .+^ v2
+                                        p3 = p2 .+^ v3
+                                    in (p3, ps_curveto p1 p2 p3)
 
 
 
-makePathSegment :: PSUnit u => PrimPathSegment u -> Doc
-makePathSegment (PLineTo p1)        = ps_lineto p1 
-makePathSegment (PCurveTo p1 p2 p3) = ps_curveto p1 p2 p3 
 
-
 -- | Drawing stroked ellipse has an unfortunate - but (probably) 
 -- unavoidable deficiency.
 --
@@ -355,8 +375,8 @@
 --
 primEllipse :: (Real u, Floating u, PSUnit u) 
             => EllipseProps -> PrimEllipse u -> PsMonad Doc
-primEllipse props (PrimEllipse center hw hh ctm) =
-    bracketPrimCTM center (scaleCTM 1 (hh/hw) ctm) (drawF props)
+primEllipse props (PrimEllipse hw hh ctm) =
+    bracketPrimCTM (scaleCTM 1 (hh/hw) ctm) (drawF props)
   where
     drawF (EFill rgb)            pt = fillArcPath rgb hw pt
     drawF (EStroke sa rgb)       pt = strokeArcPath rgb sa hw pt
@@ -393,61 +413,57 @@
 --
 primLabel :: (Real u, Floating u, PSUnit u) 
           => LabelProps -> PrimLabel u -> PsMonad Doc
-primLabel (LabelProps rgb attrs) (PrimLabel basept body ctm) = 
-    bracketPrimCTM basept ctm mf
+primLabel (LabelProps rgb attrs) (PrimLabel body ctm) = bracketPrimCTM ctm mf
   where
-    mf pt = (\rgbd fontd showd -> vcat [ rgbd, fontd, showd ]) 
-              <$> deltaDrawColour rgb <*> deltaFontAttrs attrs
-                                      <*> labelBody fen pt body
-    
-    fen = font_enc_name $ font_face attrs    
+    ev    = font_enc_vector $ font_face attrs    
+    mf pt = (\rgbd fontd -> vcat [ rgbd, fontd, labelBody ev pt body ]) 
+              <$> deltaDrawColour rgb <*> deltaFontAttrs attrs 
 
 
+-- Note - it would be nice to use @xshow@ and @yshow@ (PostScript
+-- Language Level 2) to generate more efficient code as per using 
+-- horizontal or vertical coordinate lists in the SVG output.
+-- 
+-- Unfortunately, because Wumpus has to use @ps_glyphshow@ for 
+-- any special charaters the code cannot use necessarily use 
+-- @xshow@ to generate a single string. If the string is 
+-- broken by a special char calculating the restart position is 
+-- complicated because PostScript implicitly moves the current 
+-- point as a string is drawn (using the advance vector for each 
+-- glyph in the font). 
+-- 
+-- I tried to use @xshow@ and @yshow@ in an experiment, but the 
+-- Haskell code was very complicated and the generated PostScript 
+-- was not much better in the presence of special chars. As 
+-- Wumpus makes no claims for suitability regarding type-setting 
+-- the current code seems good enough.
+--
+    
 
 labelBody :: PSUnit u 
-          => FontEncoderName -> Point2 u -> LabelBody u -> PsMonad Doc
-labelBody nm pt (StdLayout txt) = (\d1 -> ps_moveto pt `vconcat` d1) 
-                                 <$> encodedText nm txt
-labelBody nm pt (KernTextH xs)  = kernTextH nm pt xs
-labelBody nm pt (KernTextV xs)  = kernTextV nm pt xs
-
-
-encodedText :: FontEncoderName -> EncodedText -> PsMonad Doc 
-encodedText nm etext = vcat <$> (mapM (textChunk nm) $ getEncodedText etext)
-
-
-textChunk :: FontEncoderName -> TextChunk -> PsMonad Doc
-textChunk _  (TextSpan s)    = pure (ps_show $ escapeSpecial s)
-textChunk _  (TextEscName s) = pure (ps_glyphshow s)
-textChunk nm (TextEscInt i)  = (either failk ps_glyphshow) <$> askCharCode nm i
-  where
-    failk gly_name = missingCharCode i gly_name
+          => EncodingVector -> Point2 u -> LabelBody u -> Doc
+labelBody ev pt (StdLayout txt) = ps_moveto pt `vconcat` psText ev txt
+labelBody ev pt (KernTextH xs)  = kernTextH ev pt xs
+labelBody ev pt (KernTextV xs)  = kernTextV ev pt xs
 
+-- 
 kernTextH :: PSUnit u 
-          => FontEncoderName -> Point2 u -> [KerningChar u] -> PsMonad Doc
-kernTextH nm pt0 xs = snd <$> F.foldlM fn (pt0,empty) xs
+                => EncodingVector -> Point2 u -> [KerningChar u] -> Doc
+kernTextH ev pt0 xs = snd $ F.foldl' fn (pt0,empty) xs
   where
-    fn (P2 x y,acc) (dx,ch) = (\doc1 -> let pt = P2 (x+dx) y in
-                                        (pt, vcat [acc, ps_moveto pt, doc1]))
-                                <$> encodedChar nm ch
+    fn (P2 x y,acc) (dx,ch) = let doc1 = psChar ev ch
+                                  pt   = P2 (x+dx) y 
+                              in (pt, vcat [acc, ps_moveto pt, doc1])
 
 -- Note - vertical labels grow downwards...
 --
 kernTextV :: PSUnit u 
-          => FontEncoderName -> Point2 u -> [KerningChar u] -> PsMonad Doc
-kernTextV nm pt0 xs = snd <$> F.foldlM fn (pt0,empty) xs
-  where
-    fn (P2 x y,acc) (dy,ch) = (\doc1 -> let pt = P2 x (y-dy) in
-                                        (pt, vcat [acc, ps_moveto pt, doc1]))
-                                <$> encodedChar nm ch
-
-
-encodedChar :: FontEncoderName -> EncodedChar -> PsMonad Doc
-encodedChar _  (CharLiteral c) = pure (ps_show $ escapeSpecialChar c)
-encodedChar _  (CharEscName s) = pure (ps_glyphshow s)
-encodedChar nm (CharEscInt i)  = (either failk ps_glyphshow) <$> askCharCode nm i 
+                => EncodingVector -> Point2 u -> [KerningChar u] -> Doc
+kernTextV ev pt0 xs = snd $ F.foldl' fn (pt0,empty) xs
   where
-    failk gly_name = missingCharCode i gly_name
+    fn (P2 x y,acc) (dy,ch) = let doc1 = psChar ev ch
+                                  pt   = P2 x (y-dy) 
+                              in (pt, vcat [acc, ps_moveto pt, doc1])
 
 
 --------------------------------------------------------------------------------
@@ -520,7 +536,7 @@
 
 makeFontAttrs :: FontAttr -> Doc
 makeFontAttrs (FontAttr sz face) = 
-    vcat [ ps_findfont (font_name face), ps_scalefont sz, ps_setfont ]
+    vcat [ ps_findfont (ps_font_name face), ps_scalefont sz, ps_setfont ]
 
 
 --------------------------------------------------------------------------------
@@ -541,16 +557,15 @@
 
 
 bracketPrimCTM :: forall u. (Real u, Floating u, PSUnit u)
-               => Point2 u -> PrimCTM u 
+               => PrimCTM u 
                -> (Point2 u -> PsMonad Doc) -> PsMonad Doc
-bracketPrimCTM pt@(P2 x y) ctm mf 
-    | ctm == identityCTM  = mf pt
-    | otherwise           = (\doc -> vcat [inn, doc, out]) <$> mf zeroPt'
-  where
-    zeroPt' :: Point2 u
-    zeroPt' = zeroPt
+bracketPrimCTM ctm0 mf= step $ unCTM ctm0 
+  where 
+    step (pt,ctm) 
+      | ctm == identityCTM  = mf pt
+      | otherwise           = let mtrx = matrixRepCTM ctm0  -- originalCTM
+                                  inn   = ps_concat $ mtrx
+                                  out   = ps_concat $ invert mtrx
+                              in (\doc -> vcat [inn, doc, out]) <$> mf zeroPt
 
-    mtrx  = translMatrixRepCTM x y ctm
-    inn   = ps_concat $ mtrx
-    out   = ps_concat $ invert mtrx
 
diff --git a/src/Wumpus/Core/OutputSVG.hs b/src/Wumpus/Core/OutputSVG.hs
--- a/src/Wumpus/Core/OutputSVG.hs
+++ b/src/Wumpus/Core/OutputSVG.hs
@@ -32,8 +32,9 @@
   -- * Output SVG
     writeSVG
 
-  , writeSVG_latin1
+  , writeSVG_defs
 
+
   ) where
 
 import Wumpus.Core.BoundingBox
@@ -43,55 +44,55 @@
 import Wumpus.Core.PageTranslation
 import Wumpus.Core.PictureInternal
 import Wumpus.Core.SVGDoc
-import Wumpus.Core.Text.DefaultEncoder
-import Wumpus.Core.Text.Encoder
-import Wumpus.Core.Text.TextInternal
 import Wumpus.Core.TrafoInternal
+import Wumpus.Core.Text.Base
+import Wumpus.Core.Text.GlyphIndices
 import Wumpus.Core.Utils.Common
 import Wumpus.Core.Utils.FormatCombinators
 import Wumpus.Core.Utils.JoinList
 
+import Data.AffineSpace                         -- package: vector-space
+
 import Control.Applicative hiding ( empty, some )
+import Data.Char
+import Data.List ( mapAccumL )
+import qualified Data.Map as Map
 import Data.Maybe
 
 -- SvgMonad is two Readers plus Int state for clip paths...
 --
 
+type ClipCount = Int
 
 newtype SvgMonad a = SvgMonad { 
-          getSvgMonad :: TextEncoder -> GraphicsState -> Int -> (a,Int) }
+          getSvgMonad :: GraphicsState -> ClipCount -> (a,ClipCount) }
 
 
 
 instance Functor SvgMonad where
-  fmap f mf = SvgMonad $ \r1 r2 s -> let (a,s1) = getSvgMonad mf r1 r2 s
-                                     in (f a,s1)
+  fmap f mf = SvgMonad $ \r s -> let (a,s1) = getSvgMonad mf r s
+                                 in (f a,s1)
 
 instance Applicative SvgMonad where
-  pure a    = SvgMonad $ \_  _  s -> (a,s)
-  mf <*> ma = SvgMonad $ \r1 r2 s -> let (f,s1) = getSvgMonad mf r1 r2 s
-                                         (a,s2) = getSvgMonad ma r1 r2 s1
-                                   in (f a, s2)
+  pure a    = SvgMonad $ \_ s -> (a,s)
+  mf <*> ma = SvgMonad $ \r s -> let (f,s1) = getSvgMonad mf r s
+                                     (a,s2) = getSvgMonad ma r s1
+                                 in (f a, s2)
 
 instance Monad SvgMonad where
-  return a  = SvgMonad $ \_  _  s -> (a,s)
-  m >>= k   = SvgMonad $ \r1 r2 s -> let (a,s1) = getSvgMonad m r1 r2 s
-                                     in (getSvgMonad . k) a r1 r2 s1
+  return a  = SvgMonad $ \_ s -> (a,s)
+  m >>= k   = SvgMonad $ \r s -> let (a,s1) = getSvgMonad m r s
+                                 in (getSvgMonad . k) a r s1
                             
 
 
-runSvgMonad :: TextEncoder -> SvgMonad a -> a
-runSvgMonad enc mf = fst $ getSvgMonad mf enc zeroGS 0
+runSvgMonad :: SvgMonad a -> a
+runSvgMonad mf = fst $ getSvgMonad mf zeroGS 0
 
 newClipLabel :: SvgMonad String
-newClipLabel = SvgMonad $ \_ _ s -> ('c':'l':'i':'p':show s, s+1)
+newClipLabel = SvgMonad $ \_ s -> ('c':'l':'i':'p':show s, s+1)
 
 
-getGlyphName :: FontEncoderName -> String -> SvgMonad (Either GlyphName GlyphName)
-getGlyphName fen glyname = SvgMonad $ \r1 _ s -> 
-    case lookupByGlyphName fen glyname r1 of
-      Just a  -> (Right $ escapeSpecial a, s)
-      Nothing -> (Left  $ escapeSpecial $ getSvgFallback fen r1, s)
 
 -- This is different to the PsMonad version, as SVG is nested 
 -- (and /graphics state/ is via a Reader), so it is the same as 
@@ -99,11 +100,11 @@
 --
 runLocalGS :: (GraphicsState -> GraphicsState) -> SvgMonad a -> SvgMonad a
 runLocalGS upd mf = 
-    SvgMonad $ \r1 r2 s -> getSvgMonad mf r1 (upd r2) s
+    SvgMonad $ \r s -> getSvgMonad mf (upd r) s
 
 
 askGraphicsState :: SvgMonad GraphicsState
-askGraphicsState = SvgMonad $ \_ r2 s -> (r2,s)
+askGraphicsState = SvgMonad $ \r s -> (r,s)
 
 asksGraphicsState :: (GraphicsState -> a) -> SvgMonad a
 asksGraphicsState fn = fmap fn askGraphicsState
@@ -128,39 +129,44 @@
 askDashPattern  = asksGraphicsState (dash_pattern . gs_stroke_attr)
 
 
+--------------------------------------------------------------------------------
 
+
+svgChar :: EscapedChar -> Doc
+svgChar (CharLiteral c) | ord c < 0x80  = char c
+svgChar (CharLiteral c)                 = escapeSpecial $ ord c
+svgChar (CharEscInt i)                  = escapeSpecial i
+svgChar (CharEscName s)                 = 
+   escapeSpecial $ fromMaybe 0x0020 $ Map.lookup s ps_glyph_indices 
+
 --------------------------------------------------------------------------------
 
 -- | Output a picture to a SVG file. 
 --
--- Generally an encoder should always support the principal
--- encoders for the fonts used (e.g. Latin1) /and/ the encoder for
--- the Symbol font, as characters from the Symbol font may be used 
--- as decorations for plot marks, etc.
---
 writeSVG :: (Real u, Floating u, PSUnit u) 
-         => FilePath -> TextEncoder -> Picture u -> IO ()
-writeSVG filepath enc pic = 
-    writeFile filepath $ show $ svgDraw enc pic 
+         => FilePath -> Picture u -> IO ()
+writeSVG filepath pic = 
+    writeFile filepath $ show $ svgDraw Nothing pic 
 
--- | Version of 'writeSVG' - using Latin1 and Symbol font encoders. 
+-- | 'writeSVG_defs' : @ file_name -> defs -> picture -> IO () @
 --
--- Generally an encoder should always support the principal
--- encoders for the fonts used (e.g. Latin1) /and/ the encoder for 
--- the Symbol font, as characters from the Symbol font may be used 
--- as decorations for plot marks, etc.
+-- Output a picture to a SVG file the supplied /defs/ are
+-- written into the defs section of SVG file verbatim. 
 --
-writeSVG_latin1 :: (Real u, Floating u, PSUnit u) 
-                => FilePath -> Picture u -> IO ()
-writeSVG_latin1 filepath = writeSVG filepath defaultEncoder
+writeSVG_defs :: (Real u, Floating u, PSUnit u) 
+              => FilePath -> String -> Picture u -> IO ()
+writeSVG_defs filepath ss pic = 
+    writeFile filepath $ show $ svgDraw (Just ss) pic 
 
+
 svgDraw :: (Real u, Floating u, PSUnit u) 
-        => TextEncoder -> Picture u -> Doc
-svgDraw enc original_pic = 
+        => Maybe String -> Picture u -> Doc
+svgDraw mb_defs original_pic = 
     let pic          = trivialTranslation original_pic
         (_,imgTrafo) = imageTranslation pic
-        body         = runSvgMonad enc $ picture pic
-    in vcat [ xml_version, doctype, elem_svg $ imgTrafo body ]
+        body         = runSvgMonad $ picture pic
+        mkSvg        = maybe elem_svg elem_svg_defs mb_defs
+    in vcat [ xml_version, doctype, mkSvg $ imgTrafo body ]
 
 
 
@@ -173,13 +179,7 @@
 
 --------------------------------------------------------------------------------
 
--- Note - it will be wise to make coordinate remapping and output
--- separate passes (unlike in Wumpus-Core). Then I\'ll at least 
--- be able to debug the remapped Picture.
---
 
-
-
 picture :: (Real u, Floating u, PSUnit u) => Picture u -> SvgMonad Doc
 picture (Leaf    (_,xs) ones)   = bracketTrafos xs $ oneConcat primitive ones
 picture (Picture (_,xs) ones)   = bracketTrafos xs $ oneConcat picture ones
@@ -208,13 +208,28 @@
 primitive (PLabel props lbl)    = primLabel props lbl
 primitive (PEllipse props ell)  = primEllipse props ell
 primitive (PContext fa chi)     = bracketGS fa (primitive chi)
-primitive (PLink hypl chi)      = drawXLink hypl <$> primitive chi
+primitive (PSVG anno chi)       = svgAnnoPrim anno <$> primitive chi
 primitive (PGroup ones)         = oneConcat primitive ones
  
 
+svgAnnoPrim :: SvgAnno -> Doc -> Doc
+svgAnnoPrim (ALink hypl)    d = drawXLink hypl d
+svgAnnoPrim (GAnno xs)      d = drawGProps xs d
+svgAnnoPrim (SvgAG hypl xs) d = drawXLink hypl $ drawGProps xs d 
+
+
 drawXLink :: XLink -> Doc -> Doc
 drawXLink (XLink href) doc = elem_a_xlink href doc
 
+drawGProps :: [SvgAttr] -> Doc -> Doc
+drawGProps [] d = d 
+drawGProps xs d = elem_g attrs_doc d
+  where
+    attrs_doc = hsep $ map svgAttribute xs
+
+svgAttribute :: SvgAttr -> Doc
+svgAttribute (SvgAttr n v) = svgAttr n $ text v
+ 
 clipPath :: PSUnit u => String -> PrimPath u -> SvgMonad Doc
 clipPath clip_id pp = 
     (\doc -> elem_clipPath (attr_id clip_id) (elem_path_no_attrs doc)) 
@@ -225,14 +240,29 @@
 primPath props pp = (\(a,f) d -> elem_path a (f d)) 
                       <$> pathProps props <*> path pp
 
+--
+-- Paths are printed as absolute paths. Internally they are 
+-- relative paths, but client code specifies them as absolute 
+-- paths. So, here at least, the output matches the input.
+-- 
+-- Also, the SVG syntax for distinguishing between absolute and 
+-- relative paths is is horrible (upper case char versus its 
+-- corresponding lower case char). As Wumpus used absolute paths 
+-- internally up to version 0.40.0, the horrible syntax was not
+-- an encouragement to change when it moved to relative ones. 
+-- 
 
 path :: PSUnit u => PrimPath u -> SvgMonad Doc
 path (PrimPath start xs) = 
-    pure $ path_m start <+> hsep (map seg xs)
+    pure $ path_m start <+> hsep (snd $ mapAccumL step start xs)
   where
-    seg (PLineTo pt)        = path_l pt
-    seg (PCurveTo p1 p2 p3) = path_c p1 p2 p3
+    step pt (RelLineTo v)         = let p1 = pt .+^ v in (p1, path_l p1)
+    step pt (RelCurveTo v1 v2 v3) = let p1 = pt .+^ v1 
+                                        p2 = p1 .+^ v2
+                                        p3 = p2 .+^ v3
+                                    in (p3, path_c p1 p2 p3)
 
+
 -- Return - drawing props, plus a function to close the path (or not). 
 --
 pathProps :: PathProps -> SvgMonad (Doc, Doc -> Doc)
@@ -262,11 +292,11 @@
 --
 primEllipse :: (Real u, Floating u, PSUnit u)
             => EllipseProps -> PrimEllipse u -> SvgMonad Doc
-primEllipse props (PrimEllipse pt hw hh ctm) 
+primEllipse props (PrimEllipse hw hh ctm) 
     | hw == hh  = (\a b -> elem_circle (a <+> circle_radius <+> b))
-                    <$> bracketPrimCTM pt ctm mkCXCY <*> ellipseProps props
+                    <$> bracketPrimCTM ctm mkCXCY <*> ellipseProps props
     | otherwise = (\a b -> elem_ellipse (a <+> ellipse_radius <+> b))
-                    <$> bracketPrimCTM pt ctm mkCXCY <*> ellipseProps props
+                    <$> bracketPrimCTM ctm mkCXCY <*> ellipseProps props
   where
    mkCXCY (P2 x y) = pure $ attr_cx x <+> attr_cy y
    
@@ -296,39 +326,33 @@
 
 primLabel :: (Real u, Floating u, PSUnit u) 
       => LabelProps -> PrimLabel u -> SvgMonad Doc
-primLabel (LabelProps rgb attrs) (PrimLabel pt body ctm) = 
-    (\fa ca dtxt -> elem_text (fa <+> ca) (makeTspan rgb dtxt))
-      <$> deltaFontAttrs attrs <*> bracketPrimCTM pt ctm (labelBodyCoords body)
-                               <*> labelBodyText fen body
+primLabel (LabelProps rgb attrs) (PrimLabel body ctm) = 
+    (\fa ca -> elem_text (fa <+> ca) (makeTspan rgb dtext))
+      <$> deltaFontAttrs attrs <*> bracketPrimCTM ctm coordf
+                               
   where
-    fen = font_enc_name $ font_face attrs    
+    coordf = \p0 -> pure $ labelBodyCoords body p0
+    dtext  = labelBodyText body
 
+labelBodyCoords :: PSUnit u => LabelBody u -> Point2 u -> Doc
+labelBodyCoords (StdLayout _)  pt = makeXY pt
+labelBodyCoords (KernTextH xs) pt = makeXsY pt xs        
+labelBodyCoords (KernTextV xs) pt = makeXYs pt xs
 
-labelBodyCoords :: PSUnit u => LabelBody u -> Point2 u -> SvgMonad Doc
-labelBodyCoords (StdLayout _)  pt = pure $ makeXY pt
-labelBodyCoords (KernTextH xs) pt = pure $ makeXsY pt xs        
-labelBodyCoords (KernTextV xs) pt = pure $ makeXYs pt xs
+labelBodyText :: LabelBody u -> Doc
+labelBodyText (StdLayout enctext) = encodedText enctext
+labelBodyText (KernTextH xs)      = kerningText xs
+labelBodyText (KernTextV xs)      = kerningText xs
 
-labelBodyText :: FontEncoderName -> LabelBody u -> SvgMonad Doc
-labelBodyText nm (StdLayout enctext) = encodedText nm enctext
-labelBodyText nm (KernTextH xs)      = hcat <$> mapM (kerningChar nm) xs
-labelBodyText nm (KernTextV xs)      = hcat <$> mapM (kerningChar nm) xs
 
+encodedText :: EscapedText -> Doc
+encodedText enctext = hcat $ map svgChar $ getEscapedText enctext
 
-encodedText :: FontEncoderName -> EncodedText -> SvgMonad Doc
-encodedText nm enctext = hcat <$> mapM (textChunk nm) (getEncodedText enctext)
+kerningText :: [KerningChar u] -> Doc
+kerningText xs = hcat $ map (\(_,c) -> svgChar c) xs
 
-textChunk :: FontEncoderName -> TextChunk -> SvgMonad Doc
-textChunk _  (TextSpan s)    = pure $ text s
-textChunk _  (TextEscInt i)  = pure $ text $ escapeSpecial i
-textChunk nm (TextEscName s) = either text text <$> getGlyphName nm s 
 
-kerningChar :: FontEncoderName -> KerningChar u -> SvgMonad Doc
-kerningChar _  (_, CharLiteral c) = pure $ char c
-kerningChar _  (_, CharEscInt i)  = pure $ text $ escapeSpecial i
-kerningChar nm (_, CharEscName s) = either text text <$> getGlyphName nm s 
 
-
 makeTspan :: RGBi -> Doc -> Doc
 makeTspan rgb body = elem_tspan (attr_fill rgb) body
 
@@ -479,15 +503,15 @@
     trafo = attr_transform $ val_matrix mtrx
 
 
+-- Note - the otherwise step uses the origina ctm (ctm0).
+-- 
 bracketPrimCTM :: forall u. (Real u, Floating u, PSUnit u)
-               => Point2 u -> PrimCTM u 
+               => PrimCTM u 
                -> (Point2 u -> SvgMonad Doc) -> SvgMonad Doc
-bracketPrimCTM pt@(P2 x y) ctm pf 
-    | ctm == identityCTM  = pf pt
-    | otherwise           = (\xy -> xy <+> attr_transform mtrx) <$> pf zeroPt'
+bracketPrimCTM ctm0 pf = step $ unCTM ctm0
   where
-    zeroPt' :: Point2 u
-    zeroPt' = zeroPt
-
-    mtrx  = val_matrix $ translMatrixRepCTM x y ctm
-
+    step (pt, ctm) 
+        | ctm == identityCTM  = pf pt
+        | otherwise           = let mtrx = attr_transform $ 
+                                             val_matrix $ matrixRepCTM ctm0
+                                in (\xy -> xy <+> mtrx) <$> pf zeroPt
diff --git a/src/Wumpus/Core/PageTranslation.hs b/src/Wumpus/Core/PageTranslation.hs
--- a/src/Wumpus/Core/PageTranslation.hs
+++ b/src/Wumpus/Core/PageTranslation.hs
@@ -53,20 +53,19 @@
 trivPrim (PLabel a lbl)   = PLabel a (trivLabel lbl)
 trivPrim (PEllipse a ell) = PEllipse a (trivEllipse ell)
 trivPrim (PContext a chi) = PContext a (trivPrim chi)
-trivPrim (PLink a chi)    = PLink a (trivPrim chi)
+trivPrim (PSVG a chi)     = PSVG a (trivPrim chi)
 trivPrim (PGroup ones)    = PGroup $ fmap trivPrim ones
 
 
 trivLabel :: Num u => PrimLabel u -> PrimLabel u
-trivLabel (PrimLabel pt txt ctm) = PrimLabel pt txt (trivPrimCTM ctm)
+trivLabel (PrimLabel txt ctm) = PrimLabel txt (trivPrimCTM ctm)
 
 trivEllipse :: Num u => PrimEllipse u -> PrimEllipse u
-trivEllipse (PrimEllipse ctr hw hh ctm) = 
-    PrimEllipse ctr hw hh (trivPrimCTM ctm)
+trivEllipse (PrimEllipse hw hh ctm) = PrimEllipse hw hh (trivPrimCTM ctm)
 
 -- Is the translation here just negating the angle with scaling
 -- left untouched?
 --
 trivPrimCTM :: Num u => PrimCTM u -> PrimCTM u
-trivPrimCTM (PrimCTM sx sy theta) = PrimCTM sx (-sy) theta
+trivPrimCTM (PrimCTM dx dy sx sy theta) = PrimCTM dx dy sx (-sy) theta
 
diff --git a/src/Wumpus/Core/Picture.hs b/src/Wumpus/Core/Picture.hs
--- a/src/Wumpus/Core/Picture.hs
+++ b/src/Wumpus/Core/Picture.hs
@@ -14,6 +14,21 @@
 --
 -- Construction of pictures, paths and text labels.
 --
+-- Note - the text label functions are only appropriate for single 
+-- printed lines of text. Wumpus-Core does not interpret special 
+-- white-space characters (i.e. tab or newline) and passes them 
+-- forward into the output file. Renderers will then deal with 
+-- white-space as they please, which is usually to ignore it.
+--
+-- Also, SVG output does not currently use @space=\"preserve\"@. 
+-- It would be desirable to do so, as the PostScript generated by 
+-- Wumpus can use doubled up spaces to print wide spaces. 
+-- Unfortunately, SVG renderers seem to differ as to whether they
+-- can inherit @space=\"preserve\"@ from a top level attribute or
+-- whether it must be annotated on every @\<text\>@ element. 
+-- Wumpus considers the latter to be a too-high burden as it will
+-- expand the code size (this view may change).
+--
 --------------------------------------------------------------------------------
 
 
@@ -24,13 +39,17 @@
     frame
   , multi
   , fontDeltaContext
-  , path
+  , primPath
   , lineTo
   , curveTo
   , vertexPath
   , curvedPath
   , xlinkhref
   , xlink
+  , svgattr
+  , annotateGroup
+  , annotateXLink
+
   , primGroup
   , primCat
 
@@ -51,6 +70,10 @@
   , rtextlabel
   , ztextlabel
 
+  , escapedlabel
+  , rescapedlabel
+  , zescapedlabel
+
   , hkernlabel
   , vkernlabel
   , kernchar
@@ -88,15 +111,16 @@
 import Wumpus.Core.GraphicProps
 import Wumpus.Core.PictureInternal
 import Wumpus.Core.PtSize
-import Wumpus.Core.Text.TextInternal
+import Wumpus.Core.Text.Base
 import Wumpus.Core.TrafoInternal
 import Wumpus.Core.Utils.Common
 import Wumpus.Core.Utils.FormatCombinators hiding ( fill )
 import Wumpus.Core.Utils.JoinList
 
 import Data.AffineSpace                         -- package: vector-space
-
+import Data.VectorSpace
 
+import Data.List ( mapAccumL )
 
 --------------------------------------------------------------------------------
 -- Construction
@@ -168,16 +192,24 @@
 
 -- | Create a Path from a start point and a list of PathSegments.
 --
-path :: Point2 u -> [PrimPathSegment u] -> PrimPath u
-path = PrimPath 
+primPath :: Num u => Point2 u -> [AbsPathSegment u] -> PrimPath u
+primPath pt xs = PrimPath pt $ step pt xs
+  where
+    step p (AbsLineTo p1:rest)        = RelLineTo (p1 .-. p) : step p1 rest
+    step p (AbsCurveTo p1 p2 p3:rest) = 
+        RelCurveTo (p1 .-. p) (p2 .-. p1) (p3 .-. p2) : step p3 rest
 
+    step _ []                         = []
+
+
+         
 -- | 'lineTo' : @ end_point -> path_segment @
 -- 
 -- Create a straight-line PathSegment, the start point is 
 -- implicitly the previous point in a path.
 --
-lineTo :: Point2 u -> PrimPathSegment u
-lineTo = PLineTo
+lineTo :: Point2 u -> AbsPathSegment u
+lineTo = AbsLineTo
 
 -- | 'curveTo' : @ control_point1 * control_point2 * end_point -> 
 --        path_segment @
@@ -186,16 +218,18 @@
 -- implicitly the previous point in a path.
 --
 --
-curveTo :: Point2 u -> Point2 u -> Point2 u -> PrimPathSegment u
-curveTo = PCurveTo
+curveTo :: Point2 u -> Point2 u -> Point2 u -> AbsPathSegment u
+curveTo = AbsCurveTo
 
 
 -- | Convert the list of vertices to a path of straight line 
 -- segments.
 --
-vertexPath :: [Point2 u] -> PrimPath u
+vertexPath :: Num u => [Point2 u] -> PrimPath u
 vertexPath []     = error "Picture.vertexPath - empty point list"
-vertexPath (x:xs) = PrimPath x (map PLineTo xs)
+vertexPath (x:xs) = PrimPath x $ snd $ mapAccumL step x xs
+  where
+    step a b = let v = b .-. a in (b, RelLineTo v)
 
 
 
@@ -204,13 +238,15 @@
 -- segment thereafter takes 3 points. /Spare/ points at the end 
 -- are discarded. 
 --
-curvedPath :: [Point2 u] -> PrimPath u
+curvedPath :: Num u => [Point2 u] -> PrimPath u
 curvedPath []     = error "Picture.curvedPath - empty point list"
-curvedPath (x:xs) = PrimPath x (step xs) 
+curvedPath (x:xs) = PrimPath x $ step x xs
   where
-    step (a:b:c:ys) = PCurveTo a b c : step ys 
-    step _          = []
-
+    step p (a:b:c:ys) = let v1 = a .-. p 
+                            v2 = b .-. a
+                            v3 = c .-. a
+                        in RelCurveTo v1 v2 v3 : step c ys
+    step _ _          = []
 
 -- | Create a hyperlink for SVG output.
 --
@@ -221,9 +257,34 @@
 -- | Create a hyperlinked Primitive.
 --
 xlink :: XLink -> Primitive u -> Primitive u
-xlink hypl p = PLink hypl p  
+xlink hypl p = PSVG (ALink hypl) p  
 
 
+-- | Create an attribute for SVG output.
+--
+svgattr :: String -> String -> SvgAttr
+svgattr = SvgAttr
+
+
+-- | Add SVG attribute annotations to a Primitive.
+--
+-- The primitive will be printed in a @g@ (group) element 
+-- labelled with the annotations.
+--
+annotateGroup :: [SvgAttr] -> Primitive u -> Primitive u
+annotateGroup xs p = PSVG (GAnno xs) p  
+
+
+-- | Add SVG XLink and attribute annotations to a Primitive.
+--
+-- The primitive will be printed in a @g@ (group) element, itself
+-- inside an @a@ link.
+--
+annotateXLink :: XLink -> [SvgAttr] -> Primitive u -> Primitive u
+annotateXLink hypl xs p = PSVG (SvgAG hypl xs) p  
+
+
+
 -- | Group a list of Primitives.
 --
 -- This function throws a runtime error when supplied with an
@@ -369,9 +430,8 @@
 --
 rtextlabel :: Num u 
            => RGBi -> FontAttr -> String -> Point2 u -> Radian -> Primitive u
-rtextlabel rgb attr txt pt theta = PLabel (LabelProps rgb attr) lbl 
-  where
-    lbl = PrimLabel pt (StdLayout $ lexLabel txt) (thetaCTM theta)
+rtextlabel rgb attr txt pt theta = 
+    rescapedlabel rgb attr (escapeString txt) pt theta
 
 
 -- | 'ztextlabel' : @ string * baseline_left -> Primitive @
@@ -384,6 +444,42 @@
 
 
 
+-- | 'escapedlabel' : @ rgb * font_attr * escaped_text * baseline_left -> Primitive @
+--
+-- Version of 'textlabel' where the label text has already been 
+-- parsed for special characters.
+--
+-- The supplied point is the left baseline.
+--
+escapedlabel :: Num u 
+             => RGBi -> FontAttr -> EscapedText -> Point2 u -> Primitive u
+escapedlabel rgb attr txt pt = rescapedlabel rgb attr txt pt 0
+
+-- | 'rescapedlabel' : @ rgb * font_attr * escaped_text * baseline_left * 
+--      rotation -> Primitive @
+--
+-- Version of 'rtextlabel' where the label text has already been 
+-- parsed for special characters.
+--
+-- The supplied point is the left baseline.
+--
+rescapedlabel :: Num u 
+              => RGBi -> FontAttr -> EscapedText -> Point2 u -> Radian -> Primitive u
+rescapedlabel rgb attr txt (P2 dx dy) theta = PLabel (LabelProps rgb attr) lbl 
+  where
+    lbl = PrimLabel (StdLayout txt) (makeThetaCTM dx dy theta)
+
+
+-- | 'zescapedlabel' : @ escaped_text * baseline_left -> Primitive @
+--
+-- Version of 'ztextlabel' where the label text has already been 
+-- encoded.
+--
+zescapedlabel :: Num u => EscapedText -> Point2 u -> Primitive u
+zescapedlabel = escapedlabel black wumpus_default_font
+
+
+
 --------------------------------------------------------------------------------
 
 -- | 'hkernlabel' : @ rgb * font_attr * kerning_chars * 
@@ -406,20 +502,22 @@
 --
 -- The supplied point is the left baseline.
 --
--- \*\* CAUTION \*\* - @hkernlabel@ generates a coordinate list 
--- for X-positions rather than a single start point. This is 
--- perfectly valid SVG, but it is not universally supported by 
--- renderers. Chrome support is fine, but Firefox and Safari 
--- currently seem lacking. 
+-- \*\* CAUTION \*\* - for SVG, @hkernlabel@ generates a 
+-- coordinate list of X-positions rather than a single start 
+-- point. This is syntactically valid SVG, but it is not 
+-- universally supported by renderers. Chrome support is fine, 
+-- but Firefox and Safari currently seem lacking. 
 --
--- Also, currently the generated PostScript is inefficient.
+-- Also, note this feature does not have a directly compatible 
+-- PostScript analogue. While the same picture is generated in 
+-- both cases, the PostScript code is not particularly inefficient.
 --
 hkernlabel :: Num u 
             => RGBi -> FontAttr -> [KerningChar u] -> Point2 u 
             -> Primitive u
-hkernlabel rgb attr xs pt = PLabel (LabelProps rgb attr) lbl 
+hkernlabel rgb attr xs (P2 x y) = PLabel (LabelProps rgb attr) lbl 
   where
-    lbl = PrimLabel pt (KernTextH xs) identityCTM
+    lbl = PrimLabel (KernTextH xs) (makeTranslCTM x y)
 
 
 
@@ -446,20 +544,22 @@
 --
 -- The supplied point is the left baseline of the top character.
 --
--- \*\* CAUTION \*\* - @vkernlabel@ generates a coordinate list 
--- for Y-positions rather than a single start point. This is 
--- perfectly valid SVG, but it is not universally supported by 
--- renderers. Chrome support is fine, but Firefox and Safari 
--- currently seem lacking. 
+-- \*\* CAUTION \*\* - for SVG, @hkernlabel@ generates a 
+-- coordinate list of Y-positions rather than a single start 
+-- point. This is syntactically valid SVG, but it is not 
+-- universally supported by renderers. Chrome support is fine, 
+-- but Firefox and Safari currently seem lacking. 
 --
--- Also, currently the generated PostScript is inefficient.
+-- Also, note this feature does not have a directly compatible 
+-- PostScript analogue. While the same picture is generated in 
+-- both cases, the PostScript code is not particularly inefficient.
 --
 vkernlabel :: Num u 
             => RGBi -> FontAttr -> [KerningChar u] -> Point2 u 
             -> Primitive u
-vkernlabel rgb attr xs pt = PLabel (LabelProps rgb attr) lbl 
+vkernlabel rgb attr xs (P2 x y) = PLabel (LabelProps rgb attr) lbl 
   where
-    lbl = PrimLabel pt (KernTextV xs) identityCTM
+    lbl = PrimLabel (KernTextV xs) (makeTranslCTM x y)
 
 
 
@@ -583,7 +683,8 @@
 
 
 mkPrimEllipse :: Num u => u -> u -> Radian -> Point2 u -> PrimEllipse u
-mkPrimEllipse rx ry theta pt = PrimEllipse pt rx ry (thetaCTM theta)
+mkPrimEllipse rx ry theta (P2 dx dy) = 
+    PrimEllipse rx ry (makeThetaCTM dx dy theta)
 
 --------------------------------------------------------------------------------
 -- Operations
@@ -706,7 +807,7 @@
 --
 illustrateControlPoints :: (Real u, Floating u, FromPtSize u)
                         => RGBi -> Primitive u -> Picture u
-illustrateControlPoints rgb elt = frame $ step elt
+illustrateControlPoints rgb elt = frame $ elt : step elt
   where
     step (PEllipse _ e) = ellipseCtrlLines rgb e
     step (PPath    _ p) = pathCtrlLines rgb p
@@ -723,15 +824,18 @@
 pathCtrlLines :: (Num u, Ord u) => RGBi -> PrimPath u -> [Primitive u]
 pathCtrlLines rgb (PrimPath start ss) = step start ss
   where 
-    -- trail the current end point through the recursion...
-    step _ []                    = []
-    step _ (PLineTo e:xs)        = step e xs
-    step s (PCurveTo c1 c2 e:xs) = mkLine s c1 : mkLine c2 e : step e xs 
+    step s (RelLineTo v:xs)         = step (s .+^ v) xs
 
-    mkLine s e                   = let pp = (PrimPath s [lineTo e]) in 
-                                   ostroke rgb default_stroke_attr pp 
+    step s (RelCurveTo v1 v2 v3:xs) = let e   = s .+^ (v1 ^+^ v2 ^+^ v3)
+                                          v3r = vreverse v3
+                                      in mkLine s v1 : mkLine e v3r : step e xs
 
+    step _ []                       = []
 
+    mkLine s v                      = let pp = (PrimPath s [RelLineTo v]) 
+                                      in ostroke rgb default_stroke_attr pp 
+
+
 -- Generate lines illustrating the control points of an 
 -- ellipse:
 -- 
@@ -753,7 +857,8 @@
     rest s (c1:c2:e:xs)  = mkLine s c1 : mkLine c2 e : rest e xs
     rest _ _             = []
 
-    mkLine s e  = ostroke rgb default_stroke_attr (PrimPath s [lineTo e]) 
+    mkLine s e  = let path = PrimPath s [RelLineTo (e .-. s)]
+                  in ostroke rgb default_stroke_attr path
 
 
 
@@ -765,10 +870,8 @@
 --
 ellipseControlPoints :: (Floating u, Real u)
                      => PrimEllipse u -> [Point2 u]
-ellipseControlPoints (PrimEllipse (P2 x y) hw hh ctm) = 
-    map (disp . (new_mtrx *#)) circ
+ellipseControlPoints (PrimEllipse hw hh ctm) = map (new_mtrx *#) circ
   where
-    disp             = (.+^ V2 x y)
     (radius,(dx,dy)) = circleScalingProps hw hh
     new_mtrx         = matrixRepCTM $ scaleCTM dx dy ctm
     circ             = bezierCircle 1 radius (P2 0 0)
diff --git a/src/Wumpus/Core/PictureInternal.hs b/src/Wumpus/Core/PictureInternal.hs
--- a/src/Wumpus/Core/PictureInternal.hs
+++ b/src/Wumpus/Core/PictureInternal.hs
@@ -26,12 +26,16 @@
 
   , Primitive(..)
   , DPrimitive
+  , SvgAnno(..)
   , XLink(..)
+  , SvgAttr(..)
 
   , PrimPath(..)
   , DPrimPath
   , PrimPathSegment(..)
   , DPrimPathSegment
+  , AbsPathSegment(..)
+  , DAbsPathSegment
   , PrimLabel(..)
   , DPrimLabel
   , LabelBody(..)
@@ -61,8 +65,7 @@
 import Wumpus.Core.Geometry
 import Wumpus.Core.GraphicProps
 import Wumpus.Core.PtSize
-import Wumpus.Core.Text.Latin1
-import Wumpus.Core.Text.TextInternal
+import Wumpus.Core.Text.Base
 import Wumpus.Core.TrafoInternal
 import Wumpus.Core.Utils.Common
 import Wumpus.Core.Utils.FormatCombinators
@@ -72,7 +75,7 @@
 import Data.AffineSpace                         -- package: vector-space
 
 import qualified Data.Foldable                  as F
-
+import qualified Data.IntMap                    as IntMap
 
 
 -- | Picture is a leaf attributed tree - where attributes are 
@@ -164,19 +167,19 @@
 -- constraint is also obliged.
 --
 -- To represent XLink hyperlinks, Primitives can be annotated 
--- with some a hyperlink (similarly a a font change for better
--- SVG code generation) and grouped - a hyperlinked arrow would
--- want the tip and the arrow body both to be incorporated in the
--- link even though they are two drawings. 
+-- with some a hyperlink (likewise a /passive/ font change for 
+-- better SVG code generation) and grouped - a hyperlinked arrow 
+-- would want the tip and the arrow body both to be incorporated 
+-- in thelink even though they are two drawing primitives. 
 --
 -- This means that Primitives aren\'t strictly /primitive/ as 
 -- the actual implementation is a tree.
 -- 
-data Primitive u = PPath    PathProps     (PrimPath u)
-                 | PLabel   LabelProps    (PrimLabel u)
-                 | PEllipse EllipseProps  (PrimEllipse u)
-                 | PContext FontCtx       (Primitive u)
-                 | PLink    XLink         (Primitive u)
+data Primitive u = PPath    PathProps         (PrimPath u)
+                 | PLabel   LabelProps        (PrimLabel u)
+                 | PEllipse EllipseProps      (PrimEllipse u)
+                 | PContext FontCtx           (Primitive u)
+                 | PSVG     SvgAnno           (Primitive u)
                  | PGroup   (JoinList (Primitive u))
   deriving (Eq,Show)
 
@@ -193,12 +196,43 @@
 newtype FontCtx = FontCtx { getFontCtx :: FontAttr }
   deriving (Eq,Show)
 
+
+-- | SVG annotations - annotations can be: 
+-- 
+-- A hyperlink inside @<a ...> ... </a>@ .
+--
+-- A group - @<g ...> ... </g>@
+--
+-- A group inside a hyperlink.
+--
+data SvgAnno = ALink XLink
+             | GAnno [SvgAttr]
+             | SvgAG XLink [SvgAttr]
+   deriving (Eq,Show)
+
 -- | Primitives can be grouped with hyperlinks in SVG output.
 --
+-- Note - this is always printed as @xlink:href="..."@. Other
+-- types of xlink can be modelled with the unrestrained 
+-- SvgAnno type.
+--
 newtype XLink = XLink { getXLink :: String }
   deriving (Eq,Show)
 
 
+-- | Primitives can be labelled with arbitrary SVG properties 
+-- (e.g @onmouseover@) within a group element.
+--
+-- Note - annotations should be used only for non-graphical 
+-- properties. Graphical properties (fill_colour, font_size, etc.)
+-- should be set through the appropriate Wumpus functions.
+--
+data SvgAttr = SvgAttr 
+      { svg_attr_name   :: String
+      , svg_attr_value  :: String 
+      }
+  deriving (Eq,Show)
+
 -- | PrimPath - start point and a list of path segments.
 --
 data PrimPath u = PrimPath (Point2 u) [PrimPathSegment u]
@@ -206,21 +240,40 @@
 
 type DPrimPath = PrimPath Double
 
--- | PrimPathSegment - either a cubic Bezier curve or a line.
+-- | PrimPathSegment - either a relative cubic Bezier /curve-to/ 
+-- or a relative /line-to/.
 --
-data PrimPathSegment u = PCurveTo  (Point2 u) (Point2 u) (Point2 u)
-                       | PLineTo   (Point2 u)
+data PrimPathSegment u = RelCurveTo  (Vec2 u) (Vec2 u) (Vec2 u)
+                       | RelLineTo   (Vec2 u)
   deriving (Eq,Show)
 
 type DPrimPathSegment = PrimPathSegment Double
 
+-- Design note - if paths were represented as:
+--   start-point plus [relative-path-segment]
+-- They would be cheaper to move...
+--
 
 
--- | Label - represented by /baseline/ left point and text.
+-- | AbsPathSegment - either a cubic Bezier curve or a line.
+-- 
+-- Note this data type is transitory - it is only used as a 
+-- convenience to build relative paths. 
 --
+data AbsPathSegment u = AbsCurveTo  (Point2 u) (Point2 u) (Point2 u)
+                      | AbsLineTo   (Point2 u)
+  deriving (Eq,Show)
+
+type DAbsPathSegment = AbsPathSegment Double
+
+
+
+-- | Label - represented by baseline-left point and text.
+--
+-- Baseline-left is the dx * dy of the PrimCTM.
+--
 data PrimLabel u = PrimLabel 
-      { label_baseline_left :: Point2 u
-      , label_body          :: LabelBody u
+      { label_body          :: LabelBody u
       , label_ctm           :: PrimCTM u
       }
   deriving (Eq,Show)
@@ -240,7 +293,7 @@
 -- Kerned vertical layout - each character is encoded with the
 -- upwards distance from the last charcaters left base-line.
 -- 
-data LabelBody u = StdLayout EncodedText
+data LabelBody u = StdLayout EscapedText
                  | KernTextH [KerningChar u]
                  | KernTextV [KerningChar u]
   deriving (Eq,Show)
@@ -251,15 +304,16 @@
 -- | A Char (possibly escaped) paired with is displacement from 
 -- the previous KerningChar.
 --
-type KerningChar u = (u,EncodedChar) 
+type KerningChar u = (u,EscapedChar) 
 
 type DKerningChar = KerningChar Double
 
--- Ellipse represented by center and half_width * half_height
+-- | Ellipse represented by center and half_width * half_height.
 --
+-- Center is the dx * dy of the PrimCTM.
+--
 data PrimEllipse u = PrimEllipse 
-      { ellipse_center        :: Point2 u
-      , ellipse_half_width    :: u
+      { ellipse_half_width    :: u
       , ellipse_half_height   :: u 
       , ellipse_ctm           :: PrimCTM u
       } 
@@ -337,8 +391,8 @@
   format (PContext _ a)     = 
       vcat [ text "-- svg ctx change " , format a ]
 
-  format (PLink _ a)     = 
-      vcat [ text "-- svg link " , format a ]
+  format (PSVG _ a)       = 
+      vcat [ text "-- svg:", format  a ]
 
   format (PGroup ones)      = 
       vcat [ text "-- group ", fmtPrimlist ones  ]
@@ -356,16 +410,15 @@
         start = text "start_point " <> format pt
 
 instance PSUnit u => Format (PrimPathSegment u) where
-  format (PCurveTo p1 p2 p3)  =
-    text "curve_to    " <> format p1 <+> format p2 <+> format p3
+  format (RelCurveTo p1 p2 p3)  =
+    text "rel_curve_to " <> format p1 <+> format p2 <+> format p3
 
-  format (PLineTo pt)         = text "line_to     " <> format pt
+  format (RelLineTo pt)         = text "rel_line_to  " <> format pt
 
 instance PSUnit u => Format (PrimLabel u) where
-  format (PrimLabel pt s ctm) = 
+  format (PrimLabel s ctm) = 
      vcat [ dquotes (format s)
-          ,     text "baseline_left=" <> format pt
-            <+> text "ctm="           <> format ctm
+          , text "ctm="           <> format ctm
           ]
 
 instance PSUnit u => Format (LabelBody u) where
@@ -375,14 +428,13 @@
 
 
 instance PSUnit u => Format (PrimEllipse u) where
-  format (PrimEllipse ctr hw hh ctm) = text "center="   <> format ctr
-                                   <+> text "hw="       <> dtruncFmt hw
-                                   <+> text "hh="       <> dtruncFmt hh
-                                   <+> text "ctm="      <> format ctm
+  format (PrimEllipse hw hh ctm) =  text "hw="       <> dtruncFmt hw
+                                <+> text "hh="       <> dtruncFmt hh
+                                <+> text "ctm="      <> format ctm
   
 
 instance Format XLink where
-  format (XLink ss) = text "xlink" <+> text ss
+  format (XLink ss) = text "xlink:href" <+> text ss
 
 
 --------------------------------------------------------------------------------
@@ -398,7 +450,7 @@
   boundary (PLabel a l)     = labelBoundary (label_font a) l
   boundary (PEllipse _ e)   = ellipseBoundary e
   boundary (PContext _ a)   = boundary a
-  boundary (PLink _ a)      = boundary a
+  boundary (PSVG _ a)       = boundary a
   boundary (PGroup ones)    = outer $ viewl ones 
     where
       outer (OneL a)     = boundary a
@@ -410,15 +462,23 @@
 
 
 
-pathBoundary :: Ord u => PrimPath u -> BoundingBox u
-pathBoundary (PrimPath st xs) = step (st,st) xs
+pathBoundary :: (Num u, Ord u) => PrimPath u -> BoundingBox u
+pathBoundary (PrimPath st xs) = step st (st,st) xs
   where
-    step (lo,hi) []                       = BBox lo hi 
-    step (lo,hi) (PLineTo p1:rest)        = step (lo2 lo p1, hi2 hi p1) rest
-    step (lo,hi) (PCurveTo p1 p2 p3:rest) = let lo' = lo4 lo p1 p2 p3 
-                                                hi' = hi4 hi p1 p2 p3
-                                            in step (lo',hi') rest 
+    step _  (lo,hi) []                         = BBox lo hi 
 
+    step pt (lo,hi) (RelLineTo v1:rest)        = 
+        let p1 = pt .+^ v1
+        in step p1 (lo2 lo p1, hi2 hi p1) rest
+
+    step pt (lo,hi) (RelCurveTo v1 v2 v3:rest) = 
+        let p1  = pt .+^ v1
+            p2  = p1 .+^ v2
+            p3  = p2 .+^ v3
+            lo' = lo4 lo p1 p2 p3 
+            hi' = hi4 hi p1 p2 p3
+        in step p3 (lo',hi') rest 
+
     lo2 (P2 x1 y1) (P2 x2 y2) = P2 (min x1 x2) (min y1 y2)
 
     hi2 (P2 x1 y1) (P2 x2 y2) = P2 (max x1 x2) (max y1 y2)
@@ -433,10 +493,9 @@
 
 labelBoundary :: (Floating u, Real u, FromPtSize u) 
               => FontAttr -> PrimLabel u -> BoundingBox u
-labelBoundary attr (PrimLabel (P2 x y) body ctm) = 
-    retraceBoundary  (disp . (m33 *#)) untraf_bbox
+labelBoundary attr (PrimLabel body ctm) = 
+    retraceBoundary (m33 *#) untraf_bbox
   where
-    disp        = (.+^ V2 x y)
     m33         = matrixRepCTM ctm
     untraf_bbox = labelBodyBoundary (font_size attr) body
 
@@ -448,8 +507,8 @@
 
 
 stdLayoutBB :: (Num u, Ord u, FromPtSize u) 
-            => FontSize -> EncodedText -> BoundingBox u
-stdLayoutBB sz etxt = textBoundsEnc sz zeroPt etxt
+            => FontSize -> EscapedText -> BoundingBox u
+stdLayoutBB sz etxt = textBoundsEsc sz zeroPt etxt
 
 
 -- Note - this assumes positive deltas (and a nonempty list)...
@@ -461,7 +520,7 @@
 -- displacements.
 -- 
 hKerningBB :: (Num u, Ord u, FromPtSize u) 
-           => FontSize -> [(u,EncodedChar)] -> BoundingBox u
+           => FontSize -> [(u,EscapedChar)] -> BoundingBox u
 hKerningBB sz xs = rightGrow (sumDiffs xs) $ textBounds sz zeroPt "A"
   where
     sumDiffs                          = foldr (\(u,_) i -> i+u)  0
@@ -478,7 +537,7 @@
 -- Also note, that the Label /grows/ downwards...
 --
 vKerningBB :: (Num u, Ord u, FromPtSize u) 
-           => FontSize -> [(u,EncodedChar)] -> BoundingBox u
+           => FontSize -> [(u,EscapedChar)] -> BoundingBox u
 vKerningBB sz xs = downGrow (sumDiffs xs) $ textBounds sz zeroPt "A"
   where
     sumDiffs                                = foldr (\(u,_) i -> i+u)  0
@@ -489,17 +548,14 @@
 -- then retraced.
 --
 ellipseBoundary :: (Real u, Floating u) => PrimEllipse u -> BoundingBox u
-ellipseBoundary (PrimEllipse pt hw0 hh0 (PrimCTM sx sy theta)) = 
-    traceBoundary $ applyIf (theta /= 0) (map (rotm *#)) [ll,lr,ur,ul]
+ellipseBoundary (PrimEllipse hw hh ctm) = 
+    traceBoundary $ map (m33 *#) [sw,se,ne,nw]
   where
-    hw   = hw0 * sx
-    hh   = hh0 * sy
-    ll   = pt .+^ V2 (-hw) (-hh) 
-    lr   = pt .+^ V2   hw  (-hh) 
-    ur   = pt .+^ V2   hw    hh 
-    ul   = pt .+^ V2 (-hw)   hh 
-    rotm = rotationMatrix theta
-
+    sw   = P2 (-hw) (-hh) 
+    se   = P2   hw  (-hh) 
+    ne   = P2   hw    hh 
+    nw   = P2 (-hw)   hh 
+    m33  = matrixRepCTM ctm
 
 
 --------------------------------------------------------------------------------
@@ -553,7 +609,7 @@
   rotate r (PLabel a lbl)   = PLabel a   $ rotateLabel r lbl
   rotate r (PEllipse a ell) = PEllipse a $ rotateEllipse r ell
   rotate r (PContext a chi) = PContext a $ rotate r chi 
-  rotate r (PLink a chi)    = PLink a    $ rotate r chi 
+  rotate r (PSVG a chi)     = PSVG a     $ rotate r chi 
   rotate r (PGroup xs)      = PGroup     $ fmap (rotate r) xs
  
 
@@ -562,7 +618,7 @@
   rotateAbout r pt (PLabel a lbl)   = PLabel a   $ rotateAboutLabel r pt lbl
   rotateAbout r pt (PEllipse a ell) = PEllipse a $ rotateAboutEllipse r pt ell
   rotateAbout r pt (PContext a chi) = PContext a $ rotateAbout r pt chi
-  rotateAbout r pt (PLink a chi)    = PLink a    $ rotateAbout r pt chi
+  rotateAbout r pt (PSVG a chi)     = PSVG a     $ rotateAbout r pt chi
   rotateAbout r pt (PGroup xs)      = PGroup     $ fmap (rotateAbout r pt) xs
 
 
@@ -571,7 +627,7 @@
   scale sx sy (PLabel a lbl)    = PLabel a   $ scaleLabel sx sy lbl
   scale sx sy (PEllipse a ell)  = PEllipse a $ scaleEllipse sx sy ell
   scale sx sy (PContext a chi)  = PContext a $ scale sx sy chi
-  scale sx sy (PLink a chi)     = PLink a    $ scale sx sy chi
+  scale sx sy (PSVG a chi)      = PSVG a     $ scale sx sy chi
   scale sx sy (PGroup xs)       = PGroup     $ fmap (scale sx sy) xs
 
 
@@ -580,7 +636,7 @@
   translate dx dy (PLabel a lbl)   = PLabel a   $ translateLabel dx dy lbl
   translate dx dy (PEllipse a ell) = PEllipse a $ translateEllipse dx dy ell
   translate dx dy (PContext a chi) = PContext a $ translate dx dy chi
-  translate dx dy (PLink a chi)    = PLink a    $ translate dx dy chi
+  translate dx dy (PSVG a chi)     = PSVG a     $ translate dx dy chi
   translate dx dy (PGroup xs)      = PGroup     $ fmap (translate dx dy) xs
 
 
@@ -589,28 +645,31 @@
 
 
 rotatePath :: (Real u, Floating u) => Radian -> PrimPath u -> PrimPath u
-rotatePath ang = mapPath (rotate ang)
+rotatePath ang = mapPath (rotate ang) (rotate ang)
 
 
 rotateAboutPath :: (Real u, Floating u) 
                 => Radian -> Point2 u -> PrimPath u -> PrimPath u
-rotateAboutPath ang pt = mapPath (rotateAbout ang pt) 
+rotateAboutPath ang pt = mapPath (rotateAbout ang pt) (rotateAbout ang pt) 
 
 
 scalePath :: Num u => u -> u -> PrimPath u -> PrimPath u
-scalePath sx sy = mapPath (scale sx sy)
-
+scalePath sx sy = mapPath (scale sx sy) (scale sx sy)
 
+-- Note - translate only needs change the start point /because/ 
+-- the path represented as a relative path.
+-- 
 translatePath :: Num u => u -> u -> PrimPath u -> PrimPath u
-translatePath x y = mapPath (translate x y)
+translatePath x y (PrimPath st xs) = PrimPath (translate x y st) xs
 
 
-mapPath :: (Point2 u -> Point2 u) -> PrimPath u -> PrimPath u
-mapPath fn (PrimPath st xs) = PrimPath (fn st) (map (mapSeg fn) xs)
+mapPath :: (Point2 u -> Point2 u) -> (Vec2 u -> Vec2 u) 
+        -> PrimPath u -> PrimPath u
+mapPath f g (PrimPath st xs) = PrimPath (f st) (map (mapSeg g) xs)
 
-mapSeg :: (Point2 u -> Point2 u) -> PrimPathSegment u -> PrimPathSegment u
-mapSeg fn (PLineTo p)         = PLineTo (fn p)
-mapSeg fn (PCurveTo p1 p2 p3) = PCurveTo (fn p1) (fn p2) (fn p3)
+mapSeg :: (Vec2 u -> Vec2 u) -> PrimPathSegment u -> PrimPathSegment u
+mapSeg fn (RelLineTo p)         = RelLineTo (fn p)
+mapSeg fn (RelCurveTo p1 p2 p3) = RelCurveTo (fn p1) (fn p2) (fn p3)
 
 --------------------------------------------------------------------------------
 -- Labels
@@ -622,28 +681,26 @@
 --
 rotateLabel :: (Real u, Floating u) 
             => Radian -> PrimLabel u -> PrimLabel u
-rotateLabel ang (PrimLabel pt txt ctm) = 
-    PrimLabel (rotate ang pt) txt (rotateCTM ang ctm)
+rotateLabel ang (PrimLabel txt ctm) = PrimLabel txt (rotateCTM ang ctm)
 
 
 -- /rotateAbout/ the start-point, /rotate/ the the CTM.
 --
 rotateAboutLabel :: (Real u, Floating u) 
                  => Radian -> Point2 u -> PrimLabel u -> PrimLabel u
-rotateAboutLabel ang pt0 (PrimLabel pt txt ctm) = 
-    PrimLabel (rotateAbout ang pt0 pt) txt (rotateCTM ang ctm)
+rotateAboutLabel ang pt (PrimLabel txt ctm) = 
+    PrimLabel txt (rotateAboutCTM ang pt ctm)
 
 
 scaleLabel :: Num u => u -> u -> PrimLabel u -> PrimLabel u
-scaleLabel sx sy (PrimLabel pt txt ctm) = 
-    PrimLabel (scale sx sy pt) txt (scaleCTM sx sy ctm)
+scaleLabel sx sy (PrimLabel txt ctm) = PrimLabel txt (scaleCTM sx sy ctm)
 
 
 -- Change the bottom-left corner.
 --
 translateLabel :: Num u => u -> u -> PrimLabel u -> PrimLabel u
-translateLabel dx dy (PrimLabel pt txt ctm) = 
-    PrimLabel (translate dx dy pt) txt ctm
+translateLabel dx dy (PrimLabel txt ctm) = 
+    PrimLabel txt (translateCTM dx dy ctm)
 
 --------------------------------------------------------------------------------
 -- Ellipse
@@ -651,27 +708,27 @@
 
 rotateEllipse :: (Real u, Floating u) 
               => Radian -> PrimEllipse u -> PrimEllipse u
-rotateEllipse ang (PrimEllipse pt hw hh ctm) = 
-    PrimEllipse (rotate ang pt) hw hh (rotateCTM ang ctm)
+rotateEllipse ang (PrimEllipse hw hh ctm) = 
+    PrimEllipse hw hh (rotateCTM ang ctm)
     
 
 rotateAboutEllipse :: (Real u, Floating u) 
               => Radian -> Point2 u -> PrimEllipse u -> PrimEllipse u
-rotateAboutEllipse ang pt0 (PrimEllipse pt hw hh ctm) = 
-    PrimEllipse (rotateAbout ang pt0 pt) hw hh (rotateCTM ang ctm)
+rotateAboutEllipse ang pt (PrimEllipse hw hh ctm) = 
+    PrimEllipse hw hh (rotateAboutCTM ang pt ctm)
 
 
 scaleEllipse :: Num u => u -> u -> PrimEllipse u -> PrimEllipse u
-scaleEllipse sx sy (PrimEllipse pt hw hh ctm) = 
-    PrimEllipse (scale sx sy pt) hw hh (scaleCTM sx sy ctm)
+scaleEllipse sx sy (PrimEllipse hw hh ctm) = 
+    PrimEllipse hw hh (scaleCTM sx sy ctm)
     
 
 
 -- Change the point
 --
 translateEllipse :: Num u => u -> u -> PrimEllipse u -> PrimEllipse u
-translateEllipse dx dy (PrimEllipse pt hw hh ctm) = 
-    PrimEllipse (translate dx dy pt) hw hh ctm
+translateEllipse dx dy (PrimEllipse hw hh ctm) = 
+    PrimEllipse hw hh (translateCTM dx dy ctm)
 
 
 
@@ -733,6 +790,8 @@
                        }
   where
     unmatchable_face = FontFace "DONT_MATCH"     "" 
-                                SVG_BOLD_OBLIQUE latin1_font_encoder
+                                SVG_BOLD_OBLIQUE no_encoding
+
+    no_encoding      = IntMap.empty 
 
 
diff --git a/src/Wumpus/Core/PostScriptDoc.hs b/src/Wumpus/Core/PostScriptDoc.hs
--- a/src/Wumpus/Core/PostScriptDoc.hs
+++ b/src/Wumpus/Core/PostScriptDoc.hs
@@ -45,6 +45,7 @@
 
   , ps_newpath
   , ps_moveto
+  , ps_rmoveto
   , ps_lineto
   , ps_arc
   , ps_curveto
@@ -68,7 +69,6 @@
 import Wumpus.Core.Geometry
 import Wumpus.Core.GraphicProps
 import Wumpus.Core.PictureInternal
-import Wumpus.Core.Text.Encoder
 import Wumpus.Core.Utils.Common
 import Wumpus.Core.Utils.FormatCombinators
 
@@ -100,12 +100,12 @@
 
 
 
-psHeader  :: Int -> ZonedTime -> Doc
+psHeader :: Int -> ZonedTime -> Doc
 psHeader page_count tod = vcat $ 
     [ text "%!PS-Adobe-3.0"
     , text "%%Pages:"         <+> int page_count
     , text "%%CreationDate:"  <+> parens (showsDoc $ psTimeStamp tod)                
-    , text "%%EndComments"                  
+    , text "%%EndComments"
     ]
 
 
@@ -114,8 +114,8 @@
     [ text "%!PS-Adobe-3.0 EPSF-3.0"
     , text "%%BoundingBox:"   <+> upint llx <+> upint lly
                               <+> upint urx <+> upint ury
-    , text "%%CreationDate:"  <+> parens (showsDoc $ psTimeStamp tod)                
-    , text "%%EndComments"                  
+    , text "%%CreationDate:"  <+> parens (showsDoc $ psTimeStamp tod)
+    , text "%%EndComments"
     ]
   where
     upint             = text . roundup . toDouble
@@ -137,7 +137,7 @@
 dsc_Page label ordinal = text "%%Page:" <+> text label <+> int ordinal
 
 
-missingCharCode :: CharCode -> GlyphName -> Doc
+missingCharCode :: Int -> String -> Doc
 missingCharCode i fallback = vcat $
     [ ps_comment $ "missing lookup for &#" ++ show i ++ ";" 
     , ps_glyphshow fallback
@@ -256,6 +256,12 @@
 ps_moveto (P2 x y) = command "moveto" [dtruncFmt x, dtruncFmt y]
 
 
+-- | @ ... ... rmoveto @
+--
+ps_rmoveto :: PSUnit u => Point2 u -> Doc
+ps_rmoveto (P2 x y) = command "rmoveto" [dtruncFmt x, dtruncFmt y]
+
+
 -- | @ ... ... lineto @
 --
 ps_lineto :: PSUnit u => Point2 u -> Doc
@@ -348,6 +354,7 @@
 --
 ps_show :: String -> Doc
 ps_show ss = command "show" [parens $ text ss]
+
 
 -- | @ (/...) show  @
 --
diff --git a/src/Wumpus/Core/SVGDoc.hs b/src/Wumpus/Core/SVGDoc.hs
--- a/src/Wumpus/Core/SVGDoc.hs
+++ b/src/Wumpus/Core/SVGDoc.hs
@@ -17,10 +17,11 @@
 module Wumpus.Core.SVGDoc
   (
     escapeSpecial
-
+  , svgAttr
   , xml_version
   , doctype
   , elem_svg
+  , elem_svg_defs
   , elem_g
   , elem_g_no_attrs
 
@@ -79,13 +80,12 @@
 import Wumpus.Core.Geometry
 import Wumpus.Core.GraphicProps
 import Wumpus.Core.PictureInternal
-import Wumpus.Core.Text.Encoder
 import Wumpus.Core.Utils.Common
 import Wumpus.Core.Utils.FormatCombinators
 
 
-escapeSpecial :: CharCode -> String
-escapeSpecial i = "&#" ++ show i ++ ";"
+escapeSpecial :: Int -> Doc
+escapeSpecial i = text "&#" <> int i <> char ';'
 
 
 -- Note - it is easier put particular attrs at the end (esp. d 
@@ -135,7 +135,15 @@
 
 
 elem_svg :: Doc -> Doc 
-elem_svg body = svgElemB "svg" (svgns <+> svgvn <+> xlink) body
+elem_svg body = svgElemB "svg" svg_top_attrs body
+
+elem_svg_defs :: String -> Doc -> Doc 
+elem_svg_defs ss body = 
+    svgElemB "svg" svg_top_attrs (elem_defs ss `vconcat` body)
+
+
+svg_top_attrs :: Doc
+svg_top_attrs = svgns <+> svgvn <+> xlink
   where 
     svgns = svgAttr "xmlns"       (text "http://www.w3.org/2000/svg")
     svgvn = svgAttr "version"     (text "1.1")
@@ -150,6 +158,10 @@
 --
 elem_g_no_attrs :: Doc -> Doc
 elem_g_no_attrs body = svgElemB_no_attrs "g" body
+
+elem_defs :: String -> Doc
+elem_defs ss = svgElemB_no_attrs "defs" $ vcat $ map text $ lines ss
+
 
 -- | @ \<clipPath ...\> ... \</clipPath\> @ 
 --
diff --git a/src/Wumpus/Core/Text/Base.hs b/src/Wumpus/Core/Text/Base.hs
new file mode 100644
--- /dev/null
+++ b/src/Wumpus/Core/Text/Base.hs
@@ -0,0 +1,229 @@
+{-# OPTIONS -Wall #-}
+
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  Wumpus.Core.Text.Base
+-- Copyright   :  (c) Stephen Tetley 2010
+-- License     :  BSD3
+--
+-- Maintainer  :  stephen.tetley@gmail.com
+-- Stability   :  unstable
+-- Portability :  GHC
+--
+-- Extended character code handling.
+-- 
+-- Wumpus uses an escaping style derived from SVG to embed 
+-- character codes and PostScript glyph names in regular strings. 
+--
+-- > "regular ascii text &#38; more ascii text"
+--  
+-- i.e. character codes are delimited by @&\#@ on the 
+-- left and @;@ on the right.
+--
+-- Glyph names are delimited by @&@ on the left and @;@ on the 
+-- right.
+--
+-- > "regular ascii text &ampersand; more ascii text"
+--
+-- Note that glyph names \*\* /should always/ \*\* correspond to
+-- PostScript glyph names not SVG / HTML glyph names.
+--
+-- In Wumpus both glyph names and character codes can
+-- be embedded in strings - (e.g. @&\egrave;@ or @&\#232;@) 
+-- although glyph names are preferred for PostScript (see below).
+--
+-- Character codes can be also be expressed as octal or 
+-- hexadecimal numbers:
+--
+-- > myst&#0o350;re
+--
+-- > myst&#0xE8;re
+--
+-- In the generated PostScript, Wumpus uses the character name, 
+-- e.g.:  
+--
+-- > (myst) show /egrave glyphshow (re) show
+-- 
+-- The generated SVG uses the numeric code, e.g.: 
+--
+-- > myst&#232;re
+--
+-- Unless you are generating only SVG, you should favour glyph 
+-- names rather than code points as they are unambiguously 
+-- interpreted by Wumpus. Character codes are context-dependent
+-- on the encoding of the font used to render the text. 
+-- /Standard/ fonts (e.g. Helvetica, Times, Courier) use the 
+-- Standard Encoding is which has some differences to the 
+-- common Latin1 character set. 
+--
+-- Unfortunately if a glyph is not present in a font it cannot 
+-- be rendered in PostScript. Wumpus-Core is oblivious to the 
+-- contents of fonts, it does not warn about missing glyphs or 
+-- attempt to substitute them.
+-- 
+--------------------------------------------------------------------------------
+
+
+module Wumpus.Core.Text.Base
+  ( 
+
+    EscapedText(..)    
+  , EscapedChar(..)
+  , EncodingVector
+
+  , escapeString
+  , textLength  
+
+  ) where
+
+import Wumpus.Core.Utils.FormatCombinators
+
+import Data.Char
+import qualified Data.IntMap as IntMap
+
+
+-- | Internal string representation for Wumpus-Core.
+-- 
+-- 'EscapedText' is a list of characters, where each character 
+-- may be either a regular character, an integer representing a 
+-- Unicode code-point or a PostScript glyph name.
+-- 
+newtype EscapedText = EscapedText { getEscapedText :: [EscapedChar] }
+  deriving (Eq,Show)
+
+
+-- | Internal character representation for Wumpus-Core.
+-- 
+-- An 'EscapedChar' may be either a regular character, an integer
+-- representing a Unicode code-point or a PostScript glyph
+-- name.
+-- 
+data EscapedChar = CharLiteral Char
+                 | CharEscInt  Int
+                 | CharEscName String
+  deriving (Eq,Show)
+
+
+-- | 'EncodingVecor' - a map from code point to PostScript glyph
+-- name.
+-- 
+type EncodingVector = IntMap.IntMap String
+
+
+--------------------------------------------------------------------------------
+
+instance Format EscapedText where
+  format = hcat . map format . getEscapedText
+
+
+instance Format EscapedChar where
+  format (CharLiteral c) = char c
+  format (CharEscInt i)  = text "&#" <> int i <> semicolon
+  format (CharEscName s) = text "&" <> text s <> semicolon
+
+
+--------------------------------------------------------------------------------
+
+
+
+
+-- | 'escapeString' input is regular text and escaped glyph names 
+-- or decimal character codes. Escaping in the input string should 
+-- follow the SVG convention - the escape sequence starts with 
+-- @&@ (ampresand) for glyph names or @&#@ (ampersand hash) for
+-- char codes and ends with @;@ (semicolon).
+--
+-- Escaped characters are output to PostScript as their respective
+-- glyph names:
+--
+-- > /egrave glyphshow
+--
+-- Escaped chararacters are output to SVG as an escaped decimal, 
+-- e.g.:
+--
+-- > &#232;
+--
+-- Note - for SVG output, Wumpus automatically escapes characters 
+-- where the char code is above 128. This is the convention used 
+-- by the @Text.XHtml@ library.
+--
+escapeString :: String -> EscapedText
+escapeString = EscapedText . lexer
+
+
+-- | Get the character count of an 'EscapedText' string.
+--
+textLength :: EscapedText -> Int
+textLength = length . getEscapedText 
+
+--
+-- Design note.
+--
+-- There is a fair argument that the lexer function should be 
+-- supplied with an encoding table and the actual encoding is 
+-- perfomed here rather than just escaping...
+--
+
+ 
+lexer :: String -> [EscapedChar]
+lexer []            = []
+lexer ('&':'#':cs)  = escNumStart cs
+lexer ('&':cs)      = escName cs
+lexer (c:cs)        = CharLiteral c : lexer cs
+
+-- Input is malformed if this reaches the @rest@ case.
+-- 
+escNumStart :: String -> [EscapedChar]
+escNumStart ('0':'o':cs)           = escOct cs
+escNumStart ('0':'O':cs)           = escOct cs
+escNumStart ('0':'x':cs)           = escHex cs
+escNumStart ('0':'X':cs)           = escHex cs
+escNumStart (c:cs) | isDigit c     = escDec (digitToInt c) cs
+escNumStart rest                   = chompToSemi rest      
+
+escName :: String -> [EscapedChar]
+escName (c:cs)                     = let (ss,rest) = span isAlphaNum cs 
+                                     in specialEscape (c:ss) : chompToSemi rest
+escName []                         = [] 
+
+
+-- | One digit consumed already...
+--
+escDec :: Int -> String -> [EscapedChar]
+escDec n (c:cs) | isDigit c = escDec (n*10 + digitToInt c) cs
+escDec n cs     | n > 0     = CharEscInt n : chompToSemi cs
+                | otherwise = chompToSemi cs
+
+escHex :: String -> [EscapedChar]
+escHex = step 0
+  where
+    step n (c:cs) | isHexDigit c = step (n*16 + digitToInt c) cs
+    step n cs     | n > 0        = CharEscInt n : chompToSemi cs
+                  | otherwise    = chompToSemi cs 
+
+
+escOct :: String -> [EscapedChar]
+escOct = step 0
+  where
+    step n (c:cs) | isHexDigit c = step (n*8 + digitToInt c) cs
+    step n cs     | n > 0        = CharEscInt n : chompToSemi cs
+                  | otherwise    = chompToSemi cs 
+
+
+
+-- The last two conditions both indicate ill-formed input, but it
+-- is /best/ if the lexer does not throw errors.
+-- 
+chompToSemi :: String -> [EscapedChar]
+chompToSemi (';':cs) = lexer cs
+chompToSemi (_:cs)   = chompToSemi cs           
+chompToSemi []       = []
+
+
+-- | Special processing for @amp@ because it is so common.
+--
+-- Are there other cases to add to this function?
+--
+specialEscape :: String -> EscapedChar
+specialEscape ['a','m','p'] = CharEscName "ampersand"
+specialEscape cs            = CharEscName cs
diff --git a/src/Wumpus/Core/Text/DefaultEncoder.hs b/src/Wumpus/Core/Text/DefaultEncoder.hs
deleted file mode 100644
--- a/src/Wumpus/Core/Text/DefaultEncoder.hs
+++ /dev/null
@@ -1,44 +0,0 @@
-{-# OPTIONS -Wall #-}
-
---------------------------------------------------------------------------------
--- |
--- Module      :  Wumpus.Core.Text.DefaultEncoder
--- Copyright   :  (c) Stephen Tetley 2010
--- License     :  BSD3
---
--- Maintainer  :  stephen.tetley@gmail.com
--- Stability   :  unstable
--- Portability :  GHC
---
--- This is the default @TextEncoder@ with lookups for both Latin1
--- character codes / names and Symbol font.
---
---------------------------------------------------------------------------------
-
-module Wumpus.Core.Text.DefaultEncoder
-  ( 
-    defaultEncoder
-
-  ) where
-
-import Wumpus.Core.Text.Encoder
-import Wumpus.Core.Text.Latin1
-import Wumpus.Core.Text.SymbolFont
-
-import Data.Map
-
-
--- | This is the default encoder supporting names and codes for 
--- both Latin1 and the Symbol font.
---
-defaultEncoder :: TextEncoder
-defaultEncoder = TextEncoder
-      { svg_encoding_name       = "ISO-8859-1"
-      , font_encoder_map        = fem
-      }
-  where
-    fem = insert symbol_font_encoder symbolFontEncoder 
-        $ insert latin1_font_encoder latin1FontEncoder
-        $ empty 
-
-
diff --git a/src/Wumpus/Core/Text/Encoder.hs b/src/Wumpus/Core/Text/Encoder.hs
deleted file mode 100644
--- a/src/Wumpus/Core/Text/Encoder.hs
+++ /dev/null
@@ -1,143 +0,0 @@
-{-# OPTIONS -Wall #-}
-
---------------------------------------------------------------------------------
--- |
--- Module      :  Wumpus.Core.Text.Encoder
--- Copyright   :  (c) Stephen Tetley 2009-2010
--- License     :  BSD3
---
--- Maintainer  :  stephen.tetley@gmail.com
--- Stability   :  unstable
--- Portability :  GHC
---
--- Extended character code handling.
--- 
--- Wumpus uses SVG style escaping to embed character codes or 
--- names in regular strings:
---
--- > "regular ascii text &#egrave; more ascii text"
---  
--- i.e. character names and codes are delimited by @&\#@ on the 
--- left and @;@ on the right.
---
--- In Wumpus both character names and character codes can
--- be embedded in strings - (e.g. @ &\#egrave; or &\#232; @).
---
--- Character codes can be also be expressed as octal or 
--- hexadecimal:
---
--- > myst&#0o350;re
---
--- > myst&#0xE8;re
---
--- In the generated PostScript, Wumpus uses the character name, 
--- e.g.:  
---
--- > (myst) show /egrave glyphshow (re) show
--- 
--- The generated SVG uses the numeric code, e.g.: 
---
--- > myst&#232;re
---
--- To accommodate both, Wumpus defines a TextEncoder record which
--- provides a two-way mapping between character codes and glyph 
--- names for a character set.
---
---------------------------------------------------------------------------------
-
-module Wumpus.Core.Text.Encoder
-  ( 
-    GlyphName
-  , CharCode
-  , PostScriptLookup
-  , SVGLookup
-
-  , FontEncoderName(..)
-  , TextEncoder(..)
-  , FontEncoder(..)
-
-  ) where
-
-import Data.Map
-import Data.Word
-
-type GlyphName        = String
-type CharCode         = Int 
-
-type PostScriptLookup = CharCode -> Maybe GlyphName
-type SVGLookup        = GlyphName -> Maybe CharCode
-
-
-
--- | Font encoder name - a newtype wrapped /number/.
--- 
--- Ideally this would be an enumerated type, but it has to be 
--- open - new encoders need to be added, so an enum is out of the
--- question.
---
--- A String would be good, but would have slow lookup when used 
--- as a key. Dealing with multiple encoders was added late to 
--- Wumpus-Core - it is necessary, but taking a performace hit 
--- because of it is chagrin. So instead /uniquely/ asssigned
--- numbers are used.
---
--- Numbers below 10000 are reserved for Wumpus, though it is 
--- unlikely to need more than a handful. Numbers above are free 
--- to use (clearly clashes are possible, but probably unlikely).
--- 
--- Wumpus-Core assigns the following, other Wumpus libraries may 
--- assign more:
---
--- > 0 - Latin1 (for Helvetica, Times Roman, Courier...)
---
--- > 1 - Symbol Font
--- 
-newtype FontEncoderName = FontEncoderName { getFontEncoderName :: Word16 }
-  deriving (Eq,Ord)
-
-instance Show FontEncoderName where
-  show = step . getFontEncoderName
-    where
-      step 0 = "Latin1"
-      step 1 = "Symbol-Font"
-      step n = show n
-
--- | 'TextEncoder'
---
--- An /instance/ needs: 
---
--- * A map of FontEncoderNames to FontEncoders.
---
--- * The name of the encoding - this is printed in the xml 
--- prologue of the SVG file as the @encoding@ attribute. Latin 
--- 1\'s official name is seemingly \"ISO-8859-1\". 
--- 
--- * The name of the default encoder - this should naturally be 
--- in the Font Encoder map.
--- 
--- 
-data TextEncoder = TextEncoder
-      { svg_encoding_name       :: String
-      , font_encoder_map        :: Map FontEncoderName FontEncoder
-      }
-
--- | 'FontEncoder'.
---
--- * The functions for looking up codes by glyph-name and 
--- glyph-name by code. 
--- 
--- * Fallback glyph-names and char codes in case lookup fails.
--- 
--- "Wumpus.Core.TextLatin1" defines an implementation for Latin 1.
---
-data FontEncoder = FontEncoder  
-      { ps_lookup           :: PostScriptLookup
-      , svg_lookup          :: SVGLookup
-      , ps_fallback         :: GlyphName
-      , svg_fallback        :: CharCode
-      }
-                     
-
--- no show instance as a TextEncoder contains functions.
-
-
diff --git a/src/Wumpus/Core/Text/GlyphIndices.lhs b/src/Wumpus/Core/Text/GlyphIndices.lhs
new file mode 100644
--- /dev/null
+++ b/src/Wumpus/Core/Text/GlyphIndices.lhs
@@ -0,0 +1,4314 @@
+{-# OPTIONS -Wall #-}
+
+> ------------------------------------------------------------------------------
+> -- | 
+> -- Module       :   Wumpus.Core.Text.GlyphIndices
+> -- Copyright    :   (c) Stephen Tetley 2010
+> -- License      :   BSD3
+> -- 
+> -- Maintainer   :   Stephen Tetley <stephen.tetley@gmail.com>
+> -- Stability    :   unstable
+> -- Portability  :   GHC
+> -- 
+> -- Map of PostScript glyph names to Unicode code points.
+> -- 
+> -- \*\* This file is auto-generated. \*\*
+> -- 
+> -- Generated - 2010-11-13 15:30
+> -- 
+> ------------------------------------------------------------------------------
+
+> module Wumpus.Core.Text.GlyphIndices
+>   (
+>      ps_glyph_indices
+>   ) where
+
+> import Data.Map ( Map, fromAscList )
+
+> -- | Lookup table mapping from PostScript glyph name
+> -- to the corresponding Unicode code point.
+
+> ps_glyph_indices :: Map String Int
+> ps_glyph_indices = fromAscList $
+>     [ ( "A", 0x0041 )
+>     , ( "AE", 0x00c6 )
+>     , ( "AEacute", 0x01fc )
+>     , ( "AEmacron", 0x01e2 )
+>     , ( "AEsmall", 0xf7e6 )
+>     , ( "Aacute", 0x00c1 )
+>     , ( "Aacutesmall", 0xf7e1 )
+>     , ( "Abreve", 0x0102 )
+>     , ( "Abreveacute", 0x1eae )
+>     , ( "Abrevecyrillic", 0x04d0 )
+>     , ( "Abrevedotbelow", 0x1eb6 )
+>     , ( "Abrevegrave", 0x1eb0 )
+>     , ( "Abrevehookabove", 0x1eb2 )
+>     , ( "Abrevetilde", 0x1eb4 )
+>     , ( "Acaron", 0x01cd )
+>     , ( "Acircle", 0x24b6 )
+>     , ( "Acircumflex", 0x00c2 )
+>     , ( "Acircumflexacute", 0x1ea4 )
+>     , ( "Acircumflexdotbelow", 0x1eac )
+>     , ( "Acircumflexgrave", 0x1ea6 )
+>     , ( "Acircumflexhookabove", 0x1ea8 )
+>     , ( "Acircumflexsmall", 0xf7e2 )
+>     , ( "Acircumflextilde", 0x1eaa )
+>     , ( "Acute", 0xf6c9 )
+>     , ( "Acutesmall", 0xf7b4 )
+>     , ( "Acyrillic", 0x0410 )
+>     , ( "Adblgrave", 0x0200 )
+>     , ( "Adieresis", 0x00c4 )
+>     , ( "Adieresiscyrillic", 0x04d2 )
+>     , ( "Adieresismacron", 0x01de )
+>     , ( "Adieresissmall", 0xf7e4 )
+>     , ( "Adotbelow", 0x1ea0 )
+>     , ( "Adotmacron", 0x01e0 )
+>     , ( "Agrave", 0x00c0 )
+>     , ( "Agravesmall", 0xf7e0 )
+>     , ( "Ahookabove", 0x1ea2 )
+>     , ( "Aiecyrillic", 0x04d4 )
+>     , ( "Ainvertedbreve", 0x0202 )
+>     , ( "Alpha", 0x0391 )
+>     , ( "Alphatonos", 0x0386 )
+>     , ( "Amacron", 0x0100 )
+>     , ( "Amonospace", 0xff21 )
+>     , ( "Aogonek", 0x0104 )
+>     , ( "Aring", 0x00c5 )
+>     , ( "Aringacute", 0x01fa )
+>     , ( "Aringbelow", 0x1e00 )
+>     , ( "Aringsmall", 0xf7e5 )
+>     , ( "Asmall", 0xf761 )
+>     , ( "Atilde", 0x00c3 )
+>     , ( "Atildesmall", 0xf7e3 )
+>     , ( "Aybarmenian", 0x0531 )
+>     , ( "B", 0x0042 )
+>     , ( "Bcircle", 0x24b7 )
+>     , ( "Bdotaccent", 0x1e02 )
+>     , ( "Bdotbelow", 0x1e04 )
+>     , ( "Becyrillic", 0x0411 )
+>     , ( "Benarmenian", 0x0532 )
+>     , ( "Beta", 0x0392 )
+>     , ( "Bhook", 0x0181 )
+>     , ( "Blinebelow", 0x1e06 )
+>     , ( "Bmonospace", 0xff22 )
+>     , ( "Brevesmall", 0xf6f4 )
+>     , ( "Bsmall", 0xf762 )
+>     , ( "Btopbar", 0x0182 )
+>     , ( "C", 0x0043 )
+>     , ( "Caarmenian", 0x053e )
+>     , ( "Cacute", 0x0106 )
+>     , ( "Caron", 0xf6ca )
+>     , ( "Caronsmall", 0xf6f5 )
+>     , ( "Ccaron", 0x010c )
+>     , ( "Ccedilla", 0x00c7 )
+>     , ( "Ccedillaacute", 0x1e08 )
+>     , ( "Ccedillasmall", 0xf7e7 )
+>     , ( "Ccircle", 0x24b8 )
+>     , ( "Ccircumflex", 0x0108 )
+>     , ( "Cdot", 0x010a )
+>     , ( "Cdotaccent", 0x010a )
+>     , ( "Cedillasmall", 0xf7b8 )
+>     , ( "Chaarmenian", 0x0549 )
+>     , ( "Cheabkhasiancyrillic", 0x04bc )
+>     , ( "Checyrillic", 0x0427 )
+>     , ( "Chedescenderabkhasiancyrillic", 0x04be )
+>     , ( "Chedescendercyrillic", 0x04b6 )
+>     , ( "Chedieresiscyrillic", 0x04f4 )
+>     , ( "Cheharmenian", 0x0543 )
+>     , ( "Chekhakassiancyrillic", 0x04cb )
+>     , ( "Cheverticalstrokecyrillic", 0x04b8 )
+>     , ( "Chi", 0x03a7 )
+>     , ( "Chook", 0x0187 )
+>     , ( "Circumflexsmall", 0xf6f6 )
+>     , ( "Cmonospace", 0xff23 )
+>     , ( "Coarmenian", 0x0551 )
+>     , ( "Csmall", 0xf763 )
+>     , ( "D", 0x0044 )
+>     , ( "DZ", 0x01f1 )
+>     , ( "DZcaron", 0x01c4 )
+>     , ( "Daarmenian", 0x0534 )
+>     , ( "Dafrican", 0x0189 )
+>     , ( "Dcaron", 0x010e )
+>     , ( "Dcedilla", 0x1e10 )
+>     , ( "Dcircle", 0x24b9 )
+>     , ( "Dcircumflexbelow", 0x1e12 )
+>     , ( "Dcroat", 0x0110 )
+>     , ( "Ddotaccent", 0x1e0a )
+>     , ( "Ddotbelow", 0x1e0c )
+>     , ( "Decyrillic", 0x0414 )
+>     , ( "Deicoptic", 0x03ee )
+>     , ( "Delta", 0x2206 )
+>     , ( "Deltagreek", 0x0394 )
+>     , ( "Dhook", 0x018a )
+>     , ( "Dieresis", 0xf6cb )
+>     , ( "DieresisAcute", 0xf6cc )
+>     , ( "DieresisGrave", 0xf6cd )
+>     , ( "Dieresissmall", 0xf7a8 )
+>     , ( "Digammagreek", 0x03dc )
+>     , ( "Djecyrillic", 0x0402 )
+>     , ( "Dlinebelow", 0x1e0e )
+>     , ( "Dmonospace", 0xff24 )
+>     , ( "Dotaccentsmall", 0xf6f7 )
+>     , ( "Dslash", 0x0110 )
+>     , ( "Dsmall", 0xf764 )
+>     , ( "Dtopbar", 0x018b )
+>     , ( "Dz", 0x01f2 )
+>     , ( "Dzcaron", 0x01c5 )
+>     , ( "Dzeabkhasiancyrillic", 0x04e0 )
+>     , ( "Dzecyrillic", 0x0405 )
+>     , ( "Dzhecyrillic", 0x040f )
+>     , ( "E", 0x0045 )
+>     , ( "Eacute", 0x00c9 )
+>     , ( "Eacutesmall", 0xf7e9 )
+>     , ( "Ebreve", 0x0114 )
+>     , ( "Ecaron", 0x011a )
+>     , ( "Ecedillabreve", 0x1e1c )
+>     , ( "Echarmenian", 0x0535 )
+>     , ( "Ecircle", 0x24ba )
+>     , ( "Ecircumflex", 0x00ca )
+>     , ( "Ecircumflexacute", 0x1ebe )
+>     , ( "Ecircumflexbelow", 0x1e18 )
+>     , ( "Ecircumflexdotbelow", 0x1ec6 )
+>     , ( "Ecircumflexgrave", 0x1ec0 )
+>     , ( "Ecircumflexhookabove", 0x1ec2 )
+>     , ( "Ecircumflexsmall", 0xf7ea )
+>     , ( "Ecircumflextilde", 0x1ec4 )
+>     , ( "Ecyrillic", 0x0404 )
+>     , ( "Edblgrave", 0x0204 )
+>     , ( "Edieresis", 0x00cb )
+>     , ( "Edieresissmall", 0xf7eb )
+>     , ( "Edot", 0x0116 )
+>     , ( "Edotaccent", 0x0116 )
+>     , ( "Edotbelow", 0x1eb8 )
+>     , ( "Efcyrillic", 0x0424 )
+>     , ( "Egrave", 0x00c8 )
+>     , ( "Egravesmall", 0xf7e8 )
+>     , ( "Eharmenian", 0x0537 )
+>     , ( "Ehookabove", 0x1eba )
+>     , ( "Eightroman", 0x2167 )
+>     , ( "Einvertedbreve", 0x0206 )
+>     , ( "Eiotifiedcyrillic", 0x0464 )
+>     , ( "Elcyrillic", 0x041b )
+>     , ( "Elevenroman", 0x216a )
+>     , ( "Emacron", 0x0112 )
+>     , ( "Emacronacute", 0x1e16 )
+>     , ( "Emacrongrave", 0x1e14 )
+>     , ( "Emcyrillic", 0x041c )
+>     , ( "Emonospace", 0xff25 )
+>     , ( "Encyrillic", 0x041d )
+>     , ( "Endescendercyrillic", 0x04a2 )
+>     , ( "Eng", 0x014a )
+>     , ( "Enghecyrillic", 0x04a4 )
+>     , ( "Enhookcyrillic", 0x04c7 )
+>     , ( "Eogonek", 0x0118 )
+>     , ( "Eopen", 0x0190 )
+>     , ( "Epsilon", 0x0395 )
+>     , ( "Epsilontonos", 0x0388 )
+>     , ( "Ercyrillic", 0x0420 )
+>     , ( "Ereversed", 0x018e )
+>     , ( "Ereversedcyrillic", 0x042d )
+>     , ( "Escyrillic", 0x0421 )
+>     , ( "Esdescendercyrillic", 0x04aa )
+>     , ( "Esh", 0x01a9 )
+>     , ( "Esmall", 0xf765 )
+>     , ( "Eta", 0x0397 )
+>     , ( "Etarmenian", 0x0538 )
+>     , ( "Etatonos", 0x0389 )
+>     , ( "Eth", 0x00d0 )
+>     , ( "Ethsmall", 0xf7f0 )
+>     , ( "Etilde", 0x1ebc )
+>     , ( "Etildebelow", 0x1e1a )
+>     , ( "Euro", 0x20ac )
+>     , ( "Ezh", 0x01b7 )
+>     , ( "Ezhcaron", 0x01ee )
+>     , ( "Ezhreversed", 0x01b8 )
+>     , ( "F", 0x0046 )
+>     , ( "Fcircle", 0x24bb )
+>     , ( "Fdotaccent", 0x1e1e )
+>     , ( "Feharmenian", 0x0556 )
+>     , ( "Feicoptic", 0x03e4 )
+>     , ( "Fhook", 0x0191 )
+>     , ( "Fitacyrillic", 0x0472 )
+>     , ( "Fiveroman", 0x2164 )
+>     , ( "Fmonospace", 0xff26 )
+>     , ( "Fourroman", 0x2163 )
+>     , ( "Fsmall", 0xf766 )
+>     , ( "G", 0x0047 )
+>     , ( "GBsquare", 0x3387 )
+>     , ( "Gacute", 0x01f4 )
+>     , ( "Gamma", 0x0393 )
+>     , ( "Gammaafrican", 0x0194 )
+>     , ( "Gangiacoptic", 0x03ea )
+>     , ( "Gbreve", 0x011e )
+>     , ( "Gcaron", 0x01e6 )
+>     , ( "Gcedilla", 0x0122 )
+>     , ( "Gcircle", 0x24bc )
+>     , ( "Gcircumflex", 0x011c )
+>     , ( "Gcommaaccent", 0x0122 )
+>     , ( "Gdot", 0x0120 )
+>     , ( "Gdotaccent", 0x0120 )
+>     , ( "Gecyrillic", 0x0413 )
+>     , ( "Ghadarmenian", 0x0542 )
+>     , ( "Ghemiddlehookcyrillic", 0x0494 )
+>     , ( "Ghestrokecyrillic", 0x0492 )
+>     , ( "Gheupturncyrillic", 0x0490 )
+>     , ( "Ghook", 0x0193 )
+>     , ( "Gimarmenian", 0x0533 )
+>     , ( "Gjecyrillic", 0x0403 )
+>     , ( "Gmacron", 0x1e20 )
+>     , ( "Gmonospace", 0xff27 )
+>     , ( "Grave", 0xf6ce )
+>     , ( "Gravesmall", 0xf760 )
+>     , ( "Gsmall", 0xf767 )
+>     , ( "Gsmallhook", 0x029b )
+>     , ( "Gstroke", 0x01e4 )
+>     , ( "H", 0x0048 )
+>     , ( "H18533", 0x25cf )
+>     , ( "H18543", 0x25aa )
+>     , ( "H18551", 0x25ab )
+>     , ( "H22073", 0x25a1 )
+>     , ( "HPsquare", 0x33cb )
+>     , ( "Haabkhasiancyrillic", 0x04a8 )
+>     , ( "Hadescendercyrillic", 0x04b2 )
+>     , ( "Hardsigncyrillic", 0x042a )
+>     , ( "Hbar", 0x0126 )
+>     , ( "Hbrevebelow", 0x1e2a )
+>     , ( "Hcedilla", 0x1e28 )
+>     , ( "Hcircle", 0x24bd )
+>     , ( "Hcircumflex", 0x0124 )
+>     , ( "Hdieresis", 0x1e26 )
+>     , ( "Hdotaccent", 0x1e22 )
+>     , ( "Hdotbelow", 0x1e24 )
+>     , ( "Hmonospace", 0xff28 )
+>     , ( "Hoarmenian", 0x0540 )
+>     , ( "Horicoptic", 0x03e8 )
+>     , ( "Hsmall", 0xf768 )
+>     , ( "Hungarumlaut", 0xf6cf )
+>     , ( "Hungarumlautsmall", 0xf6f8 )
+>     , ( "Hzsquare", 0x3390 )
+>     , ( "I", 0x0049 )
+>     , ( "IAcyrillic", 0x042f )
+>     , ( "IJ", 0x0132 )
+>     , ( "IUcyrillic", 0x042e )
+>     , ( "Iacute", 0x00cd )
+>     , ( "Iacutesmall", 0xf7ed )
+>     , ( "Ibreve", 0x012c )
+>     , ( "Icaron", 0x01cf )
+>     , ( "Icircle", 0x24be )
+>     , ( "Icircumflex", 0x00ce )
+>     , ( "Icircumflexsmall", 0xf7ee )
+>     , ( "Icyrillic", 0x0406 )
+>     , ( "Idblgrave", 0x0208 )
+>     , ( "Idieresis", 0x00cf )
+>     , ( "Idieresisacute", 0x1e2e )
+>     , ( "Idieresiscyrillic", 0x04e4 )
+>     , ( "Idieresissmall", 0xf7ef )
+>     , ( "Idot", 0x0130 )
+>     , ( "Idotaccent", 0x0130 )
+>     , ( "Idotbelow", 0x1eca )
+>     , ( "Iebrevecyrillic", 0x04d6 )
+>     , ( "Iecyrillic", 0x0415 )
+>     , ( "Ifraktur", 0x2111 )
+>     , ( "Igrave", 0x00cc )
+>     , ( "Igravesmall", 0xf7ec )
+>     , ( "Ihookabove", 0x1ec8 )
+>     , ( "Iicyrillic", 0x0418 )
+>     , ( "Iinvertedbreve", 0x020a )
+>     , ( "Iishortcyrillic", 0x0419 )
+>     , ( "Imacron", 0x012a )
+>     , ( "Imacroncyrillic", 0x04e2 )
+>     , ( "Imonospace", 0xff29 )
+>     , ( "Iniarmenian", 0x053b )
+>     , ( "Iocyrillic", 0x0401 )
+>     , ( "Iogonek", 0x012e )
+>     , ( "Iota", 0x0399 )
+>     , ( "Iotaafrican", 0x0196 )
+>     , ( "Iotadieresis", 0x03aa )
+>     , ( "Iotatonos", 0x038a )
+>     , ( "Ismall", 0xf769 )
+>     , ( "Istroke", 0x0197 )
+>     , ( "Itilde", 0x0128 )
+>     , ( "Itildebelow", 0x1e2c )
+>     , ( "Izhitsacyrillic", 0x0474 )
+>     , ( "Izhitsadblgravecyrillic", 0x0476 )
+>     , ( "J", 0x004a )
+>     , ( "Jaarmenian", 0x0541 )
+>     , ( "Jcircle", 0x24bf )
+>     , ( "Jcircumflex", 0x0134 )
+>     , ( "Jecyrillic", 0x0408 )
+>     , ( "Jheharmenian", 0x054b )
+>     , ( "Jmonospace", 0xff2a )
+>     , ( "Jsmall", 0xf76a )
+>     , ( "K", 0x004b )
+>     , ( "KBsquare", 0x3385 )
+>     , ( "KKsquare", 0x33cd )
+>     , ( "Kabashkircyrillic", 0x04a0 )
+>     , ( "Kacute", 0x1e30 )
+>     , ( "Kacyrillic", 0x041a )
+>     , ( "Kadescendercyrillic", 0x049a )
+>     , ( "Kahookcyrillic", 0x04c3 )
+>     , ( "Kappa", 0x039a )
+>     , ( "Kastrokecyrillic", 0x049e )
+>     , ( "Kaverticalstrokecyrillic", 0x049c )
+>     , ( "Kcaron", 0x01e8 )
+>     , ( "Kcedilla", 0x0136 )
+>     , ( "Kcircle", 0x24c0 )
+>     , ( "Kcommaaccent", 0x0136 )
+>     , ( "Kdotbelow", 0x1e32 )
+>     , ( "Keharmenian", 0x0554 )
+>     , ( "Kenarmenian", 0x053f )
+>     , ( "Khacyrillic", 0x0425 )
+>     , ( "Kheicoptic", 0x03e6 )
+>     , ( "Khook", 0x0198 )
+>     , ( "Kjecyrillic", 0x040c )
+>     , ( "Klinebelow", 0x1e34 )
+>     , ( "Kmonospace", 0xff2b )
+>     , ( "Koppacyrillic", 0x0480 )
+>     , ( "Koppagreek", 0x03de )
+>     , ( "Ksicyrillic", 0x046e )
+>     , ( "Ksmall", 0xf76b )
+>     , ( "L", 0x004c )
+>     , ( "LJ", 0x01c7 )
+>     , ( "LL", 0xf6bf )
+>     , ( "Lacute", 0x0139 )
+>     , ( "Lambda", 0x039b )
+>     , ( "Lcaron", 0x013d )
+>     , ( "Lcedilla", 0x013b )
+>     , ( "Lcircle", 0x24c1 )
+>     , ( "Lcircumflexbelow", 0x1e3c )
+>     , ( "Lcommaaccent", 0x013b )
+>     , ( "Ldot", 0x013f )
+>     , ( "Ldotaccent", 0x013f )
+>     , ( "Ldotbelow", 0x1e36 )
+>     , ( "Ldotbelowmacron", 0x1e38 )
+>     , ( "Liwnarmenian", 0x053c )
+>     , ( "Lj", 0x01c8 )
+>     , ( "Ljecyrillic", 0x0409 )
+>     , ( "Llinebelow", 0x1e3a )
+>     , ( "Lmonospace", 0xff2c )
+>     , ( "Lslash", 0x0141 )
+>     , ( "Lslashsmall", 0xf6f9 )
+>     , ( "Lsmall", 0xf76c )
+>     , ( "M", 0x004d )
+>     , ( "MBsquare", 0x3386 )
+>     , ( "Macron", 0xf6d0 )
+>     , ( "Macronsmall", 0xf7af )
+>     , ( "Macute", 0x1e3e )
+>     , ( "Mcircle", 0x24c2 )
+>     , ( "Mdotaccent", 0x1e40 )
+>     , ( "Mdotbelow", 0x1e42 )
+>     , ( "Menarmenian", 0x0544 )
+>     , ( "Mmonospace", 0xff2d )
+>     , ( "Msmall", 0xf76d )
+>     , ( "Mturned", 0x019c )
+>     , ( "Mu", 0x039c )
+>     , ( "N", 0x004e )
+>     , ( "NJ", 0x01ca )
+>     , ( "Nacute", 0x0143 )
+>     , ( "Ncaron", 0x0147 )
+>     , ( "Ncedilla", 0x0145 )
+>     , ( "Ncircle", 0x24c3 )
+>     , ( "Ncircumflexbelow", 0x1e4a )
+>     , ( "Ncommaaccent", 0x0145 )
+>     , ( "Ndotaccent", 0x1e44 )
+>     , ( "Ndotbelow", 0x1e46 )
+>     , ( "Nhookleft", 0x019d )
+>     , ( "Nineroman", 0x2168 )
+>     , ( "Nj", 0x01cb )
+>     , ( "Njecyrillic", 0x040a )
+>     , ( "Nlinebelow", 0x1e48 )
+>     , ( "Nmonospace", 0xff2e )
+>     , ( "Nowarmenian", 0x0546 )
+>     , ( "Nsmall", 0xf76e )
+>     , ( "Ntilde", 0x00d1 )
+>     , ( "Ntildesmall", 0xf7f1 )
+>     , ( "Nu", 0x039d )
+>     , ( "O", 0x004f )
+>     , ( "OE", 0x0152 )
+>     , ( "OEsmall", 0xf6fa )
+>     , ( "Oacute", 0x00d3 )
+>     , ( "Oacutesmall", 0xf7f3 )
+>     , ( "Obarredcyrillic", 0x04e8 )
+>     , ( "Obarreddieresiscyrillic", 0x04ea )
+>     , ( "Obreve", 0x014e )
+>     , ( "Ocaron", 0x01d1 )
+>     , ( "Ocenteredtilde", 0x019f )
+>     , ( "Ocircle", 0x24c4 )
+>     , ( "Ocircumflex", 0x00d4 )
+>     , ( "Ocircumflexacute", 0x1ed0 )
+>     , ( "Ocircumflexdotbelow", 0x1ed8 )
+>     , ( "Ocircumflexgrave", 0x1ed2 )
+>     , ( "Ocircumflexhookabove", 0x1ed4 )
+>     , ( "Ocircumflexsmall", 0xf7f4 )
+>     , ( "Ocircumflextilde", 0x1ed6 )
+>     , ( "Ocyrillic", 0x041e )
+>     , ( "Odblacute", 0x0150 )
+>     , ( "Odblgrave", 0x020c )
+>     , ( "Odieresis", 0x00d6 )
+>     , ( "Odieresiscyrillic", 0x04e6 )
+>     , ( "Odieresissmall", 0xf7f6 )
+>     , ( "Odotbelow", 0x1ecc )
+>     , ( "Ogoneksmall", 0xf6fb )
+>     , ( "Ograve", 0x00d2 )
+>     , ( "Ogravesmall", 0xf7f2 )
+>     , ( "Oharmenian", 0x0555 )
+>     , ( "Ohm", 0x2126 )
+>     , ( "Ohookabove", 0x1ece )
+>     , ( "Ohorn", 0x01a0 )
+>     , ( "Ohornacute", 0x1eda )
+>     , ( "Ohorndotbelow", 0x1ee2 )
+>     , ( "Ohorngrave", 0x1edc )
+>     , ( "Ohornhookabove", 0x1ede )
+>     , ( "Ohorntilde", 0x1ee0 )
+>     , ( "Ohungarumlaut", 0x0150 )
+>     , ( "Oi", 0x01a2 )
+>     , ( "Oinvertedbreve", 0x020e )
+>     , ( "Omacron", 0x014c )
+>     , ( "Omacronacute", 0x1e52 )
+>     , ( "Omacrongrave", 0x1e50 )
+>     , ( "Omega", 0x2126 )
+>     , ( "Omegacyrillic", 0x0460 )
+>     , ( "Omegagreek", 0x03a9 )
+>     , ( "Omegaroundcyrillic", 0x047a )
+>     , ( "Omegatitlocyrillic", 0x047c )
+>     , ( "Omegatonos", 0x038f )
+>     , ( "Omicron", 0x039f )
+>     , ( "Omicrontonos", 0x038c )
+>     , ( "Omonospace", 0xff2f )
+>     , ( "Oneroman", 0x2160 )
+>     , ( "Oogonek", 0x01ea )
+>     , ( "Oogonekmacron", 0x01ec )
+>     , ( "Oopen", 0x0186 )
+>     , ( "Oslash", 0x00d8 )
+>     , ( "Oslashacute", 0x01fe )
+>     , ( "Oslashsmall", 0xf7f8 )
+>     , ( "Osmall", 0xf76f )
+>     , ( "Ostrokeacute", 0x01fe )
+>     , ( "Otcyrillic", 0x047e )
+>     , ( "Otilde", 0x00d5 )
+>     , ( "Otildeacute", 0x1e4c )
+>     , ( "Otildedieresis", 0x1e4e )
+>     , ( "Otildesmall", 0xf7f5 )
+>     , ( "P", 0x0050 )
+>     , ( "Pacute", 0x1e54 )
+>     , ( "Pcircle", 0x24c5 )
+>     , ( "Pdotaccent", 0x1e56 )
+>     , ( "Pecyrillic", 0x041f )
+>     , ( "Peharmenian", 0x054a )
+>     , ( "Pemiddlehookcyrillic", 0x04a6 )
+>     , ( "Phi", 0x03a6 )
+>     , ( "Phook", 0x01a4 )
+>     , ( "Pi", 0x03a0 )
+>     , ( "Piwrarmenian", 0x0553 )
+>     , ( "Pmonospace", 0xff30 )
+>     , ( "Psi", 0x03a8 )
+>     , ( "Psicyrillic", 0x0470 )
+>     , ( "Psmall", 0xf770 )
+>     , ( "Q", 0x0051 )
+>     , ( "Qcircle", 0x24c6 )
+>     , ( "Qmonospace", 0xff31 )
+>     , ( "Qsmall", 0xf771 )
+>     , ( "R", 0x0052 )
+>     , ( "Raarmenian", 0x054c )
+>     , ( "Racute", 0x0154 )
+>     , ( "Rcaron", 0x0158 )
+>     , ( "Rcedilla", 0x0156 )
+>     , ( "Rcircle", 0x24c7 )
+>     , ( "Rcommaaccent", 0x0156 )
+>     , ( "Rdblgrave", 0x0210 )
+>     , ( "Rdotaccent", 0x1e58 )
+>     , ( "Rdotbelow", 0x1e5a )
+>     , ( "Rdotbelowmacron", 0x1e5c )
+>     , ( "Reharmenian", 0x0550 )
+>     , ( "Rfraktur", 0x211c )
+>     , ( "Rho", 0x03a1 )
+>     , ( "Ringsmall", 0xf6fc )
+>     , ( "Rinvertedbreve", 0x0212 )
+>     , ( "Rlinebelow", 0x1e5e )
+>     , ( "Rmonospace", 0xff32 )
+>     , ( "Rsmall", 0xf772 )
+>     , ( "Rsmallinverted", 0x0281 )
+>     , ( "Rsmallinvertedsuperior", 0x02b6 )
+>     , ( "S", 0x0053 )
+>     , ( "SF010000", 0x250c )
+>     , ( "SF020000", 0x2514 )
+>     , ( "SF030000", 0x2510 )
+>     , ( "SF040000", 0x2518 )
+>     , ( "SF050000", 0x253c )
+>     , ( "SF060000", 0x252c )
+>     , ( "SF070000", 0x2534 )
+>     , ( "SF080000", 0x251c )
+>     , ( "SF090000", 0x2524 )
+>     , ( "SF100000", 0x2500 )
+>     , ( "SF110000", 0x2502 )
+>     , ( "SF190000", 0x2561 )
+>     , ( "SF200000", 0x2562 )
+>     , ( "SF210000", 0x2556 )
+>     , ( "SF220000", 0x2555 )
+>     , ( "SF230000", 0x2563 )
+>     , ( "SF240000", 0x2551 )
+>     , ( "SF250000", 0x2557 )
+>     , ( "SF260000", 0x255d )
+>     , ( "SF270000", 0x255c )
+>     , ( "SF280000", 0x255b )
+>     , ( "SF360000", 0x255e )
+>     , ( "SF370000", 0x255f )
+>     , ( "SF380000", 0x255a )
+>     , ( "SF390000", 0x2554 )
+>     , ( "SF400000", 0x2569 )
+>     , ( "SF410000", 0x2566 )
+>     , ( "SF420000", 0x2560 )
+>     , ( "SF430000", 0x2550 )
+>     , ( "SF440000", 0x256c )
+>     , ( "SF450000", 0x2567 )
+>     , ( "SF460000", 0x2568 )
+>     , ( "SF470000", 0x2564 )
+>     , ( "SF480000", 0x2565 )
+>     , ( "SF490000", 0x2559 )
+>     , ( "SF500000", 0x2558 )
+>     , ( "SF510000", 0x2552 )
+>     , ( "SF520000", 0x2553 )
+>     , ( "SF530000", 0x256b )
+>     , ( "SF540000", 0x256a )
+>     , ( "Sacute", 0x015a )
+>     , ( "Sacutedotaccent", 0x1e64 )
+>     , ( "Sampigreek", 0x03e0 )
+>     , ( "Scaron", 0x0160 )
+>     , ( "Scarondotaccent", 0x1e66 )
+>     , ( "Scaronsmall", 0xf6fd )
+>     , ( "Scedilla", 0x015e )
+>     , ( "Schwa", 0x018f )
+>     , ( "Schwacyrillic", 0x04d8 )
+>     , ( "Schwadieresiscyrillic", 0x04da )
+>     , ( "Scircle", 0x24c8 )
+>     , ( "Scircumflex", 0x015c )
+>     , ( "Scommaaccent", 0x0218 )
+>     , ( "Sdotaccent", 0x1e60 )
+>     , ( "Sdotbelow", 0x1e62 )
+>     , ( "Sdotbelowdotaccent", 0x1e68 )
+>     , ( "Seharmenian", 0x054d )
+>     , ( "Sevenroman", 0x2166 )
+>     , ( "Shaarmenian", 0x0547 )
+>     , ( "Shacyrillic", 0x0428 )
+>     , ( "Shchacyrillic", 0x0429 )
+>     , ( "Sheicoptic", 0x03e2 )
+>     , ( "Shhacyrillic", 0x04ba )
+>     , ( "Shimacoptic", 0x03ec )
+>     , ( "Sigma", 0x03a3 )
+>     , ( "Sixroman", 0x2165 )
+>     , ( "Smonospace", 0xff33 )
+>     , ( "Softsigncyrillic", 0x042c )
+>     , ( "Ssmall", 0xf773 )
+>     , ( "Stigmagreek", 0x03da )
+>     , ( "T", 0x0054 )
+>     , ( "Tau", 0x03a4 )
+>     , ( "Tbar", 0x0166 )
+>     , ( "Tcaron", 0x0164 )
+>     , ( "Tcedilla", 0x0162 )
+>     , ( "Tcircle", 0x24c9 )
+>     , ( "Tcircumflexbelow", 0x1e70 )
+>     , ( "Tcommaaccent", 0x0162 )
+>     , ( "Tdotaccent", 0x1e6a )
+>     , ( "Tdotbelow", 0x1e6c )
+>     , ( "Tecyrillic", 0x0422 )
+>     , ( "Tedescendercyrillic", 0x04ac )
+>     , ( "Tenroman", 0x2169 )
+>     , ( "Tetsecyrillic", 0x04b4 )
+>     , ( "Theta", 0x0398 )
+>     , ( "Thook", 0x01ac )
+>     , ( "Thorn", 0x00de )
+>     , ( "Thornsmall", 0xf7fe )
+>     , ( "Threeroman", 0x2162 )
+>     , ( "Tildesmall", 0xf6fe )
+>     , ( "Tiwnarmenian", 0x054f )
+>     , ( "Tlinebelow", 0x1e6e )
+>     , ( "Tmonospace", 0xff34 )
+>     , ( "Toarmenian", 0x0539 )
+>     , ( "Tonefive", 0x01bc )
+>     , ( "Tonesix", 0x0184 )
+>     , ( "Tonetwo", 0x01a7 )
+>     , ( "Tretroflexhook", 0x01ae )
+>     , ( "Tsecyrillic", 0x0426 )
+>     , ( "Tshecyrillic", 0x040b )
+>     , ( "Tsmall", 0xf774 )
+>     , ( "Twelveroman", 0x216b )
+>     , ( "Tworoman", 0x2161 )
+>     , ( "U", 0x0055 )
+>     , ( "Uacute", 0x00da )
+>     , ( "Uacutesmall", 0xf7fa )
+>     , ( "Ubreve", 0x016c )
+>     , ( "Ucaron", 0x01d3 )
+>     , ( "Ucircle", 0x24ca )
+>     , ( "Ucircumflex", 0x00db )
+>     , ( "Ucircumflexbelow", 0x1e76 )
+>     , ( "Ucircumflexsmall", 0xf7fb )
+>     , ( "Ucyrillic", 0x0423 )
+>     , ( "Udblacute", 0x0170 )
+>     , ( "Udblgrave", 0x0214 )
+>     , ( "Udieresis", 0x00dc )
+>     , ( "Udieresisacute", 0x01d7 )
+>     , ( "Udieresisbelow", 0x1e72 )
+>     , ( "Udieresiscaron", 0x01d9 )
+>     , ( "Udieresiscyrillic", 0x04f0 )
+>     , ( "Udieresisgrave", 0x01db )
+>     , ( "Udieresismacron", 0x01d5 )
+>     , ( "Udieresissmall", 0xf7fc )
+>     , ( "Udotbelow", 0x1ee4 )
+>     , ( "Ugrave", 0x00d9 )
+>     , ( "Ugravesmall", 0xf7f9 )
+>     , ( "Uhookabove", 0x1ee6 )
+>     , ( "Uhorn", 0x01af )
+>     , ( "Uhornacute", 0x1ee8 )
+>     , ( "Uhorndotbelow", 0x1ef0 )
+>     , ( "Uhorngrave", 0x1eea )
+>     , ( "Uhornhookabove", 0x1eec )
+>     , ( "Uhorntilde", 0x1eee )
+>     , ( "Uhungarumlaut", 0x0170 )
+>     , ( "Uhungarumlautcyrillic", 0x04f2 )
+>     , ( "Uinvertedbreve", 0x0216 )
+>     , ( "Ukcyrillic", 0x0478 )
+>     , ( "Umacron", 0x016a )
+>     , ( "Umacroncyrillic", 0x04ee )
+>     , ( "Umacrondieresis", 0x1e7a )
+>     , ( "Umonospace", 0xff35 )
+>     , ( "Uogonek", 0x0172 )
+>     , ( "Upsilon", 0x03a5 )
+>     , ( "Upsilon1", 0x03d2 )
+>     , ( "Upsilonacutehooksymbolgreek", 0x03d3 )
+>     , ( "Upsilonafrican", 0x01b1 )
+>     , ( "Upsilondieresis", 0x03ab )
+>     , ( "Upsilondieresishooksymbolgreek", 0x03d4 )
+>     , ( "Upsilonhooksymbol", 0x03d2 )
+>     , ( "Upsilontonos", 0x038e )
+>     , ( "Uring", 0x016e )
+>     , ( "Ushortcyrillic", 0x040e )
+>     , ( "Usmall", 0xf775 )
+>     , ( "Ustraightcyrillic", 0x04ae )
+>     , ( "Ustraightstrokecyrillic", 0x04b0 )
+>     , ( "Utilde", 0x0168 )
+>     , ( "Utildeacute", 0x1e78 )
+>     , ( "Utildebelow", 0x1e74 )
+>     , ( "V", 0x0056 )
+>     , ( "Vcircle", 0x24cb )
+>     , ( "Vdotbelow", 0x1e7e )
+>     , ( "Vecyrillic", 0x0412 )
+>     , ( "Vewarmenian", 0x054e )
+>     , ( "Vhook", 0x01b2 )
+>     , ( "Vmonospace", 0xff36 )
+>     , ( "Voarmenian", 0x0548 )
+>     , ( "Vsmall", 0xf776 )
+>     , ( "Vtilde", 0x1e7c )
+>     , ( "W", 0x0057 )
+>     , ( "Wacute", 0x1e82 )
+>     , ( "Wcircle", 0x24cc )
+>     , ( "Wcircumflex", 0x0174 )
+>     , ( "Wdieresis", 0x1e84 )
+>     , ( "Wdotaccent", 0x1e86 )
+>     , ( "Wdotbelow", 0x1e88 )
+>     , ( "Wgrave", 0x1e80 )
+>     , ( "Wmonospace", 0xff37 )
+>     , ( "Wsmall", 0xf777 )
+>     , ( "X", 0x0058 )
+>     , ( "Xcircle", 0x24cd )
+>     , ( "Xdieresis", 0x1e8c )
+>     , ( "Xdotaccent", 0x1e8a )
+>     , ( "Xeharmenian", 0x053d )
+>     , ( "Xi", 0x039e )
+>     , ( "Xmonospace", 0xff38 )
+>     , ( "Xsmall", 0xf778 )
+>     , ( "Y", 0x0059 )
+>     , ( "Yacute", 0x00dd )
+>     , ( "Yacutesmall", 0xf7fd )
+>     , ( "Yatcyrillic", 0x0462 )
+>     , ( "Ycircle", 0x24ce )
+>     , ( "Ycircumflex", 0x0176 )
+>     , ( "Ydieresis", 0x0178 )
+>     , ( "Ydieresissmall", 0xf7ff )
+>     , ( "Ydotaccent", 0x1e8e )
+>     , ( "Ydotbelow", 0x1ef4 )
+>     , ( "Yericyrillic", 0x042b )
+>     , ( "Yerudieresiscyrillic", 0x04f8 )
+>     , ( "Ygrave", 0x1ef2 )
+>     , ( "Yhook", 0x01b3 )
+>     , ( "Yhookabove", 0x1ef6 )
+>     , ( "Yiarmenian", 0x0545 )
+>     , ( "Yicyrillic", 0x0407 )
+>     , ( "Yiwnarmenian", 0x0552 )
+>     , ( "Ymonospace", 0xff39 )
+>     , ( "Ysmall", 0xf779 )
+>     , ( "Ytilde", 0x1ef8 )
+>     , ( "Yusbigcyrillic", 0x046a )
+>     , ( "Yusbigiotifiedcyrillic", 0x046c )
+>     , ( "Yuslittlecyrillic", 0x0466 )
+>     , ( "Yuslittleiotifiedcyrillic", 0x0468 )
+>     , ( "Z", 0x005a )
+>     , ( "Zaarmenian", 0x0536 )
+>     , ( "Zacute", 0x0179 )
+>     , ( "Zcaron", 0x017d )
+>     , ( "Zcaronsmall", 0xf6ff )
+>     , ( "Zcircle", 0x24cf )
+>     , ( "Zcircumflex", 0x1e90 )
+>     , ( "Zdot", 0x017b )
+>     , ( "Zdotaccent", 0x017b )
+>     , ( "Zdotbelow", 0x1e92 )
+>     , ( "Zecyrillic", 0x0417 )
+>     , ( "Zedescendercyrillic", 0x0498 )
+>     , ( "Zedieresiscyrillic", 0x04de )
+>     , ( "Zeta", 0x0396 )
+>     , ( "Zhearmenian", 0x053a )
+>     , ( "Zhebrevecyrillic", 0x04c1 )
+>     , ( "Zhecyrillic", 0x0416 )
+>     , ( "Zhedescendercyrillic", 0x0496 )
+>     , ( "Zhedieresiscyrillic", 0x04dc )
+>     , ( "Zlinebelow", 0x1e94 )
+>     , ( "Zmonospace", 0xff3a )
+>     , ( "Zsmall", 0xf77a )
+>     , ( "Zstroke", 0x01b5 )
+>     , ( "a", 0x0061 )
+>     , ( "aabengali", 0x0986 )
+>     , ( "aacute", 0x00e1 )
+>     , ( "aadeva", 0x0906 )
+>     , ( "aagujarati", 0x0a86 )
+>     , ( "aagurmukhi", 0x0a06 )
+>     , ( "aamatragurmukhi", 0x0a3e )
+>     , ( "aarusquare", 0x3303 )
+>     , ( "aavowelsignbengali", 0x09be )
+>     , ( "aavowelsigndeva", 0x093e )
+>     , ( "aavowelsigngujarati", 0x0abe )
+>     , ( "abbreviationmarkarmenian", 0x055f )
+>     , ( "abbreviationsigndeva", 0x0970 )
+>     , ( "abengali", 0x0985 )
+>     , ( "abopomofo", 0x311a )
+>     , ( "abreve", 0x0103 )
+>     , ( "abreveacute", 0x1eaf )
+>     , ( "abrevecyrillic", 0x04d1 )
+>     , ( "abrevedotbelow", 0x1eb7 )
+>     , ( "abrevegrave", 0x1eb1 )
+>     , ( "abrevehookabove", 0x1eb3 )
+>     , ( "abrevetilde", 0x1eb5 )
+>     , ( "acaron", 0x01ce )
+>     , ( "acircle", 0x24d0 )
+>     , ( "acircumflex", 0x00e2 )
+>     , ( "acircumflexacute", 0x1ea5 )
+>     , ( "acircumflexdotbelow", 0x1ead )
+>     , ( "acircumflexgrave", 0x1ea7 )
+>     , ( "acircumflexhookabove", 0x1ea9 )
+>     , ( "acircumflextilde", 0x1eab )
+>     , ( "acute", 0x00b4 )
+>     , ( "acutebelowcmb", 0x0317 )
+>     , ( "acutecmb", 0x0301 )
+>     , ( "acutecomb", 0x0301 )
+>     , ( "acutedeva", 0x0954 )
+>     , ( "acutelowmod", 0x02cf )
+>     , ( "acutetonecmb", 0x0341 )
+>     , ( "acyrillic", 0x0430 )
+>     , ( "adblgrave", 0x0201 )
+>     , ( "addakgurmukhi", 0x0a71 )
+>     , ( "adeva", 0x0905 )
+>     , ( "adieresis", 0x00e4 )
+>     , ( "adieresiscyrillic", 0x04d3 )
+>     , ( "adieresismacron", 0x01df )
+>     , ( "adotbelow", 0x1ea1 )
+>     , ( "adotmacron", 0x01e1 )
+>     , ( "ae", 0x00e6 )
+>     , ( "aeacute", 0x01fd )
+>     , ( "aekorean", 0x3150 )
+>     , ( "aemacron", 0x01e3 )
+>     , ( "afii00208", 0x2015 )
+>     , ( "afii08941", 0x20a4 )
+>     , ( "afii10017", 0x0410 )
+>     , ( "afii10018", 0x0411 )
+>     , ( "afii10019", 0x0412 )
+>     , ( "afii10020", 0x0413 )
+>     , ( "afii10021", 0x0414 )
+>     , ( "afii10022", 0x0415 )
+>     , ( "afii10023", 0x0401 )
+>     , ( "afii10024", 0x0416 )
+>     , ( "afii10025", 0x0417 )
+>     , ( "afii10026", 0x0418 )
+>     , ( "afii10027", 0x0419 )
+>     , ( "afii10028", 0x041a )
+>     , ( "afii10029", 0x041b )
+>     , ( "afii10030", 0x041c )
+>     , ( "afii10031", 0x041d )
+>     , ( "afii10032", 0x041e )
+>     , ( "afii10033", 0x041f )
+>     , ( "afii10034", 0x0420 )
+>     , ( "afii10035", 0x0421 )
+>     , ( "afii10036", 0x0422 )
+>     , ( "afii10037", 0x0423 )
+>     , ( "afii10038", 0x0424 )
+>     , ( "afii10039", 0x0425 )
+>     , ( "afii10040", 0x0426 )
+>     , ( "afii10041", 0x0427 )
+>     , ( "afii10042", 0x0428 )
+>     , ( "afii10043", 0x0429 )
+>     , ( "afii10044", 0x042a )
+>     , ( "afii10045", 0x042b )
+>     , ( "afii10046", 0x042c )
+>     , ( "afii10047", 0x042d )
+>     , ( "afii10048", 0x042e )
+>     , ( "afii10049", 0x042f )
+>     , ( "afii10050", 0x0490 )
+>     , ( "afii10051", 0x0402 )
+>     , ( "afii10052", 0x0403 )
+>     , ( "afii10053", 0x0404 )
+>     , ( "afii10054", 0x0405 )
+>     , ( "afii10055", 0x0406 )
+>     , ( "afii10056", 0x0407 )
+>     , ( "afii10057", 0x0408 )
+>     , ( "afii10058", 0x0409 )
+>     , ( "afii10059", 0x040a )
+>     , ( "afii10060", 0x040b )
+>     , ( "afii10061", 0x040c )
+>     , ( "afii10062", 0x040e )
+>     , ( "afii10063", 0xf6c4 )
+>     , ( "afii10064", 0xf6c5 )
+>     , ( "afii10065", 0x0430 )
+>     , ( "afii10066", 0x0431 )
+>     , ( "afii10067", 0x0432 )
+>     , ( "afii10068", 0x0433 )
+>     , ( "afii10069", 0x0434 )
+>     , ( "afii10070", 0x0435 )
+>     , ( "afii10071", 0x0451 )
+>     , ( "afii10072", 0x0436 )
+>     , ( "afii10073", 0x0437 )
+>     , ( "afii10074", 0x0438 )
+>     , ( "afii10075", 0x0439 )
+>     , ( "afii10076", 0x043a )
+>     , ( "afii10077", 0x043b )
+>     , ( "afii10078", 0x043c )
+>     , ( "afii10079", 0x043d )
+>     , ( "afii10080", 0x043e )
+>     , ( "afii10081", 0x043f )
+>     , ( "afii10082", 0x0440 )
+>     , ( "afii10083", 0x0441 )
+>     , ( "afii10084", 0x0442 )
+>     , ( "afii10085", 0x0443 )
+>     , ( "afii10086", 0x0444 )
+>     , ( "afii10087", 0x0445 )
+>     , ( "afii10088", 0x0446 )
+>     , ( "afii10089", 0x0447 )
+>     , ( "afii10090", 0x0448 )
+>     , ( "afii10091", 0x0449 )
+>     , ( "afii10092", 0x044a )
+>     , ( "afii10093", 0x044b )
+>     , ( "afii10094", 0x044c )
+>     , ( "afii10095", 0x044d )
+>     , ( "afii10096", 0x044e )
+>     , ( "afii10097", 0x044f )
+>     , ( "afii10098", 0x0491 )
+>     , ( "afii10099", 0x0452 )
+>     , ( "afii10100", 0x0453 )
+>     , ( "afii10101", 0x0454 )
+>     , ( "afii10102", 0x0455 )
+>     , ( "afii10103", 0x0456 )
+>     , ( "afii10104", 0x0457 )
+>     , ( "afii10105", 0x0458 )
+>     , ( "afii10106", 0x0459 )
+>     , ( "afii10107", 0x045a )
+>     , ( "afii10108", 0x045b )
+>     , ( "afii10109", 0x045c )
+>     , ( "afii10110", 0x045e )
+>     , ( "afii10145", 0x040f )
+>     , ( "afii10146", 0x0462 )
+>     , ( "afii10147", 0x0472 )
+>     , ( "afii10148", 0x0474 )
+>     , ( "afii10192", 0xf6c6 )
+>     , ( "afii10193", 0x045f )
+>     , ( "afii10194", 0x0463 )
+>     , ( "afii10195", 0x0473 )
+>     , ( "afii10196", 0x0475 )
+>     , ( "afii10831", 0xf6c7 )
+>     , ( "afii10832", 0xf6c8 )
+>     , ( "afii10846", 0x04d9 )
+>     , ( "afii299", 0x200e )
+>     , ( "afii300", 0x200f )
+>     , ( "afii301", 0x200d )
+>     , ( "afii57381", 0x066a )
+>     , ( "afii57388", 0x060c )
+>     , ( "afii57392", 0x0660 )
+>     , ( "afii57393", 0x0661 )
+>     , ( "afii57394", 0x0662 )
+>     , ( "afii57395", 0x0663 )
+>     , ( "afii57396", 0x0664 )
+>     , ( "afii57397", 0x0665 )
+>     , ( "afii57398", 0x0666 )
+>     , ( "afii57399", 0x0667 )
+>     , ( "afii57400", 0x0668 )
+>     , ( "afii57401", 0x0669 )
+>     , ( "afii57403", 0x061b )
+>     , ( "afii57407", 0x061f )
+>     , ( "afii57409", 0x0621 )
+>     , ( "afii57410", 0x0622 )
+>     , ( "afii57411", 0x0623 )
+>     , ( "afii57412", 0x0624 )
+>     , ( "afii57413", 0x0625 )
+>     , ( "afii57414", 0x0626 )
+>     , ( "afii57415", 0x0627 )
+>     , ( "afii57416", 0x0628 )
+>     , ( "afii57417", 0x0629 )
+>     , ( "afii57418", 0x062a )
+>     , ( "afii57419", 0x062b )
+>     , ( "afii57420", 0x062c )
+>     , ( "afii57421", 0x062d )
+>     , ( "afii57422", 0x062e )
+>     , ( "afii57423", 0x062f )
+>     , ( "afii57424", 0x0630 )
+>     , ( "afii57425", 0x0631 )
+>     , ( "afii57426", 0x0632 )
+>     , ( "afii57427", 0x0633 )
+>     , ( "afii57428", 0x0634 )
+>     , ( "afii57429", 0x0635 )
+>     , ( "afii57430", 0x0636 )
+>     , ( "afii57431", 0x0637 )
+>     , ( "afii57432", 0x0638 )
+>     , ( "afii57433", 0x0639 )
+>     , ( "afii57434", 0x063a )
+>     , ( "afii57440", 0x0640 )
+>     , ( "afii57441", 0x0641 )
+>     , ( "afii57442", 0x0642 )
+>     , ( "afii57443", 0x0643 )
+>     , ( "afii57444", 0x0644 )
+>     , ( "afii57445", 0x0645 )
+>     , ( "afii57446", 0x0646 )
+>     , ( "afii57448", 0x0648 )
+>     , ( "afii57449", 0x0649 )
+>     , ( "afii57450", 0x064a )
+>     , ( "afii57451", 0x064b )
+>     , ( "afii57452", 0x064c )
+>     , ( "afii57453", 0x064d )
+>     , ( "afii57454", 0x064e )
+>     , ( "afii57455", 0x064f )
+>     , ( "afii57456", 0x0650 )
+>     , ( "afii57457", 0x0651 )
+>     , ( "afii57458", 0x0652 )
+>     , ( "afii57470", 0x0647 )
+>     , ( "afii57505", 0x06a4 )
+>     , ( "afii57506", 0x067e )
+>     , ( "afii57507", 0x0686 )
+>     , ( "afii57508", 0x0698 )
+>     , ( "afii57509", 0x06af )
+>     , ( "afii57511", 0x0679 )
+>     , ( "afii57512", 0x0688 )
+>     , ( "afii57513", 0x0691 )
+>     , ( "afii57514", 0x06ba )
+>     , ( "afii57519", 0x06d2 )
+>     , ( "afii57534", 0x06d5 )
+>     , ( "afii57636", 0x20aa )
+>     , ( "afii57645", 0x05be )
+>     , ( "afii57658", 0x05c3 )
+>     , ( "afii57664", 0x05d0 )
+>     , ( "afii57665", 0x05d1 )
+>     , ( "afii57666", 0x05d2 )
+>     , ( "afii57667", 0x05d3 )
+>     , ( "afii57668", 0x05d4 )
+>     , ( "afii57669", 0x05d5 )
+>     , ( "afii57670", 0x05d6 )
+>     , ( "afii57671", 0x05d7 )
+>     , ( "afii57672", 0x05d8 )
+>     , ( "afii57673", 0x05d9 )
+>     , ( "afii57674", 0x05da )
+>     , ( "afii57675", 0x05db )
+>     , ( "afii57676", 0x05dc )
+>     , ( "afii57677", 0x05dd )
+>     , ( "afii57678", 0x05de )
+>     , ( "afii57679", 0x05df )
+>     , ( "afii57680", 0x05e0 )
+>     , ( "afii57681", 0x05e1 )
+>     , ( "afii57682", 0x05e2 )
+>     , ( "afii57683", 0x05e3 )
+>     , ( "afii57684", 0x05e4 )
+>     , ( "afii57685", 0x05e5 )
+>     , ( "afii57686", 0x05e6 )
+>     , ( "afii57687", 0x05e7 )
+>     , ( "afii57688", 0x05e8 )
+>     , ( "afii57689", 0x05e9 )
+>     , ( "afii57690", 0x05ea )
+>     , ( "afii57694", 0xfb2a )
+>     , ( "afii57695", 0xfb2b )
+>     , ( "afii57700", 0xfb4b )
+>     , ( "afii57705", 0xfb1f )
+>     , ( "afii57716", 0x05f0 )
+>     , ( "afii57717", 0x05f1 )
+>     , ( "afii57718", 0x05f2 )
+>     , ( "afii57723", 0xfb35 )
+>     , ( "afii57793", 0x05b4 )
+>     , ( "afii57794", 0x05b5 )
+>     , ( "afii57795", 0x05b6 )
+>     , ( "afii57796", 0x05bb )
+>     , ( "afii57797", 0x05b8 )
+>     , ( "afii57798", 0x05b7 )
+>     , ( "afii57799", 0x05b0 )
+>     , ( "afii57800", 0x05b2 )
+>     , ( "afii57801", 0x05b1 )
+>     , ( "afii57802", 0x05b3 )
+>     , ( "afii57803", 0x05c2 )
+>     , ( "afii57804", 0x05c1 )
+>     , ( "afii57806", 0x05b9 )
+>     , ( "afii57807", 0x05bc )
+>     , ( "afii57839", 0x05bd )
+>     , ( "afii57841", 0x05bf )
+>     , ( "afii57842", 0x05c0 )
+>     , ( "afii57929", 0x02bc )
+>     , ( "afii61248", 0x2105 )
+>     , ( "afii61289", 0x2113 )
+>     , ( "afii61352", 0x2116 )
+>     , ( "afii61573", 0x202c )
+>     , ( "afii61574", 0x202d )
+>     , ( "afii61575", 0x202e )
+>     , ( "afii61664", 0x200c )
+>     , ( "afii63167", 0x066d )
+>     , ( "afii64937", 0x02bd )
+>     , ( "agrave", 0x00e0 )
+>     , ( "agujarati", 0x0a85 )
+>     , ( "agurmukhi", 0x0a05 )
+>     , ( "ahiragana", 0x3042 )
+>     , ( "ahookabove", 0x1ea3 )
+>     , ( "aibengali", 0x0990 )
+>     , ( "aibopomofo", 0x311e )
+>     , ( "aideva", 0x0910 )
+>     , ( "aiecyrillic", 0x04d5 )
+>     , ( "aigujarati", 0x0a90 )
+>     , ( "aigurmukhi", 0x0a10 )
+>     , ( "aimatragurmukhi", 0x0a48 )
+>     , ( "ainarabic", 0x0639 )
+>     , ( "ainfinalarabic", 0xfeca )
+>     , ( "aininitialarabic", 0xfecb )
+>     , ( "ainmedialarabic", 0xfecc )
+>     , ( "ainvertedbreve", 0x0203 )
+>     , ( "aivowelsignbengali", 0x09c8 )
+>     , ( "aivowelsigndeva", 0x0948 )
+>     , ( "aivowelsigngujarati", 0x0ac8 )
+>     , ( "akatakana", 0x30a2 )
+>     , ( "akatakanahalfwidth", 0xff71 )
+>     , ( "akorean", 0x314f )
+>     , ( "alef", 0x05d0 )
+>     , ( "alefarabic", 0x0627 )
+>     , ( "alefdageshhebrew", 0xfb30 )
+>     , ( "aleffinalarabic", 0xfe8e )
+>     , ( "alefhamzaabovearabic", 0x0623 )
+>     , ( "alefhamzaabovefinalarabic", 0xfe84 )
+>     , ( "alefhamzabelowarabic", 0x0625 )
+>     , ( "alefhamzabelowfinalarabic", 0xfe88 )
+>     , ( "alefhebrew", 0x05d0 )
+>     , ( "aleflamedhebrew", 0xfb4f )
+>     , ( "alefmaddaabovearabic", 0x0622 )
+>     , ( "alefmaddaabovefinalarabic", 0xfe82 )
+>     , ( "alefmaksuraarabic", 0x0649 )
+>     , ( "alefmaksurafinalarabic", 0xfef0 )
+>     , ( "alefmaksurainitialarabic", 0xfef3 )
+>     , ( "alefmaksuramedialarabic", 0xfef4 )
+>     , ( "alefpatahhebrew", 0xfb2e )
+>     , ( "alefqamatshebrew", 0xfb2f )
+>     , ( "aleph", 0x2135 )
+>     , ( "allequal", 0x224c )
+>     , ( "alpha", 0x03b1 )
+>     , ( "alphatonos", 0x03ac )
+>     , ( "amacron", 0x0101 )
+>     , ( "amonospace", 0xff41 )
+>     , ( "ampersand", 0x0026 )
+>     , ( "ampersandmonospace", 0xff06 )
+>     , ( "ampersandsmall", 0xf726 )
+>     , ( "amsquare", 0x33c2 )
+>     , ( "anbopomofo", 0x3122 )
+>     , ( "angbopomofo", 0x3124 )
+>     , ( "angkhankhuthai", 0x0e5a )
+>     , ( "angle", 0x2220 )
+>     , ( "anglebracketleft", 0x3008 )
+>     , ( "anglebracketleftvertical", 0xfe3f )
+>     , ( "anglebracketright", 0x3009 )
+>     , ( "anglebracketrightvertical", 0xfe40 )
+>     , ( "angleleft", 0x2329 )
+>     , ( "angleright", 0x232a )
+>     , ( "angstrom", 0x212b )
+>     , ( "anoteleia", 0x0387 )
+>     , ( "anudattadeva", 0x0952 )
+>     , ( "anusvarabengali", 0x0982 )
+>     , ( "anusvaradeva", 0x0902 )
+>     , ( "anusvaragujarati", 0x0a82 )
+>     , ( "aogonek", 0x0105 )
+>     , ( "apaatosquare", 0x3300 )
+>     , ( "aparen", 0x249c )
+>     , ( "apostrophearmenian", 0x055a )
+>     , ( "apostrophemod", 0x02bc )
+>     , ( "apple", 0xf8ff )
+>     , ( "approaches", 0x2250 )
+>     , ( "approxequal", 0x2248 )
+>     , ( "approxequalorimage", 0x2252 )
+>     , ( "approximatelyequal", 0x2245 )
+>     , ( "araeaekorean", 0x318e )
+>     , ( "araeakorean", 0x318d )
+>     , ( "arc", 0x2312 )
+>     , ( "arighthalfring", 0x1e9a )
+>     , ( "aring", 0x00e5 )
+>     , ( "aringacute", 0x01fb )
+>     , ( "aringbelow", 0x1e01 )
+>     , ( "arrowboth", 0x2194 )
+>     , ( "arrowdashdown", 0x21e3 )
+>     , ( "arrowdashleft", 0x21e0 )
+>     , ( "arrowdashright", 0x21e2 )
+>     , ( "arrowdashup", 0x21e1 )
+>     , ( "arrowdblboth", 0x21d4 )
+>     , ( "arrowdbldown", 0x21d3 )
+>     , ( "arrowdblleft", 0x21d0 )
+>     , ( "arrowdblright", 0x21d2 )
+>     , ( "arrowdblup", 0x21d1 )
+>     , ( "arrowdown", 0x2193 )
+>     , ( "arrowdownleft", 0x2199 )
+>     , ( "arrowdownright", 0x2198 )
+>     , ( "arrowdownwhite", 0x21e9 )
+>     , ( "arrowheaddownmod", 0x02c5 )
+>     , ( "arrowheadleftmod", 0x02c2 )
+>     , ( "arrowheadrightmod", 0x02c3 )
+>     , ( "arrowheadupmod", 0x02c4 )
+>     , ( "arrowhorizex", 0xf8e7 )
+>     , ( "arrowleft", 0x2190 )
+>     , ( "arrowleftdbl", 0x21d0 )
+>     , ( "arrowleftdblstroke", 0x21cd )
+>     , ( "arrowleftoverright", 0x21c6 )
+>     , ( "arrowleftwhite", 0x21e6 )
+>     , ( "arrowright", 0x2192 )
+>     , ( "arrowrightdblstroke", 0x21cf )
+>     , ( "arrowrightheavy", 0x279e )
+>     , ( "arrowrightoverleft", 0x21c4 )
+>     , ( "arrowrightwhite", 0x21e8 )
+>     , ( "arrowtableft", 0x21e4 )
+>     , ( "arrowtabright", 0x21e5 )
+>     , ( "arrowup", 0x2191 )
+>     , ( "arrowupdn", 0x2195 )
+>     , ( "arrowupdnbse", 0x21a8 )
+>     , ( "arrowupdownbase", 0x21a8 )
+>     , ( "arrowupleft", 0x2196 )
+>     , ( "arrowupleftofdown", 0x21c5 )
+>     , ( "arrowupright", 0x2197 )
+>     , ( "arrowupwhite", 0x21e7 )
+>     , ( "arrowvertex", 0xf8e6 )
+>     , ( "asciicircum", 0x005e )
+>     , ( "asciicircummonospace", 0xff3e )
+>     , ( "asciitilde", 0x007e )
+>     , ( "asciitildemonospace", 0xff5e )
+>     , ( "ascript", 0x0251 )
+>     , ( "ascriptturned", 0x0252 )
+>     , ( "asmallhiragana", 0x3041 )
+>     , ( "asmallkatakana", 0x30a1 )
+>     , ( "asmallkatakanahalfwidth", 0xff67 )
+>     , ( "asterisk", 0x002a )
+>     , ( "asteriskaltonearabic", 0x066d )
+>     , ( "asteriskarabic", 0x066d )
+>     , ( "asteriskmath", 0x2217 )
+>     , ( "asteriskmonospace", 0xff0a )
+>     , ( "asterisksmall", 0xfe61 )
+>     , ( "asterism", 0x2042 )
+>     , ( "asuperior", 0xf6e9 )
+>     , ( "asymptoticallyequal", 0x2243 )
+>     , ( "at", 0x0040 )
+>     , ( "atilde", 0x00e3 )
+>     , ( "atmonospace", 0xff20 )
+>     , ( "atsmall", 0xfe6b )
+>     , ( "aturned", 0x0250 )
+>     , ( "aubengali", 0x0994 )
+>     , ( "aubopomofo", 0x3120 )
+>     , ( "audeva", 0x0914 )
+>     , ( "augujarati", 0x0a94 )
+>     , ( "augurmukhi", 0x0a14 )
+>     , ( "aulengthmarkbengali", 0x09d7 )
+>     , ( "aumatragurmukhi", 0x0a4c )
+>     , ( "auvowelsignbengali", 0x09cc )
+>     , ( "auvowelsigndeva", 0x094c )
+>     , ( "auvowelsigngujarati", 0x0acc )
+>     , ( "avagrahadeva", 0x093d )
+>     , ( "aybarmenian", 0x0561 )
+>     , ( "ayin", 0x05e2 )
+>     , ( "ayinaltonehebrew", 0xfb20 )
+>     , ( "ayinhebrew", 0x05e2 )
+>     , ( "b", 0x0062 )
+>     , ( "babengali", 0x09ac )
+>     , ( "backslash", 0x005c )
+>     , ( "backslashmonospace", 0xff3c )
+>     , ( "badeva", 0x092c )
+>     , ( "bagujarati", 0x0aac )
+>     , ( "bagurmukhi", 0x0a2c )
+>     , ( "bahiragana", 0x3070 )
+>     , ( "bahtthai", 0x0e3f )
+>     , ( "bakatakana", 0x30d0 )
+>     , ( "bar", 0x007c )
+>     , ( "barmonospace", 0xff5c )
+>     , ( "bbopomofo", 0x3105 )
+>     , ( "bcircle", 0x24d1 )
+>     , ( "bdotaccent", 0x1e03 )
+>     , ( "bdotbelow", 0x1e05 )
+>     , ( "beamedsixteenthnotes", 0x266c )
+>     , ( "because", 0x2235 )
+>     , ( "becyrillic", 0x0431 )
+>     , ( "beharabic", 0x0628 )
+>     , ( "behfinalarabic", 0xfe90 )
+>     , ( "behinitialarabic", 0xfe91 )
+>     , ( "behiragana", 0x3079 )
+>     , ( "behmedialarabic", 0xfe92 )
+>     , ( "behmeeminitialarabic", 0xfc9f )
+>     , ( "behmeemisolatedarabic", 0xfc08 )
+>     , ( "behnoonfinalarabic", 0xfc6d )
+>     , ( "bekatakana", 0x30d9 )
+>     , ( "benarmenian", 0x0562 )
+>     , ( "bet", 0x05d1 )
+>     , ( "beta", 0x03b2 )
+>     , ( "betasymbolgreek", 0x03d0 )
+>     , ( "betdagesh", 0xfb31 )
+>     , ( "betdageshhebrew", 0xfb31 )
+>     , ( "bethebrew", 0x05d1 )
+>     , ( "betrafehebrew", 0xfb4c )
+>     , ( "bhabengali", 0x09ad )
+>     , ( "bhadeva", 0x092d )
+>     , ( "bhagujarati", 0x0aad )
+>     , ( "bhagurmukhi", 0x0a2d )
+>     , ( "bhook", 0x0253 )
+>     , ( "bihiragana", 0x3073 )
+>     , ( "bikatakana", 0x30d3 )
+>     , ( "bilabialclick", 0x0298 )
+>     , ( "bindigurmukhi", 0x0a02 )
+>     , ( "birusquare", 0x3331 )
+>     , ( "blackcircle", 0x25cf )
+>     , ( "blackdiamond", 0x25c6 )
+>     , ( "blackdownpointingtriangle", 0x25bc )
+>     , ( "blackleftpointingpointer", 0x25c4 )
+>     , ( "blackleftpointingtriangle", 0x25c0 )
+>     , ( "blacklenticularbracketleft", 0x3010 )
+>     , ( "blacklenticularbracketleftvertical", 0xfe3b )
+>     , ( "blacklenticularbracketright", 0x3011 )
+>     , ( "blacklenticularbracketrightvertical", 0xfe3c )
+>     , ( "blacklowerlefttriangle", 0x25e3 )
+>     , ( "blacklowerrighttriangle", 0x25e2 )
+>     , ( "blackrectangle", 0x25ac )
+>     , ( "blackrightpointingpointer", 0x25ba )
+>     , ( "blackrightpointingtriangle", 0x25b6 )
+>     , ( "blacksmallsquare", 0x25aa )
+>     , ( "blacksmilingface", 0x263b )
+>     , ( "blacksquare", 0x25a0 )
+>     , ( "blackstar", 0x2605 )
+>     , ( "blackupperlefttriangle", 0x25e4 )
+>     , ( "blackupperrighttriangle", 0x25e5 )
+>     , ( "blackuppointingsmalltriangle", 0x25b4 )
+>     , ( "blackuppointingtriangle", 0x25b2 )
+>     , ( "blank", 0x2423 )
+>     , ( "blinebelow", 0x1e07 )
+>     , ( "block", 0x2588 )
+>     , ( "bmonospace", 0xff42 )
+>     , ( "bobaimaithai", 0x0e1a )
+>     , ( "bohiragana", 0x307c )
+>     , ( "bokatakana", 0x30dc )
+>     , ( "bparen", 0x249d )
+>     , ( "bqsquare", 0x33c3 )
+>     , ( "braceex", 0xf8f4 )
+>     , ( "braceleft", 0x007b )
+>     , ( "braceleftbt", 0xf8f3 )
+>     , ( "braceleftmid", 0xf8f2 )
+>     , ( "braceleftmonospace", 0xff5b )
+>     , ( "braceleftsmall", 0xfe5b )
+>     , ( "bracelefttp", 0xf8f1 )
+>     , ( "braceleftvertical", 0xfe37 )
+>     , ( "braceright", 0x007d )
+>     , ( "bracerightbt", 0xf8fe )
+>     , ( "bracerightmid", 0xf8fd )
+>     , ( "bracerightmonospace", 0xff5d )
+>     , ( "bracerightsmall", 0xfe5c )
+>     , ( "bracerighttp", 0xf8fc )
+>     , ( "bracerightvertical", 0xfe38 )
+>     , ( "bracketleft", 0x005b )
+>     , ( "bracketleftbt", 0xf8f0 )
+>     , ( "bracketleftex", 0xf8ef )
+>     , ( "bracketleftmonospace", 0xff3b )
+>     , ( "bracketlefttp", 0xf8ee )
+>     , ( "bracketright", 0x005d )
+>     , ( "bracketrightbt", 0xf8fb )
+>     , ( "bracketrightex", 0xf8fa )
+>     , ( "bracketrightmonospace", 0xff3d )
+>     , ( "bracketrighttp", 0xf8f9 )
+>     , ( "breve", 0x02d8 )
+>     , ( "brevebelowcmb", 0x032e )
+>     , ( "brevecmb", 0x0306 )
+>     , ( "breveinvertedbelowcmb", 0x032f )
+>     , ( "breveinvertedcmb", 0x0311 )
+>     , ( "breveinverteddoublecmb", 0x0361 )
+>     , ( "bridgebelowcmb", 0x032a )
+>     , ( "bridgeinvertedbelowcmb", 0x033a )
+>     , ( "brokenbar", 0x00a6 )
+>     , ( "bstroke", 0x0180 )
+>     , ( "bsuperior", 0xf6ea )
+>     , ( "btopbar", 0x0183 )
+>     , ( "buhiragana", 0x3076 )
+>     , ( "bukatakana", 0x30d6 )
+>     , ( "bullet", 0x2022 )
+>     , ( "bulletinverse", 0x25d8 )
+>     , ( "bulletoperator", 0x2219 )
+>     , ( "bullseye", 0x25ce )
+>     , ( "c", 0x0063 )
+>     , ( "caarmenian", 0x056e )
+>     , ( "cabengali", 0x099a )
+>     , ( "cacute", 0x0107 )
+>     , ( "cadeva", 0x091a )
+>     , ( "cagujarati", 0x0a9a )
+>     , ( "cagurmukhi", 0x0a1a )
+>     , ( "calsquare", 0x3388 )
+>     , ( "candrabindubengali", 0x0981 )
+>     , ( "candrabinducmb", 0x0310 )
+>     , ( "candrabindudeva", 0x0901 )
+>     , ( "candrabindugujarati", 0x0a81 )
+>     , ( "capslock", 0x21ea )
+>     , ( "careof", 0x2105 )
+>     , ( "caron", 0x02c7 )
+>     , ( "caronbelowcmb", 0x032c )
+>     , ( "caroncmb", 0x030c )
+>     , ( "carriagereturn", 0x21b5 )
+>     , ( "cbopomofo", 0x3118 )
+>     , ( "ccaron", 0x010d )
+>     , ( "ccedilla", 0x00e7 )
+>     , ( "ccedillaacute", 0x1e09 )
+>     , ( "ccircle", 0x24d2 )
+>     , ( "ccircumflex", 0x0109 )
+>     , ( "ccurl", 0x0255 )
+>     , ( "cdot", 0x010b )
+>     , ( "cdotaccent", 0x010b )
+>     , ( "cdsquare", 0x33c5 )
+>     , ( "cedilla", 0x00b8 )
+>     , ( "cedillacmb", 0x0327 )
+>     , ( "cent", 0x00a2 )
+>     , ( "centigrade", 0x2103 )
+>     , ( "centinferior", 0xf6df )
+>     , ( "centmonospace", 0xffe0 )
+>     , ( "centoldstyle", 0xf7a2 )
+>     , ( "centsuperior", 0xf6e0 )
+>     , ( "chaarmenian", 0x0579 )
+>     , ( "chabengali", 0x099b )
+>     , ( "chadeva", 0x091b )
+>     , ( "chagujarati", 0x0a9b )
+>     , ( "chagurmukhi", 0x0a1b )
+>     , ( "chbopomofo", 0x3114 )
+>     , ( "cheabkhasiancyrillic", 0x04bd )
+>     , ( "checkmark", 0x2713 )
+>     , ( "checyrillic", 0x0447 )
+>     , ( "chedescenderabkhasiancyrillic", 0x04bf )
+>     , ( "chedescendercyrillic", 0x04b7 )
+>     , ( "chedieresiscyrillic", 0x04f5 )
+>     , ( "cheharmenian", 0x0573 )
+>     , ( "chekhakassiancyrillic", 0x04cc )
+>     , ( "cheverticalstrokecyrillic", 0x04b9 )
+>     , ( "chi", 0x03c7 )
+>     , ( "chieuchacirclekorean", 0x3277 )
+>     , ( "chieuchaparenkorean", 0x3217 )
+>     , ( "chieuchcirclekorean", 0x3269 )
+>     , ( "chieuchkorean", 0x314a )
+>     , ( "chieuchparenkorean", 0x3209 )
+>     , ( "chochangthai", 0x0e0a )
+>     , ( "chochanthai", 0x0e08 )
+>     , ( "chochingthai", 0x0e09 )
+>     , ( "chochoethai", 0x0e0c )
+>     , ( "chook", 0x0188 )
+>     , ( "cieucacirclekorean", 0x3276 )
+>     , ( "cieucaparenkorean", 0x3216 )
+>     , ( "cieuccirclekorean", 0x3268 )
+>     , ( "cieuckorean", 0x3148 )
+>     , ( "cieucparenkorean", 0x3208 )
+>     , ( "cieucuparenkorean", 0x321c )
+>     , ( "circle", 0x25cb )
+>     , ( "circlemultiply", 0x2297 )
+>     , ( "circleot", 0x2299 )
+>     , ( "circleplus", 0x2295 )
+>     , ( "circlepostalmark", 0x3036 )
+>     , ( "circlewithlefthalfblack", 0x25d0 )
+>     , ( "circlewithrighthalfblack", 0x25d1 )
+>     , ( "circumflex", 0x02c6 )
+>     , ( "circumflexbelowcmb", 0x032d )
+>     , ( "circumflexcmb", 0x0302 )
+>     , ( "clear", 0x2327 )
+>     , ( "clickalveolar", 0x01c2 )
+>     , ( "clickdental", 0x01c0 )
+>     , ( "clicklateral", 0x01c1 )
+>     , ( "clickretroflex", 0x01c3 )
+>     , ( "club", 0x2663 )
+>     , ( "clubsuitblack", 0x2663 )
+>     , ( "clubsuitwhite", 0x2667 )
+>     , ( "cmcubedsquare", 0x33a4 )
+>     , ( "cmonospace", 0xff43 )
+>     , ( "cmsquaredsquare", 0x33a0 )
+>     , ( "coarmenian", 0x0581 )
+>     , ( "colon", 0x003a )
+>     , ( "colonmonetary", 0x20a1 )
+>     , ( "colonmonospace", 0xff1a )
+>     , ( "colonsign", 0x20a1 )
+>     , ( "colonsmall", 0xfe55 )
+>     , ( "colontriangularhalfmod", 0x02d1 )
+>     , ( "colontriangularmod", 0x02d0 )
+>     , ( "comma", 0x002c )
+>     , ( "commaabovecmb", 0x0313 )
+>     , ( "commaaboverightcmb", 0x0315 )
+>     , ( "commaaccent", 0xf6c3 )
+>     , ( "commaarabic", 0x060c )
+>     , ( "commaarmenian", 0x055d )
+>     , ( "commainferior", 0xf6e1 )
+>     , ( "commamonospace", 0xff0c )
+>     , ( "commareversedabovecmb", 0x0314 )
+>     , ( "commareversedmod", 0x02bd )
+>     , ( "commasmall", 0xfe50 )
+>     , ( "commasuperior", 0xf6e2 )
+>     , ( "commaturnedabovecmb", 0x0312 )
+>     , ( "commaturnedmod", 0x02bb )
+>     , ( "compass", 0x263c )
+>     , ( "congruent", 0x2245 )
+>     , ( "contourintegral", 0x222e )
+>     , ( "control", 0x2303 )
+>     , ( "controlACK", 0x0006 )
+>     , ( "controlBEL", 0x0007 )
+>     , ( "controlBS", 0x0008 )
+>     , ( "controlCAN", 0x0018 )
+>     , ( "controlCR", 0x000d )
+>     , ( "controlDC1", 0x0011 )
+>     , ( "controlDC2", 0x0012 )
+>     , ( "controlDC3", 0x0013 )
+>     , ( "controlDC4", 0x0014 )
+>     , ( "controlDEL", 0x007f )
+>     , ( "controlDLE", 0x0010 )
+>     , ( "controlEM", 0x0019 )
+>     , ( "controlENQ", 0x0005 )
+>     , ( "controlEOT", 0x0004 )
+>     , ( "controlESC", 0x001b )
+>     , ( "controlETB", 0x0017 )
+>     , ( "controlETX", 0x0003 )
+>     , ( "controlFF", 0x000c )
+>     , ( "controlFS", 0x001c )
+>     , ( "controlGS", 0x001d )
+>     , ( "controlHT", 0x0009 )
+>     , ( "controlLF", 0x000a )
+>     , ( "controlNAK", 0x0015 )
+>     , ( "controlRS", 0x001e )
+>     , ( "controlSI", 0x000f )
+>     , ( "controlSO", 0x000e )
+>     , ( "controlSOT", 0x0002 )
+>     , ( "controlSTX", 0x0001 )
+>     , ( "controlSUB", 0x001a )
+>     , ( "controlSYN", 0x0016 )
+>     , ( "controlUS", 0x001f )
+>     , ( "controlVT", 0x000b )
+>     , ( "copyright", 0x00a9 )
+>     , ( "copyrightsans", 0xf8e9 )
+>     , ( "copyrightserif", 0xf6d9 )
+>     , ( "cornerbracketleft", 0x300c )
+>     , ( "cornerbracketlefthalfwidth", 0xff62 )
+>     , ( "cornerbracketleftvertical", 0xfe41 )
+>     , ( "cornerbracketright", 0x300d )
+>     , ( "cornerbracketrighthalfwidth", 0xff63 )
+>     , ( "cornerbracketrightvertical", 0xfe42 )
+>     , ( "corporationsquare", 0x337f )
+>     , ( "cosquare", 0x33c7 )
+>     , ( "coverkgsquare", 0x33c6 )
+>     , ( "cparen", 0x249e )
+>     , ( "cruzeiro", 0x20a2 )
+>     , ( "cstretched", 0x0297 )
+>     , ( "curlyand", 0x22cf )
+>     , ( "curlyor", 0x22ce )
+>     , ( "currency", 0x00a4 )
+>     , ( "cyrBreve", 0xf6d1 )
+>     , ( "cyrFlex", 0xf6d2 )
+>     , ( "cyrbreve", 0xf6d4 )
+>     , ( "cyrflex", 0xf6d5 )
+>     , ( "d", 0x0064 )
+>     , ( "daarmenian", 0x0564 )
+>     , ( "dabengali", 0x09a6 )
+>     , ( "dadarabic", 0x0636 )
+>     , ( "dadeva", 0x0926 )
+>     , ( "dadfinalarabic", 0xfebe )
+>     , ( "dadinitialarabic", 0xfebf )
+>     , ( "dadmedialarabic", 0xfec0 )
+>     , ( "dagesh", 0x05bc )
+>     , ( "dageshhebrew", 0x05bc )
+>     , ( "dagger", 0x2020 )
+>     , ( "daggerdbl", 0x2021 )
+>     , ( "dagujarati", 0x0aa6 )
+>     , ( "dagurmukhi", 0x0a26 )
+>     , ( "dahiragana", 0x3060 )
+>     , ( "dakatakana", 0x30c0 )
+>     , ( "dalarabic", 0x062f )
+>     , ( "dalet", 0x05d3 )
+>     , ( "daletdagesh", 0xfb33 )
+>     , ( "daletdageshhebrew", 0xfb33 )
+>     , ( "dalethatafpatah", 0x05d3 )
+>     , ( "dalethatafpatahhebrew", 0x05d3 )
+>     , ( "dalethatafsegol", 0x05d3 )
+>     , ( "dalethatafsegolhebrew", 0x05d3 )
+>     , ( "dalethebrew", 0x05d3 )
+>     , ( "dalethiriq", 0x05d3 )
+>     , ( "dalethiriqhebrew", 0x05d3 )
+>     , ( "daletholam", 0x05d3 )
+>     , ( "daletholamhebrew", 0x05d3 )
+>     , ( "daletpatah", 0x05d3 )
+>     , ( "daletpatahhebrew", 0x05d3 )
+>     , ( "daletqamats", 0x05d3 )
+>     , ( "daletqamatshebrew", 0x05d3 )
+>     , ( "daletqubuts", 0x05d3 )
+>     , ( "daletqubutshebrew", 0x05d3 )
+>     , ( "daletsegol", 0x05d3 )
+>     , ( "daletsegolhebrew", 0x05d3 )
+>     , ( "daletsheva", 0x05d3 )
+>     , ( "daletshevahebrew", 0x05d3 )
+>     , ( "dalettsere", 0x05d3 )
+>     , ( "dalettserehebrew", 0x05d3 )
+>     , ( "dalfinalarabic", 0xfeaa )
+>     , ( "dammaarabic", 0x064f )
+>     , ( "dammalowarabic", 0x064f )
+>     , ( "dammatanaltonearabic", 0x064c )
+>     , ( "dammatanarabic", 0x064c )
+>     , ( "danda", 0x0964 )
+>     , ( "dargahebrew", 0x05a7 )
+>     , ( "dargalefthebrew", 0x05a7 )
+>     , ( "dasiapneumatacyrilliccmb", 0x0485 )
+>     , ( "dblGrave", 0xf6d3 )
+>     , ( "dblanglebracketleft", 0x300a )
+>     , ( "dblanglebracketleftvertical", 0xfe3d )
+>     , ( "dblanglebracketright", 0x300b )
+>     , ( "dblanglebracketrightvertical", 0xfe3e )
+>     , ( "dblarchinvertedbelowcmb", 0x032b )
+>     , ( "dblarrowleft", 0x21d4 )
+>     , ( "dblarrowright", 0x21d2 )
+>     , ( "dbldanda", 0x0965 )
+>     , ( "dblgrave", 0xf6d6 )
+>     , ( "dblgravecmb", 0x030f )
+>     , ( "dblintegral", 0x222c )
+>     , ( "dbllowline", 0x2017 )
+>     , ( "dbllowlinecmb", 0x0333 )
+>     , ( "dbloverlinecmb", 0x033f )
+>     , ( "dblprimemod", 0x02ba )
+>     , ( "dblverticalbar", 0x2016 )
+>     , ( "dblverticallineabovecmb", 0x030e )
+>     , ( "dbopomofo", 0x3109 )
+>     , ( "dbsquare", 0x33c8 )
+>     , ( "dcaron", 0x010f )
+>     , ( "dcedilla", 0x1e11 )
+>     , ( "dcircle", 0x24d3 )
+>     , ( "dcircumflexbelow", 0x1e13 )
+>     , ( "dcroat", 0x0111 )
+>     , ( "ddabengali", 0x09a1 )
+>     , ( "ddadeva", 0x0921 )
+>     , ( "ddagujarati", 0x0aa1 )
+>     , ( "ddagurmukhi", 0x0a21 )
+>     , ( "ddalarabic", 0x0688 )
+>     , ( "ddalfinalarabic", 0xfb89 )
+>     , ( "dddhadeva", 0x095c )
+>     , ( "ddhabengali", 0x09a2 )
+>     , ( "ddhadeva", 0x0922 )
+>     , ( "ddhagujarati", 0x0aa2 )
+>     , ( "ddhagurmukhi", 0x0a22 )
+>     , ( "ddotaccent", 0x1e0b )
+>     , ( "ddotbelow", 0x1e0d )
+>     , ( "decimalseparatorarabic", 0x066b )
+>     , ( "decimalseparatorpersian", 0x066b )
+>     , ( "decyrillic", 0x0434 )
+>     , ( "degree", 0x00b0 )
+>     , ( "dehihebrew", 0x05ad )
+>     , ( "dehiragana", 0x3067 )
+>     , ( "deicoptic", 0x03ef )
+>     , ( "dekatakana", 0x30c7 )
+>     , ( "deleteleft", 0x232b )
+>     , ( "deleteright", 0x2326 )
+>     , ( "delta", 0x03b4 )
+>     , ( "deltaturned", 0x018d )
+>     , ( "denominatorminusonenumeratorbengali", 0x09f8 )
+>     , ( "dezh", 0x02a4 )
+>     , ( "dhabengali", 0x09a7 )
+>     , ( "dhadeva", 0x0927 )
+>     , ( "dhagujarati", 0x0aa7 )
+>     , ( "dhagurmukhi", 0x0a27 )
+>     , ( "dhook", 0x0257 )
+>     , ( "dialytikatonos", 0x0385 )
+>     , ( "dialytikatonoscmb", 0x0344 )
+>     , ( "diamond", 0x2666 )
+>     , ( "diamondsuitwhite", 0x2662 )
+>     , ( "dieresis", 0x00a8 )
+>     , ( "dieresisacute", 0xf6d7 )
+>     , ( "dieresisbelowcmb", 0x0324 )
+>     , ( "dieresiscmb", 0x0308 )
+>     , ( "dieresisgrave", 0xf6d8 )
+>     , ( "dieresistonos", 0x0385 )
+>     , ( "dihiragana", 0x3062 )
+>     , ( "dikatakana", 0x30c2 )
+>     , ( "dittomark", 0x3003 )
+>     , ( "divide", 0x00f7 )
+>     , ( "divides", 0x2223 )
+>     , ( "divisionslash", 0x2215 )
+>     , ( "djecyrillic", 0x0452 )
+>     , ( "dkshade", 0x2593 )
+>     , ( "dlinebelow", 0x1e0f )
+>     , ( "dlsquare", 0x3397 )
+>     , ( "dmacron", 0x0111 )
+>     , ( "dmonospace", 0xff44 )
+>     , ( "dnblock", 0x2584 )
+>     , ( "dochadathai", 0x0e0e )
+>     , ( "dodekthai", 0x0e14 )
+>     , ( "dohiragana", 0x3069 )
+>     , ( "dokatakana", 0x30c9 )
+>     , ( "dollar", 0x0024 )
+>     , ( "dollarinferior", 0xf6e3 )
+>     , ( "dollarmonospace", 0xff04 )
+>     , ( "dollaroldstyle", 0xf724 )
+>     , ( "dollarsmall", 0xfe69 )
+>     , ( "dollarsuperior", 0xf6e4 )
+>     , ( "dong", 0x20ab )
+>     , ( "dorusquare", 0x3326 )
+>     , ( "dotaccent", 0x02d9 )
+>     , ( "dotaccentcmb", 0x0307 )
+>     , ( "dotbelowcmb", 0x0323 )
+>     , ( "dotbelowcomb", 0x0323 )
+>     , ( "dotkatakana", 0x30fb )
+>     , ( "dotlessi", 0x0131 )
+>     , ( "dotlessj", 0xf6be )
+>     , ( "dotlessjstrokehook", 0x0284 )
+>     , ( "dotmath", 0x22c5 )
+>     , ( "dottedcircle", 0x25cc )
+>     , ( "doubleyodpatah", 0xfb1f )
+>     , ( "doubleyodpatahhebrew", 0xfb1f )
+>     , ( "downtackbelowcmb", 0x031e )
+>     , ( "downtackmod", 0x02d5 )
+>     , ( "dparen", 0x249f )
+>     , ( "dsuperior", 0xf6eb )
+>     , ( "dtail", 0x0256 )
+>     , ( "dtopbar", 0x018c )
+>     , ( "duhiragana", 0x3065 )
+>     , ( "dukatakana", 0x30c5 )
+>     , ( "dz", 0x01f3 )
+>     , ( "dzaltone", 0x02a3 )
+>     , ( "dzcaron", 0x01c6 )
+>     , ( "dzcurl", 0x02a5 )
+>     , ( "dzeabkhasiancyrillic", 0x04e1 )
+>     , ( "dzecyrillic", 0x0455 )
+>     , ( "dzhecyrillic", 0x045f )
+>     , ( "e", 0x0065 )
+>     , ( "eacute", 0x00e9 )
+>     , ( "earth", 0x2641 )
+>     , ( "ebengali", 0x098f )
+>     , ( "ebopomofo", 0x311c )
+>     , ( "ebreve", 0x0115 )
+>     , ( "ecandradeva", 0x090d )
+>     , ( "ecandragujarati", 0x0a8d )
+>     , ( "ecandravowelsigndeva", 0x0945 )
+>     , ( "ecandravowelsigngujarati", 0x0ac5 )
+>     , ( "ecaron", 0x011b )
+>     , ( "ecedillabreve", 0x1e1d )
+>     , ( "echarmenian", 0x0565 )
+>     , ( "echyiwnarmenian", 0x0587 )
+>     , ( "ecircle", 0x24d4 )
+>     , ( "ecircumflex", 0x00ea )
+>     , ( "ecircumflexacute", 0x1ebf )
+>     , ( "ecircumflexbelow", 0x1e19 )
+>     , ( "ecircumflexdotbelow", 0x1ec7 )
+>     , ( "ecircumflexgrave", 0x1ec1 )
+>     , ( "ecircumflexhookabove", 0x1ec3 )
+>     , ( "ecircumflextilde", 0x1ec5 )
+>     , ( "ecyrillic", 0x0454 )
+>     , ( "edblgrave", 0x0205 )
+>     , ( "edeva", 0x090f )
+>     , ( "edieresis", 0x00eb )
+>     , ( "edot", 0x0117 )
+>     , ( "edotaccent", 0x0117 )
+>     , ( "edotbelow", 0x1eb9 )
+>     , ( "eegurmukhi", 0x0a0f )
+>     , ( "eematragurmukhi", 0x0a47 )
+>     , ( "efcyrillic", 0x0444 )
+>     , ( "egrave", 0x00e8 )
+>     , ( "egujarati", 0x0a8f )
+>     , ( "eharmenian", 0x0567 )
+>     , ( "ehbopomofo", 0x311d )
+>     , ( "ehiragana", 0x3048 )
+>     , ( "ehookabove", 0x1ebb )
+>     , ( "eibopomofo", 0x311f )
+>     , ( "eight", 0x0038 )
+>     , ( "eightarabic", 0x0668 )
+>     , ( "eightbengali", 0x09ee )
+>     , ( "eightcircle", 0x2467 )
+>     , ( "eightcircleinversesansserif", 0x2791 )
+>     , ( "eightdeva", 0x096e )
+>     , ( "eighteencircle", 0x2471 )
+>     , ( "eighteenparen", 0x2485 )
+>     , ( "eighteenperiod", 0x2499 )
+>     , ( "eightgujarati", 0x0aee )
+>     , ( "eightgurmukhi", 0x0a6e )
+>     , ( "eighthackarabic", 0x0668 )
+>     , ( "eighthangzhou", 0x3028 )
+>     , ( "eighthnotebeamed", 0x266b )
+>     , ( "eightideographicparen", 0x3227 )
+>     , ( "eightinferior", 0x2088 )
+>     , ( "eightmonospace", 0xff18 )
+>     , ( "eightoldstyle", 0xf738 )
+>     , ( "eightparen", 0x247b )
+>     , ( "eightperiod", 0x248f )
+>     , ( "eightpersian", 0x06f8 )
+>     , ( "eightroman", 0x2177 )
+>     , ( "eightsuperior", 0x2078 )
+>     , ( "eightthai", 0x0e58 )
+>     , ( "einvertedbreve", 0x0207 )
+>     , ( "eiotifiedcyrillic", 0x0465 )
+>     , ( "ekatakana", 0x30a8 )
+>     , ( "ekatakanahalfwidth", 0xff74 )
+>     , ( "ekonkargurmukhi", 0x0a74 )
+>     , ( "ekorean", 0x3154 )
+>     , ( "elcyrillic", 0x043b )
+>     , ( "element", 0x2208 )
+>     , ( "elevencircle", 0x246a )
+>     , ( "elevenparen", 0x247e )
+>     , ( "elevenperiod", 0x2492 )
+>     , ( "elevenroman", 0x217a )
+>     , ( "ellipsis", 0x2026 )
+>     , ( "ellipsisvertical", 0x22ee )
+>     , ( "emacron", 0x0113 )
+>     , ( "emacronacute", 0x1e17 )
+>     , ( "emacrongrave", 0x1e15 )
+>     , ( "emcyrillic", 0x043c )
+>     , ( "emdash", 0x2014 )
+>     , ( "emdashvertical", 0xfe31 )
+>     , ( "emonospace", 0xff45 )
+>     , ( "emphasismarkarmenian", 0x055b )
+>     , ( "emptyset", 0x2205 )
+>     , ( "enbopomofo", 0x3123 )
+>     , ( "encyrillic", 0x043d )
+>     , ( "endash", 0x2013 )
+>     , ( "endashvertical", 0xfe32 )
+>     , ( "endescendercyrillic", 0x04a3 )
+>     , ( "eng", 0x014b )
+>     , ( "engbopomofo", 0x3125 )
+>     , ( "enghecyrillic", 0x04a5 )
+>     , ( "enhookcyrillic", 0x04c8 )
+>     , ( "enspace", 0x2002 )
+>     , ( "eogonek", 0x0119 )
+>     , ( "eokorean", 0x3153 )
+>     , ( "eopen", 0x025b )
+>     , ( "eopenclosed", 0x029a )
+>     , ( "eopenreversed", 0x025c )
+>     , ( "eopenreversedclosed", 0x025e )
+>     , ( "eopenreversedhook", 0x025d )
+>     , ( "eparen", 0x24a0 )
+>     , ( "epsilon", 0x03b5 )
+>     , ( "epsilontonos", 0x03ad )
+>     , ( "equal", 0x003d )
+>     , ( "equalmonospace", 0xff1d )
+>     , ( "equalsmall", 0xfe66 )
+>     , ( "equalsuperior", 0x207c )
+>     , ( "equivalence", 0x2261 )
+>     , ( "erbopomofo", 0x3126 )
+>     , ( "ercyrillic", 0x0440 )
+>     , ( "ereversed", 0x0258 )
+>     , ( "ereversedcyrillic", 0x044d )
+>     , ( "escyrillic", 0x0441 )
+>     , ( "esdescendercyrillic", 0x04ab )
+>     , ( "esh", 0x0283 )
+>     , ( "eshcurl", 0x0286 )
+>     , ( "eshortdeva", 0x090e )
+>     , ( "eshortvowelsigndeva", 0x0946 )
+>     , ( "eshreversedloop", 0x01aa )
+>     , ( "eshsquatreversed", 0x0285 )
+>     , ( "esmallhiragana", 0x3047 )
+>     , ( "esmallkatakana", 0x30a7 )
+>     , ( "esmallkatakanahalfwidth", 0xff6a )
+>     , ( "estimated", 0x212e )
+>     , ( "esuperior", 0xf6ec )
+>     , ( "eta", 0x03b7 )
+>     , ( "etarmenian", 0x0568 )
+>     , ( "etatonos", 0x03ae )
+>     , ( "eth", 0x00f0 )
+>     , ( "etilde", 0x1ebd )
+>     , ( "etildebelow", 0x1e1b )
+>     , ( "etnahtafoukhhebrew", 0x0591 )
+>     , ( "etnahtafoukhlefthebrew", 0x0591 )
+>     , ( "etnahtahebrew", 0x0591 )
+>     , ( "etnahtalefthebrew", 0x0591 )
+>     , ( "eturned", 0x01dd )
+>     , ( "eukorean", 0x3161 )
+>     , ( "euro", 0x20ac )
+>     , ( "evowelsignbengali", 0x09c7 )
+>     , ( "evowelsigndeva", 0x0947 )
+>     , ( "evowelsigngujarati", 0x0ac7 )
+>     , ( "exclam", 0x0021 )
+>     , ( "exclamarmenian", 0x055c )
+>     , ( "exclamdbl", 0x203c )
+>     , ( "exclamdown", 0x00a1 )
+>     , ( "exclamdownsmall", 0xf7a1 )
+>     , ( "exclammonospace", 0xff01 )
+>     , ( "exclamsmall", 0xf721 )
+>     , ( "existential", 0x2203 )
+>     , ( "ezh", 0x0292 )
+>     , ( "ezhcaron", 0x01ef )
+>     , ( "ezhcurl", 0x0293 )
+>     , ( "ezhreversed", 0x01b9 )
+>     , ( "ezhtail", 0x01ba )
+>     , ( "f", 0x0066 )
+>     , ( "fadeva", 0x095e )
+>     , ( "fagurmukhi", 0x0a5e )
+>     , ( "fahrenheit", 0x2109 )
+>     , ( "fathaarabic", 0x064e )
+>     , ( "fathalowarabic", 0x064e )
+>     , ( "fathatanarabic", 0x064b )
+>     , ( "fbopomofo", 0x3108 )
+>     , ( "fcircle", 0x24d5 )
+>     , ( "fdotaccent", 0x1e1f )
+>     , ( "feharabic", 0x0641 )
+>     , ( "feharmenian", 0x0586 )
+>     , ( "fehfinalarabic", 0xfed2 )
+>     , ( "fehinitialarabic", 0xfed3 )
+>     , ( "fehmedialarabic", 0xfed4 )
+>     , ( "feicoptic", 0x03e5 )
+>     , ( "female", 0x2640 )
+>     , ( "ff", 0xfb00 )
+>     , ( "ffi", 0xfb03 )
+>     , ( "ffl", 0xfb04 )
+>     , ( "fi", 0xfb01 )
+>     , ( "fifteencircle", 0x246e )
+>     , ( "fifteenparen", 0x2482 )
+>     , ( "fifteenperiod", 0x2496 )
+>     , ( "figuredash", 0x2012 )
+>     , ( "filledbox", 0x25a0 )
+>     , ( "filledrect", 0x25ac )
+>     , ( "finalkaf", 0x05da )
+>     , ( "finalkafdagesh", 0xfb3a )
+>     , ( "finalkafdageshhebrew", 0xfb3a )
+>     , ( "finalkafhebrew", 0x05da )
+>     , ( "finalkafqamats", 0x05da )
+>     , ( "finalkafqamatshebrew", 0x05da )
+>     , ( "finalkafsheva", 0x05da )
+>     , ( "finalkafshevahebrew", 0x05da )
+>     , ( "finalmem", 0x05dd )
+>     , ( "finalmemhebrew", 0x05dd )
+>     , ( "finalnun", 0x05df )
+>     , ( "finalnunhebrew", 0x05df )
+>     , ( "finalpe", 0x05e3 )
+>     , ( "finalpehebrew", 0x05e3 )
+>     , ( "finaltsadi", 0x05e5 )
+>     , ( "finaltsadihebrew", 0x05e5 )
+>     , ( "firsttonechinese", 0x02c9 )
+>     , ( "fisheye", 0x25c9 )
+>     , ( "fitacyrillic", 0x0473 )
+>     , ( "five", 0x0035 )
+>     , ( "fivearabic", 0x0665 )
+>     , ( "fivebengali", 0x09eb )
+>     , ( "fivecircle", 0x2464 )
+>     , ( "fivecircleinversesansserif", 0x278e )
+>     , ( "fivedeva", 0x096b )
+>     , ( "fiveeighths", 0x215d )
+>     , ( "fivegujarati", 0x0aeb )
+>     , ( "fivegurmukhi", 0x0a6b )
+>     , ( "fivehackarabic", 0x0665 )
+>     , ( "fivehangzhou", 0x3025 )
+>     , ( "fiveideographicparen", 0x3224 )
+>     , ( "fiveinferior", 0x2085 )
+>     , ( "fivemonospace", 0xff15 )
+>     , ( "fiveoldstyle", 0xf735 )
+>     , ( "fiveparen", 0x2478 )
+>     , ( "fiveperiod", 0x248c )
+>     , ( "fivepersian", 0x06f5 )
+>     , ( "fiveroman", 0x2174 )
+>     , ( "fivesuperior", 0x2075 )
+>     , ( "fivethai", 0x0e55 )
+>     , ( "fl", 0xfb02 )
+>     , ( "florin", 0x0192 )
+>     , ( "fmonospace", 0xff46 )
+>     , ( "fmsquare", 0x3399 )
+>     , ( "fofanthai", 0x0e1f )
+>     , ( "fofathai", 0x0e1d )
+>     , ( "fongmanthai", 0x0e4f )
+>     , ( "forall", 0x2200 )
+>     , ( "four", 0x0034 )
+>     , ( "fourarabic", 0x0664 )
+>     , ( "fourbengali", 0x09ea )
+>     , ( "fourcircle", 0x2463 )
+>     , ( "fourcircleinversesansserif", 0x278d )
+>     , ( "fourdeva", 0x096a )
+>     , ( "fourgujarati", 0x0aea )
+>     , ( "fourgurmukhi", 0x0a6a )
+>     , ( "fourhackarabic", 0x0664 )
+>     , ( "fourhangzhou", 0x3024 )
+>     , ( "fourideographicparen", 0x3223 )
+>     , ( "fourinferior", 0x2084 )
+>     , ( "fourmonospace", 0xff14 )
+>     , ( "fournumeratorbengali", 0x09f7 )
+>     , ( "fouroldstyle", 0xf734 )
+>     , ( "fourparen", 0x2477 )
+>     , ( "fourperiod", 0x248b )
+>     , ( "fourpersian", 0x06f4 )
+>     , ( "fourroman", 0x2173 )
+>     , ( "foursuperior", 0x2074 )
+>     , ( "fourteencircle", 0x246d )
+>     , ( "fourteenparen", 0x2481 )
+>     , ( "fourteenperiod", 0x2495 )
+>     , ( "fourthai", 0x0e54 )
+>     , ( "fourthtonechinese", 0x02cb )
+>     , ( "fparen", 0x24a1 )
+>     , ( "fraction", 0x2044 )
+>     , ( "franc", 0x20a3 )
+>     , ( "g", 0x0067 )
+>     , ( "gabengali", 0x0997 )
+>     , ( "gacute", 0x01f5 )
+>     , ( "gadeva", 0x0917 )
+>     , ( "gafarabic", 0x06af )
+>     , ( "gaffinalarabic", 0xfb93 )
+>     , ( "gafinitialarabic", 0xfb94 )
+>     , ( "gafmedialarabic", 0xfb95 )
+>     , ( "gagujarati", 0x0a97 )
+>     , ( "gagurmukhi", 0x0a17 )
+>     , ( "gahiragana", 0x304c )
+>     , ( "gakatakana", 0x30ac )
+>     , ( "gamma", 0x03b3 )
+>     , ( "gammalatinsmall", 0x0263 )
+>     , ( "gammasuperior", 0x02e0 )
+>     , ( "gangiacoptic", 0x03eb )
+>     , ( "gbopomofo", 0x310d )
+>     , ( "gbreve", 0x011f )
+>     , ( "gcaron", 0x01e7 )
+>     , ( "gcedilla", 0x0123 )
+>     , ( "gcircle", 0x24d6 )
+>     , ( "gcircumflex", 0x011d )
+>     , ( "gcommaaccent", 0x0123 )
+>     , ( "gdot", 0x0121 )
+>     , ( "gdotaccent", 0x0121 )
+>     , ( "gecyrillic", 0x0433 )
+>     , ( "gehiragana", 0x3052 )
+>     , ( "gekatakana", 0x30b2 )
+>     , ( "geometricallyequal", 0x2251 )
+>     , ( "gereshaccenthebrew", 0x059c )
+>     , ( "gereshhebrew", 0x05f3 )
+>     , ( "gereshmuqdamhebrew", 0x059d )
+>     , ( "germandbls", 0x00df )
+>     , ( "gershayimaccenthebrew", 0x059e )
+>     , ( "gershayimhebrew", 0x05f4 )
+>     , ( "getamark", 0x3013 )
+>     , ( "ghabengali", 0x0998 )
+>     , ( "ghadarmenian", 0x0572 )
+>     , ( "ghadeva", 0x0918 )
+>     , ( "ghagujarati", 0x0a98 )
+>     , ( "ghagurmukhi", 0x0a18 )
+>     , ( "ghainarabic", 0x063a )
+>     , ( "ghainfinalarabic", 0xfece )
+>     , ( "ghaininitialarabic", 0xfecf )
+>     , ( "ghainmedialarabic", 0xfed0 )
+>     , ( "ghemiddlehookcyrillic", 0x0495 )
+>     , ( "ghestrokecyrillic", 0x0493 )
+>     , ( "gheupturncyrillic", 0x0491 )
+>     , ( "ghhadeva", 0x095a )
+>     , ( "ghhagurmukhi", 0x0a5a )
+>     , ( "ghook", 0x0260 )
+>     , ( "ghzsquare", 0x3393 )
+>     , ( "gihiragana", 0x304e )
+>     , ( "gikatakana", 0x30ae )
+>     , ( "gimarmenian", 0x0563 )
+>     , ( "gimel", 0x05d2 )
+>     , ( "gimeldagesh", 0xfb32 )
+>     , ( "gimeldageshhebrew", 0xfb32 )
+>     , ( "gimelhebrew", 0x05d2 )
+>     , ( "gjecyrillic", 0x0453 )
+>     , ( "glottalinvertedstroke", 0x01be )
+>     , ( "glottalstop", 0x0294 )
+>     , ( "glottalstopinverted", 0x0296 )
+>     , ( "glottalstopmod", 0x02c0 )
+>     , ( "glottalstopreversed", 0x0295 )
+>     , ( "glottalstopreversedmod", 0x02c1 )
+>     , ( "glottalstopreversedsuperior", 0x02e4 )
+>     , ( "glottalstopstroke", 0x02a1 )
+>     , ( "glottalstopstrokereversed", 0x02a2 )
+>     , ( "gmacron", 0x1e21 )
+>     , ( "gmonospace", 0xff47 )
+>     , ( "gohiragana", 0x3054 )
+>     , ( "gokatakana", 0x30b4 )
+>     , ( "gparen", 0x24a2 )
+>     , ( "gpasquare", 0x33ac )
+>     , ( "gradient", 0x2207 )
+>     , ( "grave", 0x0060 )
+>     , ( "gravebelowcmb", 0x0316 )
+>     , ( "gravecmb", 0x0300 )
+>     , ( "gravecomb", 0x0300 )
+>     , ( "gravedeva", 0x0953 )
+>     , ( "gravelowmod", 0x02ce )
+>     , ( "gravemonospace", 0xff40 )
+>     , ( "gravetonecmb", 0x0340 )
+>     , ( "greater", 0x003e )
+>     , ( "greaterequal", 0x2265 )
+>     , ( "greaterequalorless", 0x22db )
+>     , ( "greatermonospace", 0xff1e )
+>     , ( "greaterorequivalent", 0x2273 )
+>     , ( "greaterorless", 0x2277 )
+>     , ( "greateroverequal", 0x2267 )
+>     , ( "greatersmall", 0xfe65 )
+>     , ( "gscript", 0x0261 )
+>     , ( "gstroke", 0x01e5 )
+>     , ( "guhiragana", 0x3050 )
+>     , ( "guillemotleft", 0x00ab )
+>     , ( "guillemotright", 0x00bb )
+>     , ( "guilsinglleft", 0x2039 )
+>     , ( "guilsinglright", 0x203a )
+>     , ( "gukatakana", 0x30b0 )
+>     , ( "guramusquare", 0x3318 )
+>     , ( "gysquare", 0x33c9 )
+>     , ( "h", 0x0068 )
+>     , ( "haabkhasiancyrillic", 0x04a9 )
+>     , ( "haaltonearabic", 0x06c1 )
+>     , ( "habengali", 0x09b9 )
+>     , ( "hadescendercyrillic", 0x04b3 )
+>     , ( "hadeva", 0x0939 )
+>     , ( "hagujarati", 0x0ab9 )
+>     , ( "hagurmukhi", 0x0a39 )
+>     , ( "haharabic", 0x062d )
+>     , ( "hahfinalarabic", 0xfea2 )
+>     , ( "hahinitialarabic", 0xfea3 )
+>     , ( "hahiragana", 0x306f )
+>     , ( "hahmedialarabic", 0xfea4 )
+>     , ( "haitusquare", 0x332a )
+>     , ( "hakatakana", 0x30cf )
+>     , ( "hakatakanahalfwidth", 0xff8a )
+>     , ( "halantgurmukhi", 0x0a4d )
+>     , ( "hamzaarabic", 0x0621 )
+>     , ( "hamzadammaarabic", 0x0621 )
+>     , ( "hamzadammatanarabic", 0x0621 )
+>     , ( "hamzafathaarabic", 0x0621 )
+>     , ( "hamzafathatanarabic", 0x0621 )
+>     , ( "hamzalowarabic", 0x0621 )
+>     , ( "hamzalowkasraarabic", 0x0621 )
+>     , ( "hamzalowkasratanarabic", 0x0621 )
+>     , ( "hamzasukunarabic", 0x0621 )
+>     , ( "hangulfiller", 0x3164 )
+>     , ( "hardsigncyrillic", 0x044a )
+>     , ( "harpoonleftbarbup", 0x21bc )
+>     , ( "harpoonrightbarbup", 0x21c0 )
+>     , ( "hasquare", 0x33ca )
+>     , ( "hatafpatah", 0x05b2 )
+>     , ( "hatafpatah16", 0x05b2 )
+>     , ( "hatafpatah23", 0x05b2 )
+>     , ( "hatafpatah2f", 0x05b2 )
+>     , ( "hatafpatahhebrew", 0x05b2 )
+>     , ( "hatafpatahnarrowhebrew", 0x05b2 )
+>     , ( "hatafpatahquarterhebrew", 0x05b2 )
+>     , ( "hatafpatahwidehebrew", 0x05b2 )
+>     , ( "hatafqamats", 0x05b3 )
+>     , ( "hatafqamats1b", 0x05b3 )
+>     , ( "hatafqamats28", 0x05b3 )
+>     , ( "hatafqamats34", 0x05b3 )
+>     , ( "hatafqamatshebrew", 0x05b3 )
+>     , ( "hatafqamatsnarrowhebrew", 0x05b3 )
+>     , ( "hatafqamatsquarterhebrew", 0x05b3 )
+>     , ( "hatafqamatswidehebrew", 0x05b3 )
+>     , ( "hatafsegol", 0x05b1 )
+>     , ( "hatafsegol17", 0x05b1 )
+>     , ( "hatafsegol24", 0x05b1 )
+>     , ( "hatafsegol30", 0x05b1 )
+>     , ( "hatafsegolhebrew", 0x05b1 )
+>     , ( "hatafsegolnarrowhebrew", 0x05b1 )
+>     , ( "hatafsegolquarterhebrew", 0x05b1 )
+>     , ( "hatafsegolwidehebrew", 0x05b1 )
+>     , ( "hbar", 0x0127 )
+>     , ( "hbopomofo", 0x310f )
+>     , ( "hbrevebelow", 0x1e2b )
+>     , ( "hcedilla", 0x1e29 )
+>     , ( "hcircle", 0x24d7 )
+>     , ( "hcircumflex", 0x0125 )
+>     , ( "hdieresis", 0x1e27 )
+>     , ( "hdotaccent", 0x1e23 )
+>     , ( "hdotbelow", 0x1e25 )
+>     , ( "he", 0x05d4 )
+>     , ( "heart", 0x2665 )
+>     , ( "heartsuitblack", 0x2665 )
+>     , ( "heartsuitwhite", 0x2661 )
+>     , ( "hedagesh", 0xfb34 )
+>     , ( "hedageshhebrew", 0xfb34 )
+>     , ( "hehaltonearabic", 0x06c1 )
+>     , ( "heharabic", 0x0647 )
+>     , ( "hehebrew", 0x05d4 )
+>     , ( "hehfinalaltonearabic", 0xfba7 )
+>     , ( "hehfinalalttwoarabic", 0xfeea )
+>     , ( "hehfinalarabic", 0xfeea )
+>     , ( "hehhamzaabovefinalarabic", 0xfba5 )
+>     , ( "hehhamzaaboveisolatedarabic", 0xfba4 )
+>     , ( "hehinitialaltonearabic", 0xfba8 )
+>     , ( "hehinitialarabic", 0xfeeb )
+>     , ( "hehiragana", 0x3078 )
+>     , ( "hehmedialaltonearabic", 0xfba9 )
+>     , ( "hehmedialarabic", 0xfeec )
+>     , ( "heiseierasquare", 0x337b )
+>     , ( "hekatakana", 0x30d8 )
+>     , ( "hekatakanahalfwidth", 0xff8d )
+>     , ( "hekutaarusquare", 0x3336 )
+>     , ( "henghook", 0x0267 )
+>     , ( "herutusquare", 0x3339 )
+>     , ( "het", 0x05d7 )
+>     , ( "hethebrew", 0x05d7 )
+>     , ( "hhook", 0x0266 )
+>     , ( "hhooksuperior", 0x02b1 )
+>     , ( "hieuhacirclekorean", 0x327b )
+>     , ( "hieuhaparenkorean", 0x321b )
+>     , ( "hieuhcirclekorean", 0x326d )
+>     , ( "hieuhkorean", 0x314e )
+>     , ( "hieuhparenkorean", 0x320d )
+>     , ( "hihiragana", 0x3072 )
+>     , ( "hikatakana", 0x30d2 )
+>     , ( "hikatakanahalfwidth", 0xff8b )
+>     , ( "hiriq", 0x05b4 )
+>     , ( "hiriq14", 0x05b4 )
+>     , ( "hiriq21", 0x05b4 )
+>     , ( "hiriq2d", 0x05b4 )
+>     , ( "hiriqhebrew", 0x05b4 )
+>     , ( "hiriqnarrowhebrew", 0x05b4 )
+>     , ( "hiriqquarterhebrew", 0x05b4 )
+>     , ( "hiriqwidehebrew", 0x05b4 )
+>     , ( "hlinebelow", 0x1e96 )
+>     , ( "hmonospace", 0xff48 )
+>     , ( "hoarmenian", 0x0570 )
+>     , ( "hohipthai", 0x0e2b )
+>     , ( "hohiragana", 0x307b )
+>     , ( "hokatakana", 0x30db )
+>     , ( "hokatakanahalfwidth", 0xff8e )
+>     , ( "holam", 0x05b9 )
+>     , ( "holam19", 0x05b9 )
+>     , ( "holam26", 0x05b9 )
+>     , ( "holam32", 0x05b9 )
+>     , ( "holamhebrew", 0x05b9 )
+>     , ( "holamnarrowhebrew", 0x05b9 )
+>     , ( "holamquarterhebrew", 0x05b9 )
+>     , ( "holamwidehebrew", 0x05b9 )
+>     , ( "honokhukthai", 0x0e2e )
+>     , ( "hookabovecomb", 0x0309 )
+>     , ( "hookcmb", 0x0309 )
+>     , ( "hookpalatalizedbelowcmb", 0x0321 )
+>     , ( "hookretroflexbelowcmb", 0x0322 )
+>     , ( "hoonsquare", 0x3342 )
+>     , ( "horicoptic", 0x03e9 )
+>     , ( "horizontalbar", 0x2015 )
+>     , ( "horncmb", 0x031b )
+>     , ( "hotsprings", 0x2668 )
+>     , ( "house", 0x2302 )
+>     , ( "hparen", 0x24a3 )
+>     , ( "hsuperior", 0x02b0 )
+>     , ( "hturned", 0x0265 )
+>     , ( "huhiragana", 0x3075 )
+>     , ( "huiitosquare", 0x3333 )
+>     , ( "hukatakana", 0x30d5 )
+>     , ( "hukatakanahalfwidth", 0xff8c )
+>     , ( "hungarumlaut", 0x02dd )
+>     , ( "hungarumlautcmb", 0x030b )
+>     , ( "hv", 0x0195 )
+>     , ( "hyphen", 0x002d )
+>     , ( "hypheninferior", 0xf6e5 )
+>     , ( "hyphenmonospace", 0xff0d )
+>     , ( "hyphensmall", 0xfe63 )
+>     , ( "hyphensuperior", 0xf6e6 )
+>     , ( "hyphentwo", 0x2010 )
+>     , ( "i", 0x0069 )
+>     , ( "iacute", 0x00ed )
+>     , ( "iacyrillic", 0x044f )
+>     , ( "ibengali", 0x0987 )
+>     , ( "ibopomofo", 0x3127 )
+>     , ( "ibreve", 0x012d )
+>     , ( "icaron", 0x01d0 )
+>     , ( "icircle", 0x24d8 )
+>     , ( "icircumflex", 0x00ee )
+>     , ( "icyrillic", 0x0456 )
+>     , ( "idblgrave", 0x0209 )
+>     , ( "ideographearthcircle", 0x328f )
+>     , ( "ideographfirecircle", 0x328b )
+>     , ( "ideographicallianceparen", 0x323f )
+>     , ( "ideographiccallparen", 0x323a )
+>     , ( "ideographiccentrecircle", 0x32a5 )
+>     , ( "ideographicclose", 0x3006 )
+>     , ( "ideographiccomma", 0x3001 )
+>     , ( "ideographiccommaleft", 0xff64 )
+>     , ( "ideographiccongratulationparen", 0x3237 )
+>     , ( "ideographiccorrectcircle", 0x32a3 )
+>     , ( "ideographicearthparen", 0x322f )
+>     , ( "ideographicenterpriseparen", 0x323d )
+>     , ( "ideographicexcellentcircle", 0x329d )
+>     , ( "ideographicfestivalparen", 0x3240 )
+>     , ( "ideographicfinancialcircle", 0x3296 )
+>     , ( "ideographicfinancialparen", 0x3236 )
+>     , ( "ideographicfireparen", 0x322b )
+>     , ( "ideographichaveparen", 0x3232 )
+>     , ( "ideographichighcircle", 0x32a4 )
+>     , ( "ideographiciterationmark", 0x3005 )
+>     , ( "ideographiclaborcircle", 0x3298 )
+>     , ( "ideographiclaborparen", 0x3238 )
+>     , ( "ideographicleftcircle", 0x32a7 )
+>     , ( "ideographiclowcircle", 0x32a6 )
+>     , ( "ideographicmedicinecircle", 0x32a9 )
+>     , ( "ideographicmetalparen", 0x322e )
+>     , ( "ideographicmoonparen", 0x322a )
+>     , ( "ideographicnameparen", 0x3234 )
+>     , ( "ideographicperiod", 0x3002 )
+>     , ( "ideographicprintcircle", 0x329e )
+>     , ( "ideographicreachparen", 0x3243 )
+>     , ( "ideographicrepresentparen", 0x3239 )
+>     , ( "ideographicresourceparen", 0x323e )
+>     , ( "ideographicrightcircle", 0x32a8 )
+>     , ( "ideographicsecretcircle", 0x3299 )
+>     , ( "ideographicselfparen", 0x3242 )
+>     , ( "ideographicsocietyparen", 0x3233 )
+>     , ( "ideographicspace", 0x3000 )
+>     , ( "ideographicspecialparen", 0x3235 )
+>     , ( "ideographicstockparen", 0x3231 )
+>     , ( "ideographicstudyparen", 0x323b )
+>     , ( "ideographicsunparen", 0x3230 )
+>     , ( "ideographicsuperviseparen", 0x323c )
+>     , ( "ideographicwaterparen", 0x322c )
+>     , ( "ideographicwoodparen", 0x322d )
+>     , ( "ideographiczero", 0x3007 )
+>     , ( "ideographmetalcircle", 0x328e )
+>     , ( "ideographmooncircle", 0x328a )
+>     , ( "ideographnamecircle", 0x3294 )
+>     , ( "ideographsuncircle", 0x3290 )
+>     , ( "ideographwatercircle", 0x328c )
+>     , ( "ideographwoodcircle", 0x328d )
+>     , ( "ideva", 0x0907 )
+>     , ( "idieresis", 0x00ef )
+>     , ( "idieresisacute", 0x1e2f )
+>     , ( "idieresiscyrillic", 0x04e5 )
+>     , ( "idotbelow", 0x1ecb )
+>     , ( "iebrevecyrillic", 0x04d7 )
+>     , ( "iecyrillic", 0x0435 )
+>     , ( "ieungacirclekorean", 0x3275 )
+>     , ( "ieungaparenkorean", 0x3215 )
+>     , ( "ieungcirclekorean", 0x3267 )
+>     , ( "ieungkorean", 0x3147 )
+>     , ( "ieungparenkorean", 0x3207 )
+>     , ( "igrave", 0x00ec )
+>     , ( "igujarati", 0x0a87 )
+>     , ( "igurmukhi", 0x0a07 )
+>     , ( "ihiragana", 0x3044 )
+>     , ( "ihookabove", 0x1ec9 )
+>     , ( "iibengali", 0x0988 )
+>     , ( "iicyrillic", 0x0438 )
+>     , ( "iideva", 0x0908 )
+>     , ( "iigujarati", 0x0a88 )
+>     , ( "iigurmukhi", 0x0a08 )
+>     , ( "iimatragurmukhi", 0x0a40 )
+>     , ( "iinvertedbreve", 0x020b )
+>     , ( "iishortcyrillic", 0x0439 )
+>     , ( "iivowelsignbengali", 0x09c0 )
+>     , ( "iivowelsigndeva", 0x0940 )
+>     , ( "iivowelsigngujarati", 0x0ac0 )
+>     , ( "ij", 0x0133 )
+>     , ( "ikatakana", 0x30a4 )
+>     , ( "ikatakanahalfwidth", 0xff72 )
+>     , ( "ikorean", 0x3163 )
+>     , ( "ilde", 0x02dc )
+>     , ( "iluyhebrew", 0x05ac )
+>     , ( "imacron", 0x012b )
+>     , ( "imacroncyrillic", 0x04e3 )
+>     , ( "imageorapproximatelyequal", 0x2253 )
+>     , ( "imatragurmukhi", 0x0a3f )
+>     , ( "imonospace", 0xff49 )
+>     , ( "increment", 0x2206 )
+>     , ( "infinity", 0x221e )
+>     , ( "iniarmenian", 0x056b )
+>     , ( "integral", 0x222b )
+>     , ( "integralbottom", 0x2321 )
+>     , ( "integralbt", 0x2321 )
+>     , ( "integralex", 0xf8f5 )
+>     , ( "integraltop", 0x2320 )
+>     , ( "integraltp", 0x2320 )
+>     , ( "intersection", 0x2229 )
+>     , ( "intisquare", 0x3305 )
+>     , ( "invbullet", 0x25d8 )
+>     , ( "invcircle", 0x25d9 )
+>     , ( "invsmileface", 0x263b )
+>     , ( "iocyrillic", 0x0451 )
+>     , ( "iogonek", 0x012f )
+>     , ( "iota", 0x03b9 )
+>     , ( "iotadieresis", 0x03ca )
+>     , ( "iotadieresistonos", 0x0390 )
+>     , ( "iotalatin", 0x0269 )
+>     , ( "iotatonos", 0x03af )
+>     , ( "iparen", 0x24a4 )
+>     , ( "irigurmukhi", 0x0a72 )
+>     , ( "ismallhiragana", 0x3043 )
+>     , ( "ismallkatakana", 0x30a3 )
+>     , ( "ismallkatakanahalfwidth", 0xff68 )
+>     , ( "issharbengali", 0x09fa )
+>     , ( "istroke", 0x0268 )
+>     , ( "isuperior", 0xf6ed )
+>     , ( "iterationhiragana", 0x309d )
+>     , ( "iterationkatakana", 0x30fd )
+>     , ( "itilde", 0x0129 )
+>     , ( "itildebelow", 0x1e2d )
+>     , ( "iubopomofo", 0x3129 )
+>     , ( "iucyrillic", 0x044e )
+>     , ( "ivowelsignbengali", 0x09bf )
+>     , ( "ivowelsigndeva", 0x093f )
+>     , ( "ivowelsigngujarati", 0x0abf )
+>     , ( "izhitsacyrillic", 0x0475 )
+>     , ( "izhitsadblgravecyrillic", 0x0477 )
+>     , ( "j", 0x006a )
+>     , ( "jaarmenian", 0x0571 )
+>     , ( "jabengali", 0x099c )
+>     , ( "jadeva", 0x091c )
+>     , ( "jagujarati", 0x0a9c )
+>     , ( "jagurmukhi", 0x0a1c )
+>     , ( "jbopomofo", 0x3110 )
+>     , ( "jcaron", 0x01f0 )
+>     , ( "jcircle", 0x24d9 )
+>     , ( "jcircumflex", 0x0135 )
+>     , ( "jcrossedtail", 0x029d )
+>     , ( "jdotlessstroke", 0x025f )
+>     , ( "jecyrillic", 0x0458 )
+>     , ( "jeemarabic", 0x062c )
+>     , ( "jeemfinalarabic", 0xfe9e )
+>     , ( "jeeminitialarabic", 0xfe9f )
+>     , ( "jeemmedialarabic", 0xfea0 )
+>     , ( "jeharabic", 0x0698 )
+>     , ( "jehfinalarabic", 0xfb8b )
+>     , ( "jhabengali", 0x099d )
+>     , ( "jhadeva", 0x091d )
+>     , ( "jhagujarati", 0x0a9d )
+>     , ( "jhagurmukhi", 0x0a1d )
+>     , ( "jheharmenian", 0x057b )
+>     , ( "jis", 0x3004 )
+>     , ( "jmonospace", 0xff4a )
+>     , ( "jparen", 0x24a5 )
+>     , ( "jsuperior", 0x02b2 )
+>     , ( "k", 0x006b )
+>     , ( "kabashkircyrillic", 0x04a1 )
+>     , ( "kabengali", 0x0995 )
+>     , ( "kacute", 0x1e31 )
+>     , ( "kacyrillic", 0x043a )
+>     , ( "kadescendercyrillic", 0x049b )
+>     , ( "kadeva", 0x0915 )
+>     , ( "kaf", 0x05db )
+>     , ( "kafarabic", 0x0643 )
+>     , ( "kafdagesh", 0xfb3b )
+>     , ( "kafdageshhebrew", 0xfb3b )
+>     , ( "kaffinalarabic", 0xfeda )
+>     , ( "kafhebrew", 0x05db )
+>     , ( "kafinitialarabic", 0xfedb )
+>     , ( "kafmedialarabic", 0xfedc )
+>     , ( "kafrafehebrew", 0xfb4d )
+>     , ( "kagujarati", 0x0a95 )
+>     , ( "kagurmukhi", 0x0a15 )
+>     , ( "kahiragana", 0x304b )
+>     , ( "kahookcyrillic", 0x04c4 )
+>     , ( "kakatakana", 0x30ab )
+>     , ( "kakatakanahalfwidth", 0xff76 )
+>     , ( "kappa", 0x03ba )
+>     , ( "kappasymbolgreek", 0x03f0 )
+>     , ( "kapyeounmieumkorean", 0x3171 )
+>     , ( "kapyeounphieuphkorean", 0x3184 )
+>     , ( "kapyeounpieupkorean", 0x3178 )
+>     , ( "kapyeounssangpieupkorean", 0x3179 )
+>     , ( "karoriisquare", 0x330d )
+>     , ( "kashidaautoarabic", 0x0640 )
+>     , ( "kashidaautonosidebearingarabic", 0x0640 )
+>     , ( "kasmallkatakana", 0x30f5 )
+>     , ( "kasquare", 0x3384 )
+>     , ( "kasraarabic", 0x0650 )
+>     , ( "kasratanarabic", 0x064d )
+>     , ( "kastrokecyrillic", 0x049f )
+>     , ( "katahiraprolongmarkhalfwidth", 0xff70 )
+>     , ( "kaverticalstrokecyrillic", 0x049d )
+>     , ( "kbopomofo", 0x310e )
+>     , ( "kcalsquare", 0x3389 )
+>     , ( "kcaron", 0x01e9 )
+>     , ( "kcedilla", 0x0137 )
+>     , ( "kcircle", 0x24da )
+>     , ( "kcommaaccent", 0x0137 )
+>     , ( "kdotbelow", 0x1e33 )
+>     , ( "keharmenian", 0x0584 )
+>     , ( "kehiragana", 0x3051 )
+>     , ( "kekatakana", 0x30b1 )
+>     , ( "kekatakanahalfwidth", 0xff79 )
+>     , ( "kenarmenian", 0x056f )
+>     , ( "kesmallkatakana", 0x30f6 )
+>     , ( "kgreenlandic", 0x0138 )
+>     , ( "khabengali", 0x0996 )
+>     , ( "khacyrillic", 0x0445 )
+>     , ( "khadeva", 0x0916 )
+>     , ( "khagujarati", 0x0a96 )
+>     , ( "khagurmukhi", 0x0a16 )
+>     , ( "khaharabic", 0x062e )
+>     , ( "khahfinalarabic", 0xfea6 )
+>     , ( "khahinitialarabic", 0xfea7 )
+>     , ( "khahmedialarabic", 0xfea8 )
+>     , ( "kheicoptic", 0x03e7 )
+>     , ( "khhadeva", 0x0959 )
+>     , ( "khhagurmukhi", 0x0a59 )
+>     , ( "khieukhacirclekorean", 0x3278 )
+>     , ( "khieukhaparenkorean", 0x3218 )
+>     , ( "khieukhcirclekorean", 0x326a )
+>     , ( "khieukhkorean", 0x314b )
+>     , ( "khieukhparenkorean", 0x320a )
+>     , ( "khokhaithai", 0x0e02 )
+>     , ( "khokhonthai", 0x0e05 )
+>     , ( "khokhuatthai", 0x0e03 )
+>     , ( "khokhwaithai", 0x0e04 )
+>     , ( "khomutthai", 0x0e5b )
+>     , ( "khook", 0x0199 )
+>     , ( "khorakhangthai", 0x0e06 )
+>     , ( "khzsquare", 0x3391 )
+>     , ( "kihiragana", 0x304d )
+>     , ( "kikatakana", 0x30ad )
+>     , ( "kikatakanahalfwidth", 0xff77 )
+>     , ( "kiroguramusquare", 0x3315 )
+>     , ( "kiromeetorusquare", 0x3316 )
+>     , ( "kirosquare", 0x3314 )
+>     , ( "kiyeokacirclekorean", 0x326e )
+>     , ( "kiyeokaparenkorean", 0x320e )
+>     , ( "kiyeokcirclekorean", 0x3260 )
+>     , ( "kiyeokkorean", 0x3131 )
+>     , ( "kiyeokparenkorean", 0x3200 )
+>     , ( "kiyeoksioskorean", 0x3133 )
+>     , ( "kjecyrillic", 0x045c )
+>     , ( "klinebelow", 0x1e35 )
+>     , ( "klsquare", 0x3398 )
+>     , ( "kmcubedsquare", 0x33a6 )
+>     , ( "kmonospace", 0xff4b )
+>     , ( "kmsquaredsquare", 0x33a2 )
+>     , ( "kohiragana", 0x3053 )
+>     , ( "kohmsquare", 0x33c0 )
+>     , ( "kokaithai", 0x0e01 )
+>     , ( "kokatakana", 0x30b3 )
+>     , ( "kokatakanahalfwidth", 0xff7a )
+>     , ( "kooposquare", 0x331e )
+>     , ( "koppacyrillic", 0x0481 )
+>     , ( "koreanstandardsymbol", 0x327f )
+>     , ( "koroniscmb", 0x0343 )
+>     , ( "kparen", 0x24a6 )
+>     , ( "kpasquare", 0x33aa )
+>     , ( "ksicyrillic", 0x046f )
+>     , ( "ktsquare", 0x33cf )
+>     , ( "kturned", 0x029e )
+>     , ( "kuhiragana", 0x304f )
+>     , ( "kukatakana", 0x30af )
+>     , ( "kukatakanahalfwidth", 0xff78 )
+>     , ( "kvsquare", 0x33b8 )
+>     , ( "kwsquare", 0x33be )
+>     , ( "l", 0x006c )
+>     , ( "labengali", 0x09b2 )
+>     , ( "lacute", 0x013a )
+>     , ( "ladeva", 0x0932 )
+>     , ( "lagujarati", 0x0ab2 )
+>     , ( "lagurmukhi", 0x0a32 )
+>     , ( "lakkhangyaothai", 0x0e45 )
+>     , ( "lamaleffinalarabic", 0xfefc )
+>     , ( "lamalefhamzaabovefinalarabic", 0xfef8 )
+>     , ( "lamalefhamzaaboveisolatedarabic", 0xfef7 )
+>     , ( "lamalefhamzabelowfinalarabic", 0xfefa )
+>     , ( "lamalefhamzabelowisolatedarabic", 0xfef9 )
+>     , ( "lamalefisolatedarabic", 0xfefb )
+>     , ( "lamalefmaddaabovefinalarabic", 0xfef6 )
+>     , ( "lamalefmaddaaboveisolatedarabic", 0xfef5 )
+>     , ( "lamarabic", 0x0644 )
+>     , ( "lambda", 0x03bb )
+>     , ( "lambdastroke", 0x019b )
+>     , ( "lamed", 0x05dc )
+>     , ( "lameddagesh", 0xfb3c )
+>     , ( "lameddageshhebrew", 0xfb3c )
+>     , ( "lamedhebrew", 0x05dc )
+>     , ( "lamedholam", 0x05dc )
+>     , ( "lamedholamdagesh", 0x05dc )
+>     , ( "lamedholamdageshhebrew", 0x05dc )
+>     , ( "lamedholamhebrew", 0x05dc )
+>     , ( "lamfinalarabic", 0xfede )
+>     , ( "lamhahinitialarabic", 0xfcca )
+>     , ( "laminitialarabic", 0xfedf )
+>     , ( "lamjeeminitialarabic", 0xfcc9 )
+>     , ( "lamkhahinitialarabic", 0xfccb )
+>     , ( "lamlamhehisolatedarabic", 0xfdf2 )
+>     , ( "lammedialarabic", 0xfee0 )
+>     , ( "lammeemhahinitialarabic", 0xfd88 )
+>     , ( "lammeeminitialarabic", 0xfccc )
+>     , ( "lammeemjeeminitialarabic", 0xfedf )
+>     , ( "lammeemkhahinitialarabic", 0xfedf )
+>     , ( "largecircle", 0x25ef )
+>     , ( "lbar", 0x019a )
+>     , ( "lbelt", 0x026c )
+>     , ( "lbopomofo", 0x310c )
+>     , ( "lcaron", 0x013e )
+>     , ( "lcedilla", 0x013c )
+>     , ( "lcircle", 0x24db )
+>     , ( "lcircumflexbelow", 0x1e3d )
+>     , ( "lcommaaccent", 0x013c )
+>     , ( "ldot", 0x0140 )
+>     , ( "ldotaccent", 0x0140 )
+>     , ( "ldotbelow", 0x1e37 )
+>     , ( "ldotbelowmacron", 0x1e39 )
+>     , ( "leftangleabovecmb", 0x031a )
+>     , ( "lefttackbelowcmb", 0x0318 )
+>     , ( "less", 0x003c )
+>     , ( "lessequal", 0x2264 )
+>     , ( "lessequalorgreater", 0x22da )
+>     , ( "lessmonospace", 0xff1c )
+>     , ( "lessorequivalent", 0x2272 )
+>     , ( "lessorgreater", 0x2276 )
+>     , ( "lessoverequal", 0x2266 )
+>     , ( "lesssmall", 0xfe64 )
+>     , ( "lezh", 0x026e )
+>     , ( "lfblock", 0x258c )
+>     , ( "lhookretroflex", 0x026d )
+>     , ( "lira", 0x20a4 )
+>     , ( "liwnarmenian", 0x056c )
+>     , ( "lj", 0x01c9 )
+>     , ( "ljecyrillic", 0x0459 )
+>     , ( "ll", 0xf6c0 )
+>     , ( "lladeva", 0x0933 )
+>     , ( "llagujarati", 0x0ab3 )
+>     , ( "llinebelow", 0x1e3b )
+>     , ( "llladeva", 0x0934 )
+>     , ( "llvocalicbengali", 0x09e1 )
+>     , ( "llvocalicdeva", 0x0961 )
+>     , ( "llvocalicvowelsignbengali", 0x09e3 )
+>     , ( "llvocalicvowelsigndeva", 0x0963 )
+>     , ( "lmiddletilde", 0x026b )
+>     , ( "lmonospace", 0xff4c )
+>     , ( "lmsquare", 0x33d0 )
+>     , ( "lochulathai", 0x0e2c )
+>     , ( "logicaland", 0x2227 )
+>     , ( "logicalnot", 0x00ac )
+>     , ( "logicalnotreversed", 0x2310 )
+>     , ( "logicalor", 0x2228 )
+>     , ( "lolingthai", 0x0e25 )
+>     , ( "longs", 0x017f )
+>     , ( "lowlinecenterline", 0xfe4e )
+>     , ( "lowlinecmb", 0x0332 )
+>     , ( "lowlinedashed", 0xfe4d )
+>     , ( "lozenge", 0x25ca )
+>     , ( "lparen", 0x24a7 )
+>     , ( "lslash", 0x0142 )
+>     , ( "lsquare", 0x2113 )
+>     , ( "lsuperior", 0xf6ee )
+>     , ( "ltshade", 0x2591 )
+>     , ( "luthai", 0x0e26 )
+>     , ( "lvocalicbengali", 0x098c )
+>     , ( "lvocalicdeva", 0x090c )
+>     , ( "lvocalicvowelsignbengali", 0x09e2 )
+>     , ( "lvocalicvowelsigndeva", 0x0962 )
+>     , ( "lxsquare", 0x33d3 )
+>     , ( "m", 0x006d )
+>     , ( "mabengali", 0x09ae )
+>     , ( "macron", 0x00af )
+>     , ( "macronbelowcmb", 0x0331 )
+>     , ( "macroncmb", 0x0304 )
+>     , ( "macronlowmod", 0x02cd )
+>     , ( "macronmonospace", 0xffe3 )
+>     , ( "macute", 0x1e3f )
+>     , ( "madeva", 0x092e )
+>     , ( "magujarati", 0x0aae )
+>     , ( "magurmukhi", 0x0a2e )
+>     , ( "mahapakhhebrew", 0x05a4 )
+>     , ( "mahapakhlefthebrew", 0x05a4 )
+>     , ( "mahiragana", 0x307e )
+>     , ( "maichattawalowleftthai", 0xf895 )
+>     , ( "maichattawalowrightthai", 0xf894 )
+>     , ( "maichattawathai", 0x0e4b )
+>     , ( "maichattawaupperleftthai", 0xf893 )
+>     , ( "maieklowleftthai", 0xf88c )
+>     , ( "maieklowrightthai", 0xf88b )
+>     , ( "maiekthai", 0x0e48 )
+>     , ( "maiekupperleftthai", 0xf88a )
+>     , ( "maihanakatleftthai", 0xf884 )
+>     , ( "maihanakatthai", 0x0e31 )
+>     , ( "maitaikhuleftthai", 0xf889 )
+>     , ( "maitaikhuthai", 0x0e47 )
+>     , ( "maitholowleftthai", 0xf88f )
+>     , ( "maitholowrightthai", 0xf88e )
+>     , ( "maithothai", 0x0e49 )
+>     , ( "maithoupperleftthai", 0xf88d )
+>     , ( "maitrilowleftthai", 0xf892 )
+>     , ( "maitrilowrightthai", 0xf891 )
+>     , ( "maitrithai", 0x0e4a )
+>     , ( "maitriupperleftthai", 0xf890 )
+>     , ( "maiyamokthai", 0x0e46 )
+>     , ( "makatakana", 0x30de )
+>     , ( "makatakanahalfwidth", 0xff8f )
+>     , ( "male", 0x2642 )
+>     , ( "mansyonsquare", 0x3347 )
+>     , ( "maqafhebrew", 0x05be )
+>     , ( "mars", 0x2642 )
+>     , ( "masoracirclehebrew", 0x05af )
+>     , ( "masquare", 0x3383 )
+>     , ( "mbopomofo", 0x3107 )
+>     , ( "mbsquare", 0x33d4 )
+>     , ( "mcircle", 0x24dc )
+>     , ( "mcubedsquare", 0x33a5 )
+>     , ( "mdotaccent", 0x1e41 )
+>     , ( "mdotbelow", 0x1e43 )
+>     , ( "meemarabic", 0x0645 )
+>     , ( "meemfinalarabic", 0xfee2 )
+>     , ( "meeminitialarabic", 0xfee3 )
+>     , ( "meemmedialarabic", 0xfee4 )
+>     , ( "meemmeeminitialarabic", 0xfcd1 )
+>     , ( "meemmeemisolatedarabic", 0xfc48 )
+>     , ( "meetorusquare", 0x334d )
+>     , ( "mehiragana", 0x3081 )
+>     , ( "meizierasquare", 0x337e )
+>     , ( "mekatakana", 0x30e1 )
+>     , ( "mekatakanahalfwidth", 0xff92 )
+>     , ( "mem", 0x05de )
+>     , ( "memdagesh", 0xfb3e )
+>     , ( "memdageshhebrew", 0xfb3e )
+>     , ( "memhebrew", 0x05de )
+>     , ( "menarmenian", 0x0574 )
+>     , ( "merkhahebrew", 0x05a5 )
+>     , ( "merkhakefulahebrew", 0x05a6 )
+>     , ( "merkhakefulalefthebrew", 0x05a6 )
+>     , ( "merkhalefthebrew", 0x05a5 )
+>     , ( "mhook", 0x0271 )
+>     , ( "mhzsquare", 0x3392 )
+>     , ( "middledotkatakanahalfwidth", 0xff65 )
+>     , ( "middot", 0x00b7 )
+>     , ( "mieumacirclekorean", 0x3272 )
+>     , ( "mieumaparenkorean", 0x3212 )
+>     , ( "mieumcirclekorean", 0x3264 )
+>     , ( "mieumkorean", 0x3141 )
+>     , ( "mieumpansioskorean", 0x3170 )
+>     , ( "mieumparenkorean", 0x3204 )
+>     , ( "mieumpieupkorean", 0x316e )
+>     , ( "mieumsioskorean", 0x316f )
+>     , ( "mihiragana", 0x307f )
+>     , ( "mikatakana", 0x30df )
+>     , ( "mikatakanahalfwidth", 0xff90 )
+>     , ( "minus", 0x2212 )
+>     , ( "minusbelowcmb", 0x0320 )
+>     , ( "minuscircle", 0x2296 )
+>     , ( "minusmod", 0x02d7 )
+>     , ( "minusplus", 0x2213 )
+>     , ( "minute", 0x2032 )
+>     , ( "miribaarusquare", 0x334a )
+>     , ( "mirisquare", 0x3349 )
+>     , ( "mlonglegturned", 0x0270 )
+>     , ( "mlsquare", 0x3396 )
+>     , ( "mmcubedsquare", 0x33a3 )
+>     , ( "mmonospace", 0xff4d )
+>     , ( "mmsquaredsquare", 0x339f )
+>     , ( "mohiragana", 0x3082 )
+>     , ( "mohmsquare", 0x33c1 )
+>     , ( "mokatakana", 0x30e2 )
+>     , ( "mokatakanahalfwidth", 0xff93 )
+>     , ( "molsquare", 0x33d6 )
+>     , ( "momathai", 0x0e21 )
+>     , ( "moverssquare", 0x33a7 )
+>     , ( "moverssquaredsquare", 0x33a8 )
+>     , ( "mparen", 0x24a8 )
+>     , ( "mpasquare", 0x33ab )
+>     , ( "mssquare", 0x33b3 )
+>     , ( "msuperior", 0xf6ef )
+>     , ( "mturned", 0x026f )
+>     , ( "mu", 0x00b5 )
+>     , ( "mu1", 0x00b5 )
+>     , ( "muasquare", 0x3382 )
+>     , ( "muchgreater", 0x226b )
+>     , ( "muchless", 0x226a )
+>     , ( "mufsquare", 0x338c )
+>     , ( "mugreek", 0x03bc )
+>     , ( "mugsquare", 0x338d )
+>     , ( "muhiragana", 0x3080 )
+>     , ( "mukatakana", 0x30e0 )
+>     , ( "mukatakanahalfwidth", 0xff91 )
+>     , ( "mulsquare", 0x3395 )
+>     , ( "multiply", 0x00d7 )
+>     , ( "mumsquare", 0x339b )
+>     , ( "munahhebrew", 0x05a3 )
+>     , ( "munahlefthebrew", 0x05a3 )
+>     , ( "musicalnote", 0x266a )
+>     , ( "musicalnotedbl", 0x266b )
+>     , ( "musicflatsign", 0x266d )
+>     , ( "musicsharpsign", 0x266f )
+>     , ( "mussquare", 0x33b2 )
+>     , ( "muvsquare", 0x33b6 )
+>     , ( "muwsquare", 0x33bc )
+>     , ( "mvmegasquare", 0x33b9 )
+>     , ( "mvsquare", 0x33b7 )
+>     , ( "mwmegasquare", 0x33bf )
+>     , ( "mwsquare", 0x33bd )
+>     , ( "n", 0x006e )
+>     , ( "nabengali", 0x09a8 )
+>     , ( "nabla", 0x2207 )
+>     , ( "nacute", 0x0144 )
+>     , ( "nadeva", 0x0928 )
+>     , ( "nagujarati", 0x0aa8 )
+>     , ( "nagurmukhi", 0x0a28 )
+>     , ( "nahiragana", 0x306a )
+>     , ( "nakatakana", 0x30ca )
+>     , ( "nakatakanahalfwidth", 0xff85 )
+>     , ( "napostrophe", 0x0149 )
+>     , ( "nasquare", 0x3381 )
+>     , ( "nbopomofo", 0x310b )
+>     , ( "nbspace", 0x00a0 )
+>     , ( "ncaron", 0x0148 )
+>     , ( "ncedilla", 0x0146 )
+>     , ( "ncircle", 0x24dd )
+>     , ( "ncircumflexbelow", 0x1e4b )
+>     , ( "ncommaaccent", 0x0146 )
+>     , ( "ndotaccent", 0x1e45 )
+>     , ( "ndotbelow", 0x1e47 )
+>     , ( "nehiragana", 0x306d )
+>     , ( "nekatakana", 0x30cd )
+>     , ( "nekatakanahalfwidth", 0xff88 )
+>     , ( "newsheqelsign", 0x20aa )
+>     , ( "nfsquare", 0x338b )
+>     , ( "ngabengali", 0x0999 )
+>     , ( "ngadeva", 0x0919 )
+>     , ( "ngagujarati", 0x0a99 )
+>     , ( "ngagurmukhi", 0x0a19 )
+>     , ( "ngonguthai", 0x0e07 )
+>     , ( "nhiragana", 0x3093 )
+>     , ( "nhookleft", 0x0272 )
+>     , ( "nhookretroflex", 0x0273 )
+>     , ( "nieunacirclekorean", 0x326f )
+>     , ( "nieunaparenkorean", 0x320f )
+>     , ( "nieuncieuckorean", 0x3135 )
+>     , ( "nieuncirclekorean", 0x3261 )
+>     , ( "nieunhieuhkorean", 0x3136 )
+>     , ( "nieunkorean", 0x3134 )
+>     , ( "nieunpansioskorean", 0x3168 )
+>     , ( "nieunparenkorean", 0x3201 )
+>     , ( "nieunsioskorean", 0x3167 )
+>     , ( "nieuntikeutkorean", 0x3166 )
+>     , ( "nihiragana", 0x306b )
+>     , ( "nikatakana", 0x30cb )
+>     , ( "nikatakanahalfwidth", 0xff86 )
+>     , ( "nikhahitleftthai", 0xf899 )
+>     , ( "nikhahitthai", 0x0e4d )
+>     , ( "nine", 0x0039 )
+>     , ( "ninearabic", 0x0669 )
+>     , ( "ninebengali", 0x09ef )
+>     , ( "ninecircle", 0x2468 )
+>     , ( "ninecircleinversesansserif", 0x2792 )
+>     , ( "ninedeva", 0x096f )
+>     , ( "ninegujarati", 0x0aef )
+>     , ( "ninegurmukhi", 0x0a6f )
+>     , ( "ninehackarabic", 0x0669 )
+>     , ( "ninehangzhou", 0x3029 )
+>     , ( "nineideographicparen", 0x3228 )
+>     , ( "nineinferior", 0x2089 )
+>     , ( "ninemonospace", 0xff19 )
+>     , ( "nineoldstyle", 0xf739 )
+>     , ( "nineparen", 0x247c )
+>     , ( "nineperiod", 0x2490 )
+>     , ( "ninepersian", 0x06f9 )
+>     , ( "nineroman", 0x2178 )
+>     , ( "ninesuperior", 0x2079 )
+>     , ( "nineteencircle", 0x2472 )
+>     , ( "nineteenparen", 0x2486 )
+>     , ( "nineteenperiod", 0x249a )
+>     , ( "ninethai", 0x0e59 )
+>     , ( "nj", 0x01cc )
+>     , ( "njecyrillic", 0x045a )
+>     , ( "nkatakana", 0x30f3 )
+>     , ( "nkatakanahalfwidth", 0xff9d )
+>     , ( "nlegrightlong", 0x019e )
+>     , ( "nlinebelow", 0x1e49 )
+>     , ( "nmonospace", 0xff4e )
+>     , ( "nmsquare", 0x339a )
+>     , ( "nnabengali", 0x09a3 )
+>     , ( "nnadeva", 0x0923 )
+>     , ( "nnagujarati", 0x0aa3 )
+>     , ( "nnagurmukhi", 0x0a23 )
+>     , ( "nnnadeva", 0x0929 )
+>     , ( "nohiragana", 0x306e )
+>     , ( "nokatakana", 0x30ce )
+>     , ( "nokatakanahalfwidth", 0xff89 )
+>     , ( "nonbreakingspace", 0x00a0 )
+>     , ( "nonenthai", 0x0e13 )
+>     , ( "nonuthai", 0x0e19 )
+>     , ( "noonarabic", 0x0646 )
+>     , ( "noonfinalarabic", 0xfee6 )
+>     , ( "noonghunnaarabic", 0x06ba )
+>     , ( "noonghunnafinalarabic", 0xfb9f )
+>     , ( "noonhehinitialarabic", 0xfee7 )
+>     , ( "nooninitialarabic", 0xfee7 )
+>     , ( "noonjeeminitialarabic", 0xfcd2 )
+>     , ( "noonjeemisolatedarabic", 0xfc4b )
+>     , ( "noonmedialarabic", 0xfee8 )
+>     , ( "noonmeeminitialarabic", 0xfcd5 )
+>     , ( "noonmeemisolatedarabic", 0xfc4e )
+>     , ( "noonnoonfinalarabic", 0xfc8d )
+>     , ( "notcontains", 0x220c )
+>     , ( "notelement", 0x2209 )
+>     , ( "notelementof", 0x2209 )
+>     , ( "notequal", 0x2260 )
+>     , ( "notgreater", 0x226f )
+>     , ( "notgreaternorequal", 0x2271 )
+>     , ( "notgreaternorless", 0x2279 )
+>     , ( "notidentical", 0x2262 )
+>     , ( "notless", 0x226e )
+>     , ( "notlessnorequal", 0x2270 )
+>     , ( "notparallel", 0x2226 )
+>     , ( "notprecedes", 0x2280 )
+>     , ( "notsubset", 0x2284 )
+>     , ( "notsucceeds", 0x2281 )
+>     , ( "notsuperset", 0x2285 )
+>     , ( "nowarmenian", 0x0576 )
+>     , ( "nparen", 0x24a9 )
+>     , ( "nssquare", 0x33b1 )
+>     , ( "nsuperior", 0x207f )
+>     , ( "ntilde", 0x00f1 )
+>     , ( "nu", 0x03bd )
+>     , ( "nuhiragana", 0x306c )
+>     , ( "nukatakana", 0x30cc )
+>     , ( "nukatakanahalfwidth", 0xff87 )
+>     , ( "nuktabengali", 0x09bc )
+>     , ( "nuktadeva", 0x093c )
+>     , ( "nuktagujarati", 0x0abc )
+>     , ( "nuktagurmukhi", 0x0a3c )
+>     , ( "numbersign", 0x0023 )
+>     , ( "numbersignmonospace", 0xff03 )
+>     , ( "numbersignsmall", 0xfe5f )
+>     , ( "numeralsigngreek", 0x0374 )
+>     , ( "numeralsignlowergreek", 0x0375 )
+>     , ( "numero", 0x2116 )
+>     , ( "nun", 0x05e0 )
+>     , ( "nundagesh", 0xfb40 )
+>     , ( "nundageshhebrew", 0xfb40 )
+>     , ( "nunhebrew", 0x05e0 )
+>     , ( "nvsquare", 0x33b5 )
+>     , ( "nwsquare", 0x33bb )
+>     , ( "nyabengali", 0x099e )
+>     , ( "nyadeva", 0x091e )
+>     , ( "nyagujarati", 0x0a9e )
+>     , ( "nyagurmukhi", 0x0a1e )
+>     , ( "o", 0x006f )
+>     , ( "oacute", 0x00f3 )
+>     , ( "oangthai", 0x0e2d )
+>     , ( "obarred", 0x0275 )
+>     , ( "obarredcyrillic", 0x04e9 )
+>     , ( "obarreddieresiscyrillic", 0x04eb )
+>     , ( "obengali", 0x0993 )
+>     , ( "obopomofo", 0x311b )
+>     , ( "obreve", 0x014f )
+>     , ( "ocandradeva", 0x0911 )
+>     , ( "ocandragujarati", 0x0a91 )
+>     , ( "ocandravowelsigndeva", 0x0949 )
+>     , ( "ocandravowelsigngujarati", 0x0ac9 )
+>     , ( "ocaron", 0x01d2 )
+>     , ( "ocircle", 0x24de )
+>     , ( "ocircumflex", 0x00f4 )
+>     , ( "ocircumflexacute", 0x1ed1 )
+>     , ( "ocircumflexdotbelow", 0x1ed9 )
+>     , ( "ocircumflexgrave", 0x1ed3 )
+>     , ( "ocircumflexhookabove", 0x1ed5 )
+>     , ( "ocircumflextilde", 0x1ed7 )
+>     , ( "ocyrillic", 0x043e )
+>     , ( "odblacute", 0x0151 )
+>     , ( "odblgrave", 0x020d )
+>     , ( "odeva", 0x0913 )
+>     , ( "odieresis", 0x00f6 )
+>     , ( "odieresiscyrillic", 0x04e7 )
+>     , ( "odotbelow", 0x1ecd )
+>     , ( "oe", 0x0153 )
+>     , ( "oekorean", 0x315a )
+>     , ( "ogonek", 0x02db )
+>     , ( "ogonekcmb", 0x0328 )
+>     , ( "ograve", 0x00f2 )
+>     , ( "ogujarati", 0x0a93 )
+>     , ( "oharmenian", 0x0585 )
+>     , ( "ohiragana", 0x304a )
+>     , ( "ohookabove", 0x1ecf )
+>     , ( "ohorn", 0x01a1 )
+>     , ( "ohornacute", 0x1edb )
+>     , ( "ohorndotbelow", 0x1ee3 )
+>     , ( "ohorngrave", 0x1edd )
+>     , ( "ohornhookabove", 0x1edf )
+>     , ( "ohorntilde", 0x1ee1 )
+>     , ( "ohungarumlaut", 0x0151 )
+>     , ( "oi", 0x01a3 )
+>     , ( "oinvertedbreve", 0x020f )
+>     , ( "okatakana", 0x30aa )
+>     , ( "okatakanahalfwidth", 0xff75 )
+>     , ( "okorean", 0x3157 )
+>     , ( "olehebrew", 0x05ab )
+>     , ( "omacron", 0x014d )
+>     , ( "omacronacute", 0x1e53 )
+>     , ( "omacrongrave", 0x1e51 )
+>     , ( "omdeva", 0x0950 )
+>     , ( "omega", 0x03c9 )
+>     , ( "omega1", 0x03d6 )
+>     , ( "omegacyrillic", 0x0461 )
+>     , ( "omegalatinclosed", 0x0277 )
+>     , ( "omegaroundcyrillic", 0x047b )
+>     , ( "omegatitlocyrillic", 0x047d )
+>     , ( "omegatonos", 0x03ce )
+>     , ( "omgujarati", 0x0ad0 )
+>     , ( "omicron", 0x03bf )
+>     , ( "omicrontonos", 0x03cc )
+>     , ( "omonospace", 0xff4f )
+>     , ( "one", 0x0031 )
+>     , ( "onearabic", 0x0661 )
+>     , ( "onebengali", 0x09e7 )
+>     , ( "onecircle", 0x2460 )
+>     , ( "onecircleinversesansserif", 0x278a )
+>     , ( "onedeva", 0x0967 )
+>     , ( "onedotenleader", 0x2024 )
+>     , ( "oneeighth", 0x215b )
+>     , ( "onefitted", 0xf6dc )
+>     , ( "onegujarati", 0x0ae7 )
+>     , ( "onegurmukhi", 0x0a67 )
+>     , ( "onehackarabic", 0x0661 )
+>     , ( "onehalf", 0x00bd )
+>     , ( "onehangzhou", 0x3021 )
+>     , ( "oneideographicparen", 0x3220 )
+>     , ( "oneinferior", 0x2081 )
+>     , ( "onemonospace", 0xff11 )
+>     , ( "onenumeratorbengali", 0x09f4 )
+>     , ( "oneoldstyle", 0xf731 )
+>     , ( "oneparen", 0x2474 )
+>     , ( "oneperiod", 0x2488 )
+>     , ( "onepersian", 0x06f1 )
+>     , ( "onequarter", 0x00bc )
+>     , ( "oneroman", 0x2170 )
+>     , ( "onesuperior", 0x00b9 )
+>     , ( "onethai", 0x0e51 )
+>     , ( "onethird", 0x2153 )
+>     , ( "oogonek", 0x01eb )
+>     , ( "oogonekmacron", 0x01ed )
+>     , ( "oogurmukhi", 0x0a13 )
+>     , ( "oomatragurmukhi", 0x0a4b )
+>     , ( "oopen", 0x0254 )
+>     , ( "oparen", 0x24aa )
+>     , ( "openbullet", 0x25e6 )
+>     , ( "option", 0x2325 )
+>     , ( "ordfeminine", 0x00aa )
+>     , ( "ordmasculine", 0x00ba )
+>     , ( "orthogonal", 0x221f )
+>     , ( "oshortdeva", 0x0912 )
+>     , ( "oshortvowelsigndeva", 0x094a )
+>     , ( "oslash", 0x00f8 )
+>     , ( "oslashacute", 0x01ff )
+>     , ( "osmallhiragana", 0x3049 )
+>     , ( "osmallkatakana", 0x30a9 )
+>     , ( "osmallkatakanahalfwidth", 0xff6b )
+>     , ( "ostrokeacute", 0x01ff )
+>     , ( "osuperior", 0xf6f0 )
+>     , ( "otcyrillic", 0x047f )
+>     , ( "otilde", 0x00f5 )
+>     , ( "otildeacute", 0x1e4d )
+>     , ( "otildedieresis", 0x1e4f )
+>     , ( "oubopomofo", 0x3121 )
+>     , ( "overline", 0x203e )
+>     , ( "overlinecenterline", 0xfe4a )
+>     , ( "overlinecmb", 0x0305 )
+>     , ( "overlinedashed", 0xfe49 )
+>     , ( "overlinedblwavy", 0xfe4c )
+>     , ( "overlinewavy", 0xfe4b )
+>     , ( "overscore", 0x00af )
+>     , ( "ovowelsignbengali", 0x09cb )
+>     , ( "ovowelsigndeva", 0x094b )
+>     , ( "ovowelsigngujarati", 0x0acb )
+>     , ( "p", 0x0070 )
+>     , ( "paampssquare", 0x3380 )
+>     , ( "paasentosquare", 0x332b )
+>     , ( "pabengali", 0x09aa )
+>     , ( "pacute", 0x1e55 )
+>     , ( "padeva", 0x092a )
+>     , ( "pagedown", 0x21df )
+>     , ( "pageup", 0x21de )
+>     , ( "pagujarati", 0x0aaa )
+>     , ( "pagurmukhi", 0x0a2a )
+>     , ( "pahiragana", 0x3071 )
+>     , ( "paiyannoithai", 0x0e2f )
+>     , ( "pakatakana", 0x30d1 )
+>     , ( "palatalizationcyrilliccmb", 0x0484 )
+>     , ( "palochkacyrillic", 0x04c0 )
+>     , ( "pansioskorean", 0x317f )
+>     , ( "paragraph", 0x00b6 )
+>     , ( "parallel", 0x2225 )
+>     , ( "parenleft", 0x0028 )
+>     , ( "parenleftaltonearabic", 0xfd3e )
+>     , ( "parenleftbt", 0xf8ed )
+>     , ( "parenleftex", 0xf8ec )
+>     , ( "parenleftinferior", 0x208d )
+>     , ( "parenleftmonospace", 0xff08 )
+>     , ( "parenleftsmall", 0xfe59 )
+>     , ( "parenleftsuperior", 0x207d )
+>     , ( "parenlefttp", 0xf8eb )
+>     , ( "parenleftvertical", 0xfe35 )
+>     , ( "parenright", 0x0029 )
+>     , ( "parenrightaltonearabic", 0xfd3f )
+>     , ( "parenrightbt", 0xf8f8 )
+>     , ( "parenrightex", 0xf8f7 )
+>     , ( "parenrightinferior", 0x208e )
+>     , ( "parenrightmonospace", 0xff09 )
+>     , ( "parenrightsmall", 0xfe5a )
+>     , ( "parenrightsuperior", 0x207e )
+>     , ( "parenrighttp", 0xf8f6 )
+>     , ( "parenrightvertical", 0xfe36 )
+>     , ( "partialdiff", 0x2202 )
+>     , ( "paseqhebrew", 0x05c0 )
+>     , ( "pashtahebrew", 0x0599 )
+>     , ( "pasquare", 0x33a9 )
+>     , ( "patah", 0x05b7 )
+>     , ( "patah11", 0x05b7 )
+>     , ( "patah1d", 0x05b7 )
+>     , ( "patah2a", 0x05b7 )
+>     , ( "patahhebrew", 0x05b7 )
+>     , ( "patahnarrowhebrew", 0x05b7 )
+>     , ( "patahquarterhebrew", 0x05b7 )
+>     , ( "patahwidehebrew", 0x05b7 )
+>     , ( "pazerhebrew", 0x05a1 )
+>     , ( "pbopomofo", 0x3106 )
+>     , ( "pcircle", 0x24df )
+>     , ( "pdotaccent", 0x1e57 )
+>     , ( "pe", 0x05e4 )
+>     , ( "pecyrillic", 0x043f )
+>     , ( "pedagesh", 0xfb44 )
+>     , ( "pedageshhebrew", 0xfb44 )
+>     , ( "peezisquare", 0x333b )
+>     , ( "pefinaldageshhebrew", 0xfb43 )
+>     , ( "peharabic", 0x067e )
+>     , ( "peharmenian", 0x057a )
+>     , ( "pehebrew", 0x05e4 )
+>     , ( "pehfinalarabic", 0xfb57 )
+>     , ( "pehinitialarabic", 0xfb58 )
+>     , ( "pehiragana", 0x307a )
+>     , ( "pehmedialarabic", 0xfb59 )
+>     , ( "pekatakana", 0x30da )
+>     , ( "pemiddlehookcyrillic", 0x04a7 )
+>     , ( "perafehebrew", 0xfb4e )
+>     , ( "percent", 0x0025 )
+>     , ( "percentarabic", 0x066a )
+>     , ( "percentmonospace", 0xff05 )
+>     , ( "percentsmall", 0xfe6a )
+>     , ( "period", 0x002e )
+>     , ( "periodarmenian", 0x0589 )
+>     , ( "periodcentered", 0x00b7 )
+>     , ( "periodhalfwidth", 0xff61 )
+>     , ( "periodinferior", 0xf6e7 )
+>     , ( "periodmonospace", 0xff0e )
+>     , ( "periodsmall", 0xfe52 )
+>     , ( "periodsuperior", 0xf6e8 )
+>     , ( "perispomenigreekcmb", 0x0342 )
+>     , ( "perpendicular", 0x22a5 )
+>     , ( "perthousand", 0x2030 )
+>     , ( "peseta", 0x20a7 )
+>     , ( "pfsquare", 0x338a )
+>     , ( "phabengali", 0x09ab )
+>     , ( "phadeva", 0x092b )
+>     , ( "phagujarati", 0x0aab )
+>     , ( "phagurmukhi", 0x0a2b )
+>     , ( "phi", 0x03c6 )
+>     , ( "phi1", 0x03d5 )
+>     , ( "phieuphacirclekorean", 0x327a )
+>     , ( "phieuphaparenkorean", 0x321a )
+>     , ( "phieuphcirclekorean", 0x326c )
+>     , ( "phieuphkorean", 0x314d )
+>     , ( "phieuphparenkorean", 0x320c )
+>     , ( "philatin", 0x0278 )
+>     , ( "phinthuthai", 0x0e3a )
+>     , ( "phisymbolgreek", 0x03d5 )
+>     , ( "phook", 0x01a5 )
+>     , ( "phophanthai", 0x0e1e )
+>     , ( "phophungthai", 0x0e1c )
+>     , ( "phosamphaothai", 0x0e20 )
+>     , ( "pi", 0x03c0 )
+>     , ( "pieupacirclekorean", 0x3273 )
+>     , ( "pieupaparenkorean", 0x3213 )
+>     , ( "pieupcieuckorean", 0x3176 )
+>     , ( "pieupcirclekorean", 0x3265 )
+>     , ( "pieupkiyeokkorean", 0x3172 )
+>     , ( "pieupkorean", 0x3142 )
+>     , ( "pieupparenkorean", 0x3205 )
+>     , ( "pieupsioskiyeokkorean", 0x3174 )
+>     , ( "pieupsioskorean", 0x3144 )
+>     , ( "pieupsiostikeutkorean", 0x3175 )
+>     , ( "pieupthieuthkorean", 0x3177 )
+>     , ( "pieuptikeutkorean", 0x3173 )
+>     , ( "pihiragana", 0x3074 )
+>     , ( "pikatakana", 0x30d4 )
+>     , ( "pisymbolgreek", 0x03d6 )
+>     , ( "piwrarmenian", 0x0583 )
+>     , ( "plus", 0x002b )
+>     , ( "plusbelowcmb", 0x031f )
+>     , ( "pluscircle", 0x2295 )
+>     , ( "plusminus", 0x00b1 )
+>     , ( "plusmod", 0x02d6 )
+>     , ( "plusmonospace", 0xff0b )
+>     , ( "plussmall", 0xfe62 )
+>     , ( "plussuperior", 0x207a )
+>     , ( "pmonospace", 0xff50 )
+>     , ( "pmsquare", 0x33d8 )
+>     , ( "pohiragana", 0x307d )
+>     , ( "pointingindexdownwhite", 0x261f )
+>     , ( "pointingindexleftwhite", 0x261c )
+>     , ( "pointingindexrightwhite", 0x261e )
+>     , ( "pointingindexupwhite", 0x261d )
+>     , ( "pokatakana", 0x30dd )
+>     , ( "poplathai", 0x0e1b )
+>     , ( "postalmark", 0x3012 )
+>     , ( "postalmarkface", 0x3020 )
+>     , ( "pparen", 0x24ab )
+>     , ( "precedes", 0x227a )
+>     , ( "prescription", 0x211e )
+>     , ( "primemod", 0x02b9 )
+>     , ( "primereversed", 0x2035 )
+>     , ( "product", 0x220f )
+>     , ( "projective", 0x2305 )
+>     , ( "prolongedkana", 0x30fc )
+>     , ( "propellor", 0x2318 )
+>     , ( "propersubset", 0x2282 )
+>     , ( "propersuperset", 0x2283 )
+>     , ( "proportion", 0x2237 )
+>     , ( "proportional", 0x221d )
+>     , ( "psi", 0x03c8 )
+>     , ( "psicyrillic", 0x0471 )
+>     , ( "psilipneumatacyrilliccmb", 0x0486 )
+>     , ( "pssquare", 0x33b0 )
+>     , ( "puhiragana", 0x3077 )
+>     , ( "pukatakana", 0x30d7 )
+>     , ( "pvsquare", 0x33b4 )
+>     , ( "pwsquare", 0x33ba )
+>     , ( "q", 0x0071 )
+>     , ( "qadeva", 0x0958 )
+>     , ( "qadmahebrew", 0x05a8 )
+>     , ( "qafarabic", 0x0642 )
+>     , ( "qaffinalarabic", 0xfed6 )
+>     , ( "qafinitialarabic", 0xfed7 )
+>     , ( "qafmedialarabic", 0xfed8 )
+>     , ( "qamats", 0x05b8 )
+>     , ( "qamats10", 0x05b8 )
+>     , ( "qamats1a", 0x05b8 )
+>     , ( "qamats1c", 0x05b8 )
+>     , ( "qamats27", 0x05b8 )
+>     , ( "qamats29", 0x05b8 )
+>     , ( "qamats33", 0x05b8 )
+>     , ( "qamatsde", 0x05b8 )
+>     , ( "qamatshebrew", 0x05b8 )
+>     , ( "qamatsnarrowhebrew", 0x05b8 )
+>     , ( "qamatsqatanhebrew", 0x05b8 )
+>     , ( "qamatsqatannarrowhebrew", 0x05b8 )
+>     , ( "qamatsqatanquarterhebrew", 0x05b8 )
+>     , ( "qamatsqatanwidehebrew", 0x05b8 )
+>     , ( "qamatsquarterhebrew", 0x05b8 )
+>     , ( "qamatswidehebrew", 0x05b8 )
+>     , ( "qarneyparahebrew", 0x059f )
+>     , ( "qbopomofo", 0x3111 )
+>     , ( "qcircle", 0x24e0 )
+>     , ( "qhook", 0x02a0 )
+>     , ( "qmonospace", 0xff51 )
+>     , ( "qof", 0x05e7 )
+>     , ( "qofdagesh", 0xfb47 )
+>     , ( "qofdageshhebrew", 0xfb47 )
+>     , ( "qofhatafpatah", 0x05e7 )
+>     , ( "qofhatafpatahhebrew", 0x05e7 )
+>     , ( "qofhatafsegol", 0x05e7 )
+>     , ( "qofhatafsegolhebrew", 0x05e7 )
+>     , ( "qofhebrew", 0x05e7 )
+>     , ( "qofhiriq", 0x05e7 )
+>     , ( "qofhiriqhebrew", 0x05e7 )
+>     , ( "qofholam", 0x05e7 )
+>     , ( "qofholamhebrew", 0x05e7 )
+>     , ( "qofpatah", 0x05e7 )
+>     , ( "qofpatahhebrew", 0x05e7 )
+>     , ( "qofqamats", 0x05e7 )
+>     , ( "qofqamatshebrew", 0x05e7 )
+>     , ( "qofqubuts", 0x05e7 )
+>     , ( "qofqubutshebrew", 0x05e7 )
+>     , ( "qofsegol", 0x05e7 )
+>     , ( "qofsegolhebrew", 0x05e7 )
+>     , ( "qofsheva", 0x05e7 )
+>     , ( "qofshevahebrew", 0x05e7 )
+>     , ( "qoftsere", 0x05e7 )
+>     , ( "qoftserehebrew", 0x05e7 )
+>     , ( "qparen", 0x24ac )
+>     , ( "quarternote", 0x2669 )
+>     , ( "qubuts", 0x05bb )
+>     , ( "qubuts18", 0x05bb )
+>     , ( "qubuts25", 0x05bb )
+>     , ( "qubuts31", 0x05bb )
+>     , ( "qubutshebrew", 0x05bb )
+>     , ( "qubutsnarrowhebrew", 0x05bb )
+>     , ( "qubutsquarterhebrew", 0x05bb )
+>     , ( "qubutswidehebrew", 0x05bb )
+>     , ( "question", 0x003f )
+>     , ( "questionarabic", 0x061f )
+>     , ( "questionarmenian", 0x055e )
+>     , ( "questiondown", 0x00bf )
+>     , ( "questiondownsmall", 0xf7bf )
+>     , ( "questiongreek", 0x037e )
+>     , ( "questionmonospace", 0xff1f )
+>     , ( "questionsmall", 0xf73f )
+>     , ( "quotedbl", 0x0022 )
+>     , ( "quotedblbase", 0x201e )
+>     , ( "quotedblleft", 0x201c )
+>     , ( "quotedblmonospace", 0xff02 )
+>     , ( "quotedblprime", 0x301e )
+>     , ( "quotedblprimereversed", 0x301d )
+>     , ( "quotedblright", 0x201d )
+>     , ( "quoteleft", 0x2018 )
+>     , ( "quoteleftreversed", 0x201b )
+>     , ( "quotereversed", 0x201b )
+>     , ( "quoteright", 0x2019 )
+>     , ( "quoterightn", 0x0149 )
+>     , ( "quotesinglbase", 0x201a )
+>     , ( "quotesingle", 0x0027 )
+>     , ( "quotesinglemonospace", 0xff07 )
+>     , ( "r", 0x0072 )
+>     , ( "raarmenian", 0x057c )
+>     , ( "rabengali", 0x09b0 )
+>     , ( "racute", 0x0155 )
+>     , ( "radeva", 0x0930 )
+>     , ( "radical", 0x221a )
+>     , ( "radicalex", 0xf8e5 )
+>     , ( "radoverssquare", 0x33ae )
+>     , ( "radoverssquaredsquare", 0x33af )
+>     , ( "radsquare", 0x33ad )
+>     , ( "rafe", 0x05bf )
+>     , ( "rafehebrew", 0x05bf )
+>     , ( "ragujarati", 0x0ab0 )
+>     , ( "ragurmukhi", 0x0a30 )
+>     , ( "rahiragana", 0x3089 )
+>     , ( "rakatakana", 0x30e9 )
+>     , ( "rakatakanahalfwidth", 0xff97 )
+>     , ( "ralowerdiagonalbengali", 0x09f1 )
+>     , ( "ramiddlediagonalbengali", 0x09f0 )
+>     , ( "ramshorn", 0x0264 )
+>     , ( "ratio", 0x2236 )
+>     , ( "rbopomofo", 0x3116 )
+>     , ( "rcaron", 0x0159 )
+>     , ( "rcedilla", 0x0157 )
+>     , ( "rcircle", 0x24e1 )
+>     , ( "rcommaaccent", 0x0157 )
+>     , ( "rdblgrave", 0x0211 )
+>     , ( "rdotaccent", 0x1e59 )
+>     , ( "rdotbelow", 0x1e5b )
+>     , ( "rdotbelowmacron", 0x1e5d )
+>     , ( "referencemark", 0x203b )
+>     , ( "reflexsubset", 0x2286 )
+>     , ( "reflexsuperset", 0x2287 )
+>     , ( "registered", 0x00ae )
+>     , ( "registersans", 0xf8e8 )
+>     , ( "registerserif", 0xf6da )
+>     , ( "reharabic", 0x0631 )
+>     , ( "reharmenian", 0x0580 )
+>     , ( "rehfinalarabic", 0xfeae )
+>     , ( "rehiragana", 0x308c )
+>     , ( "rehyehaleflamarabic", 0x0631 )
+>     , ( "rekatakana", 0x30ec )
+>     , ( "rekatakanahalfwidth", 0xff9a )
+>     , ( "resh", 0x05e8 )
+>     , ( "reshdageshhebrew", 0xfb48 )
+>     , ( "reshhatafpatah", 0x05e8 )
+>     , ( "reshhatafpatahhebrew", 0x05e8 )
+>     , ( "reshhatafsegol", 0x05e8 )
+>     , ( "reshhatafsegolhebrew", 0x05e8 )
+>     , ( "reshhebrew", 0x05e8 )
+>     , ( "reshhiriq", 0x05e8 )
+>     , ( "reshhiriqhebrew", 0x05e8 )
+>     , ( "reshholam", 0x05e8 )
+>     , ( "reshholamhebrew", 0x05e8 )
+>     , ( "reshpatah", 0x05e8 )
+>     , ( "reshpatahhebrew", 0x05e8 )
+>     , ( "reshqamats", 0x05e8 )
+>     , ( "reshqamatshebrew", 0x05e8 )
+>     , ( "reshqubuts", 0x05e8 )
+>     , ( "reshqubutshebrew", 0x05e8 )
+>     , ( "reshsegol", 0x05e8 )
+>     , ( "reshsegolhebrew", 0x05e8 )
+>     , ( "reshsheva", 0x05e8 )
+>     , ( "reshshevahebrew", 0x05e8 )
+>     , ( "reshtsere", 0x05e8 )
+>     , ( "reshtserehebrew", 0x05e8 )
+>     , ( "reversedtilde", 0x223d )
+>     , ( "reviahebrew", 0x0597 )
+>     , ( "reviamugrashhebrew", 0x0597 )
+>     , ( "revlogicalnot", 0x2310 )
+>     , ( "rfishhook", 0x027e )
+>     , ( "rfishhookreversed", 0x027f )
+>     , ( "rhabengali", 0x09dd )
+>     , ( "rhadeva", 0x095d )
+>     , ( "rho", 0x03c1 )
+>     , ( "rhook", 0x027d )
+>     , ( "rhookturned", 0x027b )
+>     , ( "rhookturnedsuperior", 0x02b5 )
+>     , ( "rhosymbolgreek", 0x03f1 )
+>     , ( "rhotichookmod", 0x02de )
+>     , ( "rieulacirclekorean", 0x3271 )
+>     , ( "rieulaparenkorean", 0x3211 )
+>     , ( "rieulcirclekorean", 0x3263 )
+>     , ( "rieulhieuhkorean", 0x3140 )
+>     , ( "rieulkiyeokkorean", 0x313a )
+>     , ( "rieulkiyeoksioskorean", 0x3169 )
+>     , ( "rieulkorean", 0x3139 )
+>     , ( "rieulmieumkorean", 0x313b )
+>     , ( "rieulpansioskorean", 0x316c )
+>     , ( "rieulparenkorean", 0x3203 )
+>     , ( "rieulphieuphkorean", 0x313f )
+>     , ( "rieulpieupkorean", 0x313c )
+>     , ( "rieulpieupsioskorean", 0x316b )
+>     , ( "rieulsioskorean", 0x313d )
+>     , ( "rieulthieuthkorean", 0x313e )
+>     , ( "rieultikeutkorean", 0x316a )
+>     , ( "rieulyeorinhieuhkorean", 0x316d )
+>     , ( "rightangle", 0x221f )
+>     , ( "righttackbelowcmb", 0x0319 )
+>     , ( "righttriangle", 0x22bf )
+>     , ( "rihiragana", 0x308a )
+>     , ( "rikatakana", 0x30ea )
+>     , ( "rikatakanahalfwidth", 0xff98 )
+>     , ( "ring", 0x02da )
+>     , ( "ringbelowcmb", 0x0325 )
+>     , ( "ringcmb", 0x030a )
+>     , ( "ringhalfleft", 0x02bf )
+>     , ( "ringhalfleftarmenian", 0x0559 )
+>     , ( "ringhalfleftbelowcmb", 0x031c )
+>     , ( "ringhalfleftcentered", 0x02d3 )
+>     , ( "ringhalfright", 0x02be )
+>     , ( "ringhalfrightbelowcmb", 0x0339 )
+>     , ( "ringhalfrightcentered", 0x02d2 )
+>     , ( "rinvertedbreve", 0x0213 )
+>     , ( "rittorusquare", 0x3351 )
+>     , ( "rlinebelow", 0x1e5f )
+>     , ( "rlongleg", 0x027c )
+>     , ( "rlonglegturned", 0x027a )
+>     , ( "rmonospace", 0xff52 )
+>     , ( "rohiragana", 0x308d )
+>     , ( "rokatakana", 0x30ed )
+>     , ( "rokatakanahalfwidth", 0xff9b )
+>     , ( "roruathai", 0x0e23 )
+>     , ( "rparen", 0x24ad )
+>     , ( "rrabengali", 0x09dc )
+>     , ( "rradeva", 0x0931 )
+>     , ( "rragurmukhi", 0x0a5c )
+>     , ( "rreharabic", 0x0691 )
+>     , ( "rrehfinalarabic", 0xfb8d )
+>     , ( "rrvocalicbengali", 0x09e0 )
+>     , ( "rrvocalicdeva", 0x0960 )
+>     , ( "rrvocalicgujarati", 0x0ae0 )
+>     , ( "rrvocalicvowelsignbengali", 0x09c4 )
+>     , ( "rrvocalicvowelsigndeva", 0x0944 )
+>     , ( "rrvocalicvowelsigngujarati", 0x0ac4 )
+>     , ( "rsuperior", 0xf6f1 )
+>     , ( "rtblock", 0x2590 )
+>     , ( "rturned", 0x0279 )
+>     , ( "rturnedsuperior", 0x02b4 )
+>     , ( "ruhiragana", 0x308b )
+>     , ( "rukatakana", 0x30eb )
+>     , ( "rukatakanahalfwidth", 0xff99 )
+>     , ( "rupeemarkbengali", 0x09f2 )
+>     , ( "rupeesignbengali", 0x09f3 )
+>     , ( "rupiah", 0xf6dd )
+>     , ( "ruthai", 0x0e24 )
+>     , ( "rvocalicbengali", 0x098b )
+>     , ( "rvocalicdeva", 0x090b )
+>     , ( "rvocalicgujarati", 0x0a8b )
+>     , ( "rvocalicvowelsignbengali", 0x09c3 )
+>     , ( "rvocalicvowelsigndeva", 0x0943 )
+>     , ( "rvocalicvowelsigngujarati", 0x0ac3 )
+>     , ( "s", 0x0073 )
+>     , ( "sabengali", 0x09b8 )
+>     , ( "sacute", 0x015b )
+>     , ( "sacutedotaccent", 0x1e65 )
+>     , ( "sadarabic", 0x0635 )
+>     , ( "sadeva", 0x0938 )
+>     , ( "sadfinalarabic", 0xfeba )
+>     , ( "sadinitialarabic", 0xfebb )
+>     , ( "sadmedialarabic", 0xfebc )
+>     , ( "sagujarati", 0x0ab8 )
+>     , ( "sagurmukhi", 0x0a38 )
+>     , ( "sahiragana", 0x3055 )
+>     , ( "sakatakana", 0x30b5 )
+>     , ( "sakatakanahalfwidth", 0xff7b )
+>     , ( "sallallahoualayhewasallamarabic", 0xfdfa )
+>     , ( "samekh", 0x05e1 )
+>     , ( "samekhdagesh", 0xfb41 )
+>     , ( "samekhdageshhebrew", 0xfb41 )
+>     , ( "samekhhebrew", 0x05e1 )
+>     , ( "saraaathai", 0x0e32 )
+>     , ( "saraaethai", 0x0e41 )
+>     , ( "saraaimaimalaithai", 0x0e44 )
+>     , ( "saraaimaimuanthai", 0x0e43 )
+>     , ( "saraamthai", 0x0e33 )
+>     , ( "saraathai", 0x0e30 )
+>     , ( "saraethai", 0x0e40 )
+>     , ( "saraiileftthai", 0xf886 )
+>     , ( "saraiithai", 0x0e35 )
+>     , ( "saraileftthai", 0xf885 )
+>     , ( "saraithai", 0x0e34 )
+>     , ( "saraothai", 0x0e42 )
+>     , ( "saraueeleftthai", 0xf888 )
+>     , ( "saraueethai", 0x0e37 )
+>     , ( "saraueleftthai", 0xf887 )
+>     , ( "sarauethai", 0x0e36 )
+>     , ( "sarauthai", 0x0e38 )
+>     , ( "sarauuthai", 0x0e39 )
+>     , ( "sbopomofo", 0x3119 )
+>     , ( "scaron", 0x0161 )
+>     , ( "scarondotaccent", 0x1e67 )
+>     , ( "scedilla", 0x015f )
+>     , ( "schwa", 0x0259 )
+>     , ( "schwacyrillic", 0x04d9 )
+>     , ( "schwadieresiscyrillic", 0x04db )
+>     , ( "schwahook", 0x025a )
+>     , ( "scircle", 0x24e2 )
+>     , ( "scircumflex", 0x015d )
+>     , ( "scommaaccent", 0x0219 )
+>     , ( "sdotaccent", 0x1e61 )
+>     , ( "sdotbelow", 0x1e63 )
+>     , ( "sdotbelowdotaccent", 0x1e69 )
+>     , ( "seagullbelowcmb", 0x033c )
+>     , ( "second", 0x2033 )
+>     , ( "secondtonechinese", 0x02ca )
+>     , ( "section", 0x00a7 )
+>     , ( "seenarabic", 0x0633 )
+>     , ( "seenfinalarabic", 0xfeb2 )
+>     , ( "seeninitialarabic", 0xfeb3 )
+>     , ( "seenmedialarabic", 0xfeb4 )
+>     , ( "segol", 0x05b6 )
+>     , ( "segol13", 0x05b6 )
+>     , ( "segol1f", 0x05b6 )
+>     , ( "segol2c", 0x05b6 )
+>     , ( "segolhebrew", 0x05b6 )
+>     , ( "segolnarrowhebrew", 0x05b6 )
+>     , ( "segolquarterhebrew", 0x05b6 )
+>     , ( "segoltahebrew", 0x0592 )
+>     , ( "segolwidehebrew", 0x05b6 )
+>     , ( "seharmenian", 0x057d )
+>     , ( "sehiragana", 0x305b )
+>     , ( "sekatakana", 0x30bb )
+>     , ( "sekatakanahalfwidth", 0xff7e )
+>     , ( "semicolon", 0x003b )
+>     , ( "semicolonarabic", 0x061b )
+>     , ( "semicolonmonospace", 0xff1b )
+>     , ( "semicolonsmall", 0xfe54 )
+>     , ( "semivoicedmarkkana", 0x309c )
+>     , ( "semivoicedmarkkanahalfwidth", 0xff9f )
+>     , ( "sentisquare", 0x3322 )
+>     , ( "sentosquare", 0x3323 )
+>     , ( "seven", 0x0037 )
+>     , ( "sevenarabic", 0x0667 )
+>     , ( "sevenbengali", 0x09ed )
+>     , ( "sevencircle", 0x2466 )
+>     , ( "sevencircleinversesansserif", 0x2790 )
+>     , ( "sevendeva", 0x096d )
+>     , ( "seveneighths", 0x215e )
+>     , ( "sevengujarati", 0x0aed )
+>     , ( "sevengurmukhi", 0x0a6d )
+>     , ( "sevenhackarabic", 0x0667 )
+>     , ( "sevenhangzhou", 0x3027 )
+>     , ( "sevenideographicparen", 0x3226 )
+>     , ( "seveninferior", 0x2087 )
+>     , ( "sevenmonospace", 0xff17 )
+>     , ( "sevenoldstyle", 0xf737 )
+>     , ( "sevenparen", 0x247a )
+>     , ( "sevenperiod", 0x248e )
+>     , ( "sevenpersian", 0x06f7 )
+>     , ( "sevenroman", 0x2176 )
+>     , ( "sevensuperior", 0x2077 )
+>     , ( "seventeencircle", 0x2470 )
+>     , ( "seventeenparen", 0x2484 )
+>     , ( "seventeenperiod", 0x2498 )
+>     , ( "seventhai", 0x0e57 )
+>     , ( "sfthyphen", 0x00ad )
+>     , ( "shaarmenian", 0x0577 )
+>     , ( "shabengali", 0x09b6 )
+>     , ( "shacyrillic", 0x0448 )
+>     , ( "shaddaarabic", 0x0651 )
+>     , ( "shaddadammaarabic", 0xfc61 )
+>     , ( "shaddadammatanarabic", 0xfc5e )
+>     , ( "shaddafathaarabic", 0xfc60 )
+>     , ( "shaddafathatanarabic", 0x0651 )
+>     , ( "shaddakasraarabic", 0xfc62 )
+>     , ( "shaddakasratanarabic", 0xfc5f )
+>     , ( "shade", 0x2592 )
+>     , ( "shadedark", 0x2593 )
+>     , ( "shadelight", 0x2591 )
+>     , ( "shademedium", 0x2592 )
+>     , ( "shadeva", 0x0936 )
+>     , ( "shagujarati", 0x0ab6 )
+>     , ( "shagurmukhi", 0x0a36 )
+>     , ( "shalshelethebrew", 0x0593 )
+>     , ( "shbopomofo", 0x3115 )
+>     , ( "shchacyrillic", 0x0449 )
+>     , ( "sheenarabic", 0x0634 )
+>     , ( "sheenfinalarabic", 0xfeb6 )
+>     , ( "sheeninitialarabic", 0xfeb7 )
+>     , ( "sheenmedialarabic", 0xfeb8 )
+>     , ( "sheicoptic", 0x03e3 )
+>     , ( "sheqel", 0x20aa )
+>     , ( "sheqelhebrew", 0x20aa )
+>     , ( "sheva", 0x05b0 )
+>     , ( "sheva115", 0x05b0 )
+>     , ( "sheva15", 0x05b0 )
+>     , ( "sheva22", 0x05b0 )
+>     , ( "sheva2e", 0x05b0 )
+>     , ( "shevahebrew", 0x05b0 )
+>     , ( "shevanarrowhebrew", 0x05b0 )
+>     , ( "shevaquarterhebrew", 0x05b0 )
+>     , ( "shevawidehebrew", 0x05b0 )
+>     , ( "shhacyrillic", 0x04bb )
+>     , ( "shimacoptic", 0x03ed )
+>     , ( "shin", 0x05e9 )
+>     , ( "shindagesh", 0xfb49 )
+>     , ( "shindageshhebrew", 0xfb49 )
+>     , ( "shindageshshindot", 0xfb2c )
+>     , ( "shindageshshindothebrew", 0xfb2c )
+>     , ( "shindageshsindot", 0xfb2d )
+>     , ( "shindageshsindothebrew", 0xfb2d )
+>     , ( "shindothebrew", 0x05c1 )
+>     , ( "shinhebrew", 0x05e9 )
+>     , ( "shinshindot", 0xfb2a )
+>     , ( "shinshindothebrew", 0xfb2a )
+>     , ( "shinsindot", 0xfb2b )
+>     , ( "shinsindothebrew", 0xfb2b )
+>     , ( "shook", 0x0282 )
+>     , ( "sigma", 0x03c3 )
+>     , ( "sigma1", 0x03c2 )
+>     , ( "sigmafinal", 0x03c2 )
+>     , ( "sigmalunatesymbolgreek", 0x03f2 )
+>     , ( "sihiragana", 0x3057 )
+>     , ( "sikatakana", 0x30b7 )
+>     , ( "sikatakanahalfwidth", 0xff7c )
+>     , ( "siluqhebrew", 0x05bd )
+>     , ( "siluqlefthebrew", 0x05bd )
+>     , ( "similar", 0x223c )
+>     , ( "sindothebrew", 0x05c2 )
+>     , ( "siosacirclekorean", 0x3274 )
+>     , ( "siosaparenkorean", 0x3214 )
+>     , ( "sioscieuckorean", 0x317e )
+>     , ( "sioscirclekorean", 0x3266 )
+>     , ( "sioskiyeokkorean", 0x317a )
+>     , ( "sioskorean", 0x3145 )
+>     , ( "siosnieunkorean", 0x317b )
+>     , ( "siosparenkorean", 0x3206 )
+>     , ( "siospieupkorean", 0x317d )
+>     , ( "siostikeutkorean", 0x317c )
+>     , ( "six", 0x0036 )
+>     , ( "sixarabic", 0x0666 )
+>     , ( "sixbengali", 0x09ec )
+>     , ( "sixcircle", 0x2465 )
+>     , ( "sixcircleinversesansserif", 0x278f )
+>     , ( "sixdeva", 0x096c )
+>     , ( "sixgujarati", 0x0aec )
+>     , ( "sixgurmukhi", 0x0a6c )
+>     , ( "sixhackarabic", 0x0666 )
+>     , ( "sixhangzhou", 0x3026 )
+>     , ( "sixideographicparen", 0x3225 )
+>     , ( "sixinferior", 0x2086 )
+>     , ( "sixmonospace", 0xff16 )
+>     , ( "sixoldstyle", 0xf736 )
+>     , ( "sixparen", 0x2479 )
+>     , ( "sixperiod", 0x248d )
+>     , ( "sixpersian", 0x06f6 )
+>     , ( "sixroman", 0x2175 )
+>     , ( "sixsuperior", 0x2076 )
+>     , ( "sixteencircle", 0x246f )
+>     , ( "sixteencurrencydenominatorbengali", 0x09f9 )
+>     , ( "sixteenparen", 0x2483 )
+>     , ( "sixteenperiod", 0x2497 )
+>     , ( "sixthai", 0x0e56 )
+>     , ( "slash", 0x002f )
+>     , ( "slashmonospace", 0xff0f )
+>     , ( "slong", 0x017f )
+>     , ( "slongdotaccent", 0x1e9b )
+>     , ( "smileface", 0x263a )
+>     , ( "smonospace", 0xff53 )
+>     , ( "sofpasuqhebrew", 0x05c3 )
+>     , ( "softhyphen", 0x00ad )
+>     , ( "softsigncyrillic", 0x044c )
+>     , ( "sohiragana", 0x305d )
+>     , ( "sokatakana", 0x30bd )
+>     , ( "sokatakanahalfwidth", 0xff7f )
+>     , ( "soliduslongoverlaycmb", 0x0338 )
+>     , ( "solidusshortoverlaycmb", 0x0337 )
+>     , ( "sorusithai", 0x0e29 )
+>     , ( "sosalathai", 0x0e28 )
+>     , ( "sosothai", 0x0e0b )
+>     , ( "sosuathai", 0x0e2a )
+>     , ( "space", 0x0020 )
+>     , ( "spacehackarabic", 0x0020 )
+>     , ( "spade", 0x2660 )
+>     , ( "spadesuitblack", 0x2660 )
+>     , ( "spadesuitwhite", 0x2664 )
+>     , ( "sparen", 0x24ae )
+>     , ( "squarebelowcmb", 0x033b )
+>     , ( "squarecc", 0x33c4 )
+>     , ( "squarecm", 0x339d )
+>     , ( "squarediagonalcrosshatchfill", 0x25a9 )
+>     , ( "squarehorizontalfill", 0x25a4 )
+>     , ( "squarekg", 0x338f )
+>     , ( "squarekm", 0x339e )
+>     , ( "squarekmcapital", 0x33ce )
+>     , ( "squareln", 0x33d1 )
+>     , ( "squarelog", 0x33d2 )
+>     , ( "squaremg", 0x338e )
+>     , ( "squaremil", 0x33d5 )
+>     , ( "squaremm", 0x339c )
+>     , ( "squaremsquared", 0x33a1 )
+>     , ( "squareorthogonalcrosshatchfill", 0x25a6 )
+>     , ( "squareupperlefttolowerrightfill", 0x25a7 )
+>     , ( "squareupperrighttolowerleftfill", 0x25a8 )
+>     , ( "squareverticalfill", 0x25a5 )
+>     , ( "squarewhitewithsmallblack", 0x25a3 )
+>     , ( "srsquare", 0x33db )
+>     , ( "ssabengali", 0x09b7 )
+>     , ( "ssadeva", 0x0937 )
+>     , ( "ssagujarati", 0x0ab7 )
+>     , ( "ssangcieuckorean", 0x3149 )
+>     , ( "ssanghieuhkorean", 0x3185 )
+>     , ( "ssangieungkorean", 0x3180 )
+>     , ( "ssangkiyeokkorean", 0x3132 )
+>     , ( "ssangnieunkorean", 0x3165 )
+>     , ( "ssangpieupkorean", 0x3143 )
+>     , ( "ssangsioskorean", 0x3146 )
+>     , ( "ssangtikeutkorean", 0x3138 )
+>     , ( "ssuperior", 0xf6f2 )
+>     , ( "sterling", 0x00a3 )
+>     , ( "sterlingmonospace", 0xffe1 )
+>     , ( "strokelongoverlaycmb", 0x0336 )
+>     , ( "strokeshortoverlaycmb", 0x0335 )
+>     , ( "subset", 0x2282 )
+>     , ( "subsetnotequal", 0x228a )
+>     , ( "subsetorequal", 0x2286 )
+>     , ( "succeeds", 0x227b )
+>     , ( "suchthat", 0x220b )
+>     , ( "suhiragana", 0x3059 )
+>     , ( "sukatakana", 0x30b9 )
+>     , ( "sukatakanahalfwidth", 0xff7d )
+>     , ( "sukunarabic", 0x0652 )
+>     , ( "summation", 0x2211 )
+>     , ( "sun", 0x263c )
+>     , ( "superset", 0x2283 )
+>     , ( "supersetnotequal", 0x228b )
+>     , ( "supersetorequal", 0x2287 )
+>     , ( "svsquare", 0x33dc )
+>     , ( "syouwaerasquare", 0x337c )
+>     , ( "t", 0x0074 )
+>     , ( "tabengali", 0x09a4 )
+>     , ( "tackdown", 0x22a4 )
+>     , ( "tackleft", 0x22a3 )
+>     , ( "tadeva", 0x0924 )
+>     , ( "tagujarati", 0x0aa4 )
+>     , ( "tagurmukhi", 0x0a24 )
+>     , ( "taharabic", 0x0637 )
+>     , ( "tahfinalarabic", 0xfec2 )
+>     , ( "tahinitialarabic", 0xfec3 )
+>     , ( "tahiragana", 0x305f )
+>     , ( "tahmedialarabic", 0xfec4 )
+>     , ( "taisyouerasquare", 0x337d )
+>     , ( "takatakana", 0x30bf )
+>     , ( "takatakanahalfwidth", 0xff80 )
+>     , ( "tatweelarabic", 0x0640 )
+>     , ( "tau", 0x03c4 )
+>     , ( "tav", 0x05ea )
+>     , ( "tavdages", 0xfb4a )
+>     , ( "tavdagesh", 0xfb4a )
+>     , ( "tavdageshhebrew", 0xfb4a )
+>     , ( "tavhebrew", 0x05ea )
+>     , ( "tbar", 0x0167 )
+>     , ( "tbopomofo", 0x310a )
+>     , ( "tcaron", 0x0165 )
+>     , ( "tccurl", 0x02a8 )
+>     , ( "tcedilla", 0x0163 )
+>     , ( "tcheharabic", 0x0686 )
+>     , ( "tchehfinalarabic", 0xfb7b )
+>     , ( "tchehinitialarabic", 0xfb7c )
+>     , ( "tchehmedialarabic", 0xfb7d )
+>     , ( "tchehmeeminitialarabic", 0xfb7c )
+>     , ( "tcircle", 0x24e3 )
+>     , ( "tcircumflexbelow", 0x1e71 )
+>     , ( "tcommaaccent", 0x0163 )
+>     , ( "tdieresis", 0x1e97 )
+>     , ( "tdotaccent", 0x1e6b )
+>     , ( "tdotbelow", 0x1e6d )
+>     , ( "tecyrillic", 0x0442 )
+>     , ( "tedescendercyrillic", 0x04ad )
+>     , ( "teharabic", 0x062a )
+>     , ( "tehfinalarabic", 0xfe96 )
+>     , ( "tehhahinitialarabic", 0xfca2 )
+>     , ( "tehhahisolatedarabic", 0xfc0c )
+>     , ( "tehinitialarabic", 0xfe97 )
+>     , ( "tehiragana", 0x3066 )
+>     , ( "tehjeeminitialarabic", 0xfca1 )
+>     , ( "tehjeemisolatedarabic", 0xfc0b )
+>     , ( "tehmarbutaarabic", 0x0629 )
+>     , ( "tehmarbutafinalarabic", 0xfe94 )
+>     , ( "tehmedialarabic", 0xfe98 )
+>     , ( "tehmeeminitialarabic", 0xfca4 )
+>     , ( "tehmeemisolatedarabic", 0xfc0e )
+>     , ( "tehnoonfinalarabic", 0xfc73 )
+>     , ( "tekatakana", 0x30c6 )
+>     , ( "tekatakanahalfwidth", 0xff83 )
+>     , ( "telephone", 0x2121 )
+>     , ( "telephoneblack", 0x260e )
+>     , ( "telishagedolahebrew", 0x05a0 )
+>     , ( "telishaqetanahebrew", 0x05a9 )
+>     , ( "tencircle", 0x2469 )
+>     , ( "tenideographicparen", 0x3229 )
+>     , ( "tenparen", 0x247d )
+>     , ( "tenperiod", 0x2491 )
+>     , ( "tenroman", 0x2179 )
+>     , ( "tesh", 0x02a7 )
+>     , ( "tet", 0x05d8 )
+>     , ( "tetdagesh", 0xfb38 )
+>     , ( "tetdageshhebrew", 0xfb38 )
+>     , ( "tethebrew", 0x05d8 )
+>     , ( "tetsecyrillic", 0x04b5 )
+>     , ( "tevirhebrew", 0x059b )
+>     , ( "tevirlefthebrew", 0x059b )
+>     , ( "thabengali", 0x09a5 )
+>     , ( "thadeva", 0x0925 )
+>     , ( "thagujarati", 0x0aa5 )
+>     , ( "thagurmukhi", 0x0a25 )
+>     , ( "thalarabic", 0x0630 )
+>     , ( "thalfinalarabic", 0xfeac )
+>     , ( "thanthakhatlowleftthai", 0xf898 )
+>     , ( "thanthakhatlowrightthai", 0xf897 )
+>     , ( "thanthakhatthai", 0x0e4c )
+>     , ( "thanthakhatupperleftthai", 0xf896 )
+>     , ( "theharabic", 0x062b )
+>     , ( "thehfinalarabic", 0xfe9a )
+>     , ( "thehinitialarabic", 0xfe9b )
+>     , ( "thehmedialarabic", 0xfe9c )
+>     , ( "thereexists", 0x2203 )
+>     , ( "therefore", 0x2234 )
+>     , ( "theta", 0x03b8 )
+>     , ( "theta1", 0x03d1 )
+>     , ( "thetasymbolgreek", 0x03d1 )
+>     , ( "thieuthacirclekorean", 0x3279 )
+>     , ( "thieuthaparenkorean", 0x3219 )
+>     , ( "thieuthcirclekorean", 0x326b )
+>     , ( "thieuthkorean", 0x314c )
+>     , ( "thieuthparenkorean", 0x320b )
+>     , ( "thirteencircle", 0x246c )
+>     , ( "thirteenparen", 0x2480 )
+>     , ( "thirteenperiod", 0x2494 )
+>     , ( "thonangmonthothai", 0x0e11 )
+>     , ( "thook", 0x01ad )
+>     , ( "thophuthaothai", 0x0e12 )
+>     , ( "thorn", 0x00fe )
+>     , ( "thothahanthai", 0x0e17 )
+>     , ( "thothanthai", 0x0e10 )
+>     , ( "thothongthai", 0x0e18 )
+>     , ( "thothungthai", 0x0e16 )
+>     , ( "thousandcyrillic", 0x0482 )
+>     , ( "thousandsseparatorarabic", 0x066c )
+>     , ( "thousandsseparatorpersian", 0x066c )
+>     , ( "three", 0x0033 )
+>     , ( "threearabic", 0x0663 )
+>     , ( "threebengali", 0x09e9 )
+>     , ( "threecircle", 0x2462 )
+>     , ( "threecircleinversesansserif", 0x278c )
+>     , ( "threedeva", 0x0969 )
+>     , ( "threeeighths", 0x215c )
+>     , ( "threegujarati", 0x0ae9 )
+>     , ( "threegurmukhi", 0x0a69 )
+>     , ( "threehackarabic", 0x0663 )
+>     , ( "threehangzhou", 0x3023 )
+>     , ( "threeideographicparen", 0x3222 )
+>     , ( "threeinferior", 0x2083 )
+>     , ( "threemonospace", 0xff13 )
+>     , ( "threenumeratorbengali", 0x09f6 )
+>     , ( "threeoldstyle", 0xf733 )
+>     , ( "threeparen", 0x2476 )
+>     , ( "threeperiod", 0x248a )
+>     , ( "threepersian", 0x06f3 )
+>     , ( "threequarters", 0x00be )
+>     , ( "threequartersemdash", 0xf6de )
+>     , ( "threeroman", 0x2172 )
+>     , ( "threesuperior", 0x00b3 )
+>     , ( "threethai", 0x0e53 )
+>     , ( "thzsquare", 0x3394 )
+>     , ( "tihiragana", 0x3061 )
+>     , ( "tikatakana", 0x30c1 )
+>     , ( "tikatakanahalfwidth", 0xff81 )
+>     , ( "tikeutacirclekorean", 0x3270 )
+>     , ( "tikeutaparenkorean", 0x3210 )
+>     , ( "tikeutcirclekorean", 0x3262 )
+>     , ( "tikeutkorean", 0x3137 )
+>     , ( "tikeutparenkorean", 0x3202 )
+>     , ( "tilde", 0x02dc )
+>     , ( "tildebelowcmb", 0x0330 )
+>     , ( "tildecmb", 0x0303 )
+>     , ( "tildecomb", 0x0303 )
+>     , ( "tildedoublecmb", 0x0360 )
+>     , ( "tildeoperator", 0x223c )
+>     , ( "tildeoverlaycmb", 0x0334 )
+>     , ( "tildeverticalcmb", 0x033e )
+>     , ( "timescircle", 0x2297 )
+>     , ( "tipehahebrew", 0x0596 )
+>     , ( "tipehalefthebrew", 0x0596 )
+>     , ( "tippigurmukhi", 0x0a70 )
+>     , ( "titlocyrilliccmb", 0x0483 )
+>     , ( "tiwnarmenian", 0x057f )
+>     , ( "tlinebelow", 0x1e6f )
+>     , ( "tmonospace", 0xff54 )
+>     , ( "toarmenian", 0x0569 )
+>     , ( "tohiragana", 0x3068 )
+>     , ( "tokatakana", 0x30c8 )
+>     , ( "tokatakanahalfwidth", 0xff84 )
+>     , ( "tonebarextrahighmod", 0x02e5 )
+>     , ( "tonebarextralowmod", 0x02e9 )
+>     , ( "tonebarhighmod", 0x02e6 )
+>     , ( "tonebarlowmod", 0x02e8 )
+>     , ( "tonebarmidmod", 0x02e7 )
+>     , ( "tonefive", 0x01bd )
+>     , ( "tonesix", 0x0185 )
+>     , ( "tonetwo", 0x01a8 )
+>     , ( "tonos", 0x0384 )
+>     , ( "tonsquare", 0x3327 )
+>     , ( "topatakthai", 0x0e0f )
+>     , ( "tortoiseshellbracketleft", 0x3014 )
+>     , ( "tortoiseshellbracketleftsmall", 0xfe5d )
+>     , ( "tortoiseshellbracketleftvertical", 0xfe39 )
+>     , ( "tortoiseshellbracketright", 0x3015 )
+>     , ( "tortoiseshellbracketrightsmall", 0xfe5e )
+>     , ( "tortoiseshellbracketrightvertical", 0xfe3a )
+>     , ( "totaothai", 0x0e15 )
+>     , ( "tpalatalhook", 0x01ab )
+>     , ( "tparen", 0x24af )
+>     , ( "trademark", 0x2122 )
+>     , ( "trademarksans", 0xf8ea )
+>     , ( "trademarkserif", 0xf6db )
+>     , ( "tretroflexhook", 0x0288 )
+>     , ( "triagdn", 0x25bc )
+>     , ( "triaglf", 0x25c4 )
+>     , ( "triagrt", 0x25ba )
+>     , ( "triagup", 0x25b2 )
+>     , ( "ts", 0x02a6 )
+>     , ( "tsadi", 0x05e6 )
+>     , ( "tsadidagesh", 0xfb46 )
+>     , ( "tsadidageshhebrew", 0xfb46 )
+>     , ( "tsadihebrew", 0x05e6 )
+>     , ( "tsecyrillic", 0x0446 )
+>     , ( "tsere", 0x05b5 )
+>     , ( "tsere12", 0x05b5 )
+>     , ( "tsere1e", 0x05b5 )
+>     , ( "tsere2b", 0x05b5 )
+>     , ( "tserehebrew", 0x05b5 )
+>     , ( "tserenarrowhebrew", 0x05b5 )
+>     , ( "tserequarterhebrew", 0x05b5 )
+>     , ( "tserewidehebrew", 0x05b5 )
+>     , ( "tshecyrillic", 0x045b )
+>     , ( "tsuperior", 0xf6f3 )
+>     , ( "ttabengali", 0x099f )
+>     , ( "ttadeva", 0x091f )
+>     , ( "ttagujarati", 0x0a9f )
+>     , ( "ttagurmukhi", 0x0a1f )
+>     , ( "tteharabic", 0x0679 )
+>     , ( "ttehfinalarabic", 0xfb67 )
+>     , ( "ttehinitialarabic", 0xfb68 )
+>     , ( "ttehmedialarabic", 0xfb69 )
+>     , ( "tthabengali", 0x09a0 )
+>     , ( "tthadeva", 0x0920 )
+>     , ( "tthagujarati", 0x0aa0 )
+>     , ( "tthagurmukhi", 0x0a20 )
+>     , ( "tturned", 0x0287 )
+>     , ( "tuhiragana", 0x3064 )
+>     , ( "tukatakana", 0x30c4 )
+>     , ( "tukatakanahalfwidth", 0xff82 )
+>     , ( "tusmallhiragana", 0x3063 )
+>     , ( "tusmallkatakana", 0x30c3 )
+>     , ( "tusmallkatakanahalfwidth", 0xff6f )
+>     , ( "twelvecircle", 0x246b )
+>     , ( "twelveparen", 0x247f )
+>     , ( "twelveperiod", 0x2493 )
+>     , ( "twelveroman", 0x217b )
+>     , ( "twentycircle", 0x2473 )
+>     , ( "twentyhangzhou", 0x5344 )
+>     , ( "twentyparen", 0x2487 )
+>     , ( "twentyperiod", 0x249b )
+>     , ( "two", 0x0032 )
+>     , ( "twoarabic", 0x0662 )
+>     , ( "twobengali", 0x09e8 )
+>     , ( "twocircle", 0x2461 )
+>     , ( "twocircleinversesansserif", 0x278b )
+>     , ( "twodeva", 0x0968 )
+>     , ( "twodotenleader", 0x2025 )
+>     , ( "twodotleader", 0x2025 )
+>     , ( "twodotleadervertical", 0xfe30 )
+>     , ( "twogujarati", 0x0ae8 )
+>     , ( "twogurmukhi", 0x0a68 )
+>     , ( "twohackarabic", 0x0662 )
+>     , ( "twohangzhou", 0x3022 )
+>     , ( "twoideographicparen", 0x3221 )
+>     , ( "twoinferior", 0x2082 )
+>     , ( "twomonospace", 0xff12 )
+>     , ( "twonumeratorbengali", 0x09f5 )
+>     , ( "twooldstyle", 0xf732 )
+>     , ( "twoparen", 0x2475 )
+>     , ( "twoperiod", 0x2489 )
+>     , ( "twopersian", 0x06f2 )
+>     , ( "tworoman", 0x2171 )
+>     , ( "twostroke", 0x01bb )
+>     , ( "twosuperior", 0x00b2 )
+>     , ( "twothai", 0x0e52 )
+>     , ( "twothirds", 0x2154 )
+>     , ( "u", 0x0075 )
+>     , ( "uacute", 0x00fa )
+>     , ( "ubar", 0x0289 )
+>     , ( "ubengali", 0x0989 )
+>     , ( "ubopomofo", 0x3128 )
+>     , ( "ubreve", 0x016d )
+>     , ( "ucaron", 0x01d4 )
+>     , ( "ucircle", 0x24e4 )
+>     , ( "ucircumflex", 0x00fb )
+>     , ( "ucircumflexbelow", 0x1e77 )
+>     , ( "ucyrillic", 0x0443 )
+>     , ( "udattadeva", 0x0951 )
+>     , ( "udblacute", 0x0171 )
+>     , ( "udblgrave", 0x0215 )
+>     , ( "udeva", 0x0909 )
+>     , ( "udieresis", 0x00fc )
+>     , ( "udieresisacute", 0x01d8 )
+>     , ( "udieresisbelow", 0x1e73 )
+>     , ( "udieresiscaron", 0x01da )
+>     , ( "udieresiscyrillic", 0x04f1 )
+>     , ( "udieresisgrave", 0x01dc )
+>     , ( "udieresismacron", 0x01d6 )
+>     , ( "udotbelow", 0x1ee5 )
+>     , ( "ugrave", 0x00f9 )
+>     , ( "ugujarati", 0x0a89 )
+>     , ( "ugurmukhi", 0x0a09 )
+>     , ( "uhiragana", 0x3046 )
+>     , ( "uhookabove", 0x1ee7 )
+>     , ( "uhorn", 0x01b0 )
+>     , ( "uhornacute", 0x1ee9 )
+>     , ( "uhorndotbelow", 0x1ef1 )
+>     , ( "uhorngrave", 0x1eeb )
+>     , ( "uhornhookabove", 0x1eed )
+>     , ( "uhorntilde", 0x1eef )
+>     , ( "uhungarumlaut", 0x0171 )
+>     , ( "uhungarumlautcyrillic", 0x04f3 )
+>     , ( "uinvertedbreve", 0x0217 )
+>     , ( "ukatakana", 0x30a6 )
+>     , ( "ukatakanahalfwidth", 0xff73 )
+>     , ( "ukcyrillic", 0x0479 )
+>     , ( "ukorean", 0x315c )
+>     , ( "umacron", 0x016b )
+>     , ( "umacroncyrillic", 0x04ef )
+>     , ( "umacrondieresis", 0x1e7b )
+>     , ( "umatragurmukhi", 0x0a41 )
+>     , ( "umonospace", 0xff55 )
+>     , ( "underscore", 0x005f )
+>     , ( "underscoredbl", 0x2017 )
+>     , ( "underscoremonospace", 0xff3f )
+>     , ( "underscorevertical", 0xfe33 )
+>     , ( "underscorewavy", 0xfe4f )
+>     , ( "union", 0x222a )
+>     , ( "universal", 0x2200 )
+>     , ( "uogonek", 0x0173 )
+>     , ( "uparen", 0x24b0 )
+>     , ( "upblock", 0x2580 )
+>     , ( "upperdothebrew", 0x05c4 )
+>     , ( "upsilon", 0x03c5 )
+>     , ( "upsilondieresis", 0x03cb )
+>     , ( "upsilondieresistonos", 0x03b0 )
+>     , ( "upsilonlatin", 0x028a )
+>     , ( "upsilontonos", 0x03cd )
+>     , ( "uptackbelowcmb", 0x031d )
+>     , ( "uptackmod", 0x02d4 )
+>     , ( "uragurmukhi", 0x0a73 )
+>     , ( "uring", 0x016f )
+>     , ( "ushortcyrillic", 0x045e )
+>     , ( "usmallhiragana", 0x3045 )
+>     , ( "usmallkatakana", 0x30a5 )
+>     , ( "usmallkatakanahalfwidth", 0xff69 )
+>     , ( "ustraightcyrillic", 0x04af )
+>     , ( "ustraightstrokecyrillic", 0x04b1 )
+>     , ( "utilde", 0x0169 )
+>     , ( "utildeacute", 0x1e79 )
+>     , ( "utildebelow", 0x1e75 )
+>     , ( "uubengali", 0x098a )
+>     , ( "uudeva", 0x090a )
+>     , ( "uugujarati", 0x0a8a )
+>     , ( "uugurmukhi", 0x0a0a )
+>     , ( "uumatragurmukhi", 0x0a42 )
+>     , ( "uuvowelsignbengali", 0x09c2 )
+>     , ( "uuvowelsigndeva", 0x0942 )
+>     , ( "uuvowelsigngujarati", 0x0ac2 )
+>     , ( "uvowelsignbengali", 0x09c1 )
+>     , ( "uvowelsigndeva", 0x0941 )
+>     , ( "uvowelsigngujarati", 0x0ac1 )
+>     , ( "v", 0x0076 )
+>     , ( "vadeva", 0x0935 )
+>     , ( "vagujarati", 0x0ab5 )
+>     , ( "vagurmukhi", 0x0a35 )
+>     , ( "vakatakana", 0x30f7 )
+>     , ( "vav", 0x05d5 )
+>     , ( "vavdagesh", 0xfb35 )
+>     , ( "vavdagesh65", 0xfb35 )
+>     , ( "vavdageshhebrew", 0xfb35 )
+>     , ( "vavhebrew", 0x05d5 )
+>     , ( "vavholam", 0xfb4b )
+>     , ( "vavholamhebrew", 0xfb4b )
+>     , ( "vavvavhebrew", 0x05f0 )
+>     , ( "vavyodhebrew", 0x05f1 )
+>     , ( "vcircle", 0x24e5 )
+>     , ( "vdotbelow", 0x1e7f )
+>     , ( "vecyrillic", 0x0432 )
+>     , ( "veharabic", 0x06a4 )
+>     , ( "vehfinalarabic", 0xfb6b )
+>     , ( "vehinitialarabic", 0xfb6c )
+>     , ( "vehmedialarabic", 0xfb6d )
+>     , ( "vekatakana", 0x30f9 )
+>     , ( "venus", 0x2640 )
+>     , ( "verticalbar", 0x007c )
+>     , ( "verticallineabovecmb", 0x030d )
+>     , ( "verticallinebelowcmb", 0x0329 )
+>     , ( "verticallinelowmod", 0x02cc )
+>     , ( "verticallinemod", 0x02c8 )
+>     , ( "vewarmenian", 0x057e )
+>     , ( "vhook", 0x028b )
+>     , ( "vikatakana", 0x30f8 )
+>     , ( "viramabengali", 0x09cd )
+>     , ( "viramadeva", 0x094d )
+>     , ( "viramagujarati", 0x0acd )
+>     , ( "visargabengali", 0x0983 )
+>     , ( "visargadeva", 0x0903 )
+>     , ( "visargagujarati", 0x0a83 )
+>     , ( "vmonospace", 0xff56 )
+>     , ( "voarmenian", 0x0578 )
+>     , ( "voicediterationhiragana", 0x309e )
+>     , ( "voicediterationkatakana", 0x30fe )
+>     , ( "voicedmarkkana", 0x309b )
+>     , ( "voicedmarkkanahalfwidth", 0xff9e )
+>     , ( "vokatakana", 0x30fa )
+>     , ( "vparen", 0x24b1 )
+>     , ( "vtilde", 0x1e7d )
+>     , ( "vturned", 0x028c )
+>     , ( "vuhiragana", 0x3094 )
+>     , ( "vukatakana", 0x30f4 )
+>     , ( "w", 0x0077 )
+>     , ( "wacute", 0x1e83 )
+>     , ( "waekorean", 0x3159 )
+>     , ( "wahiragana", 0x308f )
+>     , ( "wakatakana", 0x30ef )
+>     , ( "wakatakanahalfwidth", 0xff9c )
+>     , ( "wakorean", 0x3158 )
+>     , ( "wasmallhiragana", 0x308e )
+>     , ( "wasmallkatakana", 0x30ee )
+>     , ( "wattosquare", 0x3357 )
+>     , ( "wavedash", 0x301c )
+>     , ( "wavyunderscorevertical", 0xfe34 )
+>     , ( "wawarabic", 0x0648 )
+>     , ( "wawfinalarabic", 0xfeee )
+>     , ( "wawhamzaabovearabic", 0x0624 )
+>     , ( "wawhamzaabovefinalarabic", 0xfe86 )
+>     , ( "wbsquare", 0x33dd )
+>     , ( "wcircle", 0x24e6 )
+>     , ( "wcircumflex", 0x0175 )
+>     , ( "wdieresis", 0x1e85 )
+>     , ( "wdotaccent", 0x1e87 )
+>     , ( "wdotbelow", 0x1e89 )
+>     , ( "wehiragana", 0x3091 )
+>     , ( "weierstrass", 0x2118 )
+>     , ( "wekatakana", 0x30f1 )
+>     , ( "wekorean", 0x315e )
+>     , ( "weokorean", 0x315d )
+>     , ( "wgrave", 0x1e81 )
+>     , ( "whitebullet", 0x25e6 )
+>     , ( "whitecircle", 0x25cb )
+>     , ( "whitecircleinverse", 0x25d9 )
+>     , ( "whitecornerbracketleft", 0x300e )
+>     , ( "whitecornerbracketleftvertical", 0xfe43 )
+>     , ( "whitecornerbracketright", 0x300f )
+>     , ( "whitecornerbracketrightvertical", 0xfe44 )
+>     , ( "whitediamond", 0x25c7 )
+>     , ( "whitediamondcontainingblacksmalldiamond", 0x25c8 )
+>     , ( "whitedownpointingsmalltriangle", 0x25bf )
+>     , ( "whitedownpointingtriangle", 0x25bd )
+>     , ( "whiteleftpointingsmalltriangle", 0x25c3 )
+>     , ( "whiteleftpointingtriangle", 0x25c1 )
+>     , ( "whitelenticularbracketleft", 0x3016 )
+>     , ( "whitelenticularbracketright", 0x3017 )
+>     , ( "whiterightpointingsmalltriangle", 0x25b9 )
+>     , ( "whiterightpointingtriangle", 0x25b7 )
+>     , ( "whitesmallsquare", 0x25ab )
+>     , ( "whitesmilingface", 0x263a )
+>     , ( "whitesquare", 0x25a1 )
+>     , ( "whitestar", 0x2606 )
+>     , ( "whitetelephone", 0x260f )
+>     , ( "whitetortoiseshellbracketleft", 0x3018 )
+>     , ( "whitetortoiseshellbracketright", 0x3019 )
+>     , ( "whiteuppointingsmalltriangle", 0x25b5 )
+>     , ( "whiteuppointingtriangle", 0x25b3 )
+>     , ( "wihiragana", 0x3090 )
+>     , ( "wikatakana", 0x30f0 )
+>     , ( "wikorean", 0x315f )
+>     , ( "wmonospace", 0xff57 )
+>     , ( "wohiragana", 0x3092 )
+>     , ( "wokatakana", 0x30f2 )
+>     , ( "wokatakanahalfwidth", 0xff66 )
+>     , ( "won", 0x20a9 )
+>     , ( "wonmonospace", 0xffe6 )
+>     , ( "wowaenthai", 0x0e27 )
+>     , ( "wparen", 0x24b2 )
+>     , ( "wring", 0x1e98 )
+>     , ( "wsuperior", 0x02b7 )
+>     , ( "wturned", 0x028d )
+>     , ( "wynn", 0x01bf )
+>     , ( "x", 0x0078 )
+>     , ( "xabovecmb", 0x033d )
+>     , ( "xbopomofo", 0x3112 )
+>     , ( "xcircle", 0x24e7 )
+>     , ( "xdieresis", 0x1e8d )
+>     , ( "xdotaccent", 0x1e8b )
+>     , ( "xeharmenian", 0x056d )
+>     , ( "xi", 0x03be )
+>     , ( "xmonospace", 0xff58 )
+>     , ( "xparen", 0x24b3 )
+>     , ( "xsuperior", 0x02e3 )
+>     , ( "y", 0x0079 )
+>     , ( "yaadosquare", 0x334e )
+>     , ( "yabengali", 0x09af )
+>     , ( "yacute", 0x00fd )
+>     , ( "yadeva", 0x092f )
+>     , ( "yaekorean", 0x3152 )
+>     , ( "yagujarati", 0x0aaf )
+>     , ( "yagurmukhi", 0x0a2f )
+>     , ( "yahiragana", 0x3084 )
+>     , ( "yakatakana", 0x30e4 )
+>     , ( "yakatakanahalfwidth", 0xff94 )
+>     , ( "yakorean", 0x3151 )
+>     , ( "yamakkanthai", 0x0e4e )
+>     , ( "yasmallhiragana", 0x3083 )
+>     , ( "yasmallkatakana", 0x30e3 )
+>     , ( "yasmallkatakanahalfwidth", 0xff6c )
+>     , ( "yatcyrillic", 0x0463 )
+>     , ( "ycircle", 0x24e8 )
+>     , ( "ycircumflex", 0x0177 )
+>     , ( "ydieresis", 0x00ff )
+>     , ( "ydotaccent", 0x1e8f )
+>     , ( "ydotbelow", 0x1ef5 )
+>     , ( "yeharabic", 0x064a )
+>     , ( "yehbarreearabic", 0x06d2 )
+>     , ( "yehbarreefinalarabic", 0xfbaf )
+>     , ( "yehfinalarabic", 0xfef2 )
+>     , ( "yehhamzaabovearabic", 0x0626 )
+>     , ( "yehhamzaabovefinalarabic", 0xfe8a )
+>     , ( "yehhamzaaboveinitialarabic", 0xfe8b )
+>     , ( "yehhamzaabovemedialarabic", 0xfe8c )
+>     , ( "yehinitialarabic", 0xfef3 )
+>     , ( "yehmedialarabic", 0xfef4 )
+>     , ( "yehmeeminitialarabic", 0xfcdd )
+>     , ( "yehmeemisolatedarabic", 0xfc58 )
+>     , ( "yehnoonfinalarabic", 0xfc94 )
+>     , ( "yehthreedotsbelowarabic", 0x06d1 )
+>     , ( "yekorean", 0x3156 )
+>     , ( "yen", 0x00a5 )
+>     , ( "yenmonospace", 0xffe5 )
+>     , ( "yeokorean", 0x3155 )
+>     , ( "yeorinhieuhkorean", 0x3186 )
+>     , ( "yerahbenyomohebrew", 0x05aa )
+>     , ( "yerahbenyomolefthebrew", 0x05aa )
+>     , ( "yericyrillic", 0x044b )
+>     , ( "yerudieresiscyrillic", 0x04f9 )
+>     , ( "yesieungkorean", 0x3181 )
+>     , ( "yesieungpansioskorean", 0x3183 )
+>     , ( "yesieungsioskorean", 0x3182 )
+>     , ( "yetivhebrew", 0x059a )
+>     , ( "ygrave", 0x1ef3 )
+>     , ( "yhook", 0x01b4 )
+>     , ( "yhookabove", 0x1ef7 )
+>     , ( "yiarmenian", 0x0575 )
+>     , ( "yicyrillic", 0x0457 )
+>     , ( "yikorean", 0x3162 )
+>     , ( "yinyang", 0x262f )
+>     , ( "yiwnarmenian", 0x0582 )
+>     , ( "ymonospace", 0xff59 )
+>     , ( "yod", 0x05d9 )
+>     , ( "yoddagesh", 0xfb39 )
+>     , ( "yoddageshhebrew", 0xfb39 )
+>     , ( "yodhebrew", 0x05d9 )
+>     , ( "yodyodhebrew", 0x05f2 )
+>     , ( "yodyodpatahhebrew", 0xfb1f )
+>     , ( "yohiragana", 0x3088 )
+>     , ( "yoikorean", 0x3189 )
+>     , ( "yokatakana", 0x30e8 )
+>     , ( "yokatakanahalfwidth", 0xff96 )
+>     , ( "yokorean", 0x315b )
+>     , ( "yosmallhiragana", 0x3087 )
+>     , ( "yosmallkatakana", 0x30e7 )
+>     , ( "yosmallkatakanahalfwidth", 0xff6e )
+>     , ( "yotgreek", 0x03f3 )
+>     , ( "yoyaekorean", 0x3188 )
+>     , ( "yoyakorean", 0x3187 )
+>     , ( "yoyakthai", 0x0e22 )
+>     , ( "yoyingthai", 0x0e0d )
+>     , ( "yparen", 0x24b4 )
+>     , ( "ypogegrammeni", 0x037a )
+>     , ( "ypogegrammenigreekcmb", 0x0345 )
+>     , ( "yr", 0x01a6 )
+>     , ( "yring", 0x1e99 )
+>     , ( "ysuperior", 0x02b8 )
+>     , ( "ytilde", 0x1ef9 )
+>     , ( "yturned", 0x028e )
+>     , ( "yuhiragana", 0x3086 )
+>     , ( "yuikorean", 0x318c )
+>     , ( "yukatakana", 0x30e6 )
+>     , ( "yukatakanahalfwidth", 0xff95 )
+>     , ( "yukorean", 0x3160 )
+>     , ( "yusbigcyrillic", 0x046b )
+>     , ( "yusbigiotifiedcyrillic", 0x046d )
+>     , ( "yuslittlecyrillic", 0x0467 )
+>     , ( "yuslittleiotifiedcyrillic", 0x0469 )
+>     , ( "yusmallhiragana", 0x3085 )
+>     , ( "yusmallkatakana", 0x30e5 )
+>     , ( "yusmallkatakanahalfwidth", 0xff6d )
+>     , ( "yuyekorean", 0x318b )
+>     , ( "yuyeokorean", 0x318a )
+>     , ( "yyabengali", 0x09df )
+>     , ( "yyadeva", 0x095f )
+>     , ( "z", 0x007a )
+>     , ( "zaarmenian", 0x0566 )
+>     , ( "zacute", 0x017a )
+>     , ( "zadeva", 0x095b )
+>     , ( "zagurmukhi", 0x0a5b )
+>     , ( "zaharabic", 0x0638 )
+>     , ( "zahfinalarabic", 0xfec6 )
+>     , ( "zahinitialarabic", 0xfec7 )
+>     , ( "zahiragana", 0x3056 )
+>     , ( "zahmedialarabic", 0xfec8 )
+>     , ( "zainarabic", 0x0632 )
+>     , ( "zainfinalarabic", 0xfeb0 )
+>     , ( "zakatakana", 0x30b6 )
+>     , ( "zaqefgadolhebrew", 0x0595 )
+>     , ( "zaqefqatanhebrew", 0x0594 )
+>     , ( "zarqahebrew", 0x0598 )
+>     , ( "zayin", 0x05d6 )
+>     , ( "zayindagesh", 0xfb36 )
+>     , ( "zayindageshhebrew", 0xfb36 )
+>     , ( "zayinhebrew", 0x05d6 )
+>     , ( "zbopomofo", 0x3117 )
+>     , ( "zcaron", 0x017e )
+>     , ( "zcircle", 0x24e9 )
+>     , ( "zcircumflex", 0x1e91 )
+>     , ( "zcurl", 0x0291 )
+>     , ( "zdot", 0x017c )
+>     , ( "zdotaccent", 0x017c )
+>     , ( "zdotbelow", 0x1e93 )
+>     , ( "zecyrillic", 0x0437 )
+>     , ( "zedescendercyrillic", 0x0499 )
+>     , ( "zedieresiscyrillic", 0x04df )
+>     , ( "zehiragana", 0x305c )
+>     , ( "zekatakana", 0x30bc )
+>     , ( "zero", 0x0030 )
+>     , ( "zeroarabic", 0x0660 )
+>     , ( "zerobengali", 0x09e6 )
+>     , ( "zerodeva", 0x0966 )
+>     , ( "zerogujarati", 0x0ae6 )
+>     , ( "zerogurmukhi", 0x0a66 )
+>     , ( "zerohackarabic", 0x0660 )
+>     , ( "zeroinferior", 0x2080 )
+>     , ( "zeromonospace", 0xff10 )
+>     , ( "zerooldstyle", 0xf730 )
+>     , ( "zeropersian", 0x06f0 )
+>     , ( "zerosuperior", 0x2070 )
+>     , ( "zerothai", 0x0e50 )
+>     , ( "zerowidthjoiner", 0xfeff )
+>     , ( "zerowidthnonjoiner", 0x200c )
+>     , ( "zerowidthspace", 0x200b )
+>     , ( "zeta", 0x03b6 )
+>     , ( "zhbopomofo", 0x3113 )
+>     , ( "zhearmenian", 0x056a )
+>     , ( "zhebrevecyrillic", 0x04c2 )
+>     , ( "zhecyrillic", 0x0436 )
+>     , ( "zhedescendercyrillic", 0x0497 )
+>     , ( "zhedieresiscyrillic", 0x04dd )
+>     , ( "zihiragana", 0x3058 )
+>     , ( "zikatakana", 0x30b8 )
+>     , ( "zinorhebrew", 0x05ae )
+>     , ( "zlinebelow", 0x1e95 )
+>     , ( "zmonospace", 0xff5a )
+>     , ( "zohiragana", 0x305e )
+>     , ( "zokatakana", 0x30be )
+>     , ( "zparen", 0x24b5 )
+>     , ( "zretroflexhook", 0x0290 )
+>     , ( "zstroke", 0x01b6 )
+>     , ( "zuhiragana", 0x305a )
+>     , ( "zukatakana", 0x30ba )
+>     ]
diff --git a/src/Wumpus/Core/Text/GlyphNames.lhs b/src/Wumpus/Core/Text/GlyphNames.lhs
new file mode 100644
--- /dev/null
+++ b/src/Wumpus/Core/Text/GlyphNames.lhs
@@ -0,0 +1,3714 @@
+{-# OPTIONS -Wall #-}
+
+> ------------------------------------------------------------------------------
+> -- | 
+> -- Module       :   Wumpus.Core.Text.GlyphNames
+> -- Copyright    :   (c) Stephen Tetley 2010
+> -- License      :   BSD3
+> -- 
+> -- Maintainer   :   Stephen Tetley <stephen.tetley@gmail.com>
+> -- Stability    :   unstable
+> -- Portability  :   GHC
+> -- 
+> -- Map of Unicode code points to PostScript glyph names.
+> -- 
+> -- \*\* This file is auto-generated. \*\*
+> -- 
+> -- Generated - 2010-11-13 15:30
+> -- 
+> ------------------------------------------------------------------------------
+
+> module Wumpus.Core.Text.GlyphNames
+>   (
+>      ps_glyph_names
+>   ) where
+
+> import Data.IntMap ( IntMap, fromAscList )
+
+> -- | Index table mapping from Unicode code point to the
+> -- corresponding PostScript name defined by the Adobe
+> -- glyphlist.
+
+> ps_glyph_names :: IntMap String
+> ps_glyph_names = fromAscList $
+>     [ ( 0x0001, "controlSTX" )
+>     , ( 0x0002, "controlSOT" )
+>     , ( 0x0003, "controlETX" )
+>     , ( 0x0004, "controlEOT" )
+>     , ( 0x0005, "controlENQ" )
+>     , ( 0x0006, "controlACK" )
+>     , ( 0x0007, "controlBEL" )
+>     , ( 0x0008, "controlBS" )
+>     , ( 0x0009, "controlHT" )
+>     , ( 0x000a, "controlLF" )
+>     , ( 0x000b, "controlVT" )
+>     , ( 0x000c, "controlFF" )
+>     , ( 0x000d, "controlCR" )
+>     , ( 0x000e, "controlSO" )
+>     , ( 0x000f, "controlSI" )
+>     , ( 0x0010, "controlDLE" )
+>     , ( 0x0011, "controlDC1" )
+>     , ( 0x0012, "controlDC2" )
+>     , ( 0x0013, "controlDC3" )
+>     , ( 0x0014, "controlDC4" )
+>     , ( 0x0015, "controlNAK" )
+>     , ( 0x0016, "controlSYN" )
+>     , ( 0x0017, "controlETB" )
+>     , ( 0x0018, "controlCAN" )
+>     , ( 0x0019, "controlEM" )
+>     , ( 0x001a, "controlSUB" )
+>     , ( 0x001b, "controlESC" )
+>     , ( 0x001c, "controlFS" )
+>     , ( 0x001d, "controlGS" )
+>     , ( 0x001e, "controlRS" )
+>     , ( 0x001f, "controlUS" )
+>     , ( 0x0020, "space" )
+>     , ( 0x0021, "exclam" )
+>     , ( 0x0022, "quotedbl" )
+>     , ( 0x0023, "numbersign" )
+>     , ( 0x0024, "dollar" )
+>     , ( 0x0025, "percent" )
+>     , ( 0x0026, "ampersand" )
+>     , ( 0x0027, "quotesingle" )
+>     , ( 0x0028, "parenleft" )
+>     , ( 0x0029, "parenright" )
+>     , ( 0x002a, "asterisk" )
+>     , ( 0x002b, "plus" )
+>     , ( 0x002c, "comma" )
+>     , ( 0x002d, "hyphen" )
+>     , ( 0x002e, "period" )
+>     , ( 0x002f, "slash" )
+>     , ( 0x0030, "zero" )
+>     , ( 0x0031, "one" )
+>     , ( 0x0032, "two" )
+>     , ( 0x0033, "three" )
+>     , ( 0x0034, "four" )
+>     , ( 0x0035, "five" )
+>     , ( 0x0036, "six" )
+>     , ( 0x0037, "seven" )
+>     , ( 0x0038, "eight" )
+>     , ( 0x0039, "nine" )
+>     , ( 0x003a, "colon" )
+>     , ( 0x003b, "semicolon" )
+>     , ( 0x003c, "less" )
+>     , ( 0x003d, "equal" )
+>     , ( 0x003e, "greater" )
+>     , ( 0x003f, "question" )
+>     , ( 0x0040, "at" )
+>     , ( 0x0041, "A" )
+>     , ( 0x0042, "B" )
+>     , ( 0x0043, "C" )
+>     , ( 0x0044, "D" )
+>     , ( 0x0045, "E" )
+>     , ( 0x0046, "F" )
+>     , ( 0x0047, "G" )
+>     , ( 0x0048, "H" )
+>     , ( 0x0049, "I" )
+>     , ( 0x004a, "J" )
+>     , ( 0x004b, "K" )
+>     , ( 0x004c, "L" )
+>     , ( 0x004d, "M" )
+>     , ( 0x004e, "N" )
+>     , ( 0x004f, "O" )
+>     , ( 0x0050, "P" )
+>     , ( 0x0051, "Q" )
+>     , ( 0x0052, "R" )
+>     , ( 0x0053, "S" )
+>     , ( 0x0054, "T" )
+>     , ( 0x0055, "U" )
+>     , ( 0x0056, "V" )
+>     , ( 0x0057, "W" )
+>     , ( 0x0058, "X" )
+>     , ( 0x0059, "Y" )
+>     , ( 0x005a, "Z" )
+>     , ( 0x005b, "bracketleft" )
+>     , ( 0x005c, "backslash" )
+>     , ( 0x005d, "bracketright" )
+>     , ( 0x005e, "asciicircum" )
+>     , ( 0x005f, "underscore" )
+>     , ( 0x0060, "grave" )
+>     , ( 0x0061, "a" )
+>     , ( 0x0062, "b" )
+>     , ( 0x0063, "c" )
+>     , ( 0x0064, "d" )
+>     , ( 0x0065, "e" )
+>     , ( 0x0066, "f" )
+>     , ( 0x0067, "g" )
+>     , ( 0x0068, "h" )
+>     , ( 0x0069, "i" )
+>     , ( 0x006a, "j" )
+>     , ( 0x006b, "k" )
+>     , ( 0x006c, "l" )
+>     , ( 0x006d, "m" )
+>     , ( 0x006e, "n" )
+>     , ( 0x006f, "o" )
+>     , ( 0x0070, "p" )
+>     , ( 0x0071, "q" )
+>     , ( 0x0072, "r" )
+>     , ( 0x0073, "s" )
+>     , ( 0x0074, "t" )
+>     , ( 0x0075, "u" )
+>     , ( 0x0076, "v" )
+>     , ( 0x0077, "w" )
+>     , ( 0x0078, "x" )
+>     , ( 0x0079, "y" )
+>     , ( 0x007a, "z" )
+>     , ( 0x007b, "braceleft" )
+>     , ( 0x007c, "bar" )
+>     , ( 0x007d, "braceright" )
+>     , ( 0x007e, "asciitilde" )
+>     , ( 0x007f, "controlDEL" )
+>     , ( 0x00a0, "nbspace" )
+>     , ( 0x00a1, "exclamdown" )
+>     , ( 0x00a2, "cent" )
+>     , ( 0x00a3, "sterling" )
+>     , ( 0x00a4, "currency" )
+>     , ( 0x00a5, "yen" )
+>     , ( 0x00a6, "brokenbar" )
+>     , ( 0x00a7, "section" )
+>     , ( 0x00a8, "dieresis" )
+>     , ( 0x00a9, "copyright" )
+>     , ( 0x00aa, "ordfeminine" )
+>     , ( 0x00ab, "guillemotleft" )
+>     , ( 0x00ac, "logicalnot" )
+>     , ( 0x00ad, "sfthyphen" )
+>     , ( 0x00ae, "registered" )
+>     , ( 0x00af, "macron" )
+>     , ( 0x00b0, "degree" )
+>     , ( 0x00b1, "plusminus" )
+>     , ( 0x00b2, "twosuperior" )
+>     , ( 0x00b3, "threesuperior" )
+>     , ( 0x00b4, "acute" )
+>     , ( 0x00b5, "mu" )
+>     , ( 0x00b6, "paragraph" )
+>     , ( 0x00b7, "middot" )
+>     , ( 0x00b8, "cedilla" )
+>     , ( 0x00b9, "onesuperior" )
+>     , ( 0x00ba, "ordmasculine" )
+>     , ( 0x00bb, "guillemotright" )
+>     , ( 0x00bc, "onequarter" )
+>     , ( 0x00bd, "onehalf" )
+>     , ( 0x00be, "threequarters" )
+>     , ( 0x00bf, "questiondown" )
+>     , ( 0x00c0, "Agrave" )
+>     , ( 0x00c1, "Aacute" )
+>     , ( 0x00c2, "Acircumflex" )
+>     , ( 0x00c3, "Atilde" )
+>     , ( 0x00c4, "Adieresis" )
+>     , ( 0x00c5, "Aring" )
+>     , ( 0x00c6, "AE" )
+>     , ( 0x00c7, "Ccedilla" )
+>     , ( 0x00c8, "Egrave" )
+>     , ( 0x00c9, "Eacute" )
+>     , ( 0x00ca, "Ecircumflex" )
+>     , ( 0x00cb, "Edieresis" )
+>     , ( 0x00cc, "Igrave" )
+>     , ( 0x00cd, "Iacute" )
+>     , ( 0x00ce, "Icircumflex" )
+>     , ( 0x00cf, "Idieresis" )
+>     , ( 0x00d0, "Eth" )
+>     , ( 0x00d1, "Ntilde" )
+>     , ( 0x00d2, "Ograve" )
+>     , ( 0x00d3, "Oacute" )
+>     , ( 0x00d4, "Ocircumflex" )
+>     , ( 0x00d5, "Otilde" )
+>     , ( 0x00d6, "Odieresis" )
+>     , ( 0x00d7, "multiply" )
+>     , ( 0x00d8, "Oslash" )
+>     , ( 0x00d9, "Ugrave" )
+>     , ( 0x00da, "Uacute" )
+>     , ( 0x00db, "Ucircumflex" )
+>     , ( 0x00dc, "Udieresis" )
+>     , ( 0x00dd, "Yacute" )
+>     , ( 0x00de, "Thorn" )
+>     , ( 0x00df, "germandbls" )
+>     , ( 0x00e0, "agrave" )
+>     , ( 0x00e1, "aacute" )
+>     , ( 0x00e2, "acircumflex" )
+>     , ( 0x00e3, "atilde" )
+>     , ( 0x00e4, "adieresis" )
+>     , ( 0x00e5, "aring" )
+>     , ( 0x00e6, "ae" )
+>     , ( 0x00e7, "ccedilla" )
+>     , ( 0x00e8, "egrave" )
+>     , ( 0x00e9, "eacute" )
+>     , ( 0x00ea, "ecircumflex" )
+>     , ( 0x00eb, "edieresis" )
+>     , ( 0x00ec, "igrave" )
+>     , ( 0x00ed, "iacute" )
+>     , ( 0x00ee, "icircumflex" )
+>     , ( 0x00ef, "idieresis" )
+>     , ( 0x00f0, "eth" )
+>     , ( 0x00f1, "ntilde" )
+>     , ( 0x00f2, "ograve" )
+>     , ( 0x00f3, "oacute" )
+>     , ( 0x00f4, "ocircumflex" )
+>     , ( 0x00f5, "otilde" )
+>     , ( 0x00f6, "odieresis" )
+>     , ( 0x00f7, "divide" )
+>     , ( 0x00f8, "oslash" )
+>     , ( 0x00f9, "ugrave" )
+>     , ( 0x00fa, "uacute" )
+>     , ( 0x00fb, "ucircumflex" )
+>     , ( 0x00fc, "udieresis" )
+>     , ( 0x00fd, "yacute" )
+>     , ( 0x00fe, "thorn" )
+>     , ( 0x00ff, "ydieresis" )
+>     , ( 0x0100, "Amacron" )
+>     , ( 0x0101, "amacron" )
+>     , ( 0x0102, "Abreve" )
+>     , ( 0x0103, "abreve" )
+>     , ( 0x0104, "Aogonek" )
+>     , ( 0x0105, "aogonek" )
+>     , ( 0x0106, "Cacute" )
+>     , ( 0x0107, "cacute" )
+>     , ( 0x0108, "Ccircumflex" )
+>     , ( 0x0109, "ccircumflex" )
+>     , ( 0x010a, "Cdot" )
+>     , ( 0x010b, "cdot" )
+>     , ( 0x010c, "Ccaron" )
+>     , ( 0x010d, "ccaron" )
+>     , ( 0x010e, "Dcaron" )
+>     , ( 0x010f, "dcaron" )
+>     , ( 0x0110, "Dcroat" )
+>     , ( 0x0111, "dcroat" )
+>     , ( 0x0112, "Emacron" )
+>     , ( 0x0113, "emacron" )
+>     , ( 0x0114, "Ebreve" )
+>     , ( 0x0115, "ebreve" )
+>     , ( 0x0116, "Edot" )
+>     , ( 0x0117, "edot" )
+>     , ( 0x0118, "Eogonek" )
+>     , ( 0x0119, "eogonek" )
+>     , ( 0x011a, "Ecaron" )
+>     , ( 0x011b, "ecaron" )
+>     , ( 0x011c, "Gcircumflex" )
+>     , ( 0x011d, "gcircumflex" )
+>     , ( 0x011e, "Gbreve" )
+>     , ( 0x011f, "gbreve" )
+>     , ( 0x0120, "Gdot" )
+>     , ( 0x0121, "gdot" )
+>     , ( 0x0122, "Gcedilla" )
+>     , ( 0x0123, "gcedilla" )
+>     , ( 0x0124, "Hcircumflex" )
+>     , ( 0x0125, "hcircumflex" )
+>     , ( 0x0126, "Hbar" )
+>     , ( 0x0127, "hbar" )
+>     , ( 0x0128, "Itilde" )
+>     , ( 0x0129, "itilde" )
+>     , ( 0x012a, "Imacron" )
+>     , ( 0x012b, "imacron" )
+>     , ( 0x012c, "Ibreve" )
+>     , ( 0x012d, "ibreve" )
+>     , ( 0x012e, "Iogonek" )
+>     , ( 0x012f, "iogonek" )
+>     , ( 0x0130, "Idot" )
+>     , ( 0x0131, "dotlessi" )
+>     , ( 0x0132, "IJ" )
+>     , ( 0x0133, "ij" )
+>     , ( 0x0134, "Jcircumflex" )
+>     , ( 0x0135, "jcircumflex" )
+>     , ( 0x0136, "Kcedilla" )
+>     , ( 0x0137, "kcedilla" )
+>     , ( 0x0138, "kgreenlandic" )
+>     , ( 0x0139, "Lacute" )
+>     , ( 0x013a, "lacute" )
+>     , ( 0x013b, "Lcedilla" )
+>     , ( 0x013c, "lcedilla" )
+>     , ( 0x013d, "Lcaron" )
+>     , ( 0x013e, "lcaron" )
+>     , ( 0x013f, "Ldot" )
+>     , ( 0x0140, "ldot" )
+>     , ( 0x0141, "Lslash" )
+>     , ( 0x0142, "lslash" )
+>     , ( 0x0143, "Nacute" )
+>     , ( 0x0144, "nacute" )
+>     , ( 0x0145, "Ncedilla" )
+>     , ( 0x0146, "ncedilla" )
+>     , ( 0x0147, "Ncaron" )
+>     , ( 0x0148, "ncaron" )
+>     , ( 0x0149, "napostrophe" )
+>     , ( 0x014a, "Eng" )
+>     , ( 0x014b, "eng" )
+>     , ( 0x014c, "Omacron" )
+>     , ( 0x014d, "omacron" )
+>     , ( 0x014e, "Obreve" )
+>     , ( 0x014f, "obreve" )
+>     , ( 0x0150, "Odblacute" )
+>     , ( 0x0151, "odblacute" )
+>     , ( 0x0152, "OE" )
+>     , ( 0x0153, "oe" )
+>     , ( 0x0154, "Racute" )
+>     , ( 0x0155, "racute" )
+>     , ( 0x0156, "Rcedilla" )
+>     , ( 0x0157, "rcedilla" )
+>     , ( 0x0158, "Rcaron" )
+>     , ( 0x0159, "rcaron" )
+>     , ( 0x015a, "Sacute" )
+>     , ( 0x015b, "sacute" )
+>     , ( 0x015c, "Scircumflex" )
+>     , ( 0x015d, "scircumflex" )
+>     , ( 0x015e, "Scedilla" )
+>     , ( 0x015f, "scedilla" )
+>     , ( 0x0160, "Scaron" )
+>     , ( 0x0161, "scaron" )
+>     , ( 0x0162, "Tcedilla" )
+>     , ( 0x0163, "tcedilla" )
+>     , ( 0x0164, "Tcaron" )
+>     , ( 0x0165, "tcaron" )
+>     , ( 0x0166, "Tbar" )
+>     , ( 0x0167, "tbar" )
+>     , ( 0x0168, "Utilde" )
+>     , ( 0x0169, "utilde" )
+>     , ( 0x016a, "Umacron" )
+>     , ( 0x016b, "umacron" )
+>     , ( 0x016c, "Ubreve" )
+>     , ( 0x016d, "ubreve" )
+>     , ( 0x016e, "Uring" )
+>     , ( 0x016f, "uring" )
+>     , ( 0x0170, "Udblacute" )
+>     , ( 0x0171, "udblacute" )
+>     , ( 0x0172, "Uogonek" )
+>     , ( 0x0173, "uogonek" )
+>     , ( 0x0174, "Wcircumflex" )
+>     , ( 0x0175, "wcircumflex" )
+>     , ( 0x0176, "Ycircumflex" )
+>     , ( 0x0177, "ycircumflex" )
+>     , ( 0x0178, "Ydieresis" )
+>     , ( 0x0179, "Zacute" )
+>     , ( 0x017a, "zacute" )
+>     , ( 0x017b, "Zdot" )
+>     , ( 0x017c, "zdot" )
+>     , ( 0x017d, "Zcaron" )
+>     , ( 0x017e, "zcaron" )
+>     , ( 0x017f, "longs" )
+>     , ( 0x0180, "bstroke" )
+>     , ( 0x0181, "Bhook" )
+>     , ( 0x0182, "Btopbar" )
+>     , ( 0x0183, "btopbar" )
+>     , ( 0x0184, "Tonesix" )
+>     , ( 0x0185, "tonesix" )
+>     , ( 0x0186, "Oopen" )
+>     , ( 0x0187, "Chook" )
+>     , ( 0x0188, "chook" )
+>     , ( 0x0189, "Dafrican" )
+>     , ( 0x018a, "Dhook" )
+>     , ( 0x018b, "Dtopbar" )
+>     , ( 0x018c, "dtopbar" )
+>     , ( 0x018d, "deltaturned" )
+>     , ( 0x018e, "Ereversed" )
+>     , ( 0x018f, "Schwa" )
+>     , ( 0x0190, "Eopen" )
+>     , ( 0x0191, "Fhook" )
+>     , ( 0x0192, "florin" )
+>     , ( 0x0193, "Ghook" )
+>     , ( 0x0194, "Gammaafrican" )
+>     , ( 0x0195, "hv" )
+>     , ( 0x0196, "Iotaafrican" )
+>     , ( 0x0197, "Istroke" )
+>     , ( 0x0198, "Khook" )
+>     , ( 0x0199, "khook" )
+>     , ( 0x019a, "lbar" )
+>     , ( 0x019b, "lambdastroke" )
+>     , ( 0x019c, "Mturned" )
+>     , ( 0x019d, "Nhookleft" )
+>     , ( 0x019e, "nlegrightlong" )
+>     , ( 0x019f, "Ocenteredtilde" )
+>     , ( 0x01a0, "Ohorn" )
+>     , ( 0x01a1, "ohorn" )
+>     , ( 0x01a2, "Oi" )
+>     , ( 0x01a3, "oi" )
+>     , ( 0x01a4, "Phook" )
+>     , ( 0x01a5, "phook" )
+>     , ( 0x01a6, "yr" )
+>     , ( 0x01a7, "Tonetwo" )
+>     , ( 0x01a8, "tonetwo" )
+>     , ( 0x01a9, "Esh" )
+>     , ( 0x01aa, "eshreversedloop" )
+>     , ( 0x01ab, "tpalatalhook" )
+>     , ( 0x01ac, "Thook" )
+>     , ( 0x01ad, "thook" )
+>     , ( 0x01ae, "Tretroflexhook" )
+>     , ( 0x01af, "Uhorn" )
+>     , ( 0x01b0, "uhorn" )
+>     , ( 0x01b1, "Upsilonafrican" )
+>     , ( 0x01b2, "Vhook" )
+>     , ( 0x01b3, "Yhook" )
+>     , ( 0x01b4, "yhook" )
+>     , ( 0x01b5, "Zstroke" )
+>     , ( 0x01b6, "zstroke" )
+>     , ( 0x01b7, "Ezh" )
+>     , ( 0x01b8, "Ezhreversed" )
+>     , ( 0x01b9, "ezhreversed" )
+>     , ( 0x01ba, "ezhtail" )
+>     , ( 0x01bb, "twostroke" )
+>     , ( 0x01bc, "Tonefive" )
+>     , ( 0x01bd, "tonefive" )
+>     , ( 0x01be, "glottalinvertedstroke" )
+>     , ( 0x01bf, "wynn" )
+>     , ( 0x01c0, "clickdental" )
+>     , ( 0x01c1, "clicklateral" )
+>     , ( 0x01c2, "clickalveolar" )
+>     , ( 0x01c3, "clickretroflex" )
+>     , ( 0x01c4, "DZcaron" )
+>     , ( 0x01c5, "Dzcaron" )
+>     , ( 0x01c6, "dzcaron" )
+>     , ( 0x01c7, "LJ" )
+>     , ( 0x01c8, "Lj" )
+>     , ( 0x01c9, "lj" )
+>     , ( 0x01ca, "NJ" )
+>     , ( 0x01cb, "Nj" )
+>     , ( 0x01cc, "nj" )
+>     , ( 0x01cd, "Acaron" )
+>     , ( 0x01ce, "acaron" )
+>     , ( 0x01cf, "Icaron" )
+>     , ( 0x01d0, "icaron" )
+>     , ( 0x01d1, "Ocaron" )
+>     , ( 0x01d2, "ocaron" )
+>     , ( 0x01d3, "Ucaron" )
+>     , ( 0x01d4, "ucaron" )
+>     , ( 0x01d5, "Udieresismacron" )
+>     , ( 0x01d6, "udieresismacron" )
+>     , ( 0x01d7, "Udieresisacute" )
+>     , ( 0x01d8, "udieresisacute" )
+>     , ( 0x01d9, "Udieresiscaron" )
+>     , ( 0x01da, "udieresiscaron" )
+>     , ( 0x01db, "Udieresisgrave" )
+>     , ( 0x01dc, "udieresisgrave" )
+>     , ( 0x01dd, "eturned" )
+>     , ( 0x01de, "Adieresismacron" )
+>     , ( 0x01df, "adieresismacron" )
+>     , ( 0x01e0, "Adotmacron" )
+>     , ( 0x01e1, "adotmacron" )
+>     , ( 0x01e2, "AEmacron" )
+>     , ( 0x01e3, "aemacron" )
+>     , ( 0x01e4, "Gstroke" )
+>     , ( 0x01e5, "gstroke" )
+>     , ( 0x01e6, "Gcaron" )
+>     , ( 0x01e7, "gcaron" )
+>     , ( 0x01e8, "Kcaron" )
+>     , ( 0x01e9, "kcaron" )
+>     , ( 0x01ea, "Oogonek" )
+>     , ( 0x01eb, "oogonek" )
+>     , ( 0x01ec, "Oogonekmacron" )
+>     , ( 0x01ed, "oogonekmacron" )
+>     , ( 0x01ee, "Ezhcaron" )
+>     , ( 0x01ef, "ezhcaron" )
+>     , ( 0x01f0, "jcaron" )
+>     , ( 0x01f1, "DZ" )
+>     , ( 0x01f2, "Dz" )
+>     , ( 0x01f3, "dz" )
+>     , ( 0x01f4, "Gacute" )
+>     , ( 0x01f5, "gacute" )
+>     , ( 0x01fa, "Aringacute" )
+>     , ( 0x01fb, "aringacute" )
+>     , ( 0x01fc, "AEacute" )
+>     , ( 0x01fd, "aeacute" )
+>     , ( 0x01fe, "Oslashacute" )
+>     , ( 0x01ff, "oslashacute" )
+>     , ( 0x0200, "Adblgrave" )
+>     , ( 0x0201, "adblgrave" )
+>     , ( 0x0202, "Ainvertedbreve" )
+>     , ( 0x0203, "ainvertedbreve" )
+>     , ( 0x0204, "Edblgrave" )
+>     , ( 0x0205, "edblgrave" )
+>     , ( 0x0206, "Einvertedbreve" )
+>     , ( 0x0207, "einvertedbreve" )
+>     , ( 0x0208, "Idblgrave" )
+>     , ( 0x0209, "idblgrave" )
+>     , ( 0x020a, "Iinvertedbreve" )
+>     , ( 0x020b, "iinvertedbreve" )
+>     , ( 0x020c, "Odblgrave" )
+>     , ( 0x020d, "odblgrave" )
+>     , ( 0x020e, "Oinvertedbreve" )
+>     , ( 0x020f, "oinvertedbreve" )
+>     , ( 0x0210, "Rdblgrave" )
+>     , ( 0x0211, "rdblgrave" )
+>     , ( 0x0212, "Rinvertedbreve" )
+>     , ( 0x0213, "rinvertedbreve" )
+>     , ( 0x0214, "Udblgrave" )
+>     , ( 0x0215, "udblgrave" )
+>     , ( 0x0216, "Uinvertedbreve" )
+>     , ( 0x0217, "uinvertedbreve" )
+>     , ( 0x0218, "Scommaaccent" )
+>     , ( 0x0219, "scommaaccent" )
+>     , ( 0x0250, "aturned" )
+>     , ( 0x0251, "ascript" )
+>     , ( 0x0252, "ascriptturned" )
+>     , ( 0x0253, "bhook" )
+>     , ( 0x0254, "oopen" )
+>     , ( 0x0255, "ccurl" )
+>     , ( 0x0256, "dtail" )
+>     , ( 0x0257, "dhook" )
+>     , ( 0x0258, "ereversed" )
+>     , ( 0x0259, "schwa" )
+>     , ( 0x025a, "schwahook" )
+>     , ( 0x025b, "eopen" )
+>     , ( 0x025c, "eopenreversed" )
+>     , ( 0x025d, "eopenreversedhook" )
+>     , ( 0x025e, "eopenreversedclosed" )
+>     , ( 0x025f, "jdotlessstroke" )
+>     , ( 0x0260, "ghook" )
+>     , ( 0x0261, "gscript" )
+>     , ( 0x0263, "gammalatinsmall" )
+>     , ( 0x0264, "ramshorn" )
+>     , ( 0x0265, "hturned" )
+>     , ( 0x0266, "hhook" )
+>     , ( 0x0267, "henghook" )
+>     , ( 0x0268, "istroke" )
+>     , ( 0x0269, "iotalatin" )
+>     , ( 0x026b, "lmiddletilde" )
+>     , ( 0x026c, "lbelt" )
+>     , ( 0x026d, "lhookretroflex" )
+>     , ( 0x026e, "lezh" )
+>     , ( 0x026f, "mturned" )
+>     , ( 0x0270, "mlonglegturned" )
+>     , ( 0x0271, "mhook" )
+>     , ( 0x0272, "nhookleft" )
+>     , ( 0x0273, "nhookretroflex" )
+>     , ( 0x0275, "obarred" )
+>     , ( 0x0277, "omegalatinclosed" )
+>     , ( 0x0278, "philatin" )
+>     , ( 0x0279, "rturned" )
+>     , ( 0x027a, "rlonglegturned" )
+>     , ( 0x027b, "rhookturned" )
+>     , ( 0x027c, "rlongleg" )
+>     , ( 0x027d, "rhook" )
+>     , ( 0x027e, "rfishhook" )
+>     , ( 0x027f, "rfishhookreversed" )
+>     , ( 0x0281, "Rsmallinverted" )
+>     , ( 0x0282, "shook" )
+>     , ( 0x0283, "esh" )
+>     , ( 0x0284, "dotlessjstrokehook" )
+>     , ( 0x0285, "eshsquatreversed" )
+>     , ( 0x0286, "eshcurl" )
+>     , ( 0x0287, "tturned" )
+>     , ( 0x0288, "tretroflexhook" )
+>     , ( 0x0289, "ubar" )
+>     , ( 0x028a, "upsilonlatin" )
+>     , ( 0x028b, "vhook" )
+>     , ( 0x028c, "vturned" )
+>     , ( 0x028d, "wturned" )
+>     , ( 0x028e, "yturned" )
+>     , ( 0x0290, "zretroflexhook" )
+>     , ( 0x0291, "zcurl" )
+>     , ( 0x0292, "ezh" )
+>     , ( 0x0293, "ezhcurl" )
+>     , ( 0x0294, "glottalstop" )
+>     , ( 0x0295, "glottalstopreversed" )
+>     , ( 0x0296, "glottalstopinverted" )
+>     , ( 0x0297, "cstretched" )
+>     , ( 0x0298, "bilabialclick" )
+>     , ( 0x029a, "eopenclosed" )
+>     , ( 0x029b, "Gsmallhook" )
+>     , ( 0x029d, "jcrossedtail" )
+>     , ( 0x029e, "kturned" )
+>     , ( 0x02a0, "qhook" )
+>     , ( 0x02a1, "glottalstopstroke" )
+>     , ( 0x02a2, "glottalstopstrokereversed" )
+>     , ( 0x02a3, "dzaltone" )
+>     , ( 0x02a4, "dezh" )
+>     , ( 0x02a5, "dzcurl" )
+>     , ( 0x02a6, "ts" )
+>     , ( 0x02a7, "tesh" )
+>     , ( 0x02a8, "tccurl" )
+>     , ( 0x02b0, "hsuperior" )
+>     , ( 0x02b1, "hhooksuperior" )
+>     , ( 0x02b2, "jsuperior" )
+>     , ( 0x02b4, "rturnedsuperior" )
+>     , ( 0x02b5, "rhookturnedsuperior" )
+>     , ( 0x02b6, "Rsmallinvertedsuperior" )
+>     , ( 0x02b7, "wsuperior" )
+>     , ( 0x02b8, "ysuperior" )
+>     , ( 0x02b9, "primemod" )
+>     , ( 0x02ba, "dblprimemod" )
+>     , ( 0x02bb, "commaturnedmod" )
+>     , ( 0x02bc, "afii57929" )
+>     , ( 0x02bd, "afii64937" )
+>     , ( 0x02be, "ringhalfright" )
+>     , ( 0x02bf, "ringhalfleft" )
+>     , ( 0x02c0, "glottalstopmod" )
+>     , ( 0x02c1, "glottalstopreversedmod" )
+>     , ( 0x02c2, "arrowheadleftmod" )
+>     , ( 0x02c3, "arrowheadrightmod" )
+>     , ( 0x02c4, "arrowheadupmod" )
+>     , ( 0x02c5, "arrowheaddownmod" )
+>     , ( 0x02c6, "circumflex" )
+>     , ( 0x02c7, "caron" )
+>     , ( 0x02c8, "verticallinemod" )
+>     , ( 0x02c9, "firsttonechinese" )
+>     , ( 0x02ca, "secondtonechinese" )
+>     , ( 0x02cb, "fourthtonechinese" )
+>     , ( 0x02cc, "verticallinelowmod" )
+>     , ( 0x02cd, "macronlowmod" )
+>     , ( 0x02ce, "gravelowmod" )
+>     , ( 0x02cf, "acutelowmod" )
+>     , ( 0x02d0, "colontriangularmod" )
+>     , ( 0x02d1, "colontriangularhalfmod" )
+>     , ( 0x02d2, "ringhalfrightcentered" )
+>     , ( 0x02d3, "ringhalfleftcentered" )
+>     , ( 0x02d4, "uptackmod" )
+>     , ( 0x02d5, "downtackmod" )
+>     , ( 0x02d6, "plusmod" )
+>     , ( 0x02d7, "minusmod" )
+>     , ( 0x02d8, "breve" )
+>     , ( 0x02d9, "dotaccent" )
+>     , ( 0x02da, "ring" )
+>     , ( 0x02db, "ogonek" )
+>     , ( 0x02dc, "ilde" )
+>     , ( 0x02dd, "hungarumlaut" )
+>     , ( 0x02de, "rhotichookmod" )
+>     , ( 0x02e0, "gammasuperior" )
+>     , ( 0x02e3, "xsuperior" )
+>     , ( 0x02e4, "glottalstopreversedsuperior" )
+>     , ( 0x02e5, "tonebarextrahighmod" )
+>     , ( 0x02e6, "tonebarhighmod" )
+>     , ( 0x02e7, "tonebarmidmod" )
+>     , ( 0x02e8, "tonebarlowmod" )
+>     , ( 0x02e9, "tonebarextralowmod" )
+>     , ( 0x0300, "gravecmb" )
+>     , ( 0x0301, "acutecmb" )
+>     , ( 0x0302, "circumflexcmb" )
+>     , ( 0x0303, "tildecmb" )
+>     , ( 0x0304, "macroncmb" )
+>     , ( 0x0305, "overlinecmb" )
+>     , ( 0x0306, "brevecmb" )
+>     , ( 0x0307, "dotaccentcmb" )
+>     , ( 0x0308, "dieresiscmb" )
+>     , ( 0x0309, "hookabovecomb" )
+>     , ( 0x030a, "ringcmb" )
+>     , ( 0x030b, "hungarumlautcmb" )
+>     , ( 0x030c, "caroncmb" )
+>     , ( 0x030d, "verticallineabovecmb" )
+>     , ( 0x030e, "dblverticallineabovecmb" )
+>     , ( 0x030f, "dblgravecmb" )
+>     , ( 0x0310, "candrabinducmb" )
+>     , ( 0x0311, "breveinvertedcmb" )
+>     , ( 0x0312, "commaturnedabovecmb" )
+>     , ( 0x0313, "commaabovecmb" )
+>     , ( 0x0314, "commareversedabovecmb" )
+>     , ( 0x0315, "commaaboverightcmb" )
+>     , ( 0x0316, "gravebelowcmb" )
+>     , ( 0x0317, "acutebelowcmb" )
+>     , ( 0x0318, "lefttackbelowcmb" )
+>     , ( 0x0319, "righttackbelowcmb" )
+>     , ( 0x031a, "leftangleabovecmb" )
+>     , ( 0x031b, "horncmb" )
+>     , ( 0x031c, "ringhalfleftbelowcmb" )
+>     , ( 0x031d, "uptackbelowcmb" )
+>     , ( 0x031e, "downtackbelowcmb" )
+>     , ( 0x031f, "plusbelowcmb" )
+>     , ( 0x0320, "minusbelowcmb" )
+>     , ( 0x0321, "hookpalatalizedbelowcmb" )
+>     , ( 0x0322, "hookretroflexbelowcmb" )
+>     , ( 0x0323, "dotbelowcmb" )
+>     , ( 0x0324, "dieresisbelowcmb" )
+>     , ( 0x0325, "ringbelowcmb" )
+>     , ( 0x0327, "cedillacmb" )
+>     , ( 0x0328, "ogonekcmb" )
+>     , ( 0x0329, "verticallinebelowcmb" )
+>     , ( 0x032a, "bridgebelowcmb" )
+>     , ( 0x032b, "dblarchinvertedbelowcmb" )
+>     , ( 0x032c, "caronbelowcmb" )
+>     , ( 0x032d, "circumflexbelowcmb" )
+>     , ( 0x032e, "brevebelowcmb" )
+>     , ( 0x032f, "breveinvertedbelowcmb" )
+>     , ( 0x0330, "tildebelowcmb" )
+>     , ( 0x0331, "macronbelowcmb" )
+>     , ( 0x0332, "lowlinecmb" )
+>     , ( 0x0333, "dbllowlinecmb" )
+>     , ( 0x0334, "tildeoverlaycmb" )
+>     , ( 0x0335, "strokeshortoverlaycmb" )
+>     , ( 0x0336, "strokelongoverlaycmb" )
+>     , ( 0x0337, "solidusshortoverlaycmb" )
+>     , ( 0x0338, "soliduslongoverlaycmb" )
+>     , ( 0x0339, "ringhalfrightbelowcmb" )
+>     , ( 0x033a, "bridgeinvertedbelowcmb" )
+>     , ( 0x033b, "squarebelowcmb" )
+>     , ( 0x033c, "seagullbelowcmb" )
+>     , ( 0x033d, "xabovecmb" )
+>     , ( 0x033e, "tildeverticalcmb" )
+>     , ( 0x033f, "dbloverlinecmb" )
+>     , ( 0x0340, "gravetonecmb" )
+>     , ( 0x0341, "acutetonecmb" )
+>     , ( 0x0342, "perispomenigreekcmb" )
+>     , ( 0x0343, "koroniscmb" )
+>     , ( 0x0344, "dialytikatonoscmb" )
+>     , ( 0x0345, "ypogegrammenigreekcmb" )
+>     , ( 0x0360, "tildedoublecmb" )
+>     , ( 0x0361, "breveinverteddoublecmb" )
+>     , ( 0x0374, "numeralsigngreek" )
+>     , ( 0x0375, "numeralsignlowergreek" )
+>     , ( 0x037a, "ypogegrammeni" )
+>     , ( 0x037e, "questiongreek" )
+>     , ( 0x0384, "tonos" )
+>     , ( 0x0385, "dialytikatonos" )
+>     , ( 0x0386, "Alphatonos" )
+>     , ( 0x0387, "anoteleia" )
+>     , ( 0x0388, "Epsilontonos" )
+>     , ( 0x0389, "Etatonos" )
+>     , ( 0x038a, "Iotatonos" )
+>     , ( 0x038c, "Omicrontonos" )
+>     , ( 0x038e, "Upsilontonos" )
+>     , ( 0x038f, "Omegatonos" )
+>     , ( 0x0390, "iotadieresistonos" )
+>     , ( 0x0391, "Alpha" )
+>     , ( 0x0392, "Beta" )
+>     , ( 0x0393, "Gamma" )
+>     , ( 0x0394, "Deltagreek" )
+>     , ( 0x0395, "Epsilon" )
+>     , ( 0x0396, "Zeta" )
+>     , ( 0x0397, "Eta" )
+>     , ( 0x0398, "Theta" )
+>     , ( 0x0399, "Iota" )
+>     , ( 0x039a, "Kappa" )
+>     , ( 0x039b, "Lambda" )
+>     , ( 0x039c, "Mu" )
+>     , ( 0x039d, "Nu" )
+>     , ( 0x039e, "Xi" )
+>     , ( 0x039f, "Omicron" )
+>     , ( 0x03a0, "Pi" )
+>     , ( 0x03a1, "Rho" )
+>     , ( 0x03a3, "Sigma" )
+>     , ( 0x03a4, "Tau" )
+>     , ( 0x03a5, "Upsilon" )
+>     , ( 0x03a6, "Phi" )
+>     , ( 0x03a7, "Chi" )
+>     , ( 0x03a8, "Psi" )
+>     , ( 0x03a9, "Omegagreek" )
+>     , ( 0x03aa, "Iotadieresis" )
+>     , ( 0x03ab, "Upsilondieresis" )
+>     , ( 0x03ac, "alphatonos" )
+>     , ( 0x03ad, "epsilontonos" )
+>     , ( 0x03ae, "etatonos" )
+>     , ( 0x03af, "iotatonos" )
+>     , ( 0x03b0, "upsilondieresistonos" )
+>     , ( 0x03b1, "alpha" )
+>     , ( 0x03b2, "beta" )
+>     , ( 0x03b3, "gamma" )
+>     , ( 0x03b4, "delta" )
+>     , ( 0x03b5, "epsilon" )
+>     , ( 0x03b6, "zeta" )
+>     , ( 0x03b7, "eta" )
+>     , ( 0x03b8, "theta" )
+>     , ( 0x03b9, "iota" )
+>     , ( 0x03ba, "kappa" )
+>     , ( 0x03bb, "lambda" )
+>     , ( 0x03bc, "mugreek" )
+>     , ( 0x03bd, "nu" )
+>     , ( 0x03be, "xi" )
+>     , ( 0x03bf, "omicron" )
+>     , ( 0x03c0, "pi" )
+>     , ( 0x03c1, "rho" )
+>     , ( 0x03c2, "sigma1" )
+>     , ( 0x03c3, "sigma" )
+>     , ( 0x03c4, "tau" )
+>     , ( 0x03c5, "upsilon" )
+>     , ( 0x03c6, "phi" )
+>     , ( 0x03c7, "chi" )
+>     , ( 0x03c8, "psi" )
+>     , ( 0x03c9, "omega" )
+>     , ( 0x03ca, "iotadieresis" )
+>     , ( 0x03cb, "upsilondieresis" )
+>     , ( 0x03cc, "omicrontonos" )
+>     , ( 0x03cd, "upsilontonos" )
+>     , ( 0x03ce, "omegatonos" )
+>     , ( 0x03d0, "betasymbolgreek" )
+>     , ( 0x03d1, "theta1" )
+>     , ( 0x03d2, "Upsilon1" )
+>     , ( 0x03d3, "Upsilonacutehooksymbolgreek" )
+>     , ( 0x03d4, "Upsilondieresishooksymbolgreek" )
+>     , ( 0x03d5, "phi1" )
+>     , ( 0x03d6, "omega1" )
+>     , ( 0x03da, "Stigmagreek" )
+>     , ( 0x03dc, "Digammagreek" )
+>     , ( 0x03de, "Koppagreek" )
+>     , ( 0x03e0, "Sampigreek" )
+>     , ( 0x03e2, "Sheicoptic" )
+>     , ( 0x03e3, "sheicoptic" )
+>     , ( 0x03e4, "Feicoptic" )
+>     , ( 0x03e5, "feicoptic" )
+>     , ( 0x03e6, "Kheicoptic" )
+>     , ( 0x03e7, "kheicoptic" )
+>     , ( 0x03e8, "Horicoptic" )
+>     , ( 0x03e9, "horicoptic" )
+>     , ( 0x03ea, "Gangiacoptic" )
+>     , ( 0x03eb, "gangiacoptic" )
+>     , ( 0x03ec, "Shimacoptic" )
+>     , ( 0x03ed, "shimacoptic" )
+>     , ( 0x03ee, "Deicoptic" )
+>     , ( 0x03ef, "deicoptic" )
+>     , ( 0x03f0, "kappasymbolgreek" )
+>     , ( 0x03f1, "rhosymbolgreek" )
+>     , ( 0x03f2, "sigmalunatesymbolgreek" )
+>     , ( 0x03f3, "yotgreek" )
+>     , ( 0x0401, "Iocyrillic" )
+>     , ( 0x0402, "Djecyrillic" )
+>     , ( 0x0403, "Gjecyrillic" )
+>     , ( 0x0404, "Ecyrillic" )
+>     , ( 0x0405, "Dzecyrillic" )
+>     , ( 0x0406, "Icyrillic" )
+>     , ( 0x0407, "Yicyrillic" )
+>     , ( 0x0408, "Jecyrillic" )
+>     , ( 0x0409, "Ljecyrillic" )
+>     , ( 0x040a, "Njecyrillic" )
+>     , ( 0x040b, "Tshecyrillic" )
+>     , ( 0x040c, "Kjecyrillic" )
+>     , ( 0x040e, "Ushortcyrillic" )
+>     , ( 0x040f, "Dzhecyrillic" )
+>     , ( 0x0410, "Acyrillic" )
+>     , ( 0x0411, "Becyrillic" )
+>     , ( 0x0412, "Vecyrillic" )
+>     , ( 0x0413, "Gecyrillic" )
+>     , ( 0x0414, "Decyrillic" )
+>     , ( 0x0415, "Iecyrillic" )
+>     , ( 0x0416, "Zhecyrillic" )
+>     , ( 0x0417, "Zecyrillic" )
+>     , ( 0x0418, "Iicyrillic" )
+>     , ( 0x0419, "Iishortcyrillic" )
+>     , ( 0x041a, "Kacyrillic" )
+>     , ( 0x041b, "Elcyrillic" )
+>     , ( 0x041c, "Emcyrillic" )
+>     , ( 0x041d, "Encyrillic" )
+>     , ( 0x041e, "Ocyrillic" )
+>     , ( 0x041f, "Pecyrillic" )
+>     , ( 0x0420, "Ercyrillic" )
+>     , ( 0x0421, "Escyrillic" )
+>     , ( 0x0422, "Tecyrillic" )
+>     , ( 0x0423, "Ucyrillic" )
+>     , ( 0x0424, "Efcyrillic" )
+>     , ( 0x0425, "Khacyrillic" )
+>     , ( 0x0426, "Tsecyrillic" )
+>     , ( 0x0427, "Checyrillic" )
+>     , ( 0x0428, "Shacyrillic" )
+>     , ( 0x0429, "Shchacyrillic" )
+>     , ( 0x042a, "Hardsigncyrillic" )
+>     , ( 0x042b, "Yericyrillic" )
+>     , ( 0x042c, "Softsigncyrillic" )
+>     , ( 0x042d, "Ereversedcyrillic" )
+>     , ( 0x042e, "IUcyrillic" )
+>     , ( 0x042f, "IAcyrillic" )
+>     , ( 0x0430, "acyrillic" )
+>     , ( 0x0431, "afii10066" )
+>     , ( 0x0432, "afii10067" )
+>     , ( 0x0433, "afii10068" )
+>     , ( 0x0434, "afii10069" )
+>     , ( 0x0435, "afii10070" )
+>     , ( 0x0436, "afii10072" )
+>     , ( 0x0437, "afii10073" )
+>     , ( 0x0438, "afii10074" )
+>     , ( 0x0439, "afii10075" )
+>     , ( 0x043a, "afii10076" )
+>     , ( 0x043b, "afii10077" )
+>     , ( 0x043c, "afii10078" )
+>     , ( 0x043d, "afii10079" )
+>     , ( 0x043e, "afii10080" )
+>     , ( 0x043f, "afii10081" )
+>     , ( 0x0440, "afii10082" )
+>     , ( 0x0441, "afii10083" )
+>     , ( 0x0442, "afii10084" )
+>     , ( 0x0443, "afii10085" )
+>     , ( 0x0444, "afii10086" )
+>     , ( 0x0445, "afii10087" )
+>     , ( 0x0446, "afii10088" )
+>     , ( 0x0447, "afii10089" )
+>     , ( 0x0448, "afii10090" )
+>     , ( 0x0449, "afii10091" )
+>     , ( 0x044a, "afii10092" )
+>     , ( 0x044b, "afii10093" )
+>     , ( 0x044c, "afii10094" )
+>     , ( 0x044d, "afii10095" )
+>     , ( 0x044e, "afii10096" )
+>     , ( 0x044f, "afii10097" )
+>     , ( 0x0451, "afii10071" )
+>     , ( 0x0452, "afii10099" )
+>     , ( 0x0453, "afii10100" )
+>     , ( 0x0454, "afii10101" )
+>     , ( 0x0455, "afii10102" )
+>     , ( 0x0456, "afii10103" )
+>     , ( 0x0457, "afii10104" )
+>     , ( 0x0458, "afii10105" )
+>     , ( 0x0459, "afii10106" )
+>     , ( 0x045a, "afii10107" )
+>     , ( 0x045b, "afii10108" )
+>     , ( 0x045c, "afii10109" )
+>     , ( 0x045e, "afii10110" )
+>     , ( 0x045f, "afii10193" )
+>     , ( 0x0460, "Omegacyrillic" )
+>     , ( 0x0461, "omegacyrillic" )
+>     , ( 0x0462, "Yatcyrillic" )
+>     , ( 0x0463, "afii10194" )
+>     , ( 0x0464, "Eiotifiedcyrillic" )
+>     , ( 0x0465, "eiotifiedcyrillic" )
+>     , ( 0x0466, "Yuslittlecyrillic" )
+>     , ( 0x0467, "yuslittlecyrillic" )
+>     , ( 0x0468, "Yuslittleiotifiedcyrillic" )
+>     , ( 0x0469, "yuslittleiotifiedcyrillic" )
+>     , ( 0x046a, "Yusbigcyrillic" )
+>     , ( 0x046b, "yusbigcyrillic" )
+>     , ( 0x046c, "Yusbigiotifiedcyrillic" )
+>     , ( 0x046d, "yusbigiotifiedcyrillic" )
+>     , ( 0x046e, "Ksicyrillic" )
+>     , ( 0x046f, "ksicyrillic" )
+>     , ( 0x0470, "Psicyrillic" )
+>     , ( 0x0471, "psicyrillic" )
+>     , ( 0x0472, "Fitacyrillic" )
+>     , ( 0x0473, "afii10195" )
+>     , ( 0x0474, "Izhitsacyrillic" )
+>     , ( 0x0475, "afii10196" )
+>     , ( 0x0476, "Izhitsadblgravecyrillic" )
+>     , ( 0x0477, "izhitsadblgravecyrillic" )
+>     , ( 0x0478, "Ukcyrillic" )
+>     , ( 0x0479, "ukcyrillic" )
+>     , ( 0x047a, "Omegaroundcyrillic" )
+>     , ( 0x047b, "omegaroundcyrillic" )
+>     , ( 0x047c, "Omegatitlocyrillic" )
+>     , ( 0x047d, "omegatitlocyrillic" )
+>     , ( 0x047e, "Otcyrillic" )
+>     , ( 0x047f, "otcyrillic" )
+>     , ( 0x0480, "Koppacyrillic" )
+>     , ( 0x0481, "koppacyrillic" )
+>     , ( 0x0482, "thousandcyrillic" )
+>     , ( 0x0483, "titlocyrilliccmb" )
+>     , ( 0x0484, "palatalizationcyrilliccmb" )
+>     , ( 0x0485, "dasiapneumatacyrilliccmb" )
+>     , ( 0x0486, "psilipneumatacyrilliccmb" )
+>     , ( 0x0490, "Gheupturncyrillic" )
+>     , ( 0x0491, "afii10098" )
+>     , ( 0x0492, "Ghestrokecyrillic" )
+>     , ( 0x0493, "ghestrokecyrillic" )
+>     , ( 0x0494, "Ghemiddlehookcyrillic" )
+>     , ( 0x0495, "ghemiddlehookcyrillic" )
+>     , ( 0x0496, "Zhedescendercyrillic" )
+>     , ( 0x0497, "zhedescendercyrillic" )
+>     , ( 0x0498, "Zedescendercyrillic" )
+>     , ( 0x0499, "zedescendercyrillic" )
+>     , ( 0x049a, "Kadescendercyrillic" )
+>     , ( 0x049b, "kadescendercyrillic" )
+>     , ( 0x049c, "Kaverticalstrokecyrillic" )
+>     , ( 0x049d, "kaverticalstrokecyrillic" )
+>     , ( 0x049e, "Kastrokecyrillic" )
+>     , ( 0x049f, "kastrokecyrillic" )
+>     , ( 0x04a0, "Kabashkircyrillic" )
+>     , ( 0x04a1, "kabashkircyrillic" )
+>     , ( 0x04a2, "Endescendercyrillic" )
+>     , ( 0x04a3, "endescendercyrillic" )
+>     , ( 0x04a4, "Enghecyrillic" )
+>     , ( 0x04a5, "enghecyrillic" )
+>     , ( 0x04a6, "Pemiddlehookcyrillic" )
+>     , ( 0x04a7, "pemiddlehookcyrillic" )
+>     , ( 0x04a8, "Haabkhasiancyrillic" )
+>     , ( 0x04a9, "haabkhasiancyrillic" )
+>     , ( 0x04aa, "Esdescendercyrillic" )
+>     , ( 0x04ab, "esdescendercyrillic" )
+>     , ( 0x04ac, "Tedescendercyrillic" )
+>     , ( 0x04ad, "tedescendercyrillic" )
+>     , ( 0x04ae, "Ustraightcyrillic" )
+>     , ( 0x04af, "ustraightcyrillic" )
+>     , ( 0x04b0, "Ustraightstrokecyrillic" )
+>     , ( 0x04b1, "ustraightstrokecyrillic" )
+>     , ( 0x04b2, "Hadescendercyrillic" )
+>     , ( 0x04b3, "hadescendercyrillic" )
+>     , ( 0x04b4, "Tetsecyrillic" )
+>     , ( 0x04b5, "tetsecyrillic" )
+>     , ( 0x04b6, "Chedescendercyrillic" )
+>     , ( 0x04b7, "chedescendercyrillic" )
+>     , ( 0x04b8, "Cheverticalstrokecyrillic" )
+>     , ( 0x04b9, "cheverticalstrokecyrillic" )
+>     , ( 0x04ba, "Shhacyrillic" )
+>     , ( 0x04bb, "shhacyrillic" )
+>     , ( 0x04bc, "Cheabkhasiancyrillic" )
+>     , ( 0x04bd, "cheabkhasiancyrillic" )
+>     , ( 0x04be, "Chedescenderabkhasiancyrillic" )
+>     , ( 0x04bf, "chedescenderabkhasiancyrillic" )
+>     , ( 0x04c0, "palochkacyrillic" )
+>     , ( 0x04c1, "Zhebrevecyrillic" )
+>     , ( 0x04c2, "zhebrevecyrillic" )
+>     , ( 0x04c3, "Kahookcyrillic" )
+>     , ( 0x04c4, "kahookcyrillic" )
+>     , ( 0x04c7, "Enhookcyrillic" )
+>     , ( 0x04c8, "enhookcyrillic" )
+>     , ( 0x04cb, "Chekhakassiancyrillic" )
+>     , ( 0x04cc, "chekhakassiancyrillic" )
+>     , ( 0x04d0, "Abrevecyrillic" )
+>     , ( 0x04d1, "abrevecyrillic" )
+>     , ( 0x04d2, "Adieresiscyrillic" )
+>     , ( 0x04d3, "adieresiscyrillic" )
+>     , ( 0x04d4, "Aiecyrillic" )
+>     , ( 0x04d5, "aiecyrillic" )
+>     , ( 0x04d6, "Iebrevecyrillic" )
+>     , ( 0x04d7, "iebrevecyrillic" )
+>     , ( 0x04d8, "Schwacyrillic" )
+>     , ( 0x04d9, "afii10846" )
+>     , ( 0x04da, "Schwadieresiscyrillic" )
+>     , ( 0x04db, "schwadieresiscyrillic" )
+>     , ( 0x04dc, "Zhedieresiscyrillic" )
+>     , ( 0x04dd, "zhedieresiscyrillic" )
+>     , ( 0x04de, "Zedieresiscyrillic" )
+>     , ( 0x04df, "zedieresiscyrillic" )
+>     , ( 0x04e0, "Dzeabkhasiancyrillic" )
+>     , ( 0x04e1, "dzeabkhasiancyrillic" )
+>     , ( 0x04e2, "Imacroncyrillic" )
+>     , ( 0x04e3, "imacroncyrillic" )
+>     , ( 0x04e4, "Idieresiscyrillic" )
+>     , ( 0x04e5, "idieresiscyrillic" )
+>     , ( 0x04e6, "Odieresiscyrillic" )
+>     , ( 0x04e7, "odieresiscyrillic" )
+>     , ( 0x04e8, "Obarredcyrillic" )
+>     , ( 0x04e9, "obarredcyrillic" )
+>     , ( 0x04ea, "Obarreddieresiscyrillic" )
+>     , ( 0x04eb, "obarreddieresiscyrillic" )
+>     , ( 0x04ee, "Umacroncyrillic" )
+>     , ( 0x04ef, "umacroncyrillic" )
+>     , ( 0x04f0, "Udieresiscyrillic" )
+>     , ( 0x04f1, "udieresiscyrillic" )
+>     , ( 0x04f2, "Uhungarumlautcyrillic" )
+>     , ( 0x04f3, "uhungarumlautcyrillic" )
+>     , ( 0x04f4, "Chedieresiscyrillic" )
+>     , ( 0x04f5, "chedieresiscyrillic" )
+>     , ( 0x04f8, "Yerudieresiscyrillic" )
+>     , ( 0x04f9, "yerudieresiscyrillic" )
+>     , ( 0x0531, "Aybarmenian" )
+>     , ( 0x0532, "Benarmenian" )
+>     , ( 0x0533, "Gimarmenian" )
+>     , ( 0x0534, "Daarmenian" )
+>     , ( 0x0535, "Echarmenian" )
+>     , ( 0x0536, "Zaarmenian" )
+>     , ( 0x0537, "Eharmenian" )
+>     , ( 0x0538, "Etarmenian" )
+>     , ( 0x0539, "Toarmenian" )
+>     , ( 0x053a, "Zhearmenian" )
+>     , ( 0x053b, "Iniarmenian" )
+>     , ( 0x053c, "Liwnarmenian" )
+>     , ( 0x053d, "Xeharmenian" )
+>     , ( 0x053e, "Caarmenian" )
+>     , ( 0x053f, "Kenarmenian" )
+>     , ( 0x0540, "Hoarmenian" )
+>     , ( 0x0541, "Jaarmenian" )
+>     , ( 0x0542, "Ghadarmenian" )
+>     , ( 0x0543, "Cheharmenian" )
+>     , ( 0x0544, "Menarmenian" )
+>     , ( 0x0545, "Yiarmenian" )
+>     , ( 0x0546, "Nowarmenian" )
+>     , ( 0x0547, "Shaarmenian" )
+>     , ( 0x0548, "Voarmenian" )
+>     , ( 0x0549, "Chaarmenian" )
+>     , ( 0x054a, "Peharmenian" )
+>     , ( 0x054b, "Jheharmenian" )
+>     , ( 0x054c, "Raarmenian" )
+>     , ( 0x054d, "Seharmenian" )
+>     , ( 0x054e, "Vewarmenian" )
+>     , ( 0x054f, "Tiwnarmenian" )
+>     , ( 0x0550, "Reharmenian" )
+>     , ( 0x0551, "Coarmenian" )
+>     , ( 0x0552, "Yiwnarmenian" )
+>     , ( 0x0553, "Piwrarmenian" )
+>     , ( 0x0554, "Keharmenian" )
+>     , ( 0x0555, "Oharmenian" )
+>     , ( 0x0556, "Feharmenian" )
+>     , ( 0x0559, "ringhalfleftarmenian" )
+>     , ( 0x055a, "apostrophearmenian" )
+>     , ( 0x055b, "emphasismarkarmenian" )
+>     , ( 0x055c, "exclamarmenian" )
+>     , ( 0x055d, "commaarmenian" )
+>     , ( 0x055e, "questionarmenian" )
+>     , ( 0x055f, "abbreviationmarkarmenian" )
+>     , ( 0x0561, "aybarmenian" )
+>     , ( 0x0562, "benarmenian" )
+>     , ( 0x0563, "gimarmenian" )
+>     , ( 0x0564, "daarmenian" )
+>     , ( 0x0565, "echarmenian" )
+>     , ( 0x0566, "zaarmenian" )
+>     , ( 0x0567, "eharmenian" )
+>     , ( 0x0568, "etarmenian" )
+>     , ( 0x0569, "toarmenian" )
+>     , ( 0x056a, "zhearmenian" )
+>     , ( 0x056b, "iniarmenian" )
+>     , ( 0x056c, "liwnarmenian" )
+>     , ( 0x056d, "xeharmenian" )
+>     , ( 0x056e, "caarmenian" )
+>     , ( 0x056f, "kenarmenian" )
+>     , ( 0x0570, "hoarmenian" )
+>     , ( 0x0571, "jaarmenian" )
+>     , ( 0x0572, "ghadarmenian" )
+>     , ( 0x0573, "cheharmenian" )
+>     , ( 0x0574, "menarmenian" )
+>     , ( 0x0575, "yiarmenian" )
+>     , ( 0x0576, "nowarmenian" )
+>     , ( 0x0577, "shaarmenian" )
+>     , ( 0x0578, "voarmenian" )
+>     , ( 0x0579, "chaarmenian" )
+>     , ( 0x057a, "peharmenian" )
+>     , ( 0x057b, "jheharmenian" )
+>     , ( 0x057c, "raarmenian" )
+>     , ( 0x057d, "seharmenian" )
+>     , ( 0x057e, "vewarmenian" )
+>     , ( 0x057f, "tiwnarmenian" )
+>     , ( 0x0580, "reharmenian" )
+>     , ( 0x0581, "coarmenian" )
+>     , ( 0x0582, "yiwnarmenian" )
+>     , ( 0x0583, "piwrarmenian" )
+>     , ( 0x0584, "keharmenian" )
+>     , ( 0x0585, "oharmenian" )
+>     , ( 0x0586, "feharmenian" )
+>     , ( 0x0587, "echyiwnarmenian" )
+>     , ( 0x0589, "periodarmenian" )
+>     , ( 0x0591, "etnahtafoukhhebrew" )
+>     , ( 0x0592, "segoltahebrew" )
+>     , ( 0x0593, "shalshelethebrew" )
+>     , ( 0x0594, "zaqefqatanhebrew" )
+>     , ( 0x0595, "zaqefgadolhebrew" )
+>     , ( 0x0596, "tipehahebrew" )
+>     , ( 0x0597, "reviahebrew" )
+>     , ( 0x0598, "zarqahebrew" )
+>     , ( 0x0599, "pashtahebrew" )
+>     , ( 0x059a, "yetivhebrew" )
+>     , ( 0x059b, "tevirhebrew" )
+>     , ( 0x059c, "gereshaccenthebrew" )
+>     , ( 0x059d, "gereshmuqdamhebrew" )
+>     , ( 0x059e, "gershayimaccenthebrew" )
+>     , ( 0x059f, "qarneyparahebrew" )
+>     , ( 0x05a0, "telishagedolahebrew" )
+>     , ( 0x05a1, "pazerhebrew" )
+>     , ( 0x05a3, "munahhebrew" )
+>     , ( 0x05a4, "mahapakhhebrew" )
+>     , ( 0x05a5, "merkhahebrew" )
+>     , ( 0x05a6, "merkhakefulahebrew" )
+>     , ( 0x05a7, "dargahebrew" )
+>     , ( 0x05a8, "qadmahebrew" )
+>     , ( 0x05a9, "telishaqetanahebrew" )
+>     , ( 0x05aa, "yerahbenyomohebrew" )
+>     , ( 0x05ab, "olehebrew" )
+>     , ( 0x05ac, "iluyhebrew" )
+>     , ( 0x05ad, "dehihebrew" )
+>     , ( 0x05ae, "zinorhebrew" )
+>     , ( 0x05af, "masoracirclehebrew" )
+>     , ( 0x05b0, "afii57799" )
+>     , ( 0x05b1, "afii57801" )
+>     , ( 0x05b2, "afii57800" )
+>     , ( 0x05b3, "afii57802" )
+>     , ( 0x05b4, "afii57793" )
+>     , ( 0x05b5, "afii57794" )
+>     , ( 0x05b6, "afii57795" )
+>     , ( 0x05b7, "afii57798" )
+>     , ( 0x05b8, "afii57797" )
+>     , ( 0x05b9, "afii57806" )
+>     , ( 0x05bb, "afii57796" )
+>     , ( 0x05bc, "afii57807" )
+>     , ( 0x05bd, "afii57839" )
+>     , ( 0x05be, "afii57645" )
+>     , ( 0x05bf, "afii57841" )
+>     , ( 0x05c0, "afii57842" )
+>     , ( 0x05c1, "afii57804" )
+>     , ( 0x05c2, "afii57803" )
+>     , ( 0x05c3, "afii57658" )
+>     , ( 0x05c4, "upperdothebrew" )
+>     , ( 0x05d0, "afii57664" )
+>     , ( 0x05d1, "afii57665" )
+>     , ( 0x05d2, "afii57666" )
+>     , ( 0x05d3, "afii57667" )
+>     , ( 0x05d4, "afii57668" )
+>     , ( 0x05d5, "afii57669" )
+>     , ( 0x05d6, "afii57670" )
+>     , ( 0x05d7, "afii57671" )
+>     , ( 0x05d8, "afii57672" )
+>     , ( 0x05d9, "afii57673" )
+>     , ( 0x05da, "afii57674" )
+>     , ( 0x05db, "afii57675" )
+>     , ( 0x05dc, "afii57676" )
+>     , ( 0x05dd, "afii57677" )
+>     , ( 0x05de, "afii57678" )
+>     , ( 0x05df, "afii57679" )
+>     , ( 0x05e0, "afii57680" )
+>     , ( 0x05e1, "afii57681" )
+>     , ( 0x05e2, "afii57682" )
+>     , ( 0x05e3, "afii57683" )
+>     , ( 0x05e4, "afii57684" )
+>     , ( 0x05e5, "afii57685" )
+>     , ( 0x05e6, "afii57686" )
+>     , ( 0x05e7, "afii57687" )
+>     , ( 0x05e8, "afii57688" )
+>     , ( 0x05e9, "afii57689" )
+>     , ( 0x05ea, "afii57690" )
+>     , ( 0x05f0, "afii57716" )
+>     , ( 0x05f1, "afii57717" )
+>     , ( 0x05f2, "afii57718" )
+>     , ( 0x05f3, "gereshhebrew" )
+>     , ( 0x05f4, "gershayimhebrew" )
+>     , ( 0x060c, "afii57388" )
+>     , ( 0x061b, "afii57403" )
+>     , ( 0x061f, "afii57407" )
+>     , ( 0x0621, "afii57409" )
+>     , ( 0x0622, "afii57410" )
+>     , ( 0x0623, "afii57411" )
+>     , ( 0x0624, "afii57412" )
+>     , ( 0x0625, "afii57413" )
+>     , ( 0x0626, "afii57414" )
+>     , ( 0x0627, "afii57415" )
+>     , ( 0x0628, "afii57416" )
+>     , ( 0x0629, "afii57417" )
+>     , ( 0x062a, "afii57418" )
+>     , ( 0x062b, "afii57419" )
+>     , ( 0x062c, "afii57420" )
+>     , ( 0x062d, "afii57421" )
+>     , ( 0x062e, "afii57422" )
+>     , ( 0x062f, "afii57423" )
+>     , ( 0x0630, "afii57424" )
+>     , ( 0x0631, "afii57425" )
+>     , ( 0x0632, "afii57426" )
+>     , ( 0x0633, "afii57427" )
+>     , ( 0x0634, "afii57428" )
+>     , ( 0x0635, "afii57429" )
+>     , ( 0x0636, "afii57430" )
+>     , ( 0x0637, "afii57431" )
+>     , ( 0x0638, "afii57432" )
+>     , ( 0x0639, "afii57433" )
+>     , ( 0x063a, "afii57434" )
+>     , ( 0x0640, "afii57440" )
+>     , ( 0x0641, "afii57441" )
+>     , ( 0x0642, "afii57442" )
+>     , ( 0x0643, "afii57443" )
+>     , ( 0x0644, "afii57444" )
+>     , ( 0x0645, "afii57445" )
+>     , ( 0x0646, "afii57446" )
+>     , ( 0x0647, "afii57470" )
+>     , ( 0x0648, "afii57448" )
+>     , ( 0x0649, "afii57449" )
+>     , ( 0x064a, "afii57450" )
+>     , ( 0x064b, "afii57451" )
+>     , ( 0x064c, "afii57452" )
+>     , ( 0x064d, "afii57453" )
+>     , ( 0x064e, "afii57454" )
+>     , ( 0x064f, "afii57455" )
+>     , ( 0x0650, "afii57456" )
+>     , ( 0x0651, "afii57457" )
+>     , ( 0x0652, "afii57458" )
+>     , ( 0x0660, "afii57392" )
+>     , ( 0x0661, "afii57393" )
+>     , ( 0x0662, "afii57394" )
+>     , ( 0x0663, "afii57395" )
+>     , ( 0x0664, "afii57396" )
+>     , ( 0x0665, "afii57397" )
+>     , ( 0x0666, "afii57398" )
+>     , ( 0x0667, "afii57399" )
+>     , ( 0x0668, "afii57400" )
+>     , ( 0x0669, "afii57401" )
+>     , ( 0x066a, "afii57381" )
+>     , ( 0x066b, "decimalseparatorarabic" )
+>     , ( 0x066c, "thousandsseparatorarabic" )
+>     , ( 0x066d, "afii63167" )
+>     , ( 0x0679, "afii57511" )
+>     , ( 0x067e, "afii57506" )
+>     , ( 0x0686, "afii57507" )
+>     , ( 0x0688, "afii57512" )
+>     , ( 0x0691, "afii57513" )
+>     , ( 0x0698, "afii57508" )
+>     , ( 0x06a4, "afii57505" )
+>     , ( 0x06af, "afii57509" )
+>     , ( 0x06ba, "afii57514" )
+>     , ( 0x06c1, "haaltonearabic" )
+>     , ( 0x06d1, "yehthreedotsbelowarabic" )
+>     , ( 0x06d2, "afii57519" )
+>     , ( 0x06d5, "afii57534" )
+>     , ( 0x06f0, "zeropersian" )
+>     , ( 0x06f1, "onepersian" )
+>     , ( 0x06f2, "twopersian" )
+>     , ( 0x06f3, "threepersian" )
+>     , ( 0x06f4, "fourpersian" )
+>     , ( 0x06f5, "fivepersian" )
+>     , ( 0x06f6, "sixpersian" )
+>     , ( 0x06f7, "sevenpersian" )
+>     , ( 0x06f8, "eightpersian" )
+>     , ( 0x06f9, "ninepersian" )
+>     , ( 0x0901, "candrabindudeva" )
+>     , ( 0x0902, "anusvaradeva" )
+>     , ( 0x0903, "visargadeva" )
+>     , ( 0x0905, "adeva" )
+>     , ( 0x0906, "aadeva" )
+>     , ( 0x0907, "ideva" )
+>     , ( 0x0908, "iideva" )
+>     , ( 0x0909, "udeva" )
+>     , ( 0x090a, "uudeva" )
+>     , ( 0x090b, "rvocalicdeva" )
+>     , ( 0x090c, "lvocalicdeva" )
+>     , ( 0x090d, "ecandradeva" )
+>     , ( 0x090e, "eshortdeva" )
+>     , ( 0x090f, "edeva" )
+>     , ( 0x0910, "aideva" )
+>     , ( 0x0911, "ocandradeva" )
+>     , ( 0x0912, "oshortdeva" )
+>     , ( 0x0913, "odeva" )
+>     , ( 0x0914, "audeva" )
+>     , ( 0x0915, "kadeva" )
+>     , ( 0x0916, "khadeva" )
+>     , ( 0x0917, "gadeva" )
+>     , ( 0x0918, "ghadeva" )
+>     , ( 0x0919, "ngadeva" )
+>     , ( 0x091a, "cadeva" )
+>     , ( 0x091b, "chadeva" )
+>     , ( 0x091c, "jadeva" )
+>     , ( 0x091d, "jhadeva" )
+>     , ( 0x091e, "nyadeva" )
+>     , ( 0x091f, "ttadeva" )
+>     , ( 0x0920, "tthadeva" )
+>     , ( 0x0921, "ddadeva" )
+>     , ( 0x0922, "ddhadeva" )
+>     , ( 0x0923, "nnadeva" )
+>     , ( 0x0924, "tadeva" )
+>     , ( 0x0925, "thadeva" )
+>     , ( 0x0926, "dadeva" )
+>     , ( 0x0927, "dhadeva" )
+>     , ( 0x0928, "nadeva" )
+>     , ( 0x0929, "nnnadeva" )
+>     , ( 0x092a, "padeva" )
+>     , ( 0x092b, "phadeva" )
+>     , ( 0x092c, "badeva" )
+>     , ( 0x092d, "bhadeva" )
+>     , ( 0x092e, "madeva" )
+>     , ( 0x092f, "yadeva" )
+>     , ( 0x0930, "radeva" )
+>     , ( 0x0931, "rradeva" )
+>     , ( 0x0932, "ladeva" )
+>     , ( 0x0933, "lladeva" )
+>     , ( 0x0934, "llladeva" )
+>     , ( 0x0935, "vadeva" )
+>     , ( 0x0936, "shadeva" )
+>     , ( 0x0937, "ssadeva" )
+>     , ( 0x0938, "sadeva" )
+>     , ( 0x0939, "hadeva" )
+>     , ( 0x093c, "nuktadeva" )
+>     , ( 0x093d, "avagrahadeva" )
+>     , ( 0x093e, "aavowelsigndeva" )
+>     , ( 0x093f, "ivowelsigndeva" )
+>     , ( 0x0940, "iivowelsigndeva" )
+>     , ( 0x0941, "uvowelsigndeva" )
+>     , ( 0x0942, "uuvowelsigndeva" )
+>     , ( 0x0943, "rvocalicvowelsigndeva" )
+>     , ( 0x0944, "rrvocalicvowelsigndeva" )
+>     , ( 0x0945, "ecandravowelsigndeva" )
+>     , ( 0x0946, "eshortvowelsigndeva" )
+>     , ( 0x0947, "evowelsigndeva" )
+>     , ( 0x0948, "aivowelsigndeva" )
+>     , ( 0x0949, "ocandravowelsigndeva" )
+>     , ( 0x094a, "oshortvowelsigndeva" )
+>     , ( 0x094b, "ovowelsigndeva" )
+>     , ( 0x094c, "auvowelsigndeva" )
+>     , ( 0x094d, "viramadeva" )
+>     , ( 0x0950, "omdeva" )
+>     , ( 0x0951, "udattadeva" )
+>     , ( 0x0952, "anudattadeva" )
+>     , ( 0x0953, "gravedeva" )
+>     , ( 0x0954, "acutedeva" )
+>     , ( 0x0958, "qadeva" )
+>     , ( 0x0959, "khhadeva" )
+>     , ( 0x095a, "ghhadeva" )
+>     , ( 0x095b, "zadeva" )
+>     , ( 0x095c, "dddhadeva" )
+>     , ( 0x095d, "rhadeva" )
+>     , ( 0x095e, "fadeva" )
+>     , ( 0x095f, "yyadeva" )
+>     , ( 0x0960, "rrvocalicdeva" )
+>     , ( 0x0961, "llvocalicdeva" )
+>     , ( 0x0962, "lvocalicvowelsigndeva" )
+>     , ( 0x0963, "llvocalicvowelsigndeva" )
+>     , ( 0x0964, "danda" )
+>     , ( 0x0965, "dbldanda" )
+>     , ( 0x0966, "zerodeva" )
+>     , ( 0x0967, "onedeva" )
+>     , ( 0x0968, "twodeva" )
+>     , ( 0x0969, "threedeva" )
+>     , ( 0x096a, "fourdeva" )
+>     , ( 0x096b, "fivedeva" )
+>     , ( 0x096c, "sixdeva" )
+>     , ( 0x096d, "sevendeva" )
+>     , ( 0x096e, "eightdeva" )
+>     , ( 0x096f, "ninedeva" )
+>     , ( 0x0970, "abbreviationsigndeva" )
+>     , ( 0x0981, "candrabindubengali" )
+>     , ( 0x0982, "anusvarabengali" )
+>     , ( 0x0983, "visargabengali" )
+>     , ( 0x0985, "abengali" )
+>     , ( 0x0986, "aabengali" )
+>     , ( 0x0987, "ibengali" )
+>     , ( 0x0988, "iibengali" )
+>     , ( 0x0989, "ubengali" )
+>     , ( 0x098a, "uubengali" )
+>     , ( 0x098b, "rvocalicbengali" )
+>     , ( 0x098c, "lvocalicbengali" )
+>     , ( 0x098f, "ebengali" )
+>     , ( 0x0990, "aibengali" )
+>     , ( 0x0993, "obengali" )
+>     , ( 0x0994, "aubengali" )
+>     , ( 0x0995, "kabengali" )
+>     , ( 0x0996, "khabengali" )
+>     , ( 0x0997, "gabengali" )
+>     , ( 0x0998, "ghabengali" )
+>     , ( 0x0999, "ngabengali" )
+>     , ( 0x099a, "cabengali" )
+>     , ( 0x099b, "chabengali" )
+>     , ( 0x099c, "jabengali" )
+>     , ( 0x099d, "jhabengali" )
+>     , ( 0x099e, "nyabengali" )
+>     , ( 0x099f, "ttabengali" )
+>     , ( 0x09a0, "tthabengali" )
+>     , ( 0x09a1, "ddabengali" )
+>     , ( 0x09a2, "ddhabengali" )
+>     , ( 0x09a3, "nnabengali" )
+>     , ( 0x09a4, "tabengali" )
+>     , ( 0x09a5, "thabengali" )
+>     , ( 0x09a6, "dabengali" )
+>     , ( 0x09a7, "dhabengali" )
+>     , ( 0x09a8, "nabengali" )
+>     , ( 0x09aa, "pabengali" )
+>     , ( 0x09ab, "phabengali" )
+>     , ( 0x09ac, "babengali" )
+>     , ( 0x09ad, "bhabengali" )
+>     , ( 0x09ae, "mabengali" )
+>     , ( 0x09af, "yabengali" )
+>     , ( 0x09b0, "rabengali" )
+>     , ( 0x09b2, "labengali" )
+>     , ( 0x09b6, "shabengali" )
+>     , ( 0x09b7, "ssabengali" )
+>     , ( 0x09b8, "sabengali" )
+>     , ( 0x09b9, "habengali" )
+>     , ( 0x09bc, "nuktabengali" )
+>     , ( 0x09be, "aavowelsignbengali" )
+>     , ( 0x09bf, "ivowelsignbengali" )
+>     , ( 0x09c0, "iivowelsignbengali" )
+>     , ( 0x09c1, "uvowelsignbengali" )
+>     , ( 0x09c2, "uuvowelsignbengali" )
+>     , ( 0x09c3, "rvocalicvowelsignbengali" )
+>     , ( 0x09c4, "rrvocalicvowelsignbengali" )
+>     , ( 0x09c7, "evowelsignbengali" )
+>     , ( 0x09c8, "aivowelsignbengali" )
+>     , ( 0x09cb, "ovowelsignbengali" )
+>     , ( 0x09cc, "auvowelsignbengali" )
+>     , ( 0x09cd, "viramabengali" )
+>     , ( 0x09d7, "aulengthmarkbengali" )
+>     , ( 0x09dc, "rrabengali" )
+>     , ( 0x09dd, "rhabengali" )
+>     , ( 0x09df, "yyabengali" )
+>     , ( 0x09e0, "rrvocalicbengali" )
+>     , ( 0x09e1, "llvocalicbengali" )
+>     , ( 0x09e2, "lvocalicvowelsignbengali" )
+>     , ( 0x09e3, "llvocalicvowelsignbengali" )
+>     , ( 0x09e6, "zerobengali" )
+>     , ( 0x09e7, "onebengali" )
+>     , ( 0x09e8, "twobengali" )
+>     , ( 0x09e9, "threebengali" )
+>     , ( 0x09ea, "fourbengali" )
+>     , ( 0x09eb, "fivebengali" )
+>     , ( 0x09ec, "sixbengali" )
+>     , ( 0x09ed, "sevenbengali" )
+>     , ( 0x09ee, "eightbengali" )
+>     , ( 0x09ef, "ninebengali" )
+>     , ( 0x09f0, "ramiddlediagonalbengali" )
+>     , ( 0x09f1, "ralowerdiagonalbengali" )
+>     , ( 0x09f2, "rupeemarkbengali" )
+>     , ( 0x09f3, "rupeesignbengali" )
+>     , ( 0x09f4, "onenumeratorbengali" )
+>     , ( 0x09f5, "twonumeratorbengali" )
+>     , ( 0x09f6, "threenumeratorbengali" )
+>     , ( 0x09f7, "fournumeratorbengali" )
+>     , ( 0x09f8, "denominatorminusonenumeratorbengali" )
+>     , ( 0x09f9, "sixteencurrencydenominatorbengali" )
+>     , ( 0x09fa, "issharbengali" )
+>     , ( 0x0a02, "bindigurmukhi" )
+>     , ( 0x0a05, "agurmukhi" )
+>     , ( 0x0a06, "aagurmukhi" )
+>     , ( 0x0a07, "igurmukhi" )
+>     , ( 0x0a08, "iigurmukhi" )
+>     , ( 0x0a09, "ugurmukhi" )
+>     , ( 0x0a0a, "uugurmukhi" )
+>     , ( 0x0a0f, "eegurmukhi" )
+>     , ( 0x0a10, "aigurmukhi" )
+>     , ( 0x0a13, "oogurmukhi" )
+>     , ( 0x0a14, "augurmukhi" )
+>     , ( 0x0a15, "kagurmukhi" )
+>     , ( 0x0a16, "khagurmukhi" )
+>     , ( 0x0a17, "gagurmukhi" )
+>     , ( 0x0a18, "ghagurmukhi" )
+>     , ( 0x0a19, "ngagurmukhi" )
+>     , ( 0x0a1a, "cagurmukhi" )
+>     , ( 0x0a1b, "chagurmukhi" )
+>     , ( 0x0a1c, "jagurmukhi" )
+>     , ( 0x0a1d, "jhagurmukhi" )
+>     , ( 0x0a1e, "nyagurmukhi" )
+>     , ( 0x0a1f, "ttagurmukhi" )
+>     , ( 0x0a20, "tthagurmukhi" )
+>     , ( 0x0a21, "ddagurmukhi" )
+>     , ( 0x0a22, "ddhagurmukhi" )
+>     , ( 0x0a23, "nnagurmukhi" )
+>     , ( 0x0a24, "tagurmukhi" )
+>     , ( 0x0a25, "thagurmukhi" )
+>     , ( 0x0a26, "dagurmukhi" )
+>     , ( 0x0a27, "dhagurmukhi" )
+>     , ( 0x0a28, "nagurmukhi" )
+>     , ( 0x0a2a, "pagurmukhi" )
+>     , ( 0x0a2b, "phagurmukhi" )
+>     , ( 0x0a2c, "bagurmukhi" )
+>     , ( 0x0a2d, "bhagurmukhi" )
+>     , ( 0x0a2e, "magurmukhi" )
+>     , ( 0x0a2f, "yagurmukhi" )
+>     , ( 0x0a30, "ragurmukhi" )
+>     , ( 0x0a32, "lagurmukhi" )
+>     , ( 0x0a35, "vagurmukhi" )
+>     , ( 0x0a36, "shagurmukhi" )
+>     , ( 0x0a38, "sagurmukhi" )
+>     , ( 0x0a39, "hagurmukhi" )
+>     , ( 0x0a3c, "nuktagurmukhi" )
+>     , ( 0x0a3e, "aamatragurmukhi" )
+>     , ( 0x0a3f, "imatragurmukhi" )
+>     , ( 0x0a40, "iimatragurmukhi" )
+>     , ( 0x0a41, "umatragurmukhi" )
+>     , ( 0x0a42, "uumatragurmukhi" )
+>     , ( 0x0a47, "eematragurmukhi" )
+>     , ( 0x0a48, "aimatragurmukhi" )
+>     , ( 0x0a4b, "oomatragurmukhi" )
+>     , ( 0x0a4c, "aumatragurmukhi" )
+>     , ( 0x0a4d, "halantgurmukhi" )
+>     , ( 0x0a59, "khhagurmukhi" )
+>     , ( 0x0a5a, "ghhagurmukhi" )
+>     , ( 0x0a5b, "zagurmukhi" )
+>     , ( 0x0a5c, "rragurmukhi" )
+>     , ( 0x0a5e, "fagurmukhi" )
+>     , ( 0x0a66, "zerogurmukhi" )
+>     , ( 0x0a67, "onegurmukhi" )
+>     , ( 0x0a68, "twogurmukhi" )
+>     , ( 0x0a69, "threegurmukhi" )
+>     , ( 0x0a6a, "fourgurmukhi" )
+>     , ( 0x0a6b, "fivegurmukhi" )
+>     , ( 0x0a6c, "sixgurmukhi" )
+>     , ( 0x0a6d, "sevengurmukhi" )
+>     , ( 0x0a6e, "eightgurmukhi" )
+>     , ( 0x0a6f, "ninegurmukhi" )
+>     , ( 0x0a70, "tippigurmukhi" )
+>     , ( 0x0a71, "addakgurmukhi" )
+>     , ( 0x0a72, "irigurmukhi" )
+>     , ( 0x0a73, "uragurmukhi" )
+>     , ( 0x0a74, "ekonkargurmukhi" )
+>     , ( 0x0a81, "candrabindugujarati" )
+>     , ( 0x0a82, "anusvaragujarati" )
+>     , ( 0x0a83, "visargagujarati" )
+>     , ( 0x0a85, "agujarati" )
+>     , ( 0x0a86, "aagujarati" )
+>     , ( 0x0a87, "igujarati" )
+>     , ( 0x0a88, "iigujarati" )
+>     , ( 0x0a89, "ugujarati" )
+>     , ( 0x0a8a, "uugujarati" )
+>     , ( 0x0a8b, "rvocalicgujarati" )
+>     , ( 0x0a8d, "ecandragujarati" )
+>     , ( 0x0a8f, "egujarati" )
+>     , ( 0x0a90, "aigujarati" )
+>     , ( 0x0a91, "ocandragujarati" )
+>     , ( 0x0a93, "ogujarati" )
+>     , ( 0x0a94, "augujarati" )
+>     , ( 0x0a95, "kagujarati" )
+>     , ( 0x0a96, "khagujarati" )
+>     , ( 0x0a97, "gagujarati" )
+>     , ( 0x0a98, "ghagujarati" )
+>     , ( 0x0a99, "ngagujarati" )
+>     , ( 0x0a9a, "cagujarati" )
+>     , ( 0x0a9b, "chagujarati" )
+>     , ( 0x0a9c, "jagujarati" )
+>     , ( 0x0a9d, "jhagujarati" )
+>     , ( 0x0a9e, "nyagujarati" )
+>     , ( 0x0a9f, "ttagujarati" )
+>     , ( 0x0aa0, "tthagujarati" )
+>     , ( 0x0aa1, "ddagujarati" )
+>     , ( 0x0aa2, "ddhagujarati" )
+>     , ( 0x0aa3, "nnagujarati" )
+>     , ( 0x0aa4, "tagujarati" )
+>     , ( 0x0aa5, "thagujarati" )
+>     , ( 0x0aa6, "dagujarati" )
+>     , ( 0x0aa7, "dhagujarati" )
+>     , ( 0x0aa8, "nagujarati" )
+>     , ( 0x0aaa, "pagujarati" )
+>     , ( 0x0aab, "phagujarati" )
+>     , ( 0x0aac, "bagujarati" )
+>     , ( 0x0aad, "bhagujarati" )
+>     , ( 0x0aae, "magujarati" )
+>     , ( 0x0aaf, "yagujarati" )
+>     , ( 0x0ab0, "ragujarati" )
+>     , ( 0x0ab2, "lagujarati" )
+>     , ( 0x0ab3, "llagujarati" )
+>     , ( 0x0ab5, "vagujarati" )
+>     , ( 0x0ab6, "shagujarati" )
+>     , ( 0x0ab7, "ssagujarati" )
+>     , ( 0x0ab8, "sagujarati" )
+>     , ( 0x0ab9, "hagujarati" )
+>     , ( 0x0abc, "nuktagujarati" )
+>     , ( 0x0abe, "aavowelsigngujarati" )
+>     , ( 0x0abf, "ivowelsigngujarati" )
+>     , ( 0x0ac0, "iivowelsigngujarati" )
+>     , ( 0x0ac1, "uvowelsigngujarati" )
+>     , ( 0x0ac2, "uuvowelsigngujarati" )
+>     , ( 0x0ac3, "rvocalicvowelsigngujarati" )
+>     , ( 0x0ac4, "rrvocalicvowelsigngujarati" )
+>     , ( 0x0ac5, "ecandravowelsigngujarati" )
+>     , ( 0x0ac7, "evowelsigngujarati" )
+>     , ( 0x0ac8, "aivowelsigngujarati" )
+>     , ( 0x0ac9, "ocandravowelsigngujarati" )
+>     , ( 0x0acb, "ovowelsigngujarati" )
+>     , ( 0x0acc, "auvowelsigngujarati" )
+>     , ( 0x0acd, "viramagujarati" )
+>     , ( 0x0ad0, "omgujarati" )
+>     , ( 0x0ae0, "rrvocalicgujarati" )
+>     , ( 0x0ae6, "zerogujarati" )
+>     , ( 0x0ae7, "onegujarati" )
+>     , ( 0x0ae8, "twogujarati" )
+>     , ( 0x0ae9, "threegujarati" )
+>     , ( 0x0aea, "fourgujarati" )
+>     , ( 0x0aeb, "fivegujarati" )
+>     , ( 0x0aec, "sixgujarati" )
+>     , ( 0x0aed, "sevengujarati" )
+>     , ( 0x0aee, "eightgujarati" )
+>     , ( 0x0aef, "ninegujarati" )
+>     , ( 0x0e01, "kokaithai" )
+>     , ( 0x0e02, "khokhaithai" )
+>     , ( 0x0e03, "khokhuatthai" )
+>     , ( 0x0e04, "khokhwaithai" )
+>     , ( 0x0e05, "khokhonthai" )
+>     , ( 0x0e06, "khorakhangthai" )
+>     , ( 0x0e07, "ngonguthai" )
+>     , ( 0x0e08, "chochanthai" )
+>     , ( 0x0e09, "chochingthai" )
+>     , ( 0x0e0a, "chochangthai" )
+>     , ( 0x0e0b, "sosothai" )
+>     , ( 0x0e0c, "chochoethai" )
+>     , ( 0x0e0d, "yoyingthai" )
+>     , ( 0x0e0e, "dochadathai" )
+>     , ( 0x0e0f, "topatakthai" )
+>     , ( 0x0e10, "thothanthai" )
+>     , ( 0x0e11, "thonangmonthothai" )
+>     , ( 0x0e12, "thophuthaothai" )
+>     , ( 0x0e13, "nonenthai" )
+>     , ( 0x0e14, "dodekthai" )
+>     , ( 0x0e15, "totaothai" )
+>     , ( 0x0e16, "thothungthai" )
+>     , ( 0x0e17, "thothahanthai" )
+>     , ( 0x0e18, "thothongthai" )
+>     , ( 0x0e19, "nonuthai" )
+>     , ( 0x0e1a, "bobaimaithai" )
+>     , ( 0x0e1b, "poplathai" )
+>     , ( 0x0e1c, "phophungthai" )
+>     , ( 0x0e1d, "fofathai" )
+>     , ( 0x0e1e, "phophanthai" )
+>     , ( 0x0e1f, "fofanthai" )
+>     , ( 0x0e20, "phosamphaothai" )
+>     , ( 0x0e21, "momathai" )
+>     , ( 0x0e22, "yoyakthai" )
+>     , ( 0x0e23, "roruathai" )
+>     , ( 0x0e24, "ruthai" )
+>     , ( 0x0e25, "lolingthai" )
+>     , ( 0x0e26, "luthai" )
+>     , ( 0x0e27, "wowaenthai" )
+>     , ( 0x0e28, "sosalathai" )
+>     , ( 0x0e29, "sorusithai" )
+>     , ( 0x0e2a, "sosuathai" )
+>     , ( 0x0e2b, "hohipthai" )
+>     , ( 0x0e2c, "lochulathai" )
+>     , ( 0x0e2d, "oangthai" )
+>     , ( 0x0e2e, "honokhukthai" )
+>     , ( 0x0e2f, "paiyannoithai" )
+>     , ( 0x0e30, "saraathai" )
+>     , ( 0x0e31, "maihanakatthai" )
+>     , ( 0x0e32, "saraaathai" )
+>     , ( 0x0e33, "saraamthai" )
+>     , ( 0x0e34, "saraithai" )
+>     , ( 0x0e35, "saraiithai" )
+>     , ( 0x0e36, "sarauethai" )
+>     , ( 0x0e37, "saraueethai" )
+>     , ( 0x0e38, "sarauthai" )
+>     , ( 0x0e39, "sarauuthai" )
+>     , ( 0x0e3a, "phinthuthai" )
+>     , ( 0x0e3f, "bahtthai" )
+>     , ( 0x0e40, "saraethai" )
+>     , ( 0x0e41, "saraaethai" )
+>     , ( 0x0e42, "saraothai" )
+>     , ( 0x0e43, "saraaimaimuanthai" )
+>     , ( 0x0e44, "saraaimaimalaithai" )
+>     , ( 0x0e45, "lakkhangyaothai" )
+>     , ( 0x0e46, "maiyamokthai" )
+>     , ( 0x0e47, "maitaikhuthai" )
+>     , ( 0x0e48, "maiekthai" )
+>     , ( 0x0e49, "maithothai" )
+>     , ( 0x0e4a, "maitrithai" )
+>     , ( 0x0e4b, "maichattawathai" )
+>     , ( 0x0e4c, "thanthakhatthai" )
+>     , ( 0x0e4d, "nikhahitthai" )
+>     , ( 0x0e4e, "yamakkanthai" )
+>     , ( 0x0e4f, "fongmanthai" )
+>     , ( 0x0e50, "zerothai" )
+>     , ( 0x0e51, "onethai" )
+>     , ( 0x0e52, "twothai" )
+>     , ( 0x0e53, "threethai" )
+>     , ( 0x0e54, "fourthai" )
+>     , ( 0x0e55, "fivethai" )
+>     , ( 0x0e56, "sixthai" )
+>     , ( 0x0e57, "seventhai" )
+>     , ( 0x0e58, "eightthai" )
+>     , ( 0x0e59, "ninethai" )
+>     , ( 0x0e5a, "angkhankhuthai" )
+>     , ( 0x0e5b, "khomutthai" )
+>     , ( 0x1e00, "Aringbelow" )
+>     , ( 0x1e01, "aringbelow" )
+>     , ( 0x1e02, "Bdotaccent" )
+>     , ( 0x1e03, "bdotaccent" )
+>     , ( 0x1e04, "Bdotbelow" )
+>     , ( 0x1e05, "bdotbelow" )
+>     , ( 0x1e06, "Blinebelow" )
+>     , ( 0x1e07, "blinebelow" )
+>     , ( 0x1e08, "Ccedillaacute" )
+>     , ( 0x1e09, "ccedillaacute" )
+>     , ( 0x1e0a, "Ddotaccent" )
+>     , ( 0x1e0b, "ddotaccent" )
+>     , ( 0x1e0c, "Ddotbelow" )
+>     , ( 0x1e0d, "ddotbelow" )
+>     , ( 0x1e0e, "Dlinebelow" )
+>     , ( 0x1e0f, "dlinebelow" )
+>     , ( 0x1e10, "Dcedilla" )
+>     , ( 0x1e11, "dcedilla" )
+>     , ( 0x1e12, "Dcircumflexbelow" )
+>     , ( 0x1e13, "dcircumflexbelow" )
+>     , ( 0x1e14, "Emacrongrave" )
+>     , ( 0x1e15, "emacrongrave" )
+>     , ( 0x1e16, "Emacronacute" )
+>     , ( 0x1e17, "emacronacute" )
+>     , ( 0x1e18, "Ecircumflexbelow" )
+>     , ( 0x1e19, "ecircumflexbelow" )
+>     , ( 0x1e1a, "Etildebelow" )
+>     , ( 0x1e1b, "etildebelow" )
+>     , ( 0x1e1c, "Ecedillabreve" )
+>     , ( 0x1e1d, "ecedillabreve" )
+>     , ( 0x1e1e, "Fdotaccent" )
+>     , ( 0x1e1f, "fdotaccent" )
+>     , ( 0x1e20, "Gmacron" )
+>     , ( 0x1e21, "gmacron" )
+>     , ( 0x1e22, "Hdotaccent" )
+>     , ( 0x1e23, "hdotaccent" )
+>     , ( 0x1e24, "Hdotbelow" )
+>     , ( 0x1e25, "hdotbelow" )
+>     , ( 0x1e26, "Hdieresis" )
+>     , ( 0x1e27, "hdieresis" )
+>     , ( 0x1e28, "Hcedilla" )
+>     , ( 0x1e29, "hcedilla" )
+>     , ( 0x1e2a, "Hbrevebelow" )
+>     , ( 0x1e2b, "hbrevebelow" )
+>     , ( 0x1e2c, "Itildebelow" )
+>     , ( 0x1e2d, "itildebelow" )
+>     , ( 0x1e2e, "Idieresisacute" )
+>     , ( 0x1e2f, "idieresisacute" )
+>     , ( 0x1e30, "Kacute" )
+>     , ( 0x1e31, "kacute" )
+>     , ( 0x1e32, "Kdotbelow" )
+>     , ( 0x1e33, "kdotbelow" )
+>     , ( 0x1e34, "Klinebelow" )
+>     , ( 0x1e35, "klinebelow" )
+>     , ( 0x1e36, "Ldotbelow" )
+>     , ( 0x1e37, "ldotbelow" )
+>     , ( 0x1e38, "Ldotbelowmacron" )
+>     , ( 0x1e39, "ldotbelowmacron" )
+>     , ( 0x1e3a, "Llinebelow" )
+>     , ( 0x1e3b, "llinebelow" )
+>     , ( 0x1e3c, "Lcircumflexbelow" )
+>     , ( 0x1e3d, "lcircumflexbelow" )
+>     , ( 0x1e3e, "Macute" )
+>     , ( 0x1e3f, "macute" )
+>     , ( 0x1e40, "Mdotaccent" )
+>     , ( 0x1e41, "mdotaccent" )
+>     , ( 0x1e42, "Mdotbelow" )
+>     , ( 0x1e43, "mdotbelow" )
+>     , ( 0x1e44, "Ndotaccent" )
+>     , ( 0x1e45, "ndotaccent" )
+>     , ( 0x1e46, "Ndotbelow" )
+>     , ( 0x1e47, "ndotbelow" )
+>     , ( 0x1e48, "Nlinebelow" )
+>     , ( 0x1e49, "nlinebelow" )
+>     , ( 0x1e4a, "Ncircumflexbelow" )
+>     , ( 0x1e4b, "ncircumflexbelow" )
+>     , ( 0x1e4c, "Otildeacute" )
+>     , ( 0x1e4d, "otildeacute" )
+>     , ( 0x1e4e, "Otildedieresis" )
+>     , ( 0x1e4f, "otildedieresis" )
+>     , ( 0x1e50, "Omacrongrave" )
+>     , ( 0x1e51, "omacrongrave" )
+>     , ( 0x1e52, "Omacronacute" )
+>     , ( 0x1e53, "omacronacute" )
+>     , ( 0x1e54, "Pacute" )
+>     , ( 0x1e55, "pacute" )
+>     , ( 0x1e56, "Pdotaccent" )
+>     , ( 0x1e57, "pdotaccent" )
+>     , ( 0x1e58, "Rdotaccent" )
+>     , ( 0x1e59, "rdotaccent" )
+>     , ( 0x1e5a, "Rdotbelow" )
+>     , ( 0x1e5b, "rdotbelow" )
+>     , ( 0x1e5c, "Rdotbelowmacron" )
+>     , ( 0x1e5d, "rdotbelowmacron" )
+>     , ( 0x1e5e, "Rlinebelow" )
+>     , ( 0x1e5f, "rlinebelow" )
+>     , ( 0x1e60, "Sdotaccent" )
+>     , ( 0x1e61, "sdotaccent" )
+>     , ( 0x1e62, "Sdotbelow" )
+>     , ( 0x1e63, "sdotbelow" )
+>     , ( 0x1e64, "Sacutedotaccent" )
+>     , ( 0x1e65, "sacutedotaccent" )
+>     , ( 0x1e66, "Scarondotaccent" )
+>     , ( 0x1e67, "scarondotaccent" )
+>     , ( 0x1e68, "Sdotbelowdotaccent" )
+>     , ( 0x1e69, "sdotbelowdotaccent" )
+>     , ( 0x1e6a, "Tdotaccent" )
+>     , ( 0x1e6b, "tdotaccent" )
+>     , ( 0x1e6c, "Tdotbelow" )
+>     , ( 0x1e6d, "tdotbelow" )
+>     , ( 0x1e6e, "Tlinebelow" )
+>     , ( 0x1e6f, "tlinebelow" )
+>     , ( 0x1e70, "Tcircumflexbelow" )
+>     , ( 0x1e71, "tcircumflexbelow" )
+>     , ( 0x1e72, "Udieresisbelow" )
+>     , ( 0x1e73, "udieresisbelow" )
+>     , ( 0x1e74, "Utildebelow" )
+>     , ( 0x1e75, "utildebelow" )
+>     , ( 0x1e76, "Ucircumflexbelow" )
+>     , ( 0x1e77, "ucircumflexbelow" )
+>     , ( 0x1e78, "Utildeacute" )
+>     , ( 0x1e79, "utildeacute" )
+>     , ( 0x1e7a, "Umacrondieresis" )
+>     , ( 0x1e7b, "umacrondieresis" )
+>     , ( 0x1e7c, "Vtilde" )
+>     , ( 0x1e7d, "vtilde" )
+>     , ( 0x1e7e, "Vdotbelow" )
+>     , ( 0x1e7f, "vdotbelow" )
+>     , ( 0x1e80, "Wgrave" )
+>     , ( 0x1e81, "wgrave" )
+>     , ( 0x1e82, "Wacute" )
+>     , ( 0x1e83, "wacute" )
+>     , ( 0x1e84, "Wdieresis" )
+>     , ( 0x1e85, "wdieresis" )
+>     , ( 0x1e86, "Wdotaccent" )
+>     , ( 0x1e87, "wdotaccent" )
+>     , ( 0x1e88, "Wdotbelow" )
+>     , ( 0x1e89, "wdotbelow" )
+>     , ( 0x1e8a, "Xdotaccent" )
+>     , ( 0x1e8b, "xdotaccent" )
+>     , ( 0x1e8c, "Xdieresis" )
+>     , ( 0x1e8d, "xdieresis" )
+>     , ( 0x1e8e, "Ydotaccent" )
+>     , ( 0x1e8f, "ydotaccent" )
+>     , ( 0x1e90, "Zcircumflex" )
+>     , ( 0x1e91, "zcircumflex" )
+>     , ( 0x1e92, "Zdotbelow" )
+>     , ( 0x1e93, "zdotbelow" )
+>     , ( 0x1e94, "Zlinebelow" )
+>     , ( 0x1e95, "zlinebelow" )
+>     , ( 0x1e96, "hlinebelow" )
+>     , ( 0x1e97, "tdieresis" )
+>     , ( 0x1e98, "wring" )
+>     , ( 0x1e99, "yring" )
+>     , ( 0x1e9a, "arighthalfring" )
+>     , ( 0x1e9b, "slongdotaccent" )
+>     , ( 0x1ea0, "Adotbelow" )
+>     , ( 0x1ea1, "adotbelow" )
+>     , ( 0x1ea2, "Ahookabove" )
+>     , ( 0x1ea3, "ahookabove" )
+>     , ( 0x1ea4, "Acircumflexacute" )
+>     , ( 0x1ea5, "acircumflexacute" )
+>     , ( 0x1ea6, "Acircumflexgrave" )
+>     , ( 0x1ea7, "acircumflexgrave" )
+>     , ( 0x1ea8, "Acircumflexhookabove" )
+>     , ( 0x1ea9, "acircumflexhookabove" )
+>     , ( 0x1eaa, "Acircumflextilde" )
+>     , ( 0x1eab, "acircumflextilde" )
+>     , ( 0x1eac, "Acircumflexdotbelow" )
+>     , ( 0x1ead, "acircumflexdotbelow" )
+>     , ( 0x1eae, "Abreveacute" )
+>     , ( 0x1eaf, "abreveacute" )
+>     , ( 0x1eb0, "Abrevegrave" )
+>     , ( 0x1eb1, "abrevegrave" )
+>     , ( 0x1eb2, "Abrevehookabove" )
+>     , ( 0x1eb3, "abrevehookabove" )
+>     , ( 0x1eb4, "Abrevetilde" )
+>     , ( 0x1eb5, "abrevetilde" )
+>     , ( 0x1eb6, "Abrevedotbelow" )
+>     , ( 0x1eb7, "abrevedotbelow" )
+>     , ( 0x1eb8, "Edotbelow" )
+>     , ( 0x1eb9, "edotbelow" )
+>     , ( 0x1eba, "Ehookabove" )
+>     , ( 0x1ebb, "ehookabove" )
+>     , ( 0x1ebc, "Etilde" )
+>     , ( 0x1ebd, "etilde" )
+>     , ( 0x1ebe, "Ecircumflexacute" )
+>     , ( 0x1ebf, "ecircumflexacute" )
+>     , ( 0x1ec0, "Ecircumflexgrave" )
+>     , ( 0x1ec1, "ecircumflexgrave" )
+>     , ( 0x1ec2, "Ecircumflexhookabove" )
+>     , ( 0x1ec3, "ecircumflexhookabove" )
+>     , ( 0x1ec4, "Ecircumflextilde" )
+>     , ( 0x1ec5, "ecircumflextilde" )
+>     , ( 0x1ec6, "Ecircumflexdotbelow" )
+>     , ( 0x1ec7, "ecircumflexdotbelow" )
+>     , ( 0x1ec8, "Ihookabove" )
+>     , ( 0x1ec9, "ihookabove" )
+>     , ( 0x1eca, "Idotbelow" )
+>     , ( 0x1ecb, "idotbelow" )
+>     , ( 0x1ecc, "Odotbelow" )
+>     , ( 0x1ecd, "odotbelow" )
+>     , ( 0x1ece, "Ohookabove" )
+>     , ( 0x1ecf, "ohookabove" )
+>     , ( 0x1ed0, "Ocircumflexacute" )
+>     , ( 0x1ed1, "ocircumflexacute" )
+>     , ( 0x1ed2, "Ocircumflexgrave" )
+>     , ( 0x1ed3, "ocircumflexgrave" )
+>     , ( 0x1ed4, "Ocircumflexhookabove" )
+>     , ( 0x1ed5, "ocircumflexhookabove" )
+>     , ( 0x1ed6, "Ocircumflextilde" )
+>     , ( 0x1ed7, "ocircumflextilde" )
+>     , ( 0x1ed8, "Ocircumflexdotbelow" )
+>     , ( 0x1ed9, "ocircumflexdotbelow" )
+>     , ( 0x1eda, "Ohornacute" )
+>     , ( 0x1edb, "ohornacute" )
+>     , ( 0x1edc, "Ohorngrave" )
+>     , ( 0x1edd, "ohorngrave" )
+>     , ( 0x1ede, "Ohornhookabove" )
+>     , ( 0x1edf, "ohornhookabove" )
+>     , ( 0x1ee0, "Ohorntilde" )
+>     , ( 0x1ee1, "ohorntilde" )
+>     , ( 0x1ee2, "Ohorndotbelow" )
+>     , ( 0x1ee3, "ohorndotbelow" )
+>     , ( 0x1ee4, "Udotbelow" )
+>     , ( 0x1ee5, "udotbelow" )
+>     , ( 0x1ee6, "Uhookabove" )
+>     , ( 0x1ee7, "uhookabove" )
+>     , ( 0x1ee8, "Uhornacute" )
+>     , ( 0x1ee9, "uhornacute" )
+>     , ( 0x1eea, "Uhorngrave" )
+>     , ( 0x1eeb, "uhorngrave" )
+>     , ( 0x1eec, "Uhornhookabove" )
+>     , ( 0x1eed, "uhornhookabove" )
+>     , ( 0x1eee, "Uhorntilde" )
+>     , ( 0x1eef, "uhorntilde" )
+>     , ( 0x1ef0, "Uhorndotbelow" )
+>     , ( 0x1ef1, "uhorndotbelow" )
+>     , ( 0x1ef2, "Ygrave" )
+>     , ( 0x1ef3, "ygrave" )
+>     , ( 0x1ef4, "Ydotbelow" )
+>     , ( 0x1ef5, "ydotbelow" )
+>     , ( 0x1ef6, "Yhookabove" )
+>     , ( 0x1ef7, "yhookabove" )
+>     , ( 0x1ef8, "Ytilde" )
+>     , ( 0x1ef9, "ytilde" )
+>     , ( 0x2002, "enspace" )
+>     , ( 0x200b, "zerowidthspace" )
+>     , ( 0x200c, "afii61664" )
+>     , ( 0x200d, "afii301" )
+>     , ( 0x200e, "afii299" )
+>     , ( 0x200f, "afii300" )
+>     , ( 0x2010, "hyphentwo" )
+>     , ( 0x2012, "figuredash" )
+>     , ( 0x2013, "endash" )
+>     , ( 0x2014, "emdash" )
+>     , ( 0x2015, "afii00208" )
+>     , ( 0x2016, "dblverticalbar" )
+>     , ( 0x2017, "dbllowline" )
+>     , ( 0x2018, "quoteleft" )
+>     , ( 0x2019, "quoteright" )
+>     , ( 0x201a, "quotesinglbase" )
+>     , ( 0x201b, "quoteleftreversed" )
+>     , ( 0x201c, "quotedblleft" )
+>     , ( 0x201d, "quotedblright" )
+>     , ( 0x201e, "quotedblbase" )
+>     , ( 0x2020, "dagger" )
+>     , ( 0x2021, "daggerdbl" )
+>     , ( 0x2022, "bullet" )
+>     , ( 0x2024, "onedotenleader" )
+>     , ( 0x2025, "twodotenleader" )
+>     , ( 0x2026, "ellipsis" )
+>     , ( 0x202c, "afii61573" )
+>     , ( 0x202d, "afii61574" )
+>     , ( 0x202e, "afii61575" )
+>     , ( 0x2030, "perthousand" )
+>     , ( 0x2032, "minute" )
+>     , ( 0x2033, "second" )
+>     , ( 0x2035, "primereversed" )
+>     , ( 0x2039, "guilsinglleft" )
+>     , ( 0x203a, "guilsinglright" )
+>     , ( 0x203b, "referencemark" )
+>     , ( 0x203c, "exclamdbl" )
+>     , ( 0x203e, "overline" )
+>     , ( 0x2042, "asterism" )
+>     , ( 0x2044, "fraction" )
+>     , ( 0x2070, "zerosuperior" )
+>     , ( 0x2074, "foursuperior" )
+>     , ( 0x2075, "fivesuperior" )
+>     , ( 0x2076, "sixsuperior" )
+>     , ( 0x2077, "sevensuperior" )
+>     , ( 0x2078, "eightsuperior" )
+>     , ( 0x2079, "ninesuperior" )
+>     , ( 0x207a, "plussuperior" )
+>     , ( 0x207c, "equalsuperior" )
+>     , ( 0x207d, "parenleftsuperior" )
+>     , ( 0x207e, "parenrightsuperior" )
+>     , ( 0x207f, "nsuperior" )
+>     , ( 0x2080, "zeroinferior" )
+>     , ( 0x2081, "oneinferior" )
+>     , ( 0x2082, "twoinferior" )
+>     , ( 0x2083, "threeinferior" )
+>     , ( 0x2084, "fourinferior" )
+>     , ( 0x2085, "fiveinferior" )
+>     , ( 0x2086, "sixinferior" )
+>     , ( 0x2087, "seveninferior" )
+>     , ( 0x2088, "eightinferior" )
+>     , ( 0x2089, "nineinferior" )
+>     , ( 0x208d, "parenleftinferior" )
+>     , ( 0x208e, "parenrightinferior" )
+>     , ( 0x20a1, "colonmonetary" )
+>     , ( 0x20a2, "cruzeiro" )
+>     , ( 0x20a3, "franc" )
+>     , ( 0x20a4, "afii08941" )
+>     , ( 0x20a7, "peseta" )
+>     , ( 0x20a9, "won" )
+>     , ( 0x20aa, "afii57636" )
+>     , ( 0x20ab, "dong" )
+>     , ( 0x20ac, "Euro" )
+>     , ( 0x2103, "centigrade" )
+>     , ( 0x2105, "afii61248" )
+>     , ( 0x2109, "fahrenheit" )
+>     , ( 0x2111, "Ifraktur" )
+>     , ( 0x2113, "afii61289" )
+>     , ( 0x2116, "afii61352" )
+>     , ( 0x2118, "weierstrass" )
+>     , ( 0x211c, "Rfraktur" )
+>     , ( 0x211e, "prescription" )
+>     , ( 0x2121, "telephone" )
+>     , ( 0x2122, "trademark" )
+>     , ( 0x2126, "Ohm" )
+>     , ( 0x212b, "angstrom" )
+>     , ( 0x212e, "estimated" )
+>     , ( 0x2135, "aleph" )
+>     , ( 0x2153, "onethird" )
+>     , ( 0x2154, "twothirds" )
+>     , ( 0x215b, "oneeighth" )
+>     , ( 0x215c, "threeeighths" )
+>     , ( 0x215d, "fiveeighths" )
+>     , ( 0x215e, "seveneighths" )
+>     , ( 0x2160, "Oneroman" )
+>     , ( 0x2161, "Tworoman" )
+>     , ( 0x2162, "Threeroman" )
+>     , ( 0x2163, "Fourroman" )
+>     , ( 0x2164, "Fiveroman" )
+>     , ( 0x2165, "Sixroman" )
+>     , ( 0x2166, "Sevenroman" )
+>     , ( 0x2167, "Eightroman" )
+>     , ( 0x2168, "Nineroman" )
+>     , ( 0x2169, "Tenroman" )
+>     , ( 0x216a, "Elevenroman" )
+>     , ( 0x216b, "Twelveroman" )
+>     , ( 0x2170, "oneroman" )
+>     , ( 0x2171, "tworoman" )
+>     , ( 0x2172, "threeroman" )
+>     , ( 0x2173, "fourroman" )
+>     , ( 0x2174, "fiveroman" )
+>     , ( 0x2175, "sixroman" )
+>     , ( 0x2176, "sevenroman" )
+>     , ( 0x2177, "eightroman" )
+>     , ( 0x2178, "nineroman" )
+>     , ( 0x2179, "tenroman" )
+>     , ( 0x217a, "elevenroman" )
+>     , ( 0x217b, "twelveroman" )
+>     , ( 0x2190, "arrowleft" )
+>     , ( 0x2191, "arrowup" )
+>     , ( 0x2192, "arrowright" )
+>     , ( 0x2193, "arrowdown" )
+>     , ( 0x2194, "arrowboth" )
+>     , ( 0x2195, "arrowupdn" )
+>     , ( 0x2196, "arrowupleft" )
+>     , ( 0x2197, "arrowupright" )
+>     , ( 0x2198, "arrowdownright" )
+>     , ( 0x2199, "arrowdownleft" )
+>     , ( 0x21a8, "arrowupdnbse" )
+>     , ( 0x21b5, "carriagereturn" )
+>     , ( 0x21bc, "harpoonleftbarbup" )
+>     , ( 0x21c0, "harpoonrightbarbup" )
+>     , ( 0x21c4, "arrowrightoverleft" )
+>     , ( 0x21c5, "arrowupleftofdown" )
+>     , ( 0x21c6, "arrowleftoverright" )
+>     , ( 0x21cd, "arrowleftdblstroke" )
+>     , ( 0x21cf, "arrowrightdblstroke" )
+>     , ( 0x21d0, "arrowdblleft" )
+>     , ( 0x21d1, "arrowdblup" )
+>     , ( 0x21d2, "arrowdblright" )
+>     , ( 0x21d3, "arrowdbldown" )
+>     , ( 0x21d4, "arrowdblboth" )
+>     , ( 0x21de, "pageup" )
+>     , ( 0x21df, "pagedown" )
+>     , ( 0x21e0, "arrowdashleft" )
+>     , ( 0x21e1, "arrowdashup" )
+>     , ( 0x21e2, "arrowdashright" )
+>     , ( 0x21e3, "arrowdashdown" )
+>     , ( 0x21e4, "arrowtableft" )
+>     , ( 0x21e5, "arrowtabright" )
+>     , ( 0x21e6, "arrowleftwhite" )
+>     , ( 0x21e7, "arrowupwhite" )
+>     , ( 0x21e8, "arrowrightwhite" )
+>     , ( 0x21e9, "arrowdownwhite" )
+>     , ( 0x21ea, "capslock" )
+>     , ( 0x2200, "forall" )
+>     , ( 0x2202, "partialdiff" )
+>     , ( 0x2203, "existential" )
+>     , ( 0x2205, "emptyset" )
+>     , ( 0x2206, "Delta" )
+>     , ( 0x2207, "gradient" )
+>     , ( 0x2208, "element" )
+>     , ( 0x2209, "notelement" )
+>     , ( 0x220b, "suchthat" )
+>     , ( 0x220c, "notcontains" )
+>     , ( 0x220f, "product" )
+>     , ( 0x2211, "summation" )
+>     , ( 0x2212, "minus" )
+>     , ( 0x2213, "minusplus" )
+>     , ( 0x2215, "divisionslash" )
+>     , ( 0x2217, "asteriskmath" )
+>     , ( 0x2219, "bulletoperator" )
+>     , ( 0x221a, "radical" )
+>     , ( 0x221d, "proportional" )
+>     , ( 0x221e, "infinity" )
+>     , ( 0x221f, "orthogonal" )
+>     , ( 0x2220, "angle" )
+>     , ( 0x2223, "divides" )
+>     , ( 0x2225, "parallel" )
+>     , ( 0x2226, "notparallel" )
+>     , ( 0x2227, "logicaland" )
+>     , ( 0x2228, "logicalor" )
+>     , ( 0x2229, "intersection" )
+>     , ( 0x222a, "union" )
+>     , ( 0x222b, "integral" )
+>     , ( 0x222c, "dblintegral" )
+>     , ( 0x222e, "contourintegral" )
+>     , ( 0x2234, "therefore" )
+>     , ( 0x2235, "because" )
+>     , ( 0x2236, "ratio" )
+>     , ( 0x2237, "proportion" )
+>     , ( 0x223c, "similar" )
+>     , ( 0x223d, "reversedtilde" )
+>     , ( 0x2243, "asymptoticallyequal" )
+>     , ( 0x2245, "approximatelyequal" )
+>     , ( 0x2248, "approxequal" )
+>     , ( 0x224c, "allequal" )
+>     , ( 0x2250, "approaches" )
+>     , ( 0x2251, "geometricallyequal" )
+>     , ( 0x2252, "approxequalorimage" )
+>     , ( 0x2253, "imageorapproximatelyequal" )
+>     , ( 0x2260, "notequal" )
+>     , ( 0x2261, "equivalence" )
+>     , ( 0x2262, "notidentical" )
+>     , ( 0x2264, "lessequal" )
+>     , ( 0x2265, "greaterequal" )
+>     , ( 0x2266, "lessoverequal" )
+>     , ( 0x2267, "greateroverequal" )
+>     , ( 0x226a, "muchless" )
+>     , ( 0x226b, "muchgreater" )
+>     , ( 0x226e, "notless" )
+>     , ( 0x226f, "notgreater" )
+>     , ( 0x2270, "notlessnorequal" )
+>     , ( 0x2271, "notgreaternorequal" )
+>     , ( 0x2272, "lessorequivalent" )
+>     , ( 0x2273, "greaterorequivalent" )
+>     , ( 0x2276, "lessorgreater" )
+>     , ( 0x2277, "greaterorless" )
+>     , ( 0x2279, "notgreaternorless" )
+>     , ( 0x227a, "precedes" )
+>     , ( 0x227b, "succeeds" )
+>     , ( 0x2280, "notprecedes" )
+>     , ( 0x2281, "notsucceeds" )
+>     , ( 0x2282, "propersubset" )
+>     , ( 0x2283, "propersuperset" )
+>     , ( 0x2284, "notsubset" )
+>     , ( 0x2285, "notsuperset" )
+>     , ( 0x2286, "reflexsubset" )
+>     , ( 0x2287, "reflexsuperset" )
+>     , ( 0x228a, "subsetnotequal" )
+>     , ( 0x228b, "supersetnotequal" )
+>     , ( 0x2295, "circleplus" )
+>     , ( 0x2296, "minuscircle" )
+>     , ( 0x2297, "circlemultiply" )
+>     , ( 0x2299, "circleot" )
+>     , ( 0x22a3, "tackleft" )
+>     , ( 0x22a4, "tackdown" )
+>     , ( 0x22a5, "perpendicular" )
+>     , ( 0x22bf, "righttriangle" )
+>     , ( 0x22c5, "dotmath" )
+>     , ( 0x22ce, "curlyor" )
+>     , ( 0x22cf, "curlyand" )
+>     , ( 0x22da, "lessequalorgreater" )
+>     , ( 0x22db, "greaterequalorless" )
+>     , ( 0x22ee, "ellipsisvertical" )
+>     , ( 0x2302, "house" )
+>     , ( 0x2303, "control" )
+>     , ( 0x2305, "projective" )
+>     , ( 0x2310, "logicalnotreversed" )
+>     , ( 0x2312, "arc" )
+>     , ( 0x2318, "propellor" )
+>     , ( 0x2320, "integraltop" )
+>     , ( 0x2321, "integralbottom" )
+>     , ( 0x2325, "option" )
+>     , ( 0x2326, "deleteright" )
+>     , ( 0x2327, "clear" )
+>     , ( 0x2329, "angleleft" )
+>     , ( 0x232a, "angleright" )
+>     , ( 0x232b, "deleteleft" )
+>     , ( 0x2423, "blank" )
+>     , ( 0x2460, "onecircle" )
+>     , ( 0x2461, "twocircle" )
+>     , ( 0x2462, "threecircle" )
+>     , ( 0x2463, "fourcircle" )
+>     , ( 0x2464, "fivecircle" )
+>     , ( 0x2465, "sixcircle" )
+>     , ( 0x2466, "sevencircle" )
+>     , ( 0x2467, "eightcircle" )
+>     , ( 0x2468, "ninecircle" )
+>     , ( 0x2469, "tencircle" )
+>     , ( 0x246a, "elevencircle" )
+>     , ( 0x246b, "twelvecircle" )
+>     , ( 0x246c, "thirteencircle" )
+>     , ( 0x246d, "fourteencircle" )
+>     , ( 0x246e, "fifteencircle" )
+>     , ( 0x246f, "sixteencircle" )
+>     , ( 0x2470, "seventeencircle" )
+>     , ( 0x2471, "eighteencircle" )
+>     , ( 0x2472, "nineteencircle" )
+>     , ( 0x2473, "twentycircle" )
+>     , ( 0x2474, "oneparen" )
+>     , ( 0x2475, "twoparen" )
+>     , ( 0x2476, "threeparen" )
+>     , ( 0x2477, "fourparen" )
+>     , ( 0x2478, "fiveparen" )
+>     , ( 0x2479, "sixparen" )
+>     , ( 0x247a, "sevenparen" )
+>     , ( 0x247b, "eightparen" )
+>     , ( 0x247c, "nineparen" )
+>     , ( 0x247d, "tenparen" )
+>     , ( 0x247e, "elevenparen" )
+>     , ( 0x247f, "twelveparen" )
+>     , ( 0x2480, "thirteenparen" )
+>     , ( 0x2481, "fourteenparen" )
+>     , ( 0x2482, "fifteenparen" )
+>     , ( 0x2483, "sixteenparen" )
+>     , ( 0x2484, "seventeenparen" )
+>     , ( 0x2485, "eighteenparen" )
+>     , ( 0x2486, "nineteenparen" )
+>     , ( 0x2487, "twentyparen" )
+>     , ( 0x2488, "oneperiod" )
+>     , ( 0x2489, "twoperiod" )
+>     , ( 0x248a, "threeperiod" )
+>     , ( 0x248b, "fourperiod" )
+>     , ( 0x248c, "fiveperiod" )
+>     , ( 0x248d, "sixperiod" )
+>     , ( 0x248e, "sevenperiod" )
+>     , ( 0x248f, "eightperiod" )
+>     , ( 0x2490, "nineperiod" )
+>     , ( 0x2491, "tenperiod" )
+>     , ( 0x2492, "elevenperiod" )
+>     , ( 0x2493, "twelveperiod" )
+>     , ( 0x2494, "thirteenperiod" )
+>     , ( 0x2495, "fourteenperiod" )
+>     , ( 0x2496, "fifteenperiod" )
+>     , ( 0x2497, "sixteenperiod" )
+>     , ( 0x2498, "seventeenperiod" )
+>     , ( 0x2499, "eighteenperiod" )
+>     , ( 0x249a, "nineteenperiod" )
+>     , ( 0x249b, "twentyperiod" )
+>     , ( 0x249c, "aparen" )
+>     , ( 0x249d, "bparen" )
+>     , ( 0x249e, "cparen" )
+>     , ( 0x249f, "dparen" )
+>     , ( 0x24a0, "eparen" )
+>     , ( 0x24a1, "fparen" )
+>     , ( 0x24a2, "gparen" )
+>     , ( 0x24a3, "hparen" )
+>     , ( 0x24a4, "iparen" )
+>     , ( 0x24a5, "jparen" )
+>     , ( 0x24a6, "kparen" )
+>     , ( 0x24a7, "lparen" )
+>     , ( 0x24a8, "mparen" )
+>     , ( 0x24a9, "nparen" )
+>     , ( 0x24aa, "oparen" )
+>     , ( 0x24ab, "pparen" )
+>     , ( 0x24ac, "qparen" )
+>     , ( 0x24ad, "rparen" )
+>     , ( 0x24ae, "sparen" )
+>     , ( 0x24af, "tparen" )
+>     , ( 0x24b0, "uparen" )
+>     , ( 0x24b1, "vparen" )
+>     , ( 0x24b2, "wparen" )
+>     , ( 0x24b3, "xparen" )
+>     , ( 0x24b4, "yparen" )
+>     , ( 0x24b5, "zparen" )
+>     , ( 0x24b6, "Acircle" )
+>     , ( 0x24b7, "Bcircle" )
+>     , ( 0x24b8, "Ccircle" )
+>     , ( 0x24b9, "Dcircle" )
+>     , ( 0x24ba, "Ecircle" )
+>     , ( 0x24bb, "Fcircle" )
+>     , ( 0x24bc, "Gcircle" )
+>     , ( 0x24bd, "Hcircle" )
+>     , ( 0x24be, "Icircle" )
+>     , ( 0x24bf, "Jcircle" )
+>     , ( 0x24c0, "Kcircle" )
+>     , ( 0x24c1, "Lcircle" )
+>     , ( 0x24c2, "Mcircle" )
+>     , ( 0x24c3, "Ncircle" )
+>     , ( 0x24c4, "Ocircle" )
+>     , ( 0x24c5, "Pcircle" )
+>     , ( 0x24c6, "Qcircle" )
+>     , ( 0x24c7, "Rcircle" )
+>     , ( 0x24c8, "Scircle" )
+>     , ( 0x24c9, "Tcircle" )
+>     , ( 0x24ca, "Ucircle" )
+>     , ( 0x24cb, "Vcircle" )
+>     , ( 0x24cc, "Wcircle" )
+>     , ( 0x24cd, "Xcircle" )
+>     , ( 0x24ce, "Ycircle" )
+>     , ( 0x24cf, "Zcircle" )
+>     , ( 0x24d0, "acircle" )
+>     , ( 0x24d1, "bcircle" )
+>     , ( 0x24d2, "ccircle" )
+>     , ( 0x24d3, "dcircle" )
+>     , ( 0x24d4, "ecircle" )
+>     , ( 0x24d5, "fcircle" )
+>     , ( 0x24d6, "gcircle" )
+>     , ( 0x24d7, "hcircle" )
+>     , ( 0x24d8, "icircle" )
+>     , ( 0x24d9, "jcircle" )
+>     , ( 0x24da, "kcircle" )
+>     , ( 0x24db, "lcircle" )
+>     , ( 0x24dc, "mcircle" )
+>     , ( 0x24dd, "ncircle" )
+>     , ( 0x24de, "ocircle" )
+>     , ( 0x24df, "pcircle" )
+>     , ( 0x24e0, "qcircle" )
+>     , ( 0x24e1, "rcircle" )
+>     , ( 0x24e2, "scircle" )
+>     , ( 0x24e3, "tcircle" )
+>     , ( 0x24e4, "ucircle" )
+>     , ( 0x24e5, "vcircle" )
+>     , ( 0x24e6, "wcircle" )
+>     , ( 0x24e7, "xcircle" )
+>     , ( 0x24e8, "ycircle" )
+>     , ( 0x24e9, "zcircle" )
+>     , ( 0x2500, "SF100000" )
+>     , ( 0x2502, "SF110000" )
+>     , ( 0x250c, "SF010000" )
+>     , ( 0x2510, "SF030000" )
+>     , ( 0x2514, "SF020000" )
+>     , ( 0x2518, "SF040000" )
+>     , ( 0x251c, "SF080000" )
+>     , ( 0x2524, "SF090000" )
+>     , ( 0x252c, "SF060000" )
+>     , ( 0x2534, "SF070000" )
+>     , ( 0x253c, "SF050000" )
+>     , ( 0x2550, "SF430000" )
+>     , ( 0x2551, "SF240000" )
+>     , ( 0x2552, "SF510000" )
+>     , ( 0x2553, "SF520000" )
+>     , ( 0x2554, "SF390000" )
+>     , ( 0x2555, "SF220000" )
+>     , ( 0x2556, "SF210000" )
+>     , ( 0x2557, "SF250000" )
+>     , ( 0x2558, "SF500000" )
+>     , ( 0x2559, "SF490000" )
+>     , ( 0x255a, "SF380000" )
+>     , ( 0x255b, "SF280000" )
+>     , ( 0x255c, "SF270000" )
+>     , ( 0x255d, "SF260000" )
+>     , ( 0x255e, "SF360000" )
+>     , ( 0x255f, "SF370000" )
+>     , ( 0x2560, "SF420000" )
+>     , ( 0x2561, "SF190000" )
+>     , ( 0x2562, "SF200000" )
+>     , ( 0x2563, "SF230000" )
+>     , ( 0x2564, "SF470000" )
+>     , ( 0x2565, "SF480000" )
+>     , ( 0x2566, "SF410000" )
+>     , ( 0x2567, "SF450000" )
+>     , ( 0x2568, "SF460000" )
+>     , ( 0x2569, "SF400000" )
+>     , ( 0x256a, "SF540000" )
+>     , ( 0x256b, "SF530000" )
+>     , ( 0x256c, "SF440000" )
+>     , ( 0x2580, "upblock" )
+>     , ( 0x2584, "dnblock" )
+>     , ( 0x2588, "block" )
+>     , ( 0x258c, "lfblock" )
+>     , ( 0x2590, "rtblock" )
+>     , ( 0x2591, "ltshade" )
+>     , ( 0x2592, "shade" )
+>     , ( 0x2593, "dkshade" )
+>     , ( 0x25a0, "blacksquare" )
+>     , ( 0x25a1, "H22073" )
+>     , ( 0x25a3, "squarewhitewithsmallblack" )
+>     , ( 0x25a4, "squarehorizontalfill" )
+>     , ( 0x25a5, "squareverticalfill" )
+>     , ( 0x25a6, "squareorthogonalcrosshatchfill" )
+>     , ( 0x25a7, "squareupperlefttolowerrightfill" )
+>     , ( 0x25a8, "squareupperrighttolowerleftfill" )
+>     , ( 0x25a9, "squarediagonalcrosshatchfill" )
+>     , ( 0x25aa, "H18543" )
+>     , ( 0x25ab, "H18551" )
+>     , ( 0x25ac, "blackrectangle" )
+>     , ( 0x25b2, "blackuppointingtriangle" )
+>     , ( 0x25b3, "whiteuppointingtriangle" )
+>     , ( 0x25b4, "blackuppointingsmalltriangle" )
+>     , ( 0x25b5, "whiteuppointingsmalltriangle" )
+>     , ( 0x25b6, "blackrightpointingtriangle" )
+>     , ( 0x25b7, "whiterightpointingtriangle" )
+>     , ( 0x25b9, "whiterightpointingsmalltriangle" )
+>     , ( 0x25ba, "blackrightpointingpointer" )
+>     , ( 0x25bc, "blackdownpointingtriangle" )
+>     , ( 0x25bd, "whitedownpointingtriangle" )
+>     , ( 0x25bf, "whitedownpointingsmalltriangle" )
+>     , ( 0x25c0, "blackleftpointingtriangle" )
+>     , ( 0x25c1, "whiteleftpointingtriangle" )
+>     , ( 0x25c3, "whiteleftpointingsmalltriangle" )
+>     , ( 0x25c4, "blackleftpointingpointer" )
+>     , ( 0x25c6, "blackdiamond" )
+>     , ( 0x25c7, "whitediamond" )
+>     , ( 0x25c8, "whitediamondcontainingblacksmalldiamond" )
+>     , ( 0x25c9, "fisheye" )
+>     , ( 0x25ca, "lozenge" )
+>     , ( 0x25cb, "circle" )
+>     , ( 0x25cc, "dottedcircle" )
+>     , ( 0x25ce, "bullseye" )
+>     , ( 0x25cf, "H18533" )
+>     , ( 0x25d0, "circlewithlefthalfblack" )
+>     , ( 0x25d1, "circlewithrighthalfblack" )
+>     , ( 0x25d8, "bulletinverse" )
+>     , ( 0x25d9, "invcircle" )
+>     , ( 0x25e2, "blacklowerrighttriangle" )
+>     , ( 0x25e3, "blacklowerlefttriangle" )
+>     , ( 0x25e4, "blackupperlefttriangle" )
+>     , ( 0x25e5, "blackupperrighttriangle" )
+>     , ( 0x25e6, "openbullet" )
+>     , ( 0x25ef, "largecircle" )
+>     , ( 0x2605, "blackstar" )
+>     , ( 0x2606, "whitestar" )
+>     , ( 0x260e, "telephoneblack" )
+>     , ( 0x260f, "whitetelephone" )
+>     , ( 0x261c, "pointingindexleftwhite" )
+>     , ( 0x261d, "pointingindexupwhite" )
+>     , ( 0x261e, "pointingindexrightwhite" )
+>     , ( 0x261f, "pointingindexdownwhite" )
+>     , ( 0x262f, "yinyang" )
+>     , ( 0x263a, "smileface" )
+>     , ( 0x263b, "blacksmilingface" )
+>     , ( 0x263c, "compass" )
+>     , ( 0x2640, "female" )
+>     , ( 0x2641, "earth" )
+>     , ( 0x2642, "male" )
+>     , ( 0x2660, "spade" )
+>     , ( 0x2661, "heartsuitwhite" )
+>     , ( 0x2662, "diamondsuitwhite" )
+>     , ( 0x2663, "club" )
+>     , ( 0x2664, "spadesuitwhite" )
+>     , ( 0x2665, "heart" )
+>     , ( 0x2666, "diamond" )
+>     , ( 0x2667, "clubsuitwhite" )
+>     , ( 0x2668, "hotsprings" )
+>     , ( 0x2669, "quarternote" )
+>     , ( 0x266a, "musicalnote" )
+>     , ( 0x266b, "eighthnotebeamed" )
+>     , ( 0x266c, "beamedsixteenthnotes" )
+>     , ( 0x266d, "musicflatsign" )
+>     , ( 0x266f, "musicsharpsign" )
+>     , ( 0x2713, "checkmark" )
+>     , ( 0x278a, "onecircleinversesansserif" )
+>     , ( 0x278b, "twocircleinversesansserif" )
+>     , ( 0x278c, "threecircleinversesansserif" )
+>     , ( 0x278d, "fourcircleinversesansserif" )
+>     , ( 0x278e, "fivecircleinversesansserif" )
+>     , ( 0x278f, "sixcircleinversesansserif" )
+>     , ( 0x2790, "sevencircleinversesansserif" )
+>     , ( 0x2791, "eightcircleinversesansserif" )
+>     , ( 0x2792, "ninecircleinversesansserif" )
+>     , ( 0x279e, "arrowrightheavy" )
+>     , ( 0x3000, "ideographicspace" )
+>     , ( 0x3001, "ideographiccomma" )
+>     , ( 0x3002, "ideographicperiod" )
+>     , ( 0x3003, "dittomark" )
+>     , ( 0x3004, "jis" )
+>     , ( 0x3005, "ideographiciterationmark" )
+>     , ( 0x3006, "ideographicclose" )
+>     , ( 0x3007, "ideographiczero" )
+>     , ( 0x3008, "anglebracketleft" )
+>     , ( 0x3009, "anglebracketright" )
+>     , ( 0x300a, "dblanglebracketleft" )
+>     , ( 0x300b, "dblanglebracketright" )
+>     , ( 0x300c, "cornerbracketleft" )
+>     , ( 0x300d, "cornerbracketright" )
+>     , ( 0x300e, "whitecornerbracketleft" )
+>     , ( 0x300f, "whitecornerbracketright" )
+>     , ( 0x3010, "blacklenticularbracketleft" )
+>     , ( 0x3011, "blacklenticularbracketright" )
+>     , ( 0x3012, "postalmark" )
+>     , ( 0x3013, "getamark" )
+>     , ( 0x3014, "tortoiseshellbracketleft" )
+>     , ( 0x3015, "tortoiseshellbracketright" )
+>     , ( 0x3016, "whitelenticularbracketleft" )
+>     , ( 0x3017, "whitelenticularbracketright" )
+>     , ( 0x3018, "whitetortoiseshellbracketleft" )
+>     , ( 0x3019, "whitetortoiseshellbracketright" )
+>     , ( 0x301c, "wavedash" )
+>     , ( 0x301d, "quotedblprimereversed" )
+>     , ( 0x301e, "quotedblprime" )
+>     , ( 0x3020, "postalmarkface" )
+>     , ( 0x3021, "onehangzhou" )
+>     , ( 0x3022, "twohangzhou" )
+>     , ( 0x3023, "threehangzhou" )
+>     , ( 0x3024, "fourhangzhou" )
+>     , ( 0x3025, "fivehangzhou" )
+>     , ( 0x3026, "sixhangzhou" )
+>     , ( 0x3027, "sevenhangzhou" )
+>     , ( 0x3028, "eighthangzhou" )
+>     , ( 0x3029, "ninehangzhou" )
+>     , ( 0x3036, "circlepostalmark" )
+>     , ( 0x3041, "asmallhiragana" )
+>     , ( 0x3042, "ahiragana" )
+>     , ( 0x3043, "ismallhiragana" )
+>     , ( 0x3044, "ihiragana" )
+>     , ( 0x3045, "usmallhiragana" )
+>     , ( 0x3046, "uhiragana" )
+>     , ( 0x3047, "esmallhiragana" )
+>     , ( 0x3048, "ehiragana" )
+>     , ( 0x3049, "osmallhiragana" )
+>     , ( 0x304a, "ohiragana" )
+>     , ( 0x304b, "kahiragana" )
+>     , ( 0x304c, "gahiragana" )
+>     , ( 0x304d, "kihiragana" )
+>     , ( 0x304e, "gihiragana" )
+>     , ( 0x304f, "kuhiragana" )
+>     , ( 0x3050, "guhiragana" )
+>     , ( 0x3051, "kehiragana" )
+>     , ( 0x3052, "gehiragana" )
+>     , ( 0x3053, "kohiragana" )
+>     , ( 0x3054, "gohiragana" )
+>     , ( 0x3055, "sahiragana" )
+>     , ( 0x3056, "zahiragana" )
+>     , ( 0x3057, "sihiragana" )
+>     , ( 0x3058, "zihiragana" )
+>     , ( 0x3059, "suhiragana" )
+>     , ( 0x305a, "zuhiragana" )
+>     , ( 0x305b, "sehiragana" )
+>     , ( 0x305c, "zehiragana" )
+>     , ( 0x305d, "sohiragana" )
+>     , ( 0x305e, "zohiragana" )
+>     , ( 0x305f, "tahiragana" )
+>     , ( 0x3060, "dahiragana" )
+>     , ( 0x3061, "tihiragana" )
+>     , ( 0x3062, "dihiragana" )
+>     , ( 0x3063, "tusmallhiragana" )
+>     , ( 0x3064, "tuhiragana" )
+>     , ( 0x3065, "duhiragana" )
+>     , ( 0x3066, "tehiragana" )
+>     , ( 0x3067, "dehiragana" )
+>     , ( 0x3068, "tohiragana" )
+>     , ( 0x3069, "dohiragana" )
+>     , ( 0x306a, "nahiragana" )
+>     , ( 0x306b, "nihiragana" )
+>     , ( 0x306c, "nuhiragana" )
+>     , ( 0x306d, "nehiragana" )
+>     , ( 0x306e, "nohiragana" )
+>     , ( 0x306f, "hahiragana" )
+>     , ( 0x3070, "bahiragana" )
+>     , ( 0x3071, "pahiragana" )
+>     , ( 0x3072, "hihiragana" )
+>     , ( 0x3073, "bihiragana" )
+>     , ( 0x3074, "pihiragana" )
+>     , ( 0x3075, "huhiragana" )
+>     , ( 0x3076, "buhiragana" )
+>     , ( 0x3077, "puhiragana" )
+>     , ( 0x3078, "hehiragana" )
+>     , ( 0x3079, "behiragana" )
+>     , ( 0x307a, "pehiragana" )
+>     , ( 0x307b, "hohiragana" )
+>     , ( 0x307c, "bohiragana" )
+>     , ( 0x307d, "pohiragana" )
+>     , ( 0x307e, "mahiragana" )
+>     , ( 0x307f, "mihiragana" )
+>     , ( 0x3080, "muhiragana" )
+>     , ( 0x3081, "mehiragana" )
+>     , ( 0x3082, "mohiragana" )
+>     , ( 0x3083, "yasmallhiragana" )
+>     , ( 0x3084, "yahiragana" )
+>     , ( 0x3085, "yusmallhiragana" )
+>     , ( 0x3086, "yuhiragana" )
+>     , ( 0x3087, "yosmallhiragana" )
+>     , ( 0x3088, "yohiragana" )
+>     , ( 0x3089, "rahiragana" )
+>     , ( 0x308a, "rihiragana" )
+>     , ( 0x308b, "ruhiragana" )
+>     , ( 0x308c, "rehiragana" )
+>     , ( 0x308d, "rohiragana" )
+>     , ( 0x308e, "wasmallhiragana" )
+>     , ( 0x308f, "wahiragana" )
+>     , ( 0x3090, "wihiragana" )
+>     , ( 0x3091, "wehiragana" )
+>     , ( 0x3092, "wohiragana" )
+>     , ( 0x3093, "nhiragana" )
+>     , ( 0x3094, "vuhiragana" )
+>     , ( 0x309b, "voicedmarkkana" )
+>     , ( 0x309c, "semivoicedmarkkana" )
+>     , ( 0x309d, "iterationhiragana" )
+>     , ( 0x309e, "voicediterationhiragana" )
+>     , ( 0x30a1, "asmallkatakana" )
+>     , ( 0x30a2, "akatakana" )
+>     , ( 0x30a3, "ismallkatakana" )
+>     , ( 0x30a4, "ikatakana" )
+>     , ( 0x30a5, "usmallkatakana" )
+>     , ( 0x30a6, "ukatakana" )
+>     , ( 0x30a7, "esmallkatakana" )
+>     , ( 0x30a8, "ekatakana" )
+>     , ( 0x30a9, "osmallkatakana" )
+>     , ( 0x30aa, "okatakana" )
+>     , ( 0x30ab, "kakatakana" )
+>     , ( 0x30ac, "gakatakana" )
+>     , ( 0x30ad, "kikatakana" )
+>     , ( 0x30ae, "gikatakana" )
+>     , ( 0x30af, "kukatakana" )
+>     , ( 0x30b0, "gukatakana" )
+>     , ( 0x30b1, "kekatakana" )
+>     , ( 0x30b2, "gekatakana" )
+>     , ( 0x30b3, "kokatakana" )
+>     , ( 0x30b4, "gokatakana" )
+>     , ( 0x30b5, "sakatakana" )
+>     , ( 0x30b6, "zakatakana" )
+>     , ( 0x30b7, "sikatakana" )
+>     , ( 0x30b8, "zikatakana" )
+>     , ( 0x30b9, "sukatakana" )
+>     , ( 0x30ba, "zukatakana" )
+>     , ( 0x30bb, "sekatakana" )
+>     , ( 0x30bc, "zekatakana" )
+>     , ( 0x30bd, "sokatakana" )
+>     , ( 0x30be, "zokatakana" )
+>     , ( 0x30bf, "takatakana" )
+>     , ( 0x30c0, "dakatakana" )
+>     , ( 0x30c1, "tikatakana" )
+>     , ( 0x30c2, "dikatakana" )
+>     , ( 0x30c3, "tusmallkatakana" )
+>     , ( 0x30c4, "tukatakana" )
+>     , ( 0x30c5, "dukatakana" )
+>     , ( 0x30c6, "tekatakana" )
+>     , ( 0x30c7, "dekatakana" )
+>     , ( 0x30c8, "tokatakana" )
+>     , ( 0x30c9, "dokatakana" )
+>     , ( 0x30ca, "nakatakana" )
+>     , ( 0x30cb, "nikatakana" )
+>     , ( 0x30cc, "nukatakana" )
+>     , ( 0x30cd, "nekatakana" )
+>     , ( 0x30ce, "nokatakana" )
+>     , ( 0x30cf, "hakatakana" )
+>     , ( 0x30d0, "bakatakana" )
+>     , ( 0x30d1, "pakatakana" )
+>     , ( 0x30d2, "hikatakana" )
+>     , ( 0x30d3, "bikatakana" )
+>     , ( 0x30d4, "pikatakana" )
+>     , ( 0x30d5, "hukatakana" )
+>     , ( 0x30d6, "bukatakana" )
+>     , ( 0x30d7, "pukatakana" )
+>     , ( 0x30d8, "hekatakana" )
+>     , ( 0x30d9, "bekatakana" )
+>     , ( 0x30da, "pekatakana" )
+>     , ( 0x30db, "hokatakana" )
+>     , ( 0x30dc, "bokatakana" )
+>     , ( 0x30dd, "pokatakana" )
+>     , ( 0x30de, "makatakana" )
+>     , ( 0x30df, "mikatakana" )
+>     , ( 0x30e0, "mukatakana" )
+>     , ( 0x30e1, "mekatakana" )
+>     , ( 0x30e2, "mokatakana" )
+>     , ( 0x30e3, "yasmallkatakana" )
+>     , ( 0x30e4, "yakatakana" )
+>     , ( 0x30e5, "yusmallkatakana" )
+>     , ( 0x30e6, "yukatakana" )
+>     , ( 0x30e7, "yosmallkatakana" )
+>     , ( 0x30e8, "yokatakana" )
+>     , ( 0x30e9, "rakatakana" )
+>     , ( 0x30ea, "rikatakana" )
+>     , ( 0x30eb, "rukatakana" )
+>     , ( 0x30ec, "rekatakana" )
+>     , ( 0x30ed, "rokatakana" )
+>     , ( 0x30ee, "wasmallkatakana" )
+>     , ( 0x30ef, "wakatakana" )
+>     , ( 0x30f0, "wikatakana" )
+>     , ( 0x30f1, "wekatakana" )
+>     , ( 0x30f2, "wokatakana" )
+>     , ( 0x30f3, "nkatakana" )
+>     , ( 0x30f4, "vukatakana" )
+>     , ( 0x30f5, "kasmallkatakana" )
+>     , ( 0x30f6, "kesmallkatakana" )
+>     , ( 0x30f7, "vakatakana" )
+>     , ( 0x30f8, "vikatakana" )
+>     , ( 0x30f9, "vekatakana" )
+>     , ( 0x30fa, "vokatakana" )
+>     , ( 0x30fb, "dotkatakana" )
+>     , ( 0x30fc, "prolongedkana" )
+>     , ( 0x30fd, "iterationkatakana" )
+>     , ( 0x30fe, "voicediterationkatakana" )
+>     , ( 0x3105, "bbopomofo" )
+>     , ( 0x3106, "pbopomofo" )
+>     , ( 0x3107, "mbopomofo" )
+>     , ( 0x3108, "fbopomofo" )
+>     , ( 0x3109, "dbopomofo" )
+>     , ( 0x310a, "tbopomofo" )
+>     , ( 0x310b, "nbopomofo" )
+>     , ( 0x310c, "lbopomofo" )
+>     , ( 0x310d, "gbopomofo" )
+>     , ( 0x310e, "kbopomofo" )
+>     , ( 0x310f, "hbopomofo" )
+>     , ( 0x3110, "jbopomofo" )
+>     , ( 0x3111, "qbopomofo" )
+>     , ( 0x3112, "xbopomofo" )
+>     , ( 0x3113, "zhbopomofo" )
+>     , ( 0x3114, "chbopomofo" )
+>     , ( 0x3115, "shbopomofo" )
+>     , ( 0x3116, "rbopomofo" )
+>     , ( 0x3117, "zbopomofo" )
+>     , ( 0x3118, "cbopomofo" )
+>     , ( 0x3119, "sbopomofo" )
+>     , ( 0x311a, "abopomofo" )
+>     , ( 0x311b, "obopomofo" )
+>     , ( 0x311c, "ebopomofo" )
+>     , ( 0x311d, "ehbopomofo" )
+>     , ( 0x311e, "aibopomofo" )
+>     , ( 0x311f, "eibopomofo" )
+>     , ( 0x3120, "aubopomofo" )
+>     , ( 0x3121, "oubopomofo" )
+>     , ( 0x3122, "anbopomofo" )
+>     , ( 0x3123, "enbopomofo" )
+>     , ( 0x3124, "angbopomofo" )
+>     , ( 0x3125, "engbopomofo" )
+>     , ( 0x3126, "erbopomofo" )
+>     , ( 0x3127, "ibopomofo" )
+>     , ( 0x3128, "ubopomofo" )
+>     , ( 0x3129, "iubopomofo" )
+>     , ( 0x3131, "kiyeokkorean" )
+>     , ( 0x3132, "ssangkiyeokkorean" )
+>     , ( 0x3133, "kiyeoksioskorean" )
+>     , ( 0x3134, "nieunkorean" )
+>     , ( 0x3135, "nieuncieuckorean" )
+>     , ( 0x3136, "nieunhieuhkorean" )
+>     , ( 0x3137, "tikeutkorean" )
+>     , ( 0x3138, "ssangtikeutkorean" )
+>     , ( 0x3139, "rieulkorean" )
+>     , ( 0x313a, "rieulkiyeokkorean" )
+>     , ( 0x313b, "rieulmieumkorean" )
+>     , ( 0x313c, "rieulpieupkorean" )
+>     , ( 0x313d, "rieulsioskorean" )
+>     , ( 0x313e, "rieulthieuthkorean" )
+>     , ( 0x313f, "rieulphieuphkorean" )
+>     , ( 0x3140, "rieulhieuhkorean" )
+>     , ( 0x3141, "mieumkorean" )
+>     , ( 0x3142, "pieupkorean" )
+>     , ( 0x3143, "ssangpieupkorean" )
+>     , ( 0x3144, "pieupsioskorean" )
+>     , ( 0x3145, "sioskorean" )
+>     , ( 0x3146, "ssangsioskorean" )
+>     , ( 0x3147, "ieungkorean" )
+>     , ( 0x3148, "cieuckorean" )
+>     , ( 0x3149, "ssangcieuckorean" )
+>     , ( 0x314a, "chieuchkorean" )
+>     , ( 0x314b, "khieukhkorean" )
+>     , ( 0x314c, "thieuthkorean" )
+>     , ( 0x314d, "phieuphkorean" )
+>     , ( 0x314e, "hieuhkorean" )
+>     , ( 0x314f, "akorean" )
+>     , ( 0x3150, "aekorean" )
+>     , ( 0x3151, "yakorean" )
+>     , ( 0x3152, "yaekorean" )
+>     , ( 0x3153, "eokorean" )
+>     , ( 0x3154, "ekorean" )
+>     , ( 0x3155, "yeokorean" )
+>     , ( 0x3156, "yekorean" )
+>     , ( 0x3157, "okorean" )
+>     , ( 0x3158, "wakorean" )
+>     , ( 0x3159, "waekorean" )
+>     , ( 0x315a, "oekorean" )
+>     , ( 0x315b, "yokorean" )
+>     , ( 0x315c, "ukorean" )
+>     , ( 0x315d, "weokorean" )
+>     , ( 0x315e, "wekorean" )
+>     , ( 0x315f, "wikorean" )
+>     , ( 0x3160, "yukorean" )
+>     , ( 0x3161, "eukorean" )
+>     , ( 0x3162, "yikorean" )
+>     , ( 0x3163, "ikorean" )
+>     , ( 0x3164, "hangulfiller" )
+>     , ( 0x3165, "ssangnieunkorean" )
+>     , ( 0x3166, "nieuntikeutkorean" )
+>     , ( 0x3167, "nieunsioskorean" )
+>     , ( 0x3168, "nieunpansioskorean" )
+>     , ( 0x3169, "rieulkiyeoksioskorean" )
+>     , ( 0x316a, "rieultikeutkorean" )
+>     , ( 0x316b, "rieulpieupsioskorean" )
+>     , ( 0x316c, "rieulpansioskorean" )
+>     , ( 0x316d, "rieulyeorinhieuhkorean" )
+>     , ( 0x316e, "mieumpieupkorean" )
+>     , ( 0x316f, "mieumsioskorean" )
+>     , ( 0x3170, "mieumpansioskorean" )
+>     , ( 0x3171, "kapyeounmieumkorean" )
+>     , ( 0x3172, "pieupkiyeokkorean" )
+>     , ( 0x3173, "pieuptikeutkorean" )
+>     , ( 0x3174, "pieupsioskiyeokkorean" )
+>     , ( 0x3175, "pieupsiostikeutkorean" )
+>     , ( 0x3176, "pieupcieuckorean" )
+>     , ( 0x3177, "pieupthieuthkorean" )
+>     , ( 0x3178, "kapyeounpieupkorean" )
+>     , ( 0x3179, "kapyeounssangpieupkorean" )
+>     , ( 0x317a, "sioskiyeokkorean" )
+>     , ( 0x317b, "siosnieunkorean" )
+>     , ( 0x317c, "siostikeutkorean" )
+>     , ( 0x317d, "siospieupkorean" )
+>     , ( 0x317e, "sioscieuckorean" )
+>     , ( 0x317f, "pansioskorean" )
+>     , ( 0x3180, "ssangieungkorean" )
+>     , ( 0x3181, "yesieungkorean" )
+>     , ( 0x3182, "yesieungsioskorean" )
+>     , ( 0x3183, "yesieungpansioskorean" )
+>     , ( 0x3184, "kapyeounphieuphkorean" )
+>     , ( 0x3185, "ssanghieuhkorean" )
+>     , ( 0x3186, "yeorinhieuhkorean" )
+>     , ( 0x3187, "yoyakorean" )
+>     , ( 0x3188, "yoyaekorean" )
+>     , ( 0x3189, "yoikorean" )
+>     , ( 0x318a, "yuyeokorean" )
+>     , ( 0x318b, "yuyekorean" )
+>     , ( 0x318c, "yuikorean" )
+>     , ( 0x318d, "araeakorean" )
+>     , ( 0x318e, "araeaekorean" )
+>     , ( 0x3200, "kiyeokparenkorean" )
+>     , ( 0x3201, "nieunparenkorean" )
+>     , ( 0x3202, "tikeutparenkorean" )
+>     , ( 0x3203, "rieulparenkorean" )
+>     , ( 0x3204, "mieumparenkorean" )
+>     , ( 0x3205, "pieupparenkorean" )
+>     , ( 0x3206, "siosparenkorean" )
+>     , ( 0x3207, "ieungparenkorean" )
+>     , ( 0x3208, "cieucparenkorean" )
+>     , ( 0x3209, "chieuchparenkorean" )
+>     , ( 0x320a, "khieukhparenkorean" )
+>     , ( 0x320b, "thieuthparenkorean" )
+>     , ( 0x320c, "phieuphparenkorean" )
+>     , ( 0x320d, "hieuhparenkorean" )
+>     , ( 0x320e, "kiyeokaparenkorean" )
+>     , ( 0x320f, "nieunaparenkorean" )
+>     , ( 0x3210, "tikeutaparenkorean" )
+>     , ( 0x3211, "rieulaparenkorean" )
+>     , ( 0x3212, "mieumaparenkorean" )
+>     , ( 0x3213, "pieupaparenkorean" )
+>     , ( 0x3214, "siosaparenkorean" )
+>     , ( 0x3215, "ieungaparenkorean" )
+>     , ( 0x3216, "cieucaparenkorean" )
+>     , ( 0x3217, "chieuchaparenkorean" )
+>     , ( 0x3218, "khieukhaparenkorean" )
+>     , ( 0x3219, "thieuthaparenkorean" )
+>     , ( 0x321a, "phieuphaparenkorean" )
+>     , ( 0x321b, "hieuhaparenkorean" )
+>     , ( 0x321c, "cieucuparenkorean" )
+>     , ( 0x3220, "oneideographicparen" )
+>     , ( 0x3221, "twoideographicparen" )
+>     , ( 0x3222, "threeideographicparen" )
+>     , ( 0x3223, "fourideographicparen" )
+>     , ( 0x3224, "fiveideographicparen" )
+>     , ( 0x3225, "sixideographicparen" )
+>     , ( 0x3226, "sevenideographicparen" )
+>     , ( 0x3227, "eightideographicparen" )
+>     , ( 0x3228, "nineideographicparen" )
+>     , ( 0x3229, "tenideographicparen" )
+>     , ( 0x322a, "ideographicmoonparen" )
+>     , ( 0x322b, "ideographicfireparen" )
+>     , ( 0x322c, "ideographicwaterparen" )
+>     , ( 0x322d, "ideographicwoodparen" )
+>     , ( 0x322e, "ideographicmetalparen" )
+>     , ( 0x322f, "ideographicearthparen" )
+>     , ( 0x3230, "ideographicsunparen" )
+>     , ( 0x3231, "ideographicstockparen" )
+>     , ( 0x3232, "ideographichaveparen" )
+>     , ( 0x3233, "ideographicsocietyparen" )
+>     , ( 0x3234, "ideographicnameparen" )
+>     , ( 0x3235, "ideographicspecialparen" )
+>     , ( 0x3236, "ideographicfinancialparen" )
+>     , ( 0x3237, "ideographiccongratulationparen" )
+>     , ( 0x3238, "ideographiclaborparen" )
+>     , ( 0x3239, "ideographicrepresentparen" )
+>     , ( 0x323a, "ideographiccallparen" )
+>     , ( 0x323b, "ideographicstudyparen" )
+>     , ( 0x323c, "ideographicsuperviseparen" )
+>     , ( 0x323d, "ideographicenterpriseparen" )
+>     , ( 0x323e, "ideographicresourceparen" )
+>     , ( 0x323f, "ideographicallianceparen" )
+>     , ( 0x3240, "ideographicfestivalparen" )
+>     , ( 0x3242, "ideographicselfparen" )
+>     , ( 0x3243, "ideographicreachparen" )
+>     , ( 0x3260, "kiyeokcirclekorean" )
+>     , ( 0x3261, "nieuncirclekorean" )
+>     , ( 0x3262, "tikeutcirclekorean" )
+>     , ( 0x3263, "rieulcirclekorean" )
+>     , ( 0x3264, "mieumcirclekorean" )
+>     , ( 0x3265, "pieupcirclekorean" )
+>     , ( 0x3266, "sioscirclekorean" )
+>     , ( 0x3267, "ieungcirclekorean" )
+>     , ( 0x3268, "cieuccirclekorean" )
+>     , ( 0x3269, "chieuchcirclekorean" )
+>     , ( 0x326a, "khieukhcirclekorean" )
+>     , ( 0x326b, "thieuthcirclekorean" )
+>     , ( 0x326c, "phieuphcirclekorean" )
+>     , ( 0x326d, "hieuhcirclekorean" )
+>     , ( 0x326e, "kiyeokacirclekorean" )
+>     , ( 0x326f, "nieunacirclekorean" )
+>     , ( 0x3270, "tikeutacirclekorean" )
+>     , ( 0x3271, "rieulacirclekorean" )
+>     , ( 0x3272, "mieumacirclekorean" )
+>     , ( 0x3273, "pieupacirclekorean" )
+>     , ( 0x3274, "siosacirclekorean" )
+>     , ( 0x3275, "ieungacirclekorean" )
+>     , ( 0x3276, "cieucacirclekorean" )
+>     , ( 0x3277, "chieuchacirclekorean" )
+>     , ( 0x3278, "khieukhacirclekorean" )
+>     , ( 0x3279, "thieuthacirclekorean" )
+>     , ( 0x327a, "phieuphacirclekorean" )
+>     , ( 0x327b, "hieuhacirclekorean" )
+>     , ( 0x327f, "koreanstandardsymbol" )
+>     , ( 0x328a, "ideographmooncircle" )
+>     , ( 0x328b, "ideographfirecircle" )
+>     , ( 0x328c, "ideographwatercircle" )
+>     , ( 0x328d, "ideographwoodcircle" )
+>     , ( 0x328e, "ideographmetalcircle" )
+>     , ( 0x328f, "ideographearthcircle" )
+>     , ( 0x3290, "ideographsuncircle" )
+>     , ( 0x3294, "ideographnamecircle" )
+>     , ( 0x3296, "ideographicfinancialcircle" )
+>     , ( 0x3298, "ideographiclaborcircle" )
+>     , ( 0x3299, "ideographicsecretcircle" )
+>     , ( 0x329d, "ideographicexcellentcircle" )
+>     , ( 0x329e, "ideographicprintcircle" )
+>     , ( 0x32a3, "ideographiccorrectcircle" )
+>     , ( 0x32a4, "ideographichighcircle" )
+>     , ( 0x32a5, "ideographiccentrecircle" )
+>     , ( 0x32a6, "ideographiclowcircle" )
+>     , ( 0x32a7, "ideographicleftcircle" )
+>     , ( 0x32a8, "ideographicrightcircle" )
+>     , ( 0x32a9, "ideographicmedicinecircle" )
+>     , ( 0x3300, "apaatosquare" )
+>     , ( 0x3303, "aarusquare" )
+>     , ( 0x3305, "intisquare" )
+>     , ( 0x330d, "karoriisquare" )
+>     , ( 0x3314, "kirosquare" )
+>     , ( 0x3315, "kiroguramusquare" )
+>     , ( 0x3316, "kiromeetorusquare" )
+>     , ( 0x3318, "guramusquare" )
+>     , ( 0x331e, "kooposquare" )
+>     , ( 0x3322, "sentisquare" )
+>     , ( 0x3323, "sentosquare" )
+>     , ( 0x3326, "dorusquare" )
+>     , ( 0x3327, "tonsquare" )
+>     , ( 0x332a, "haitusquare" )
+>     , ( 0x332b, "paasentosquare" )
+>     , ( 0x3331, "birusquare" )
+>     , ( 0x3333, "huiitosquare" )
+>     , ( 0x3336, "hekutaarusquare" )
+>     , ( 0x3339, "herutusquare" )
+>     , ( 0x333b, "peezisquare" )
+>     , ( 0x3342, "hoonsquare" )
+>     , ( 0x3347, "mansyonsquare" )
+>     , ( 0x3349, "mirisquare" )
+>     , ( 0x334a, "miribaarusquare" )
+>     , ( 0x334d, "meetorusquare" )
+>     , ( 0x334e, "yaadosquare" )
+>     , ( 0x3351, "rittorusquare" )
+>     , ( 0x3357, "wattosquare" )
+>     , ( 0x337b, "heiseierasquare" )
+>     , ( 0x337c, "syouwaerasquare" )
+>     , ( 0x337d, "taisyouerasquare" )
+>     , ( 0x337e, "meizierasquare" )
+>     , ( 0x337f, "corporationsquare" )
+>     , ( 0x3380, "paampssquare" )
+>     , ( 0x3381, "nasquare" )
+>     , ( 0x3382, "muasquare" )
+>     , ( 0x3383, "masquare" )
+>     , ( 0x3384, "kasquare" )
+>     , ( 0x3385, "KBsquare" )
+>     , ( 0x3386, "MBsquare" )
+>     , ( 0x3387, "GBsquare" )
+>     , ( 0x3388, "calsquare" )
+>     , ( 0x3389, "kcalsquare" )
+>     , ( 0x338a, "pfsquare" )
+>     , ( 0x338b, "nfsquare" )
+>     , ( 0x338c, "mufsquare" )
+>     , ( 0x338d, "mugsquare" )
+>     , ( 0x338e, "squaremg" )
+>     , ( 0x338f, "squarekg" )
+>     , ( 0x3390, "Hzsquare" )
+>     , ( 0x3391, "khzsquare" )
+>     , ( 0x3392, "mhzsquare" )
+>     , ( 0x3393, "ghzsquare" )
+>     , ( 0x3394, "thzsquare" )
+>     , ( 0x3395, "mulsquare" )
+>     , ( 0x3396, "mlsquare" )
+>     , ( 0x3397, "dlsquare" )
+>     , ( 0x3398, "klsquare" )
+>     , ( 0x3399, "fmsquare" )
+>     , ( 0x339a, "nmsquare" )
+>     , ( 0x339b, "mumsquare" )
+>     , ( 0x339c, "squaremm" )
+>     , ( 0x339d, "squarecm" )
+>     , ( 0x339e, "squarekm" )
+>     , ( 0x339f, "mmsquaredsquare" )
+>     , ( 0x33a0, "cmsquaredsquare" )
+>     , ( 0x33a1, "squaremsquared" )
+>     , ( 0x33a2, "kmsquaredsquare" )
+>     , ( 0x33a3, "mmcubedsquare" )
+>     , ( 0x33a4, "cmcubedsquare" )
+>     , ( 0x33a5, "mcubedsquare" )
+>     , ( 0x33a6, "kmcubedsquare" )
+>     , ( 0x33a7, "moverssquare" )
+>     , ( 0x33a8, "moverssquaredsquare" )
+>     , ( 0x33a9, "pasquare" )
+>     , ( 0x33aa, "kpasquare" )
+>     , ( 0x33ab, "mpasquare" )
+>     , ( 0x33ac, "gpasquare" )
+>     , ( 0x33ad, "radsquare" )
+>     , ( 0x33ae, "radoverssquare" )
+>     , ( 0x33af, "radoverssquaredsquare" )
+>     , ( 0x33b0, "pssquare" )
+>     , ( 0x33b1, "nssquare" )
+>     , ( 0x33b2, "mussquare" )
+>     , ( 0x33b3, "mssquare" )
+>     , ( 0x33b4, "pvsquare" )
+>     , ( 0x33b5, "nvsquare" )
+>     , ( 0x33b6, "muvsquare" )
+>     , ( 0x33b7, "mvsquare" )
+>     , ( 0x33b8, "kvsquare" )
+>     , ( 0x33b9, "mvmegasquare" )
+>     , ( 0x33ba, "pwsquare" )
+>     , ( 0x33bb, "nwsquare" )
+>     , ( 0x33bc, "muwsquare" )
+>     , ( 0x33bd, "mwsquare" )
+>     , ( 0x33be, "kwsquare" )
+>     , ( 0x33bf, "mwmegasquare" )
+>     , ( 0x33c0, "kohmsquare" )
+>     , ( 0x33c1, "mohmsquare" )
+>     , ( 0x33c2, "amsquare" )
+>     , ( 0x33c3, "bqsquare" )
+>     , ( 0x33c4, "squarecc" )
+>     , ( 0x33c5, "cdsquare" )
+>     , ( 0x33c6, "coverkgsquare" )
+>     , ( 0x33c7, "cosquare" )
+>     , ( 0x33c8, "dbsquare" )
+>     , ( 0x33c9, "gysquare" )
+>     , ( 0x33ca, "hasquare" )
+>     , ( 0x33cb, "HPsquare" )
+>     , ( 0x33cd, "KKsquare" )
+>     , ( 0x33ce, "squarekmcapital" )
+>     , ( 0x33cf, "ktsquare" )
+>     , ( 0x33d0, "lmsquare" )
+>     , ( 0x33d1, "squareln" )
+>     , ( 0x33d2, "squarelog" )
+>     , ( 0x33d3, "lxsquare" )
+>     , ( 0x33d4, "mbsquare" )
+>     , ( 0x33d5, "squaremil" )
+>     , ( 0x33d6, "molsquare" )
+>     , ( 0x33d8, "pmsquare" )
+>     , ( 0x33db, "srsquare" )
+>     , ( 0x33dc, "svsquare" )
+>     , ( 0x33dd, "wbsquare" )
+>     , ( 0x5344, "twentyhangzhou" )
+>     , ( 0xf6be, "dotlessj" )
+>     , ( 0xf6bf, "LL" )
+>     , ( 0xf6c0, "ll" )
+>     , ( 0xf6c3, "commaaccent" )
+>     , ( 0xf6c4, "afii10063" )
+>     , ( 0xf6c5, "afii10064" )
+>     , ( 0xf6c6, "afii10192" )
+>     , ( 0xf6c7, "afii10831" )
+>     , ( 0xf6c8, "afii10832" )
+>     , ( 0xf6c9, "Acute" )
+>     , ( 0xf6ca, "Caron" )
+>     , ( 0xf6cb, "Dieresis" )
+>     , ( 0xf6cc, "DieresisAcute" )
+>     , ( 0xf6cd, "DieresisGrave" )
+>     , ( 0xf6ce, "Grave" )
+>     , ( 0xf6cf, "Hungarumlaut" )
+>     , ( 0xf6d0, "Macron" )
+>     , ( 0xf6d1, "cyrBreve" )
+>     , ( 0xf6d2, "cyrFlex" )
+>     , ( 0xf6d3, "dblGrave" )
+>     , ( 0xf6d4, "cyrbreve" )
+>     , ( 0xf6d5, "cyrflex" )
+>     , ( 0xf6d6, "dblgrave" )
+>     , ( 0xf6d7, "dieresisacute" )
+>     , ( 0xf6d8, "dieresisgrave" )
+>     , ( 0xf6d9, "copyrightserif" )
+>     , ( 0xf6da, "registerserif" )
+>     , ( 0xf6db, "trademarkserif" )
+>     , ( 0xf6dc, "onefitted" )
+>     , ( 0xf6dd, "rupiah" )
+>     , ( 0xf6de, "threequartersemdash" )
+>     , ( 0xf6df, "centinferior" )
+>     , ( 0xf6e0, "centsuperior" )
+>     , ( 0xf6e1, "commainferior" )
+>     , ( 0xf6e2, "commasuperior" )
+>     , ( 0xf6e3, "dollarinferior" )
+>     , ( 0xf6e4, "dollarsuperior" )
+>     , ( 0xf6e5, "hypheninferior" )
+>     , ( 0xf6e6, "hyphensuperior" )
+>     , ( 0xf6e7, "periodinferior" )
+>     , ( 0xf6e8, "periodsuperior" )
+>     , ( 0xf6e9, "asuperior" )
+>     , ( 0xf6ea, "bsuperior" )
+>     , ( 0xf6eb, "dsuperior" )
+>     , ( 0xf6ec, "esuperior" )
+>     , ( 0xf6ed, "isuperior" )
+>     , ( 0xf6ee, "lsuperior" )
+>     , ( 0xf6ef, "msuperior" )
+>     , ( 0xf6f0, "osuperior" )
+>     , ( 0xf6f1, "rsuperior" )
+>     , ( 0xf6f2, "ssuperior" )
+>     , ( 0xf6f3, "tsuperior" )
+>     , ( 0xf6f4, "Brevesmall" )
+>     , ( 0xf6f5, "Caronsmall" )
+>     , ( 0xf6f6, "Circumflexsmall" )
+>     , ( 0xf6f7, "Dotaccentsmall" )
+>     , ( 0xf6f8, "Hungarumlautsmall" )
+>     , ( 0xf6f9, "Lslashsmall" )
+>     , ( 0xf6fa, "OEsmall" )
+>     , ( 0xf6fb, "Ogoneksmall" )
+>     , ( 0xf6fc, "Ringsmall" )
+>     , ( 0xf6fd, "Scaronsmall" )
+>     , ( 0xf6fe, "Tildesmall" )
+>     , ( 0xf6ff, "Zcaronsmall" )
+>     , ( 0xf721, "exclamsmall" )
+>     , ( 0xf724, "dollaroldstyle" )
+>     , ( 0xf726, "ampersandsmall" )
+>     , ( 0xf730, "zerooldstyle" )
+>     , ( 0xf731, "oneoldstyle" )
+>     , ( 0xf732, "twooldstyle" )
+>     , ( 0xf733, "threeoldstyle" )
+>     , ( 0xf734, "fouroldstyle" )
+>     , ( 0xf735, "fiveoldstyle" )
+>     , ( 0xf736, "sixoldstyle" )
+>     , ( 0xf737, "sevenoldstyle" )
+>     , ( 0xf738, "eightoldstyle" )
+>     , ( 0xf739, "nineoldstyle" )
+>     , ( 0xf73f, "questionsmall" )
+>     , ( 0xf760, "Gravesmall" )
+>     , ( 0xf761, "Asmall" )
+>     , ( 0xf762, "Bsmall" )
+>     , ( 0xf763, "Csmall" )
+>     , ( 0xf764, "Dsmall" )
+>     , ( 0xf765, "Esmall" )
+>     , ( 0xf766, "Fsmall" )
+>     , ( 0xf767, "Gsmall" )
+>     , ( 0xf768, "Hsmall" )
+>     , ( 0xf769, "Ismall" )
+>     , ( 0xf76a, "Jsmall" )
+>     , ( 0xf76b, "Ksmall" )
+>     , ( 0xf76c, "Lsmall" )
+>     , ( 0xf76d, "Msmall" )
+>     , ( 0xf76e, "Nsmall" )
+>     , ( 0xf76f, "Osmall" )
+>     , ( 0xf770, "Psmall" )
+>     , ( 0xf771, "Qsmall" )
+>     , ( 0xf772, "Rsmall" )
+>     , ( 0xf773, "Ssmall" )
+>     , ( 0xf774, "Tsmall" )
+>     , ( 0xf775, "Usmall" )
+>     , ( 0xf776, "Vsmall" )
+>     , ( 0xf777, "Wsmall" )
+>     , ( 0xf778, "Xsmall" )
+>     , ( 0xf779, "Ysmall" )
+>     , ( 0xf77a, "Zsmall" )
+>     , ( 0xf7a1, "exclamdownsmall" )
+>     , ( 0xf7a2, "centoldstyle" )
+>     , ( 0xf7a8, "Dieresissmall" )
+>     , ( 0xf7af, "Macronsmall" )
+>     , ( 0xf7b4, "Acutesmall" )
+>     , ( 0xf7b8, "Cedillasmall" )
+>     , ( 0xf7bf, "questiondownsmall" )
+>     , ( 0xf7e0, "Agravesmall" )
+>     , ( 0xf7e1, "Aacutesmall" )
+>     , ( 0xf7e2, "Acircumflexsmall" )
+>     , ( 0xf7e3, "Atildesmall" )
+>     , ( 0xf7e4, "Adieresissmall" )
+>     , ( 0xf7e5, "Aringsmall" )
+>     , ( 0xf7e6, "AEsmall" )
+>     , ( 0xf7e7, "Ccedillasmall" )
+>     , ( 0xf7e8, "Egravesmall" )
+>     , ( 0xf7e9, "Eacutesmall" )
+>     , ( 0xf7ea, "Ecircumflexsmall" )
+>     , ( 0xf7eb, "Edieresissmall" )
+>     , ( 0xf7ec, "Igravesmall" )
+>     , ( 0xf7ed, "Iacutesmall" )
+>     , ( 0xf7ee, "Icircumflexsmall" )
+>     , ( 0xf7ef, "Idieresissmall" )
+>     , ( 0xf7f0, "Ethsmall" )
+>     , ( 0xf7f1, "Ntildesmall" )
+>     , ( 0xf7f2, "Ogravesmall" )
+>     , ( 0xf7f3, "Oacutesmall" )
+>     , ( 0xf7f4, "Ocircumflexsmall" )
+>     , ( 0xf7f5, "Otildesmall" )
+>     , ( 0xf7f6, "Odieresissmall" )
+>     , ( 0xf7f8, "Oslashsmall" )
+>     , ( 0xf7f9, "Ugravesmall" )
+>     , ( 0xf7fa, "Uacutesmall" )
+>     , ( 0xf7fb, "Ucircumflexsmall" )
+>     , ( 0xf7fc, "Udieresissmall" )
+>     , ( 0xf7fd, "Yacutesmall" )
+>     , ( 0xf7fe, "Thornsmall" )
+>     , ( 0xf7ff, "Ydieresissmall" )
+>     , ( 0xf884, "maihanakatleftthai" )
+>     , ( 0xf885, "saraileftthai" )
+>     , ( 0xf886, "saraiileftthai" )
+>     , ( 0xf887, "saraueleftthai" )
+>     , ( 0xf888, "saraueeleftthai" )
+>     , ( 0xf889, "maitaikhuleftthai" )
+>     , ( 0xf88a, "maiekupperleftthai" )
+>     , ( 0xf88b, "maieklowrightthai" )
+>     , ( 0xf88c, "maieklowleftthai" )
+>     , ( 0xf88d, "maithoupperleftthai" )
+>     , ( 0xf88e, "maitholowrightthai" )
+>     , ( 0xf88f, "maitholowleftthai" )
+>     , ( 0xf890, "maitriupperleftthai" )
+>     , ( 0xf891, "maitrilowrightthai" )
+>     , ( 0xf892, "maitrilowleftthai" )
+>     , ( 0xf893, "maichattawaupperleftthai" )
+>     , ( 0xf894, "maichattawalowrightthai" )
+>     , ( 0xf895, "maichattawalowleftthai" )
+>     , ( 0xf896, "thanthakhatupperleftthai" )
+>     , ( 0xf897, "thanthakhatlowrightthai" )
+>     , ( 0xf898, "thanthakhatlowleftthai" )
+>     , ( 0xf899, "nikhahitleftthai" )
+>     , ( 0xf8e5, "radicalex" )
+>     , ( 0xf8e6, "arrowvertex" )
+>     , ( 0xf8e7, "arrowhorizex" )
+>     , ( 0xf8e8, "registersans" )
+>     , ( 0xf8e9, "copyrightsans" )
+>     , ( 0xf8ea, "trademarksans" )
+>     , ( 0xf8eb, "parenlefttp" )
+>     , ( 0xf8ec, "parenleftex" )
+>     , ( 0xf8ed, "parenleftbt" )
+>     , ( 0xf8ee, "bracketlefttp" )
+>     , ( 0xf8ef, "bracketleftex" )
+>     , ( 0xf8f0, "bracketleftbt" )
+>     , ( 0xf8f1, "bracelefttp" )
+>     , ( 0xf8f2, "braceleftmid" )
+>     , ( 0xf8f3, "braceleftbt" )
+>     , ( 0xf8f4, "braceex" )
+>     , ( 0xf8f5, "integralex" )
+>     , ( 0xf8f6, "parenrighttp" )
+>     , ( 0xf8f7, "parenrightex" )
+>     , ( 0xf8f8, "parenrightbt" )
+>     , ( 0xf8f9, "bracketrighttp" )
+>     , ( 0xf8fa, "bracketrightex" )
+>     , ( 0xf8fb, "bracketrightbt" )
+>     , ( 0xf8fc, "bracerighttp" )
+>     , ( 0xf8fd, "bracerightmid" )
+>     , ( 0xf8fe, "bracerightbt" )
+>     , ( 0xf8ff, "apple" )
+>     , ( 0xfb00, "ff" )
+>     , ( 0xfb01, "fi" )
+>     , ( 0xfb02, "fl" )
+>     , ( 0xfb03, "ffi" )
+>     , ( 0xfb04, "ffl" )
+>     , ( 0xfb1f, "afii57705" )
+>     , ( 0xfb20, "ayinaltonehebrew" )
+>     , ( 0xfb2a, "afii57694" )
+>     , ( 0xfb2b, "afii57695" )
+>     , ( 0xfb2c, "shindageshshindot" )
+>     , ( 0xfb2d, "shindageshsindot" )
+>     , ( 0xfb2e, "alefpatahhebrew" )
+>     , ( 0xfb2f, "alefqamatshebrew" )
+>     , ( 0xfb30, "alefdageshhebrew" )
+>     , ( 0xfb31, "betdagesh" )
+>     , ( 0xfb32, "gimeldagesh" )
+>     , ( 0xfb33, "daletdagesh" )
+>     , ( 0xfb34, "hedagesh" )
+>     , ( 0xfb35, "afii57723" )
+>     , ( 0xfb36, "zayindagesh" )
+>     , ( 0xfb38, "tetdagesh" )
+>     , ( 0xfb39, "yoddagesh" )
+>     , ( 0xfb3a, "finalkafdagesh" )
+>     , ( 0xfb3b, "kafdagesh" )
+>     , ( 0xfb3c, "lameddagesh" )
+>     , ( 0xfb3e, "memdagesh" )
+>     , ( 0xfb40, "nundagesh" )
+>     , ( 0xfb41, "samekhdagesh" )
+>     , ( 0xfb43, "pefinaldageshhebrew" )
+>     , ( 0xfb44, "pedagesh" )
+>     , ( 0xfb46, "tsadidagesh" )
+>     , ( 0xfb47, "qofdagesh" )
+>     , ( 0xfb48, "reshdageshhebrew" )
+>     , ( 0xfb49, "shindagesh" )
+>     , ( 0xfb4a, "tavdages" )
+>     , ( 0xfb4b, "afii57700" )
+>     , ( 0xfb4c, "betrafehebrew" )
+>     , ( 0xfb4d, "kafrafehebrew" )
+>     , ( 0xfb4e, "perafehebrew" )
+>     , ( 0xfb4f, "aleflamedhebrew" )
+>     , ( 0xfb57, "pehfinalarabic" )
+>     , ( 0xfb58, "pehinitialarabic" )
+>     , ( 0xfb59, "pehmedialarabic" )
+>     , ( 0xfb67, "ttehfinalarabic" )
+>     , ( 0xfb68, "ttehinitialarabic" )
+>     , ( 0xfb69, "ttehmedialarabic" )
+>     , ( 0xfb6b, "vehfinalarabic" )
+>     , ( 0xfb6c, "vehinitialarabic" )
+>     , ( 0xfb6d, "vehmedialarabic" )
+>     , ( 0xfb7b, "tchehfinalarabic" )
+>     , ( 0xfb7c, "tchehinitialarabic" )
+>     , ( 0xfb7d, "tchehmedialarabic" )
+>     , ( 0xfb89, "ddalfinalarabic" )
+>     , ( 0xfb8b, "jehfinalarabic" )
+>     , ( 0xfb8d, "rrehfinalarabic" )
+>     , ( 0xfb93, "gaffinalarabic" )
+>     , ( 0xfb94, "gafinitialarabic" )
+>     , ( 0xfb95, "gafmedialarabic" )
+>     , ( 0xfb9f, "noonghunnafinalarabic" )
+>     , ( 0xfba4, "hehhamzaaboveisolatedarabic" )
+>     , ( 0xfba5, "hehhamzaabovefinalarabic" )
+>     , ( 0xfba7, "hehfinalaltonearabic" )
+>     , ( 0xfba8, "hehinitialaltonearabic" )
+>     , ( 0xfba9, "hehmedialaltonearabic" )
+>     , ( 0xfbaf, "yehbarreefinalarabic" )
+>     , ( 0xfc08, "behmeemisolatedarabic" )
+>     , ( 0xfc0b, "tehjeemisolatedarabic" )
+>     , ( 0xfc0c, "tehhahisolatedarabic" )
+>     , ( 0xfc0e, "tehmeemisolatedarabic" )
+>     , ( 0xfc48, "meemmeemisolatedarabic" )
+>     , ( 0xfc4b, "noonjeemisolatedarabic" )
+>     , ( 0xfc4e, "noonmeemisolatedarabic" )
+>     , ( 0xfc58, "yehmeemisolatedarabic" )
+>     , ( 0xfc5e, "shaddadammatanarabic" )
+>     , ( 0xfc5f, "shaddakasratanarabic" )
+>     , ( 0xfc60, "shaddafathaarabic" )
+>     , ( 0xfc61, "shaddadammaarabic" )
+>     , ( 0xfc62, "shaddakasraarabic" )
+>     , ( 0xfc6d, "behnoonfinalarabic" )
+>     , ( 0xfc73, "tehnoonfinalarabic" )
+>     , ( 0xfc8d, "noonnoonfinalarabic" )
+>     , ( 0xfc94, "yehnoonfinalarabic" )
+>     , ( 0xfc9f, "behmeeminitialarabic" )
+>     , ( 0xfca1, "tehjeeminitialarabic" )
+>     , ( 0xfca2, "tehhahinitialarabic" )
+>     , ( 0xfca4, "tehmeeminitialarabic" )
+>     , ( 0xfcc9, "lamjeeminitialarabic" )
+>     , ( 0xfcca, "lamhahinitialarabic" )
+>     , ( 0xfccb, "lamkhahinitialarabic" )
+>     , ( 0xfccc, "lammeeminitialarabic" )
+>     , ( 0xfcd1, "meemmeeminitialarabic" )
+>     , ( 0xfcd2, "noonjeeminitialarabic" )
+>     , ( 0xfcd5, "noonmeeminitialarabic" )
+>     , ( 0xfcdd, "yehmeeminitialarabic" )
+>     , ( 0xfd3e, "parenleftaltonearabic" )
+>     , ( 0xfd3f, "parenrightaltonearabic" )
+>     , ( 0xfd88, "lammeemhahinitialarabic" )
+>     , ( 0xfdf2, "lamlamhehisolatedarabic" )
+>     , ( 0xfdfa, "sallallahoualayhewasallamarabic" )
+>     , ( 0xfe30, "twodotleadervertical" )
+>     , ( 0xfe31, "emdashvertical" )
+>     , ( 0xfe32, "endashvertical" )
+>     , ( 0xfe33, "underscorevertical" )
+>     , ( 0xfe34, "wavyunderscorevertical" )
+>     , ( 0xfe35, "parenleftvertical" )
+>     , ( 0xfe36, "parenrightvertical" )
+>     , ( 0xfe37, "braceleftvertical" )
+>     , ( 0xfe38, "bracerightvertical" )
+>     , ( 0xfe39, "tortoiseshellbracketleftvertical" )
+>     , ( 0xfe3a, "tortoiseshellbracketrightvertical" )
+>     , ( 0xfe3b, "blacklenticularbracketleftvertical" )
+>     , ( 0xfe3c, "blacklenticularbracketrightvertical" )
+>     , ( 0xfe3d, "dblanglebracketleftvertical" )
+>     , ( 0xfe3e, "dblanglebracketrightvertical" )
+>     , ( 0xfe3f, "anglebracketleftvertical" )
+>     , ( 0xfe40, "anglebracketrightvertical" )
+>     , ( 0xfe41, "cornerbracketleftvertical" )
+>     , ( 0xfe42, "cornerbracketrightvertical" )
+>     , ( 0xfe43, "whitecornerbracketleftvertical" )
+>     , ( 0xfe44, "whitecornerbracketrightvertical" )
+>     , ( 0xfe49, "overlinedashed" )
+>     , ( 0xfe4a, "overlinecenterline" )
+>     , ( 0xfe4b, "overlinewavy" )
+>     , ( 0xfe4c, "overlinedblwavy" )
+>     , ( 0xfe4d, "lowlinedashed" )
+>     , ( 0xfe4e, "lowlinecenterline" )
+>     , ( 0xfe4f, "underscorewavy" )
+>     , ( 0xfe50, "commasmall" )
+>     , ( 0xfe52, "periodsmall" )
+>     , ( 0xfe54, "semicolonsmall" )
+>     , ( 0xfe55, "colonsmall" )
+>     , ( 0xfe59, "parenleftsmall" )
+>     , ( 0xfe5a, "parenrightsmall" )
+>     , ( 0xfe5b, "braceleftsmall" )
+>     , ( 0xfe5c, "bracerightsmall" )
+>     , ( 0xfe5d, "tortoiseshellbracketleftsmall" )
+>     , ( 0xfe5e, "tortoiseshellbracketrightsmall" )
+>     , ( 0xfe5f, "numbersignsmall" )
+>     , ( 0xfe61, "asterisksmall" )
+>     , ( 0xfe62, "plussmall" )
+>     , ( 0xfe63, "hyphensmall" )
+>     , ( 0xfe64, "lesssmall" )
+>     , ( 0xfe65, "greatersmall" )
+>     , ( 0xfe66, "equalsmall" )
+>     , ( 0xfe69, "dollarsmall" )
+>     , ( 0xfe6a, "percentsmall" )
+>     , ( 0xfe6b, "atsmall" )
+>     , ( 0xfe82, "alefmaddaabovefinalarabic" )
+>     , ( 0xfe84, "alefhamzaabovefinalarabic" )
+>     , ( 0xfe86, "wawhamzaabovefinalarabic" )
+>     , ( 0xfe88, "alefhamzabelowfinalarabic" )
+>     , ( 0xfe8a, "yehhamzaabovefinalarabic" )
+>     , ( 0xfe8b, "yehhamzaaboveinitialarabic" )
+>     , ( 0xfe8c, "yehhamzaabovemedialarabic" )
+>     , ( 0xfe8e, "aleffinalarabic" )
+>     , ( 0xfe90, "behfinalarabic" )
+>     , ( 0xfe91, "behinitialarabic" )
+>     , ( 0xfe92, "behmedialarabic" )
+>     , ( 0xfe94, "tehmarbutafinalarabic" )
+>     , ( 0xfe96, "tehfinalarabic" )
+>     , ( 0xfe97, "tehinitialarabic" )
+>     , ( 0xfe98, "tehmedialarabic" )
+>     , ( 0xfe9a, "thehfinalarabic" )
+>     , ( 0xfe9b, "thehinitialarabic" )
+>     , ( 0xfe9c, "thehmedialarabic" )
+>     , ( 0xfe9e, "jeemfinalarabic" )
+>     , ( 0xfe9f, "jeeminitialarabic" )
+>     , ( 0xfea0, "jeemmedialarabic" )
+>     , ( 0xfea2, "hahfinalarabic" )
+>     , ( 0xfea3, "hahinitialarabic" )
+>     , ( 0xfea4, "hahmedialarabic" )
+>     , ( 0xfea6, "khahfinalarabic" )
+>     , ( 0xfea7, "khahinitialarabic" )
+>     , ( 0xfea8, "khahmedialarabic" )
+>     , ( 0xfeaa, "dalfinalarabic" )
+>     , ( 0xfeac, "thalfinalarabic" )
+>     , ( 0xfeae, "rehfinalarabic" )
+>     , ( 0xfeb0, "zainfinalarabic" )
+>     , ( 0xfeb2, "seenfinalarabic" )
+>     , ( 0xfeb3, "seeninitialarabic" )
+>     , ( 0xfeb4, "seenmedialarabic" )
+>     , ( 0xfeb6, "sheenfinalarabic" )
+>     , ( 0xfeb7, "sheeninitialarabic" )
+>     , ( 0xfeb8, "sheenmedialarabic" )
+>     , ( 0xfeba, "sadfinalarabic" )
+>     , ( 0xfebb, "sadinitialarabic" )
+>     , ( 0xfebc, "sadmedialarabic" )
+>     , ( 0xfebe, "dadfinalarabic" )
+>     , ( 0xfebf, "dadinitialarabic" )
+>     , ( 0xfec0, "dadmedialarabic" )
+>     , ( 0xfec2, "tahfinalarabic" )
+>     , ( 0xfec3, "tahinitialarabic" )
+>     , ( 0xfec4, "tahmedialarabic" )
+>     , ( 0xfec6, "zahfinalarabic" )
+>     , ( 0xfec7, "zahinitialarabic" )
+>     , ( 0xfec8, "zahmedialarabic" )
+>     , ( 0xfeca, "ainfinalarabic" )
+>     , ( 0xfecb, "aininitialarabic" )
+>     , ( 0xfecc, "ainmedialarabic" )
+>     , ( 0xfece, "ghainfinalarabic" )
+>     , ( 0xfecf, "ghaininitialarabic" )
+>     , ( 0xfed0, "ghainmedialarabic" )
+>     , ( 0xfed2, "fehfinalarabic" )
+>     , ( 0xfed3, "fehinitialarabic" )
+>     , ( 0xfed4, "fehmedialarabic" )
+>     , ( 0xfed6, "qaffinalarabic" )
+>     , ( 0xfed7, "qafinitialarabic" )
+>     , ( 0xfed8, "qafmedialarabic" )
+>     , ( 0xfeda, "kaffinalarabic" )
+>     , ( 0xfedb, "kafinitialarabic" )
+>     , ( 0xfedc, "kafmedialarabic" )
+>     , ( 0xfede, "lamfinalarabic" )
+>     , ( 0xfedf, "laminitialarabic" )
+>     , ( 0xfee0, "lammedialarabic" )
+>     , ( 0xfee2, "meemfinalarabic" )
+>     , ( 0xfee3, "meeminitialarabic" )
+>     , ( 0xfee4, "lammeemjeeminitialarabic" )
+>     , ( 0xfee6, "noonfinalarabic" )
+>     , ( 0xfee7, "noonhehinitialarabic" )
+>     , ( 0xfee8, "noonmedialarabic" )
+>     , ( 0xfeea, "hehfinalalttwoarabic" )
+>     , ( 0xfeeb, "hehinitialarabic" )
+>     , ( 0xfeec, "hehmedialarabic" )
+>     , ( 0xfeee, "wawfinalarabic" )
+>     , ( 0xfef0, "alefmaksurafinalarabic" )
+>     , ( 0xfef2, "yehfinalarabic" )
+>     , ( 0xfef3, "alefmaksurainitialarabic" )
+>     , ( 0xfef4, "alefmaksuramedialarabic" )
+>     , ( 0xfef5, "lamalefmaddaaboveisolatedarabic" )
+>     , ( 0xfef6, "lamalefmaddaabovefinalarabic" )
+>     , ( 0xfef7, "lamalefhamzaaboveisolatedarabic" )
+>     , ( 0xfef8, "lamalefhamzaabovefinalarabic" )
+>     , ( 0xfef9, "lamalefhamzabelowisolatedarabic" )
+>     , ( 0xfefa, "lamalefhamzabelowfinalarabic" )
+>     , ( 0xfefb, "lamalefisolatedarabic" )
+>     , ( 0xfefc, "lamaleffinalarabic" )
+>     , ( 0xfeff, "zerowidthjoiner" )
+>     , ( 0xff01, "exclammonospace" )
+>     , ( 0xff02, "quotedblmonospace" )
+>     , ( 0xff03, "numbersignmonospace" )
+>     , ( 0xff04, "dollarmonospace" )
+>     , ( 0xff05, "percentmonospace" )
+>     , ( 0xff06, "ampersandmonospace" )
+>     , ( 0xff07, "quotesinglemonospace" )
+>     , ( 0xff08, "parenleftmonospace" )
+>     , ( 0xff09, "parenrightmonospace" )
+>     , ( 0xff0a, "asteriskmonospace" )
+>     , ( 0xff0b, "plusmonospace" )
+>     , ( 0xff0c, "commamonospace" )
+>     , ( 0xff0d, "hyphenmonospace" )
+>     , ( 0xff0e, "periodmonospace" )
+>     , ( 0xff0f, "slashmonospace" )
+>     , ( 0xff10, "zeromonospace" )
+>     , ( 0xff11, "onemonospace" )
+>     , ( 0xff12, "twomonospace" )
+>     , ( 0xff13, "threemonospace" )
+>     , ( 0xff14, "fourmonospace" )
+>     , ( 0xff15, "fivemonospace" )
+>     , ( 0xff16, "sixmonospace" )
+>     , ( 0xff17, "sevenmonospace" )
+>     , ( 0xff18, "eightmonospace" )
+>     , ( 0xff19, "ninemonospace" )
+>     , ( 0xff1a, "colonmonospace" )
+>     , ( 0xff1b, "semicolonmonospace" )
+>     , ( 0xff1c, "lessmonospace" )
+>     , ( 0xff1d, "equalmonospace" )
+>     , ( 0xff1e, "greatermonospace" )
+>     , ( 0xff1f, "questionmonospace" )
+>     , ( 0xff20, "atmonospace" )
+>     , ( 0xff21, "Amonospace" )
+>     , ( 0xff22, "Bmonospace" )
+>     , ( 0xff23, "Cmonospace" )
+>     , ( 0xff24, "Dmonospace" )
+>     , ( 0xff25, "Emonospace" )
+>     , ( 0xff26, "Fmonospace" )
+>     , ( 0xff27, "Gmonospace" )
+>     , ( 0xff28, "Hmonospace" )
+>     , ( 0xff29, "Imonospace" )
+>     , ( 0xff2a, "Jmonospace" )
+>     , ( 0xff2b, "Kmonospace" )
+>     , ( 0xff2c, "Lmonospace" )
+>     , ( 0xff2d, "Mmonospace" )
+>     , ( 0xff2e, "Nmonospace" )
+>     , ( 0xff2f, "Omonospace" )
+>     , ( 0xff30, "Pmonospace" )
+>     , ( 0xff31, "Qmonospace" )
+>     , ( 0xff32, "Rmonospace" )
+>     , ( 0xff33, "Smonospace" )
+>     , ( 0xff34, "Tmonospace" )
+>     , ( 0xff35, "Umonospace" )
+>     , ( 0xff36, "Vmonospace" )
+>     , ( 0xff37, "Wmonospace" )
+>     , ( 0xff38, "Xmonospace" )
+>     , ( 0xff39, "Ymonospace" )
+>     , ( 0xff3a, "Zmonospace" )
+>     , ( 0xff3b, "bracketleftmonospace" )
+>     , ( 0xff3c, "backslashmonospace" )
+>     , ( 0xff3d, "bracketrightmonospace" )
+>     , ( 0xff3e, "asciicircummonospace" )
+>     , ( 0xff3f, "underscoremonospace" )
+>     , ( 0xff40, "gravemonospace" )
+>     , ( 0xff41, "amonospace" )
+>     , ( 0xff42, "bmonospace" )
+>     , ( 0xff43, "cmonospace" )
+>     , ( 0xff44, "dmonospace" )
+>     , ( 0xff45, "emonospace" )
+>     , ( 0xff46, "fmonospace" )
+>     , ( 0xff47, "gmonospace" )
+>     , ( 0xff48, "hmonospace" )
+>     , ( 0xff49, "imonospace" )
+>     , ( 0xff4a, "jmonospace" )
+>     , ( 0xff4b, "kmonospace" )
+>     , ( 0xff4c, "lmonospace" )
+>     , ( 0xff4d, "mmonospace" )
+>     , ( 0xff4e, "nmonospace" )
+>     , ( 0xff4f, "omonospace" )
+>     , ( 0xff50, "pmonospace" )
+>     , ( 0xff51, "qmonospace" )
+>     , ( 0xff52, "rmonospace" )
+>     , ( 0xff53, "smonospace" )
+>     , ( 0xff54, "tmonospace" )
+>     , ( 0xff55, "umonospace" )
+>     , ( 0xff56, "vmonospace" )
+>     , ( 0xff57, "wmonospace" )
+>     , ( 0xff58, "xmonospace" )
+>     , ( 0xff59, "ymonospace" )
+>     , ( 0xff5a, "zmonospace" )
+>     , ( 0xff5b, "braceleftmonospace" )
+>     , ( 0xff5c, "barmonospace" )
+>     , ( 0xff5d, "bracerightmonospace" )
+>     , ( 0xff5e, "asciitildemonospace" )
+>     , ( 0xff61, "periodhalfwidth" )
+>     , ( 0xff62, "cornerbracketlefthalfwidth" )
+>     , ( 0xff63, "cornerbracketrighthalfwidth" )
+>     , ( 0xff64, "ideographiccommaleft" )
+>     , ( 0xff65, "middledotkatakanahalfwidth" )
+>     , ( 0xff66, "wokatakanahalfwidth" )
+>     , ( 0xff67, "asmallkatakanahalfwidth" )
+>     , ( 0xff68, "ismallkatakanahalfwidth" )
+>     , ( 0xff69, "usmallkatakanahalfwidth" )
+>     , ( 0xff6a, "esmallkatakanahalfwidth" )
+>     , ( 0xff6b, "osmallkatakanahalfwidth" )
+>     , ( 0xff6c, "yasmallkatakanahalfwidth" )
+>     , ( 0xff6d, "yusmallkatakanahalfwidth" )
+>     , ( 0xff6e, "yosmallkatakanahalfwidth" )
+>     , ( 0xff6f, "tusmallkatakanahalfwidth" )
+>     , ( 0xff70, "katahiraprolongmarkhalfwidth" )
+>     , ( 0xff71, "akatakanahalfwidth" )
+>     , ( 0xff72, "ikatakanahalfwidth" )
+>     , ( 0xff73, "ukatakanahalfwidth" )
+>     , ( 0xff74, "ekatakanahalfwidth" )
+>     , ( 0xff75, "okatakanahalfwidth" )
+>     , ( 0xff76, "kakatakanahalfwidth" )
+>     , ( 0xff77, "kikatakanahalfwidth" )
+>     , ( 0xff78, "kukatakanahalfwidth" )
+>     , ( 0xff79, "kekatakanahalfwidth" )
+>     , ( 0xff7a, "kokatakanahalfwidth" )
+>     , ( 0xff7b, "sakatakanahalfwidth" )
+>     , ( 0xff7c, "sikatakanahalfwidth" )
+>     , ( 0xff7d, "sukatakanahalfwidth" )
+>     , ( 0xff7e, "sekatakanahalfwidth" )
+>     , ( 0xff7f, "sokatakanahalfwidth" )
+>     , ( 0xff80, "takatakanahalfwidth" )
+>     , ( 0xff81, "tikatakanahalfwidth" )
+>     , ( 0xff82, "tukatakanahalfwidth" )
+>     , ( 0xff83, "tekatakanahalfwidth" )
+>     , ( 0xff84, "tokatakanahalfwidth" )
+>     , ( 0xff85, "nakatakanahalfwidth" )
+>     , ( 0xff86, "nikatakanahalfwidth" )
+>     , ( 0xff87, "nukatakanahalfwidth" )
+>     , ( 0xff88, "nekatakanahalfwidth" )
+>     , ( 0xff89, "nokatakanahalfwidth" )
+>     , ( 0xff8a, "hakatakanahalfwidth" )
+>     , ( 0xff8b, "hikatakanahalfwidth" )
+>     , ( 0xff8c, "hukatakanahalfwidth" )
+>     , ( 0xff8d, "hekatakanahalfwidth" )
+>     , ( 0xff8e, "hokatakanahalfwidth" )
+>     , ( 0xff8f, "makatakanahalfwidth" )
+>     , ( 0xff90, "mikatakanahalfwidth" )
+>     , ( 0xff91, "mukatakanahalfwidth" )
+>     , ( 0xff92, "mekatakanahalfwidth" )
+>     , ( 0xff93, "mokatakanahalfwidth" )
+>     , ( 0xff94, "yakatakanahalfwidth" )
+>     , ( 0xff95, "yukatakanahalfwidth" )
+>     , ( 0xff96, "yokatakanahalfwidth" )
+>     , ( 0xff97, "rakatakanahalfwidth" )
+>     , ( 0xff98, "rikatakanahalfwidth" )
+>     , ( 0xff99, "rukatakanahalfwidth" )
+>     , ( 0xff9a, "rekatakanahalfwidth" )
+>     , ( 0xff9b, "rokatakanahalfwidth" )
+>     , ( 0xff9c, "wakatakanahalfwidth" )
+>     , ( 0xff9d, "nkatakanahalfwidth" )
+>     , ( 0xff9e, "voicedmarkkanahalfwidth" )
+>     , ( 0xff9f, "semivoicedmarkkanahalfwidth" )
+>     , ( 0xffe0, "centmonospace" )
+>     , ( 0xffe1, "sterlingmonospace" )
+>     , ( 0xffe3, "macronmonospace" )
+>     , ( 0xffe5, "yenmonospace" )
+>     , ( 0xffe6, "wonmonospace" )
+>     ]
diff --git a/src/Wumpus/Core/Text/Latin1.hs b/src/Wumpus/Core/Text/Latin1.hs
deleted file mode 100644
--- a/src/Wumpus/Core/Text/Latin1.hs
+++ /dev/null
@@ -1,257 +0,0 @@
-{-# OPTIONS -Wall #-}
-
---------------------------------------------------------------------------------
--- |
--- Module      :  Wumpus.Core.Text.Latin1
--- Copyright   :  (c) Stephen Tetley 2009-2010
--- License     :  BSD3
---
--- Maintainer  :  stephen.tetley@gmail.com
--- Stability   :  unstable
--- Portability :  GHC
---
--- A @TextEncoder@ record instance for Latin1 characters.
--- 
---------------------------------------------------------------------------------
-
-module Wumpus.Core.Text.Latin1
-  ( 
-  
-    latin1_font_encoder
-  , latin1FontEncoder
-  , latin1FontAll
-
-  ) where
-
-import Wumpus.Core.Text.Encoder
-
-import qualified Data.Map as Map
-
-
--- | Latin1 Font Encoder name 
---  
--- (Number 0) 
---
-latin1_font_encoder :: FontEncoderName
-latin1_font_encoder = FontEncoderName 0
-
--- | Latin1 FontEncoder instance.
-latin1FontEncoder :: FontEncoder
-latin1FontEncoder = FontEncoder 
-    { ps_lookup         = Map.lookup `flip` codeToName
-    , svg_lookup        = Map.lookup `flip` nameToCode
-    , ps_fallback       = "space"
-    , svg_fallback      = 0o040
-    }
-
-nameToCode :: Map.Map GlyphName CharCode
-nameToCode = Map.fromList latin1FontAll
-
-codeToName :: Map.Map CharCode GlyphName
-codeToName = foldr fn Map.empty latin1FontAll where
-  fn (s,i) a = Map.insert i s a 
-
--- | A lookup list of Latin 1 names to their octal code.
-latin1FontAll :: [(GlyphName, CharCode)]
-latin1FontAll = 
-    [ ("A",                     0o101)
-    , ("AE",                    0o306)
-    , ("Aacute",                0o301)
-    , ("Acircumflex",           0o302)
-    , ("Adieresis",             0o304)
-    , ("Agrave",                0o300)
-    , ("Aring",                 0o305)
-    , ("Atilde",                0o303)
-    , ("B",                     0o102)
-    , ("C",                     0o103)
-    , ("Ccedilla",              0o307)
-    , ("D",                     0o104)
-    , ("E",                     0o105)
-    , ("Eacute",                0o311)
-    , ("Ecircumflex",           0o312)
-    , ("Edieresis",             0o313)
-    , ("Egrave",                0o310)
-    , ("Eth",                   0o320)
-    , ("F",                     0o106)
-    , ("G",                     0o107)
-    , ("H",                     0o110)
-    , ("I",                     0o111)
-    , ("Iacute",                0o315)
-    , ("Icircumflex",           0o316)
-    , ("Idieresis",             0o317)
-    , ("Igrave",                0o314)
-    , ("J",                     0o112)
-    , ("K",                     0o113)
-    , ("L",                     0o114)
-    , ("M",                     0o115)
-    , ("N",                     0o116)
-    , ("Ntilde",                0o321)
-    , ("O",                     0o117)
-    , ("Oacute",                0o323)
-    , ("Ocircumflex",           0o324)
-    , ("Odieresis",             0o326)
-    , ("Ograve",                0o322)
-    , ("Oslash",                0o351)
-    , ("Otilde",                0o325)
-    , ("P",                     0o120)
-    , ("Q",                     0o121)
-    , ("R",                     0o122)
-    , ("S",                     0o123)
-    , ("T",                     0o124)
-    , ("Thorn",                 0o336)
-    , ("U",                     0o125)
-    , ("Uacute",                0o332)
-    , ("Ucircumflex",           0o333)
-    , ("Udieresis",             0o334)
-    , ("Ugrave",                0o331)
-    , ("V",                     0o126)
-    , ("W",                     0o127)
-    , ("X",                     0o130)
-    , ("Y",                     0o131)
-    , ("Yacute",                0o335)
-    , ("Z",                     0o132)
-    , ("a",                     0o141)
-    , ("aacute",                0o341)
-    , ("acircumflex",           0o342)
-    , ("acute2",                0o264)
-    , ("adieresis",             0o344)
-    , ("ae",                    0o346)
-    , ("agrave",                0o340)
-    , ("ampersand",             0o046)
-    , ("aring",                 0o345)
-    , ("asciicircum",           0o136)
-    , ("asciitilde",            0o176)
-    , ("asterisk",              0o052)
-    , ("at",                    0o100)
-    , ("atilde",                0o343)
-    , ("b",                     0o142)
-    , ("backslash",             0o134)
-    , ("bar",                   0o174)
-    , ("braceleft",             0o173)
-    , ("braceright",            0o175)
-    , ("bracketleft",           0o133)
-    , ("bracketright",          0o135)
-    , ("breve",                 0o226)
-    , ("brokenbar",             0o246)
-    , ("c",                     0o143)
-    , ("caron",                 0o237)
-    , ("ccedilla",              0o347)
-    , ("cedilla",               0o270)
-    , ("cent",                  0o242)
-    , ("circumflex",            0o223)
-    , ("colon",                 0o072)
-    , ("comma",                 0o054)
-    , ("copyright",             0o251)
-    , ("currency",              0o244)
-    , ("d",                     0o144)
-    , ("degree",                0o260)
-    , ("dieresis",              0o250)
-    , ("divide",                0o367)
-    , ("dollar",                0o044)
-    , ("dotaccent",             0o227)
-    , ("dotlessi",              0o220)
-    , ("e",                     0o145)
-    , ("eacute",                0o351)
-    , ("ecircumflex",           0o352)
-    , ("edieresis",             0o353)
-    , ("egrave",                0o350)
-    , ("eight",                 0o070)
-    , ("equal",                 0o075)
-    , ("eth",                   0o360)
-    , ("exclam",                0o041)
-    , ("exclamdown",            0o241)
-    , ("f",                     0o146)
-    , ("five",                  0o065)
-    , ("four",                  0o064)
-    , ("g",                     0o147)
-    , ("germandbls",            0o337)
-    , ("grave",                 0o221)
-    , ("greater",               0o076)
-    , ("guillemotleft",         0o253)
-    , ("guillemotright",        0o273)
-    , ("h",                     0o150)
-    , ("hungarumlaut",          0o235)
-    , ("hyphen",                0o255)
-    , ("i",                     0o151)
-    , ("iacute",                0o355)
-    , ("icircumflex",           0o356)
-    , ("idieresis",             0o357)
-    , ("igrave",                0o354)
-    , ("j",                     0o152)
-    , ("k",                     0o153)
-    , ("l",                     0o154)
-    , ("less",                  0o074)
-    , ("logicalnot",            0o254)
-    , ("m",                     0o155)
-    , ("macron",                0o257)
-    , ("minus",                 0o055)
-    , ("mu",                    0o265)
-    , ("multiply",              0o327)
-    , ("n",                     0o156)
-    , ("nine",                  0o071)
-    , ("ntilde",                0o361)
-    , ("numbersign",            0o043)
-    , ("o",                     0o157)
-    , ("oacute",                0o363)
-    , ("ocircumflex",           0o364)
-    , ("odieresis",             0o366)
-    , ("ogonek",                0o236)
-    , ("ograve",                0o362)
-    , ("one",                   0o061)
-    , ("onehalf",               0o275)
-    , ("onequarter",            0o274)
-    , ("onesuperior",           0o271)
-    , ("ordfeminine",           0o252)
-    , ("ordmasculine",          0o272)
-    , ("oslash",                0o370)
-    , ("otilde",                0o365)
-    , ("p",                     0o160)
-    , ("paragraph",             0o266)
-    , ("parenleft",             0o050)
-    , ("parenright",            0o051)
-    , ("percent",               0o045)
-    , ("period",                0o056)
-    , ("periodcentered",        0o267)
-    , ("plus",                  0o053)
-    , ("plusminus",             0o261)
-    , ("q",                     0o161)
-    , ("question",              0o077)
-    , ("questiondown",          0o277)
-    , ("quotedbl",              0o042)
-    , ("quoteleft",             0o140)
-    , ("quoteright",            0o047)
-    , ("r",                     0o162)
-    , ("registered",            0o256)
-    , ("ring",                  0o232)
-    , ("s",                     0o163)
-    , ("section",               0o247)
-    , ("semicolon",             0o073)
-    , ("seven",                 0o067)
-    , ("six",                   0o066)
-    , ("slash",                 0o057)
-    , ("space",                 0o040)
-    , ("sterling",              0o243)
-    , ("t",                     0o164)
-    , ("thorn",                 0o376)
-    , ("three",                 0o063)
-    , ("threequarters",         0o276)
-    , ("threesuperior",         0o263)
-    , ("tilde",                 0o224)
-    , ("two",                   0o062)
-    , ("twosuperior",           0o262)
-    , ("u",                     0o165)
-    , ("uacute",                0o372)
-    , ("ucircumflex",           0o373)
-    , ("udieresis",             0o374)
-    , ("ugrave",                0o371)
-    , ("underscore",            0o137)
-    , ("v",                     0o166)
-    , ("w",                     0o167)
-    , ("x",                     0o170)
-    , ("y",                     0o171)
-    , ("yacute",                0o375)
-    , ("ydieresis",             0o377)
-    , ("yen",                   0o245)
-    , ("z",                     0o172)
-    , ("zero",                  0o060)
-    ]
diff --git a/src/Wumpus/Core/Text/Latin1Encoding.lhs b/src/Wumpus/Core/Text/Latin1Encoding.lhs
new file mode 100644
--- /dev/null
+++ b/src/Wumpus/Core/Text/Latin1Encoding.lhs
@@ -0,0 +1,235 @@
+{-# OPTIONS -Wall #-}
+
+> ------------------------------------------------------------------------------
+> -- | 
+> -- Module       :   Wumpus.Core.Text.Latin1Encoding
+> -- Copyright    :   (c) Stephen Tetley 2010
+> -- License      :   BSD3
+> -- 
+> -- Maintainer   :   Stephen Tetley <stephen.tetley@gmail.com>
+> -- Stability    :   unstable
+> -- Portability  :   GHC
+> -- 
+> -- Encoding vector for the Latin1 Encoding.
+> -- 
+> -- \*\* This file is auto-generated. \*\*
+> -- 
+> -- Generated - 2010-11-17 15:24
+> -- 
+> ------------------------------------------------------------------------------
+
+> module Wumpus.Core.Text.Latin1Encoding
+>   (
+>      latin1_encoding
+>   ) where
+
+> import Wumpus.Core.Text.Base
+
+> import qualified Data.IntMap as IntMap
+
+
+> -- | Table mapping character numbers to glyph names for the
+> -- Latin1 Encoding.
+
+> latin1_encoding :: EncodingVector
+> latin1_encoding = IntMap.fromAscList $
+>     [ ( 0x0020, "space" )
+>     , ( 0x0021, "exclam" )
+>     , ( 0x0022, "quotedbl" )
+>     , ( 0x0023, "numbersign" )
+>     , ( 0x0024, "dollar" )
+>     , ( 0x0025, "percent" )
+>     , ( 0x0026, "ampersand" )
+>     , ( 0x0027, "quoteright" )
+>     , ( 0x0028, "parenleft" )
+>     , ( 0x0029, "parenright" )
+>     , ( 0x002a, "asterisk" )
+>     , ( 0x002b, "plus" )
+>     , ( 0x002c, "comma" )
+>     , ( 0x002d, "minus" )
+>     , ( 0x002e, "period" )
+>     , ( 0x002f, "slash" )
+>     , ( 0x0030, "zero" )
+>     , ( 0x0031, "one" )
+>     , ( 0x0032, "two" )
+>     , ( 0x0033, "three" )
+>     , ( 0x0034, "four" )
+>     , ( 0x0035, "five" )
+>     , ( 0x0036, "six" )
+>     , ( 0x0037, "seven" )
+>     , ( 0x0038, "eight" )
+>     , ( 0x0039, "nine" )
+>     , ( 0x003a, "colon" )
+>     , ( 0x003b, "semicolon" )
+>     , ( 0x003c, "less" )
+>     , ( 0x003d, "equal" )
+>     , ( 0x003e, "greater" )
+>     , ( 0x003f, "question" )
+>     , ( 0x0040, "at" )
+>     , ( 0x0041, "A" )
+>     , ( 0x0042, "B" )
+>     , ( 0x0043, "C" )
+>     , ( 0x0044, "D" )
+>     , ( 0x0045, "E" )
+>     , ( 0x0046, "F" )
+>     , ( 0x0047, "G" )
+>     , ( 0x0048, "H" )
+>     , ( 0x0049, "I" )
+>     , ( 0x004a, "J" )
+>     , ( 0x004b, "K" )
+>     , ( 0x004c, "L" )
+>     , ( 0x004d, "M" )
+>     , ( 0x004e, "N" )
+>     , ( 0x004f, "O" )
+>     , ( 0x0050, "P" )
+>     , ( 0x0051, "Q" )
+>     , ( 0x0052, "R" )
+>     , ( 0x0053, "S" )
+>     , ( 0x0054, "T" )
+>     , ( 0x0055, "U" )
+>     , ( 0x0056, "V" )
+>     , ( 0x0057, "W" )
+>     , ( 0x0058, "X" )
+>     , ( 0x0059, "Y" )
+>     , ( 0x005a, "Z" )
+>     , ( 0x005b, "bracketleft" )
+>     , ( 0x005c, "backslash" )
+>     , ( 0x005d, "bracketright" )
+>     , ( 0x005e, "asciicircum" )
+>     , ( 0x005f, "underscore" )
+>     , ( 0x0060, "quoteleft" )
+>     , ( 0x0061, "a" )
+>     , ( 0x0062, "b" )
+>     , ( 0x0063, "c" )
+>     , ( 0x0064, "d" )
+>     , ( 0x0065, "e" )
+>     , ( 0x0066, "f" )
+>     , ( 0x0067, "g" )
+>     , ( 0x0068, "h" )
+>     , ( 0x0069, "i" )
+>     , ( 0x006a, "j" )
+>     , ( 0x006b, "k" )
+>     , ( 0x006c, "l" )
+>     , ( 0x006d, "m" )
+>     , ( 0x006e, "n" )
+>     , ( 0x006f, "o" )
+>     , ( 0x0070, "p" )
+>     , ( 0x0071, "q" )
+>     , ( 0x0072, "r" )
+>     , ( 0x0073, "s" )
+>     , ( 0x0074, "t" )
+>     , ( 0x0075, "u" )
+>     , ( 0x0076, "v" )
+>     , ( 0x0077, "w" )
+>     , ( 0x0078, "x" )
+>     , ( 0x0079, "y" )
+>     , ( 0x007a, "z" )
+>     , ( 0x007b, "braceleft" )
+>     , ( 0x007c, "bar" )
+>     , ( 0x007d, "braceright" )
+>     , ( 0x007e, "asciitilde" )
+>     , ( 0x0090, "dotlessi" )
+>     , ( 0x0091, "grave" )
+>     , ( 0x0093, "circumflex" )
+>     , ( 0x0094, "tilde" )
+>     , ( 0x0096, "breve" )
+>     , ( 0x0097, "dotaccent" )
+>     , ( 0x009a, "ring" )
+>     , ( 0x009d, "hungarumlaut" )
+>     , ( 0x009e, "ogonek" )
+>     , ( 0x009f, "caron" )
+>     , ( 0x00a1, "exclamdown" )
+>     , ( 0x00a2, "cent" )
+>     , ( 0x00a3, "sterling" )
+>     , ( 0x00a4, "currency" )
+>     , ( 0x00a5, "yen" )
+>     , ( 0x00a6, "brokenbar" )
+>     , ( 0x00a7, "section" )
+>     , ( 0x00a8, "dieresis" )
+>     , ( 0x00a9, "copyright" )
+>     , ( 0x00aa, "ordfeminine" )
+>     , ( 0x00ab, "guillemotleft" )
+>     , ( 0x00ac, "logicalnot" )
+>     , ( 0x00ad, "hyphen" )
+>     , ( 0x00ae, "registered" )
+>     , ( 0x00af, "macron" )
+>     , ( 0x00b0, "degree" )
+>     , ( 0x00b1, "plusminus" )
+>     , ( 0x00b2, "twosuperior" )
+>     , ( 0x00b3, "threesuperior" )
+>     , ( 0x00b4, "acute2" )
+>     , ( 0x00b5, "mu" )
+>     , ( 0x00b6, "paragraph" )
+>     , ( 0x00b7, "periodcentered" )
+>     , ( 0x00b8, "cedilla" )
+>     , ( 0x00b9, "onesuperior" )
+>     , ( 0x00ba, "ordmasculine" )
+>     , ( 0x00bb, "guillemotright" )
+>     , ( 0x00bc, "onequarter" )
+>     , ( 0x00bd, "onehalf" )
+>     , ( 0x00be, "threequarters" )
+>     , ( 0x00bf, "questiondown" )
+>     , ( 0x00c0, "Agrave" )
+>     , ( 0x00c1, "Aacute" )
+>     , ( 0x00c2, "Acircumflex" )
+>     , ( 0x00c3, "Atilde" )
+>     , ( 0x00c4, "Adieresis" )
+>     , ( 0x00c5, "Aring" )
+>     , ( 0x00c6, "AE" )
+>     , ( 0x00c7, "Ccedilla" )
+>     , ( 0x00c8, "Egrave" )
+>     , ( 0x00c9, "Eacute" )
+>     , ( 0x00ca, "Ecircumflex" )
+>     , ( 0x00cb, "Edieresis" )
+>     , ( 0x00cc, "Igrave" )
+>     , ( 0x00cd, "Iacute" )
+>     , ( 0x00ce, "Icircumflex" )
+>     , ( 0x00cf, "Idieresis" )
+>     , ( 0x00d0, "Eth" )
+>     , ( 0x00d1, "Ntilde" )
+>     , ( 0x00d2, "Ograve" )
+>     , ( 0x00d3, "Oacute" )
+>     , ( 0x00d4, "Ocircumflex" )
+>     , ( 0x00d5, "Otilde" )
+>     , ( 0x00d6, "Odieresis" )
+>     , ( 0x00d7, "multiply" )
+>     , ( 0x00d9, "Ugrave" )
+>     , ( 0x00da, "Uacute" )
+>     , ( 0x00db, "Ucircumflex" )
+>     , ( 0x00dc, "Udieresis" )
+>     , ( 0x00dd, "Yacute" )
+>     , ( 0x00de, "Thorn" )
+>     , ( 0x00df, "germandbls" )
+>     , ( 0x00e0, "agrave" )
+>     , ( 0x00e1, "aacute" )
+>     , ( 0x00e2, "acircumflex" )
+>     , ( 0x00e3, "atilde" )
+>     , ( 0x00e4, "adieresis" )
+>     , ( 0x00e5, "aring" )
+>     , ( 0x00e6, "ae" )
+>     , ( 0x00e7, "ccedilla" )
+>     , ( 0x00e8, "egrave" )
+>     , ( 0x00e9, "Oslash" )
+>     , ( 0x00ea, "ecircumflex" )
+>     , ( 0x00eb, "edieresis" )
+>     , ( 0x00ec, "igrave" )
+>     , ( 0x00ed, "iacute" )
+>     , ( 0x00ee, "icircumflex" )
+>     , ( 0x00ef, "idieresis" )
+>     , ( 0x00f0, "eth" )
+>     , ( 0x00f1, "ntilde" )
+>     , ( 0x00f2, "ograve" )
+>     , ( 0x00f3, "oacute" )
+>     , ( 0x00f4, "ocircumflex" )
+>     , ( 0x00f5, "otilde" )
+>     , ( 0x00f6, "odieresis" )
+>     , ( 0x00f7, "divide" )
+>     , ( 0x00f8, "oslash" )
+>     , ( 0x00f9, "ugrave" )
+>     , ( 0x00fa, "uacute" )
+>     , ( 0x00fb, "ucircumflex" )
+>     , ( 0x00fc, "udieresis" )
+>     , ( 0x00fd, "yacute" )
+>     , ( 0x00fe, "thorn" )
+>     , ( 0x00ff, "ydieresis" )
+>     ]
diff --git a/src/Wumpus/Core/Text/StandardEncoding.lhs b/src/Wumpus/Core/Text/StandardEncoding.lhs
new file mode 100644
--- /dev/null
+++ b/src/Wumpus/Core/Text/StandardEncoding.lhs
@@ -0,0 +1,185 @@
+{-# OPTIONS -Wall #-}
+
+> ------------------------------------------------------------------------------
+> -- | 
+> -- Module       :   Wumpus.Core.Text.StandardEncoding
+> -- Copyright    :   (c) Stephen Tetley 2010
+> -- License      :   BSD3
+> -- 
+> -- Maintainer   :   Stephen Tetley <stephen.tetley@gmail.com>
+> -- Stability    :   unstable
+> -- Portability  :   GHC
+> -- 
+> -- Encoding vector for the Standard Encoding.
+> -- 
+> -- \*\* This file is auto-generated. \*\*
+> -- 
+> -- Generated - 2010-11-17 15:24
+> -- 
+> ------------------------------------------------------------------------------
+
+> module Wumpus.Core.Text.StandardEncoding
+>   (
+>      standard_encoding
+>   ) where
+
+> import Wumpus.Core.Text.Base
+
+> import qualified Data.IntMap as IntMap
+
+
+> -- | Table mapping character numbers to glyph names for the
+> -- Standard Encoding.
+
+> standard_encoding :: EncodingVector
+> standard_encoding = IntMap.fromAscList $
+>     [ ( 0x0020, "space" )
+>     , ( 0x0021, "exclam" )
+>     , ( 0x0022, "quotedbl" )
+>     , ( 0x0023, "numbersign" )
+>     , ( 0x0024, "dollar" )
+>     , ( 0x0025, "percent" )
+>     , ( 0x0026, "ampersand" )
+>     , ( 0x0027, "quoteright" )
+>     , ( 0x0028, "parenleft" )
+>     , ( 0x0029, "parenright" )
+>     , ( 0x002a, "asterisk" )
+>     , ( 0x002b, "plus" )
+>     , ( 0x002c, "comma" )
+>     , ( 0x002d, "hyphen" )
+>     , ( 0x002e, "period" )
+>     , ( 0x002f, "slash" )
+>     , ( 0x0030, "zero" )
+>     , ( 0x0031, "one" )
+>     , ( 0x0032, "two" )
+>     , ( 0x0033, "three" )
+>     , ( 0x0034, "four" )
+>     , ( 0x0035, "five" )
+>     , ( 0x0036, "six" )
+>     , ( 0x0037, "seven" )
+>     , ( 0x0038, "eight" )
+>     , ( 0x0039, "nine" )
+>     , ( 0x003a, "colon" )
+>     , ( 0x003b, "semicolon" )
+>     , ( 0x003c, "less" )
+>     , ( 0x003d, "equal" )
+>     , ( 0x003e, "greater" )
+>     , ( 0x003f, "question" )
+>     , ( 0x0040, "at" )
+>     , ( 0x0041, "A" )
+>     , ( 0x0042, "B" )
+>     , ( 0x0043, "C" )
+>     , ( 0x0044, "D" )
+>     , ( 0x0045, "E" )
+>     , ( 0x0046, "F" )
+>     , ( 0x0047, "G" )
+>     , ( 0x0048, "H" )
+>     , ( 0x0049, "I" )
+>     , ( 0x004a, "J" )
+>     , ( 0x004b, "K" )
+>     , ( 0x004c, "L" )
+>     , ( 0x004d, "M" )
+>     , ( 0x004e, "N" )
+>     , ( 0x004f, "O" )
+>     , ( 0x0050, "P" )
+>     , ( 0x0051, "Q" )
+>     , ( 0x0052, "R" )
+>     , ( 0x0053, "S" )
+>     , ( 0x0054, "T" )
+>     , ( 0x0055, "U" )
+>     , ( 0x0056, "V" )
+>     , ( 0x0057, "W" )
+>     , ( 0x0058, "X" )
+>     , ( 0x0059, "Y" )
+>     , ( 0x005a, "Z" )
+>     , ( 0x005b, "bracketleft" )
+>     , ( 0x005c, "backslash" )
+>     , ( 0x005d, "bracketright" )
+>     , ( 0x005e, "asciicircum" )
+>     , ( 0x005f, "underscore" )
+>     , ( 0x0060, "quoteleft" )
+>     , ( 0x0061, "a" )
+>     , ( 0x0062, "b" )
+>     , ( 0x0063, "c" )
+>     , ( 0x0064, "d" )
+>     , ( 0x0065, "e" )
+>     , ( 0x0066, "f" )
+>     , ( 0x0067, "g" )
+>     , ( 0x0068, "h" )
+>     , ( 0x0069, "i" )
+>     , ( 0x006a, "j" )
+>     , ( 0x006b, "k" )
+>     , ( 0x006c, "l" )
+>     , ( 0x006d, "m" )
+>     , ( 0x006e, "n" )
+>     , ( 0x006f, "o" )
+>     , ( 0x0070, "p" )
+>     , ( 0x0071, "q" )
+>     , ( 0x0072, "r" )
+>     , ( 0x0073, "s" )
+>     , ( 0x0074, "t" )
+>     , ( 0x0075, "u" )
+>     , ( 0x0076, "v" )
+>     , ( 0x0077, "w" )
+>     , ( 0x0078, "x" )
+>     , ( 0x0079, "y" )
+>     , ( 0x007a, "z" )
+>     , ( 0x007b, "braceleft" )
+>     , ( 0x007c, "bar" )
+>     , ( 0x007d, "braceright" )
+>     , ( 0x007e, "asciitilde" )
+>     , ( 0x00a1, "exclamdown" )
+>     , ( 0x00a2, "cent" )
+>     , ( 0x00a3, "sterling" )
+>     , ( 0x00a4, "fraction" )
+>     , ( 0x00a5, "yen" )
+>     , ( 0x00a6, "florin" )
+>     , ( 0x00a7, "section" )
+>     , ( 0x00a8, "currency" )
+>     , ( 0x00a9, "quotesingle" )
+>     , ( 0x00aa, "quotedblleft" )
+>     , ( 0x00ab, "guillemotleft" )
+>     , ( 0x00ac, "guilsinglleft" )
+>     , ( 0x00ad, "guilsinglright" )
+>     , ( 0x00ae, "fi" )
+>     , ( 0x00af, "fl" )
+>     , ( 0x00b1, "endash" )
+>     , ( 0x00b2, "dagger" )
+>     , ( 0x00b3, "daggerdbl" )
+>     , ( 0x00b4, "periodcentered" )
+>     , ( 0x00b6, "paragraph" )
+>     , ( 0x00b7, "bullet" )
+>     , ( 0x00b8, "quotesinglbase" )
+>     , ( 0x00b9, "quotedblbase" )
+>     , ( 0x00ba, "quotedblright" )
+>     , ( 0x00bb, "guillemotright" )
+>     , ( 0x00bc, "ellipsis" )
+>     , ( 0x00bd, "perthousand" )
+>     , ( 0x00bf, "questiondown" )
+>     , ( 0x00c1, "grave" )
+>     , ( 0x00c2, "acute" )
+>     , ( 0x00c3, "circumflex" )
+>     , ( 0x00c4, "tilde" )
+>     , ( 0x00c5, "macron" )
+>     , ( 0x00c6, "breve" )
+>     , ( 0x00c7, "dotaccent" )
+>     , ( 0x00c8, "dieresis" )
+>     , ( 0x00ca, "ring" )
+>     , ( 0x00cb, "cedilla" )
+>     , ( 0x00cd, "hungarumlaut" )
+>     , ( 0x00ce, "ogonek" )
+>     , ( 0x00cf, "caron" )
+>     , ( 0x00d0, "emdash" )
+>     , ( 0x00e1, "AE" )
+>     , ( 0x00e3, "ordfeminine" )
+>     , ( 0x00e8, "Lslash" )
+>     , ( 0x00e9, "Oslash" )
+>     , ( 0x00ea, "OE" )
+>     , ( 0x00eb, "ordmasculine" )
+>     , ( 0x00f1, "ae" )
+>     , ( 0x00f5, "dotlessi" )
+>     , ( 0x00f8, "lslash" )
+>     , ( 0x00f9, "oslash" )
+>     , ( 0x00fa, "oe" )
+>     , ( 0x00fb, "germandbls" )
+>     ]
diff --git a/src/Wumpus/Core/Text/Symbol.lhs b/src/Wumpus/Core/Text/Symbol.lhs
new file mode 100644
--- /dev/null
+++ b/src/Wumpus/Core/Text/Symbol.lhs
@@ -0,0 +1,225 @@
+{-# OPTIONS -Wall #-}
+
+> ------------------------------------------------------------------------------
+> -- | 
+> -- Module       :   Wumpus.Core.Text.Symbol
+> -- Copyright    :   (c) Stephen Tetley 2010
+> -- License      :   BSD3
+> -- 
+> -- Maintainer   :   Stephen Tetley <stephen.tetley@gmail.com>
+> -- Stability    :   unstable
+> -- Portability  :   GHC
+> -- 
+> -- Encoding vector for the Symbol font.
+> -- 
+> -- \*\* This file is auto-generated. \*\*
+> -- 
+> -- Generated - 2010-11-17 15:24
+> -- 
+> ------------------------------------------------------------------------------
+
+> module Wumpus.Core.Text.Symbol
+>   (
+>      symbol_encoding
+>   ) where
+
+> import Wumpus.Core.Text.Base
+
+> import qualified Data.IntMap as IntMap
+
+
+> -- | Table mapping character numbers to glyph names for the
+> -- Symbol font.
+
+> symbol_encoding :: EncodingVector
+> symbol_encoding = IntMap.fromAscList $
+>     [ ( 0x0020, "space" )
+>     , ( 0x0021, "exclam" )
+>     , ( 0x0022, "universal" )
+>     , ( 0x0023, "numbersign" )
+>     , ( 0x0024, "existential" )
+>     , ( 0x0025, "percent" )
+>     , ( 0x0026, "ampersand" )
+>     , ( 0x0027, "suchthat" )
+>     , ( 0x0028, "parenleft" )
+>     , ( 0x0029, "parenright" )
+>     , ( 0x002a, "asteriskmath" )
+>     , ( 0x002b, "plus" )
+>     , ( 0x002c, "comma" )
+>     , ( 0x002d, "minus" )
+>     , ( 0x002e, "period" )
+>     , ( 0x002f, "slash" )
+>     , ( 0x0030, "zero" )
+>     , ( 0x0031, "one" )
+>     , ( 0x0032, "two" )
+>     , ( 0x0033, "three" )
+>     , ( 0x0034, "four" )
+>     , ( 0x0035, "five" )
+>     , ( 0x0036, "six" )
+>     , ( 0x0037, "seven" )
+>     , ( 0x0038, "eight" )
+>     , ( 0x0039, "nine" )
+>     , ( 0x003a, "colon" )
+>     , ( 0x003b, "semicolon" )
+>     , ( 0x003c, "less" )
+>     , ( 0x003d, "equal" )
+>     , ( 0x003e, "greater" )
+>     , ( 0x003f, "question" )
+>     , ( 0x0040, "congruent" )
+>     , ( 0x0041, "Alpha" )
+>     , ( 0x0042, "Beta" )
+>     , ( 0x0043, "Chi" )
+>     , ( 0x0044, "Delta" )
+>     , ( 0x0045, "Epsilon" )
+>     , ( 0x0046, "Phi" )
+>     , ( 0x0047, "Gamma" )
+>     , ( 0x0048, "Eta" )
+>     , ( 0x0049, "Iota" )
+>     , ( 0x004a, "theta1" )
+>     , ( 0x004b, "Kappa" )
+>     , ( 0x004c, "Lambda" )
+>     , ( 0x004d, "Mu" )
+>     , ( 0x004e, "Nu" )
+>     , ( 0x004f, "Omicron" )
+>     , ( 0x0050, "Pi" )
+>     , ( 0x0051, "Theta" )
+>     , ( 0x0052, "Rho" )
+>     , ( 0x0053, "Sigma" )
+>     , ( 0x0054, "Tau" )
+>     , ( 0x0055, "Upsilon" )
+>     , ( 0x0056, "sigma1" )
+>     , ( 0x0057, "Omega" )
+>     , ( 0x0058, "Xi" )
+>     , ( 0x0059, "Psi" )
+>     , ( 0x005a, "Zeta" )
+>     , ( 0x005b, "bracketleft" )
+>     , ( 0x005c, "therefore" )
+>     , ( 0x005d, "bracketright" )
+>     , ( 0x005e, "perpendicular" )
+>     , ( 0x005f, "underscore" )
+>     , ( 0x0060, "radicalex" )
+>     , ( 0x0061, "alpha" )
+>     , ( 0x0062, "beta" )
+>     , ( 0x0063, "chi" )
+>     , ( 0x0064, "delta" )
+>     , ( 0x0065, "epsilon" )
+>     , ( 0x0066, "phi" )
+>     , ( 0x0067, "gamma" )
+>     , ( 0x0068, "eta" )
+>     , ( 0x0069, "iota" )
+>     , ( 0x006a, "phi1" )
+>     , ( 0x006b, "kappa" )
+>     , ( 0x006c, "lambda" )
+>     , ( 0x006d, "mu" )
+>     , ( 0x006e, "nu" )
+>     , ( 0x006f, "omicron" )
+>     , ( 0x0070, "pi" )
+>     , ( 0x0071, "theta" )
+>     , ( 0x0072, "rho" )
+>     , ( 0x0073, "sigma" )
+>     , ( 0x0074, "tau" )
+>     , ( 0x0075, "upsilon" )
+>     , ( 0x0076, "omega1" )
+>     , ( 0x0077, "omega" )
+>     , ( 0x0078, "xi" )
+>     , ( 0x0079, "psi" )
+>     , ( 0x007a, "zeta" )
+>     , ( 0x007b, "braceleft" )
+>     , ( 0x007c, "bar" )
+>     , ( 0x007d, "braceright" )
+>     , ( 0x007e, "similar" )
+>     , ( 0x00a0, "Euro" )
+>     , ( 0x00a1, "Upsilon1" )
+>     , ( 0x00a2, "minute" )
+>     , ( 0x00a3, "lessequal" )
+>     , ( 0x00a4, "fraction" )
+>     , ( 0x00a5, "infinity" )
+>     , ( 0x00a6, "florin" )
+>     , ( 0x00a7, "club" )
+>     , ( 0x00a8, "diamond" )
+>     , ( 0x00a9, "heart" )
+>     , ( 0x00aa, "spade" )
+>     , ( 0x00ab, "arrowboth" )
+>     , ( 0x00ac, "arrowleft" )
+>     , ( 0x00ad, "arrowup" )
+>     , ( 0x00ae, "arrowright" )
+>     , ( 0x00af, "arrowdown" )
+>     , ( 0x00b0, "degree" )
+>     , ( 0x00b1, "plusminus" )
+>     , ( 0x00b2, "second" )
+>     , ( 0x00b3, "greaterequal" )
+>     , ( 0x00b4, "multiply" )
+>     , ( 0x00b5, "proportional" )
+>     , ( 0x00b6, "partialdiff" )
+>     , ( 0x00b7, "bullet" )
+>     , ( 0x00b8, "divide" )
+>     , ( 0x00b9, "notequal" )
+>     , ( 0x00ba, "equivalence" )
+>     , ( 0x00bb, "approxequal" )
+>     , ( 0x00bc, "ellipsis" )
+>     , ( 0x00bd, "arrowvertex" )
+>     , ( 0x00be, "arrowhorizex" )
+>     , ( 0x00bf, "carriagereturn" )
+>     , ( 0x00c0, "aleph" )
+>     , ( 0x00c1, "Ifraktur" )
+>     , ( 0x00c2, "Rfraktur" )
+>     , ( 0x00c3, "weierstrass" )
+>     , ( 0x00c4, "circlemultiply" )
+>     , ( 0x00c5, "circleplus" )
+>     , ( 0x00c6, "emptyset" )
+>     , ( 0x00c7, "intersection" )
+>     , ( 0x00c8, "union" )
+>     , ( 0x00c9, "propersuperset" )
+>     , ( 0x00ca, "reflexsuperset" )
+>     , ( 0x00cb, "notsubset" )
+>     , ( 0x00cc, "propersubset" )
+>     , ( 0x00cd, "reflexsubset" )
+>     , ( 0x00ce, "element" )
+>     , ( 0x00cf, "notelement" )
+>     , ( 0x00d0, "angle" )
+>     , ( 0x00d1, "gradient" )
+>     , ( 0x00d2, "registerserif" )
+>     , ( 0x00d3, "copyrightserif" )
+>     , ( 0x00d4, "trademarkserif" )
+>     , ( 0x00d5, "product" )
+>     , ( 0x00d6, "radical" )
+>     , ( 0x00d7, "dotmath" )
+>     , ( 0x00d8, "logicalnot" )
+>     , ( 0x00d9, "logicaland" )
+>     , ( 0x00da, "logicalor" )
+>     , ( 0x00db, "arrowdblboth" )
+>     , ( 0x00dc, "arrowdblleft" )
+>     , ( 0x00dd, "arrowdblup" )
+>     , ( 0x00de, "arrowdblright" )
+>     , ( 0x00df, "arrowdbldown" )
+>     , ( 0x00e0, "lozenge" )
+>     , ( 0x00e1, "angleleft" )
+>     , ( 0x00e2, "registersans" )
+>     , ( 0x00e3, "copyrightsans" )
+>     , ( 0x00e4, "trademarksans" )
+>     , ( 0x00e5, "summation" )
+>     , ( 0x00e6, "parenlefttp" )
+>     , ( 0x00e7, "parenleftex" )
+>     , ( 0x00e8, "parenleftbt" )
+>     , ( 0x00e9, "bracketlefttp" )
+>     , ( 0x00ea, "bracketleftex" )
+>     , ( 0x00eb, "bracketleftbt" )
+>     , ( 0x00ec, "bracelefttp" )
+>     , ( 0x00ed, "braceleftmid" )
+>     , ( 0x00ee, "braceleftbt" )
+>     , ( 0x00ef, "braceex" )
+>     , ( 0x00f1, "angleright" )
+>     , ( 0x00f2, "integral" )
+>     , ( 0x00f3, "integraltp" )
+>     , ( 0x00f4, "integralex" )
+>     , ( 0x00f5, "integralbt" )
+>     , ( 0x00f6, "parenrighttp" )
+>     , ( 0x00f7, "parenrightex" )
+>     , ( 0x00f8, "parenrightbt" )
+>     , ( 0x00f9, "bracketrighttp" )
+>     , ( 0x00fa, "bracketrightex" )
+>     , ( 0x00fb, "bracketrightbt" )
+>     , ( 0x00fc, "bracerighttp" )
+>     , ( 0x00fd, "bracerightmid" )
+>     , ( 0x00fe, "bracerightbt" )
+>     ]
diff --git a/src/Wumpus/Core/Text/SymbolFont.hs b/src/Wumpus/Core/Text/SymbolFont.hs
deleted file mode 100644
--- a/src/Wumpus/Core/Text/SymbolFont.hs
+++ /dev/null
@@ -1,249 +0,0 @@
-{-# OPTIONS -Wall #-}
-
---------------------------------------------------------------------------------
--- |
--- Module      :  Wumpus.Core.Text.SymbolFont
--- Copyright   :  (c) Stephen Tetley 2010
--- License     :  BSD3
---
--- Maintainer  :  stephen.tetley@gmail.com
--- Stability   :  unstable
--- Portability :  GHC
---
--- A @TextEncoder@ record instance for Symbol font characters.
--- 
---------------------------------------------------------------------------------
-
-module Wumpus.Core.Text.SymbolFont
-  ( 
-  
-    symbol_font_encoder
-  , symbolFontEncoder
-  , symbolFontAll
-
-  ) where
-
-import Wumpus.Core.Text.Encoder
-
-import qualified Data.Map as Map
-
-
-
--- | Symbol Font Encoder name 
---
--- (Number 1)
--- 
-symbol_font_encoder :: FontEncoderName
-symbol_font_encoder = FontEncoderName 1
-
-
-
--- | Latin1 TextEncoder instance.
-symbolFontEncoder :: FontEncoder
-symbolFontEncoder = FontEncoder 
-    { ps_lookup         = Map.lookup `flip` codeToName
-    , svg_lookup        = Map.lookup `flip` nameToCode
-    , ps_fallback       = "space"
-    , svg_fallback      = 0o040
-    }
-
-nameToCode :: Map.Map GlyphName CharCode
-nameToCode = Map.fromList symbolFontAll
-
-codeToName :: Map.Map CharCode GlyphName
-codeToName = foldr fn Map.empty symbolFontAll where
-  fn (s,i) a = Map.insert i s a 
-
--- | A lookup list of Latin 1 names to their octal code.
-symbolFontAll :: [(GlyphName, CharCode)]
-symbolFontAll = 
-    [ ("Alpha",                 0o101)
-    , ("Beta",                  0o102)
-    , ("Chi",                   0o103)
-    , ("Delta",                 0o104)
-    , ("Epsilon",               0o105)
-    , ("Eta",                   0o110)
-    , ("Euro",                  0o240)
-    , ("Gamma",                 0o107)
-    , ("Ifraktur",              0o301)
-    , ("Iota",                  0o111)
-    , ("Kappa",                 0o113)
-    , ("Lambda",                0o114)
-    , ("Mu",                    0o115)
-    , ("Nu",                    0o116)
-    , ("Omega",                 0o127)
-    , ("Omicron",               0o117)
-    , ("Phi",                   0o106)
-    , ("Pi",                    0o120)
-    , ("Psi",                   0o131)
-    , ("Rfraktur",              0o302)
-    , ("Rho",                   0o122)
-    , ("Sigma",                 0o123)
-    , ("Tau",                   0o124)
-    , ("Theta",                 0o121)
-    , ("Upsilon",               0o125)
-    , ("Upsilon1",              0o241)
-    , ("Xi",                    0o130)
-    , ("Zeta",                  0o132)
-    , ("aleph",                 0o300)
-    , ("alpha",                 0o141)
-    , ("ampersand",             0o046)
-    , ("angle",                 0o320)
-    , ("angleleft",             0o341)
-    , ("angleright",            0o361)
-    , ("approxequal",           0o273)
-    , ("arrowboth",             0o253)
-    , ("arrowdblboth",          0o333)
-    , ("arrowdbldown",          0o337)
-    , ("arrowdblleft",          0o334)
-    , ("arrowdblright",         0o336)
-    , ("arrowdblup",            0o335)
-    , ("arrowdown",             0o257)
-    , ("arrowhorizex",          0o276)
-    , ("arrowleft",             0o254)
-    , ("arrowright",            0o256)
-    , ("arrowup",               0o255)
-    , ("arrowvertex",           0o275)
-    , ("asteriskmath",          0o052)
-    , ("bar",                   0o174)
-    , ("beta",                  0o142)
-    , ("braceleft",             0o173)
-    , ("braceright",            0o175)
-    , ("bracelefttp",           0o354)
-    , ("braceleftmid",          0o355)
-    , ("braceleftbt",           0o356)
-    , ("bracerighttp",          0o374)
-    , ("bracerightmid",         0o375)
-    , ("bracerightbt",          0o376)
-    , ("braceex",               0o357)
-    , ("bracketleft",           0o133)
-    , ("bracketright",          0o135)
-    , ("bracketlefttp",         0o351)
-    , ("bracketleftex",         0o352)
-    , ("bracketleftbt",         0o353)
-    , ("bracketrighttp",        0o371)
-    , ("bracketrightex",        0o372)
-    , ("bracketrightbt",        0o373)
-    , ("bullet",                0o267)
-    , ("carriagereturn",        0o277)
-    , ("chi",                   0o143)
-    , ("circlemultiply",        0o304)
-    , ("circleplus",            0o305)
-    , ("club",                  0o247)
-    , ("colon",                 0o072)
-    , ("comma",                 0o054)
-    , ("congruent",             0o100)
-    , ("copyrightsans",         0o343)
-    , ("copyrightserif",        0o323)
-    , ("degree",                0o260)
-    , ("delta",                 0o144)
-    , ("diamond",               0o250)
-    , ("divide",                0o270)
-    , ("dotmath",               0o327)
-    , ("eight",                 0o070)
-    , ("element",               0o316)
-    , ("ellipsis",              0o274)
-    , ("emptyset",              0o306)
-    , ("epsilon",               0o145)
-    , ("equal",                 0o075)
-    , ("equivalence",           0o272)
-    , ("eta",                   0o150)
-    , ("exclam",                0o041)
-    , ("existential",           0o044)
-    , ("five",                  0o065)
-    , ("florin",                0o246)
-    , ("four",                  0o064)
-    , ("fraction",              0o244)
-    , ("gamma",                 0o147)
-    , ("gradient",              0o321)
-    , ("greater",               0o076)
-    , ("greaterequal",          0o263)
-    , ("heart",                 0o251)
-    , ("infinity",              0o245)
-    , ("integral",              0o362)
-    , ("integraltp",            0o363)
-    , ("integralex",            0o364)
-    , ("integralbt",            0o365)
-    , ("intersection",          0o307)
-    , ("iota",                  0o151)
-    , ("kappa",                 0o153)
-    , ("lambda",                0o154)
-    , ("less",                  0o074)
-    , ("lessequal",             0o243)
-    , ("logicaland",            0o331)
-    , ("logicalnot",            0o330)
-    , ("logicalor",             0o332)
-    , ("lozenge",               0o340)
-    , ("minus",                 0o055)
-    , ("minute",                0o242)
-    , ("mu",                    0o155)
-    , ("multiply",              0o264)
-    , ("nine",                  0o071)
-    , ("notelement",            0o317)
-    , ("notequal",              0o271)
-    , ("notsubset",             0o313)
-    , ("nu",                    0o156)
-    , ("numbersign",            0o043)
-    , ("omega",                 0o167)
-    , ("omega1",                0o166)
-    , ("omicron",               0o157)
-    , ("one",                   0o061)
-    , ("parenleft",             0o050)
-    , ("parenright",            0o051)
-    , ("parenlefttp",           0o346)
-    , ("parenleftex",           0o347)
-    , ("parenleftbt",           0o350)
-    , ("parenrighttp",          0o366)
-    , ("parenrightex",          0o367)
-    , ("parenrightbt",          0o370)
-    , ("partialdiff",           0o266)
-    , ("percent",               0o045)
-    , ("period",                0o056)
-    , ("perpendicular",         0o136)
-    , ("phi",                   0o146)
-    , ("phi1",                  0o152)
-    , ("pi",                    0o160)
-    , ("plus",                  0o053)
-    , ("plusminus",             0o261)
-    , ("product",               0o325)
-    , ("propersubset",          0o314)
-    , ("propersuperset",        0o311)
-    , ("proportional",          0o265)
-    , ("psi",                   0o171)
-    , ("question",              0o077)
-    , ("radical",               0o326)
-    , ("radicalex",             0o140)
-    , ("reflexsubset",          0o315)
-    , ("reflexsuperset",        0o312)
-    , ("registersans",          0o342)
-    , ("registerserif",         0o322)
-    , ("rho",                   0o162)
-    , ("second",                0o262)
-    , ("semicolon",             0o073)
-    , ("seven",                 0o067)
-    , ("sigma",                 0o163)
-    , ("sigma1",                0o126)
-    , ("similar",               0o176)
-    , ("six",                   0o066)
-    , ("slash",                 0o057)
-    , ("space",                 0o040)
-    , ("spade",                 0o252)
-    , ("suchthat",              0o047)
-    , ("summation",             0o345)
-    , ("tau",                   0o164)
-    , ("therefore",             0o134)
-    , ("theta",                 0o161)
-    , ("theta1",                0o112)
-    , ("three",                 0o063)
-    , ("trademarksans",         0o344)
-    , ("trademarkserif",        0o324)
-    , ("two",                   0o062)
-    , ("underscore",            0o137)
-    , ("union",                 0o310)
-    , ("universal",             0o042)
-    , ("upsilon",               0o165)
-    , ("weierstrass",           0o303)
-    , ("xi",                    0o170)
-    , ("zero",                  0o060)
-    , ("zeta",                  0o172)
-    ]
diff --git a/src/Wumpus/Core/Text/TextInternal.hs b/src/Wumpus/Core/Text/TextInternal.hs
deleted file mode 100644
--- a/src/Wumpus/Core/Text/TextInternal.hs
+++ /dev/null
@@ -1,173 +0,0 @@
-{-# OPTIONS -Wall #-}
-
---------------------------------------------------------------------------------
--- |
--- Module      :  Wumpus.Core.Text.TextInternal
--- Copyright   :  (c) Stephen Tetley 2009-2010
--- License     :  BSD3
---
--- Maintainer  :  stephen.tetley@gmail.com
--- Stability   :  unstable
--- Portability :  GHC
---
--- Extended character handling.
--- 
---------------------------------------------------------------------------------
-
-module Wumpus.Core.Text.TextInternal
-  ( 
-
-    EncodedText(..)    
-  , TextChunk(..)
-  , EncodedChar(..)
-
-  , textLength
-  , lookupByCharCode  
-  , lookupByGlyphName
-  , getSvgFallback
-  , getPsFallback
-  
-  , lexLabel
-
-  ) where
-
-import Wumpus.Core.Text.Encoder
-import Wumpus.Core.Utils.FormatCombinators
-
-import Data.Char
-import qualified Data.Map as Map
-
-newtype EncodedText = EncodedText { getEncodedText :: [TextChunk] }
-  deriving (Eq,Show)
-
--- | Wumpus supports both escaped names e.g. @egrave@ and escaped
--- (numeric decimal) character codes in the input string for a 
--- TextLabel.
--- 
-data TextChunk = TextSpan    String
-               | TextEscInt  Int
-               | TextEscName GlyphName
-  deriving (Eq,Show)
-
--- | For KernLabels Wumpus needs a Char version of TextChunk.
---
-data EncodedChar = CharLiteral Char
-                 | CharEscInt  Int
-                 | CharEscName GlyphName
-  deriving (Eq,Show)
-
-
---------------------------------------------------------------------------------
-
-instance Format EncodedText where
-  format = hcat . map format . getEncodedText
-
-instance Format TextChunk where
-  format (TextSpan s)    = text s
-  format (TextEscInt i)  = text "&#" <> int i  <> semicolon
-  format (TextEscName s) = text "&#" <> text s <> semicolon
-
-instance Format EncodedChar where
-  format (CharLiteral c) = char c
-  format (CharEscInt i)  = text "&#" <> int i  <> semicolon
-  format (CharEscName s) = text "&#" <> text s <> semicolon
-
-
---------------------------------------------------------------------------------
-
-
-textLength :: EncodedText -> Int
-textLength = foldr add 0 . getEncodedText where 
-    add (TextSpan s) n = n + length s
-    add _            n = n + 1
-
-
-lookupByCharCode :: FontEncoderName -> CharCode -> TextEncoder -> Maybe GlyphName
-lookupByCharCode name i enc = 
-    Map.lookup name (font_encoder_map enc) >>= \a -> (ps_lookup a) i
-
-lookupByGlyphName :: FontEncoderName -> GlyphName -> TextEncoder -> Maybe CharCode
-lookupByGlyphName name i enc = 
-    Map.lookup name (font_encoder_map enc) >>= \a -> (svg_lookup a) i
-
-
-getSvgFallback :: FontEncoderName -> TextEncoder -> CharCode
-getSvgFallback name enc = case Map.lookup name (font_encoder_map enc) of
-   Just fe -> svg_fallback fe 
-   Nothing -> 0o040                     -- wild guess
-
-getPsFallback :: FontEncoderName -> TextEncoder -> GlyphName
-getPsFallback name enc = case Map.lookup name (font_encoder_map enc) of
-   Just fe -> ps_fallback fe 
-   Nothing -> "space"                    -- wild guess
-
-
--- | 'lexLabel' input is regular text and escaped glyph names or
--- decimal character codes. Escaping follows the SVG convention,
--- start with @&#@ (ampersand hash) end with @;@ (semicolon).
---
--- Special chars are output to PostScript as:
---
--- > /egrave glyphshow
---
--- Special chars are output to SVG as an escaped decimal, e.g.:
---
--- > &#232;
---
--- Note, HTML entity names do not seem to be supported in SVG,
--- @ &egrave; @ does not work in FireFox or Chrome.
---
-lexLabel :: String -> EncodedText
-lexLabel = EncodedText . lexer
-
--- Note - the lexer reads number spans with isDigit, so reads 
--- decimals only.
--- 
-lexer :: String -> [TextChunk]
-lexer []            = []
-lexer ('&':'#':cs)  = escStart cs
-lexer (c:cs)        = let (ss,rest) = span (/= '&') cs 
-                      in TextSpan (c:ss) : lexer rest
-
-escStart :: String -> [TextChunk]
-escStart ('0':'o':cs)           = escOct cs
-escStart ('0':'O':cs)           = escOct cs
-escStart ('0':'x':cs)           = escHex cs
-escStart ('0':'X':cs)           = escHex cs
-escStart (c:cs) | isDigit c     = escDec (digitToInt c) cs
-escStart (c:cs)                 = let (ss,rest) = span isAlphaNum cs 
-                                  in TextEscName (c:ss) : chompToSemi rest
-escStart []                     = [] 
-
--- | One digit consumed already...
---
-escDec :: Int -> String -> [TextChunk]
-escDec n (c:cs) | isDigit c = escDec (n*10 + digitToInt c) cs
-escDec n cs     | n > 0     = TextEscInt n : chompToSemi cs
-                | otherwise = chompToSemi cs
-
-escHex :: String -> [TextChunk]
-escHex = step 0
-  where
-    step n (c:cs) | isHexDigit c = step (n*16 + digitToInt c) cs
-    step n cs     | n > 0        = TextEscInt n : chompToSemi cs
-                  | otherwise    = chompToSemi cs 
-
-
-escOct :: String -> [TextChunk]
-escOct = step 0
-  where
-    step n (c:cs) | isHexDigit c = step (n*8 + digitToInt c) cs
-    step n cs     | n > 0        = TextEscInt n : chompToSemi cs
-                  | otherwise    = chompToSemi cs 
-
-
-
--- The last two conditions both indicate ill-formed input, but it
--- is /best/ if the lexer does not throw errors.
--- 
-chompToSemi :: String -> [TextChunk]
-chompToSemi (';':cs) = lexer cs
-chompToSemi (_:cs)   = chompToSemi cs           
-chompToSemi []       = []
-
diff --git a/src/Wumpus/Core/TrafoInternal.hs b/src/Wumpus/Core/TrafoInternal.hs
--- a/src/Wumpus/Core/TrafoInternal.hs
+++ b/src/Wumpus/Core/TrafoInternal.hs
@@ -31,12 +31,15 @@
 
   -- * CTM operations
   , identityCTM
-  , thetaCTM
+  , makeThetaCTM
+  , makeTranslCTM
 
+  , translateCTM
   , scaleCTM
   , rotateCTM
+  , rotateAboutCTM
   , matrixRepCTM
-  , translMatrixRepCTM
+  , unCTM
 
   -- * AffineTrafo operations
   , concatTrafos
@@ -45,6 +48,7 @@
   ) where
 
 
+import Wumpus.Core.AffineTrans
 import Wumpus.Core.Geometry
 import Wumpus.Core.Utils.Common
 import Wumpus.Core.Utils.FormatCombinators
@@ -59,9 +63,11 @@
 -- Note - line thickness of a stroked path will not be scaled.
 --
 data PrimCTM u = PrimCTM 
-      { ctm_scale_x     :: u
-      , ctm_scale_y     :: u
-      , ctm_rotation    :: Radian 
+      { ctm_transl_x    :: !u
+      , ctm_transl_y    :: !u
+      , ctm_scale_x     :: !u
+      , ctm_scale_y     :: !u
+      , ctm_rotation    :: !Radian 
       }
   deriving (Eq,Show)
 
@@ -82,10 +88,12 @@
 
 
 instance PSUnit u => Format (PrimCTM u) where
-  format (PrimCTM x y ang) = 
-      parens (text "CTM" <+> text "sx="   <> dtruncFmt x 
-                         <+> text "sy="   <> dtruncFmt y 
-                         <+> text "ang="  <> format ang  )
+  format (PrimCTM dx dy sx sy ang) = 
+      parens (text "CTM" <+> text "dx =" <> dtruncFmt dx
+                         <+> text "dy =" <> dtruncFmt dy
+                         <+> text "sx =" <> dtruncFmt sx 
+                         <+> text "sy =" <> dtruncFmt sy 
+                         <+> text "ang=" <> format ang  )
 
 
 
@@ -94,20 +102,49 @@
 -- Manipulating the PrimCTM
 
 identityCTM :: Num u => PrimCTM u
-identityCTM = PrimCTM { ctm_scale_x = 1, ctm_scale_y = 1, ctm_rotation = 0 }
+identityCTM = PrimCTM { ctm_transl_x = 0, ctm_transl_y = 0
+                      , ctm_scale_x = 1,  ctm_scale_y = 1
+                      , ctm_rotation = 0 }
 
-thetaCTM :: Num u => Radian -> PrimCTM u
-thetaCTM ang = PrimCTM { ctm_scale_x = 1, ctm_scale_y = 1, ctm_rotation = ang }
+makeThetaCTM :: Num u => u -> u -> Radian -> PrimCTM u
+makeThetaCTM dx dy ang = PrimCTM { ctm_transl_x = dx, ctm_transl_y = dy
+                                 , ctm_scale_x = 1, ctm_scale_y = 1
+                                 , ctm_rotation = ang }
 
+
+makeTranslCTM :: Num u => u -> u -> PrimCTM u
+makeTranslCTM dx dy = PrimCTM { ctm_transl_x = dx, ctm_transl_y = dy
+                              , ctm_scale_x = 1, ctm_scale_y = 1
+                              , ctm_rotation = 0 }
+
+
+
+
+translateCTM :: Num u => u -> u -> PrimCTM u -> PrimCTM u
+translateCTM x1 y1 (PrimCTM dx dy sx sy ang) = 
+    PrimCTM (x1+dx) (y1+dy) sx sy ang
+
+-- Note - the matrix is not used entirely conventionally.
+--
+-- It is expected that the point is extracted from the matrix, so
+-- scales and rotations operate on the point coordinates as well
+-- as the scale and rotation components. 
+
 scaleCTM :: Num u => u -> u -> PrimCTM u -> PrimCTM u
-scaleCTM x1 y1 (PrimCTM sx sy ang) = PrimCTM (x1*sx) (y1*sy) ang
+scaleCTM x1 y1 (PrimCTM dx dy sx sy ang) = 
+    let P2 x y = scale x1 y1 (P2 dx dy) 
+    in PrimCTM x y (x1*sx) (y1*sy) ang
 
-rotateCTM :: Radian -> PrimCTM u -> PrimCTM u
-rotateCTM ang1 (PrimCTM sx sy ang) = PrimCTM sx sy (circularModulo $ ang1+ang)
+rotateCTM :: (Real u, Floating u) => Radian -> PrimCTM u -> PrimCTM u
+rotateCTM theta (PrimCTM dx dy sx sy ang) = 
+    let P2 x y = rotate theta (P2 dx dy) 
+    in PrimCTM x y sx sy (circularModulo $ theta+ang)
 
-matrixRepCTM :: (Floating u, Real u) => PrimCTM u -> Matrix3'3 u
-matrixRepCTM (PrimCTM sx sy ang) = 
-    rotationMatrix (circularModulo ang) * scalingMatrix sx sy
+rotateAboutCTM :: (Real u, Floating u) 
+               => Radian -> Point2 u -> PrimCTM u -> PrimCTM u
+rotateAboutCTM theta pt (PrimCTM dx dy sx sy ang) = 
+    let P2 x y = rotateAbout theta pt (P2 dx dy)
+    in PrimCTM x y sx sy (circularModulo $ theta+ang)
 
 
 -- Note - the order of combining a translation (i.e. the location 
@@ -116,9 +153,20 @@
 --
 -- This function encapsulates the correct order.
 --
-translMatrixRepCTM :: (Floating u, Real u) 
-                   => u -> u -> PrimCTM u -> Matrix3'3 u
-translMatrixRepCTM x y ctm = translationMatrix x y * matrixRepCTM ctm
+matrixRepCTM :: (Real u, Floating u) => PrimCTM u -> Matrix3'3 u
+matrixRepCTM (PrimCTM dx dy sx sy ang) = 
+    translationMatrix dx dy * rotationMatrix (circularModulo ang) 
+                            * scalingMatrix sx sy
+
+
+-- | Destructor for the CTM extracts the /start point/ and a
+-- /residual/ CTM. 
+-- 
+-- If the residual CTM is the identity CTM, the SVG or PostScript
+-- output can be optimized.
+-- 
+unCTM :: Num u => PrimCTM  u -> (Point2 u, PrimCTM u)
+unCTM (PrimCTM dx dy sx sy ang) = (P2 dx dy, PrimCTM 0 0 sx sy ang)
 
 
 --------------------------------------------------------------------------------
diff --git a/src/Wumpus/Core/Utils/FormatCombinators.hs b/src/Wumpus/Core/Utils/FormatCombinators.hs
--- a/src/Wumpus/Core/Utils/FormatCombinators.hs
+++ b/src/Wumpus/Core/Utils/FormatCombinators.hs
@@ -106,6 +106,15 @@
 instance Show Doc where
   show = runDoc
 
+-- Eq is horrible but it is required for Primitive
+
+instance Eq Doc where
+  (==) (Doc1 f)     (Doc1 g)      = (f []) == (g [])    -- horribly expensive!
+  (==) (Join a b)   (Join x y)    = a == x && b == y
+  (==) Line         Line          = True
+  (==) (Indent i a) (Indent j x)  = i == j && a == x
+  (==) _            _             = False
+
 instance Monoid Doc where
   mempty = empty
   mappend = (<>)
diff --git a/src/Wumpus/Core/VersionNumber.hs b/src/Wumpus/Core/VersionNumber.hs
--- a/src/Wumpus/Core/VersionNumber.hs
+++ b/src/Wumpus/Core/VersionNumber.hs
@@ -22,7 +22,7 @@
 
 -- | Version number.
 --
--- > (0,37,0)
+-- > (0,40,0)
 --
 wumpus_core_version :: (Int,Int,Int)
-wumpus_core_version = (0,37,0)
+wumpus_core_version = (0,40,0)
diff --git a/src/Wumpus/Core/WumpusTypes.hs b/src/Wumpus/Core/WumpusTypes.hs
--- a/src/Wumpus/Core/WumpusTypes.hs
+++ b/src/Wumpus/Core/WumpusTypes.hs
@@ -13,6 +13,12 @@
 -- This module re-exports types and functions from 
 -- "Wumpus.Core.PictureInternal" but makes them opaque. 
 -- Contructors are provided by "Wumpus.Core.Picture".
+--
+-- Note - whilst the Picture types support the Eq class the 
+-- implementations are not efficient, e.g. In the case of 
+-- Primitive, one of the constructors has to unwind a functional 
+-- \Hughes list\. The Eq instance is considered a legacy 
+-- /feature/ (or burden) as the types have expanded.
 -- 
 --------------------------------------------------------------------------------
 
diff --git a/wumpus-core.cabal b/wumpus-core.cabal
--- a/wumpus-core.cabal
+++ b/wumpus-core.cabal
@@ -1,5 +1,5 @@
 name:             wumpus-core
-version:          0.37.0
+version:          0.40.0
 license:          BSD3
 license-file:     LICENSE
 copyright:        Stephen Tetley <stephen.tetley@gmail.com>
@@ -9,80 +9,129 @@
 synopsis:         Pure Haskell PostScript and SVG generation. 
 description:
   .
-  Wumpus is a low-level library for generating static 2D vector 
-  pictures, its salient feature is portability due to no FFI 
-  dependencies. It can generate PostScript (EPS) files and SVG 
-  files. The generated PostScript code is plain [1] and reasonably 
+  Wumpus-Core is a low-level library for generating static 2D 
+  vector pictures, its salient feature is portability due to no 
+  FFI dependencies. It can generate PostScript (EPS) files and SVG 
+  files. The generated PostScript code is plain and reasonably 
   efficient as the use of stack operations, i.e @gsave@ and 
-  @grestore@, is minimized.
+  @grestore@, is minimized. 
   .
-  Wumpus makes pictures from /paths/ and text /labels/. Paths 
+  Although Wumpus-Core only generates vector output, the generated 
+  PostScript can be interpreted by GraphicsMagick or a similar 
+  tool to convert EPS files into bitmap image files (e.g JPEGs).
+  .
+  Wumpus-Core makes pictures from /paths/ and text /labels/. Paths 
   themselves are made from points. The usual affine 
   transformations (rotations, scaling, translations) can be
-  applied to Pictures. Unlike PostScript there is no 
-  notion of a current point, Wumpus builds pictures in a
-  coordinate-free style. 
+  applied to Pictures. Unlike PostScript there is no notion of a 
+  current point, Wumpus-Core builds pictures in a coordinate-free 
+  style. 
   .
   GENERAL DRAWBACKS...
   .
-  For actually drawing pictures, diagrams, etc. Wumpus is very 
-  low-level. There is a supplemantary package @wumpus-basic@ 
+  For actually building pictures, diagrams, etc. Wumpus-Core is 
+  very low-level. There is a supplementary package @Wumpus-Basic@ 
   available that helps create certain types of diagram, but it is
   experimental - functionality is added and dropped between 
   releases, it has no stable API.
   .
-  Some of the design decisions made for @wumpus-core@ are not 
-  sophisticated (e.g. how attributes like colour are handled, 
-  and how the bounding boxes of text labels are calculated), so 
-  Wumpus might be limited compared to other systems. However, 
-  the design permits a fairly simple implementation, which is a 
-  priority. 
+  Some of the design decisions made for Wumpus-Core are not 
+  sophisticated (e.g. how path and text attributes like colour are 
+  handled, and how the bounding boxes of text labels are 
+  calculated), so Wumpus might be limited compared to other 
+  systems. However, the design permits a fairly simple 
+  implementation, which is a priority. 
   .  
-  NOTE version 0.37.0 - there will be no release of Wumpus-Basic
-  to match this release of Wumpus-Core. Wumpus-Basic is 
-  undergoing substantial change to accommodate glyph metrics and
-  thus enable proper text bounding boxes and right and center
-  aligned text. The improvements to Wumpus-Core merit a release
-  so that there is not a large hiatus between the APIs of the 
-  Hackage published latest version and the SVN repository.
+  UPDATING to 0.40.0
   .
+  @Core.Picture@ API change - the path construction function has 
+  changed from @path@ to @primPath@. The type of the path segments
+  has changed, the functions @lineTo@ and @curveTo@ now build
+  @AbsPathSegments@ and @primPath@ consumes @AbsPathSegments@.
   .
-  \[1\] Because the output is simple, straight-line PostScript 
-  code, it is possible to use GraphicsMagick or a similar tool 
-  to convert EPS files generated by Wumpus to many other formats 
-  (bitmaps). 
+  The Text API has changed substantially, however most user code
+  should only need minor changes. The functions @writePS_latin1@, 
+  @writeEPS_latin1@ and @writeSVG_latin1@ have been removed, code 
+  should be changed to use @writePS@, @writeEPS@ and and 
+  @writeSVG@ respectively. These three functions no longer take a 
+  @TextEncoder@ argument as TextEncoders no longer exist.
   .
+  The Font Size API has also changed substantially. It now 
+  exports a more consistent set of metrics (consistent with what 
+  is present in font files - the previous version was derived 
+  from hand measurements). It also adds a margin to bounding box
+  calculations, again this is more consistent with how font files 
+  actually work.
   .
+  The handling of escaped special characters is now more 
+  consistent and the escaping mecahnism has been clarified 
+  (previously the documentation and the implementation were at 
+  odds): PostScript glyph names are delimited between @&@ 
+  (ampersand) and @;@ (semi), Unicode code points are delimited 
+  by @&\#@ (ampersand-hash) and @;@ (semi). Note Wumpus silently 
+  drops mal-formed escape charcters, for robustness this is 
+  preferable to throwing a runtime error, but it does mean the
+  output needs visually checking.
+  .
   Changelog:
   . 
-  0.36.0 to 0.37.0:
+  0.37.0 to 0.40.0: 
   .
-  * The bounding box constructors have been renamed - @bbox@ is 
-    now @boundingBox@ and @obbox@ becomes @oboundingBox@. The 
-    rationale for this change is that the names very cryptic in 
-    the first place and the constructors are used infrequently 
-    when @bbox@ in particular makes a descriptive variable name.
+  * Text handling substantially revised. SVG text output is now 
+    better aligned to Unicode. The encoding tables for PostScript
+    have been re-thought, the previous implementation had some 
+    serious design flaws that should now be rectified.
   .
-  * Changes to the Picture and Primitive types to enable better
-    concatenation which is used heavily by Wumpus-Basic. The 
-    Picture API exposes a new function @primCat@.
+  * The rules for escaping special characters has been clarified.
+    Previously the documentation suggested 
+    @ampersand-name-semicolon@ could be used to escape glyph names
+    however only @ampersand-hash-name-semicolon@ worked.
+    @ampersand-name-semicolon@ is now the correct way. The 
+    ampersand-hash prefix is for numeric literals - 
+    @ampersand-hash-num_literal-semicolon@.
   .
-  * SVG /font delta context/ change - font deltas are now 
-    annotated on Primitives not Pictures. The type of the 
-    function @fontDeltaContext@ in @Core.Picture@ has changed 
-    accordingly.
+  * Versions of the textlabel functions have been added to 
+    @Core.Picture@ for escape-parsed text. It is useful for 
+    higher-level software to escape the text, do some calculations 
+    then render it - going back to un-escaped text for the 
+    rendering would be inefficient.
   .
-  * SVG hyperlink change - hyperlinks no longer group primitives
-    (although a group of primitives can be hyperlinked). The 
-    function @xlinkGroup@ has been removed from @Core.Picture@, 
-    it is replaced by @xlink@. Primitives are now grouped with the
-    function @primGroup@.
+  * The internal representation of paths has changed. They are now 
+    represented as start-point plus list of /relative/ path 
+    segments rather than start-point plus list of absolute path 
+    segments. Using relative path segments makes it cheaper to
+    move paths with @translate@, although calculating the bounding
+    box and rendering to PostScript is more expensive. The 
+    rationale for the change is that to make complex pictures, 
+    paths are potentially moved many times but the other 
+    operations are only performed once.
   .
-  * @Core.Picture@ - the argument order for the function 
-    @rtextlabel@ has been changed, the positions of the angle and 
-    bottom-left corner have been swapped.
+  * Internal change to Primitives and the PrimCTM - ellipses and
+    labels no longer have a point (center or baseline left)
+    as an element in the datatype, the point is now represented 
+    within the PrimCTM.
   .
+  * Name change to @Core.Picture@ API - the path construction 
+    function @path@ has been renamed to @primPath@.
   .
+  * Name change in @Core.FontSize@, the function @textBoundsEnc@
+    has been renamed to @textBoundsEsc@. Wumpus-Core now calls 
+    strings that have been parsed for escape characters 
+    /Escaped Text/ rather than /Encoded Text/.
+  .
+  * Fixed bug where ellipse rotation and scaling calculated the 
+    wrong bounding box.
+  . 
+  * Fixed bug in @illustrateControlPoints@ where the control points
+    were drawn but the original primitive was lost. 
+  .
+  * Added initial support for arbitrary SVG attributes (e.g. 
+    onmouseover handlers) via @annotateGroup@ in @Core.Picture@. 
+    Arbitrary SVG \"defs\" can be written into the defs prologue 
+    by using @writeSVG_defs@ instead of @writeSVG@. This 
+    functionality is mostly untested!
+  .
+  .
 build-type:         Simple
 stability:          unstable
 cabal-version:      >= 1.2
@@ -96,10 +145,12 @@
   demo/AffineTestBase.hs,
   demo/DeltaPic.hs,
   demo/FontMetrics.hs,
+  demo/Hyperlink.hs,
   demo/KernPic.hs,
   demo/LabelPic.hs,
   demo/Latin1Pic.hs,
   demo/MultiPic.hs,
+  demo/TextBBox.hs,
   demo/TransformEllipse.hs,
   demo/TransformPath.hs,
   demo/TransformTextlabel.hs,
@@ -130,10 +181,12 @@
     Wumpus.Core.OutputSVG,
     Wumpus.Core.Picture,
     Wumpus.Core.PtSize,
-    Wumpus.Core.Text.DefaultEncoder,
-    Wumpus.Core.Text.Encoder,
-    Wumpus.Core.Text.Latin1,
-    Wumpus.Core.Text.SymbolFont,
+    Wumpus.Core.Text.Base,
+    Wumpus.Core.Text.GlyphIndices,
+    Wumpus.Core.Text.GlyphNames,
+    Wumpus.Core.Text.Latin1Encoding,
+    Wumpus.Core.Text.StandardEncoding,
+    Wumpus.Core.Text.Symbol,
     Wumpus.Core.VersionNumber,
     Wumpus.Core.WumpusTypes
 
@@ -142,7 +195,6 @@
     Wumpus.Core.PictureInternal,
     Wumpus.Core.PostScriptDoc,
     Wumpus.Core.SVGDoc,
-    Wumpus.Core.Text.TextInternal,
     Wumpus.Core.TrafoInternal,
     Wumpus.Core.Utils.Common,
     Wumpus.Core.Utils.JoinList,
