wumpus-core 0.37.0 → 0.40.0
raw patch · 44 files changed
+10208/−1641 lines, 44 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Wumpus.Core.FontSize: courier48_ascender_height :: PtSize
- Wumpus.Core.FontSize: courier48_descender_depth :: PtSize
- Wumpus.Core.FontSize: courier48_height :: PtSize
- Wumpus.Core.FontSize: courier48_numeral_height :: PtSize
- Wumpus.Core.FontSize: courier48_spacer_width :: PtSize
- Wumpus.Core.FontSize: courier48_width :: PtSize
- Wumpus.Core.FontSize: courier48_xheight :: PtSize
- Wumpus.Core.FontSize: numeralHeight :: FontSize -> PtSize
- Wumpus.Core.FontSize: spacerWidth :: FontSize -> PtSize
- Wumpus.Core.FontSize: textBoundsEnc :: (Num u, Ord u, FromPtSize u) => FontSize -> Point2 u -> EncodedText -> BoundingBox u
- Wumpus.Core.FontSize: textHeight :: FontSize -> PtSize
- Wumpus.Core.FontSize: widthAt48pt :: CharCount -> PtSize
- Wumpus.Core.GraphicProps: font_enc_name :: FontFace -> FontEncoderName
- Wumpus.Core.GraphicProps: font_name :: FontFace -> String
- Wumpus.Core.OutputPostScript: writeEPS_latin1 :: (Real u, Floating u, PSUnit u) => FilePath -> Picture u -> IO ()
- Wumpus.Core.OutputPostScript: writePS_latin1 :: (Real u, Floating u, PSUnit u) => FilePath -> [Picture u] -> IO ()
- Wumpus.Core.OutputSVG: writeSVG_latin1 :: (Real u, Floating u, PSUnit u) => FilePath -> Picture u -> IO ()
- Wumpus.Core.Picture: path :: Point2 u -> [PrimPathSegment u] -> PrimPath u
- Wumpus.Core.Text.DefaultEncoder: defaultEncoder :: TextEncoder
- Wumpus.Core.Text.Encoder: FontEncoder :: PostScriptLookup -> SVGLookup -> GlyphName -> CharCode -> FontEncoder
- Wumpus.Core.Text.Encoder: FontEncoderName :: Word16 -> FontEncoderName
- Wumpus.Core.Text.Encoder: TextEncoder :: String -> Map FontEncoderName FontEncoder -> TextEncoder
- Wumpus.Core.Text.Encoder: data FontEncoder
- Wumpus.Core.Text.Encoder: data TextEncoder
- Wumpus.Core.Text.Encoder: font_encoder_map :: TextEncoder -> Map FontEncoderName FontEncoder
- Wumpus.Core.Text.Encoder: getFontEncoderName :: FontEncoderName -> Word16
- Wumpus.Core.Text.Encoder: instance Eq FontEncoderName
- Wumpus.Core.Text.Encoder: instance Ord FontEncoderName
- Wumpus.Core.Text.Encoder: instance Show FontEncoderName
- Wumpus.Core.Text.Encoder: newtype FontEncoderName
- Wumpus.Core.Text.Encoder: ps_fallback :: FontEncoder -> GlyphName
- Wumpus.Core.Text.Encoder: ps_lookup :: FontEncoder -> PostScriptLookup
- Wumpus.Core.Text.Encoder: svg_encoding_name :: TextEncoder -> String
- Wumpus.Core.Text.Encoder: svg_fallback :: FontEncoder -> CharCode
- Wumpus.Core.Text.Encoder: svg_lookup :: FontEncoder -> SVGLookup
- Wumpus.Core.Text.Encoder: type CharCode = Int
- Wumpus.Core.Text.Encoder: type GlyphName = String
- Wumpus.Core.Text.Encoder: type PostScriptLookup = CharCode -> Maybe GlyphName
- Wumpus.Core.Text.Encoder: type SVGLookup = GlyphName -> Maybe CharCode
- Wumpus.Core.Text.Latin1: latin1FontAll :: [(GlyphName, CharCode)]
- Wumpus.Core.Text.Latin1: latin1FontEncoder :: FontEncoder
- Wumpus.Core.Text.Latin1: latin1_font_encoder :: FontEncoderName
- Wumpus.Core.Text.SymbolFont: symbolFontAll :: [(GlyphName, CharCode)]
- Wumpus.Core.Text.SymbolFont: symbolFontEncoder :: FontEncoder
- Wumpus.Core.Text.SymbolFont: symbol_font_encoder :: FontEncoderName
+ Wumpus.Core.BoundingBox: boundaryCornerList :: BoundingBox u -> [Point2 u]
+ Wumpus.Core.FontSize: ascenderHeight :: FontSize -> PtSize
+ Wumpus.Core.FontSize: capHeight :: FontSize -> PtSize
+ Wumpus.Core.FontSize: data PtScale
+ Wumpus.Core.FontSize: instance Eq PtScale
+ Wumpus.Core.FontSize: instance Floating PtScale
+ Wumpus.Core.FontSize: instance Fractional PtScale
+ Wumpus.Core.FontSize: instance Num PtScale
+ Wumpus.Core.FontSize: instance Ord PtScale
+ Wumpus.Core.FontSize: instance Real PtScale
+ Wumpus.Core.FontSize: instance RealFloat PtScale
+ Wumpus.Core.FontSize: instance RealFrac PtScale
+ Wumpus.Core.FontSize: instance Show PtScale
+ Wumpus.Core.FontSize: mono_ascender :: PtScale
+ Wumpus.Core.FontSize: mono_cap_height :: PtScale
+ Wumpus.Core.FontSize: mono_descender :: PtScale
+ Wumpus.Core.FontSize: mono_left_margin :: PtScale
+ Wumpus.Core.FontSize: mono_right_margin :: PtScale
+ Wumpus.Core.FontSize: mono_width :: PtScale
+ Wumpus.Core.FontSize: mono_x_height :: PtScale
+ Wumpus.Core.FontSize: ptSizeScale :: PtScale -> PtSize -> PtSize
+ Wumpus.Core.FontSize: textBoundsEsc :: (Num u, Ord u, FromPtSize u) => FontSize -> Point2 u -> EscapedText -> BoundingBox u
+ Wumpus.Core.FontSize: totalCharHeight :: FontSize -> PtSize
+ Wumpus.Core.Geometry: vreverse :: Num u => Vec2 u -> Vec2 u
+ Wumpus.Core.GraphicProps: font_enc_vector :: FontFace -> EncodingVector
+ Wumpus.Core.GraphicProps: ps_font_name :: FontFace -> String
+ Wumpus.Core.OutputSVG: writeSVG_defs :: (Real u, Floating u, PSUnit u) => FilePath -> String -> Picture u -> IO ()
+ Wumpus.Core.Picture: annotateGroup :: [SvgAttr] -> Primitive u -> Primitive u
+ Wumpus.Core.Picture: annotateXLink :: XLink -> [SvgAttr] -> Primitive u -> Primitive u
+ Wumpus.Core.Picture: escapedlabel :: Num u => RGBi -> FontAttr -> EscapedText -> Point2 u -> Primitive u
+ Wumpus.Core.Picture: primPath :: Num u => Point2 u -> [AbsPathSegment u] -> PrimPath u
+ Wumpus.Core.Picture: rescapedlabel :: Num u => RGBi -> FontAttr -> EscapedText -> Point2 u -> Radian -> Primitive u
+ Wumpus.Core.Picture: svgattr :: String -> String -> SvgAttr
+ Wumpus.Core.Picture: zescapedlabel :: Num u => EscapedText -> Point2 u -> Primitive u
+ Wumpus.Core.Text.Base: CharEscInt :: Int -> EscapedChar
+ Wumpus.Core.Text.Base: CharEscName :: String -> EscapedChar
+ Wumpus.Core.Text.Base: CharLiteral :: Char -> EscapedChar
+ Wumpus.Core.Text.Base: EscapedText :: [EscapedChar] -> EscapedText
+ Wumpus.Core.Text.Base: data EscapedChar
+ Wumpus.Core.Text.Base: escapeString :: String -> EscapedText
+ Wumpus.Core.Text.Base: getEscapedText :: EscapedText -> [EscapedChar]
+ Wumpus.Core.Text.Base: instance Eq EscapedChar
+ Wumpus.Core.Text.Base: instance Eq EscapedText
+ Wumpus.Core.Text.Base: instance Format EscapedChar
+ Wumpus.Core.Text.Base: instance Format EscapedText
+ Wumpus.Core.Text.Base: instance Show EscapedChar
+ Wumpus.Core.Text.Base: instance Show EscapedText
+ Wumpus.Core.Text.Base: newtype EscapedText
+ Wumpus.Core.Text.Base: textLength :: EscapedText -> Int
+ Wumpus.Core.Text.Base: type EncodingVector = IntMap String
+ Wumpus.Core.Text.GlyphIndices: ps_glyph_indices :: Map String Int
+ Wumpus.Core.Text.GlyphNames: ps_glyph_names :: IntMap String
+ Wumpus.Core.Text.Latin1Encoding: latin1_encoding :: EncodingVector
+ Wumpus.Core.Text.StandardEncoding: standard_encoding :: EncodingVector
+ Wumpus.Core.Text.Symbol: symbol_encoding :: EncodingVector
- Wumpus.Core.GraphicProps: FontFace :: String -> String -> SVGFontStyle -> FontEncoderName -> FontFace
+ Wumpus.Core.GraphicProps: FontFace :: String -> String -> SVGFontStyle -> EncodingVector -> FontFace
- Wumpus.Core.OutputPostScript: writeEPS :: (Real u, Floating u, PSUnit u) => FilePath -> TextEncoder -> Picture u -> IO ()
+ Wumpus.Core.OutputPostScript: writeEPS :: (Real u, Floating u, PSUnit u) => FilePath -> Picture u -> IO ()
- Wumpus.Core.OutputPostScript: writePS :: (Real u, Floating u, PSUnit u) => FilePath -> TextEncoder -> [Picture u] -> IO ()
+ Wumpus.Core.OutputPostScript: writePS :: (Real u, Floating u, PSUnit u) => FilePath -> [Picture u] -> IO ()
- Wumpus.Core.OutputSVG: writeSVG :: (Real u, Floating u, PSUnit u) => FilePath -> TextEncoder -> Picture u -> IO ()
+ Wumpus.Core.OutputSVG: writeSVG :: (Real u, Floating u, PSUnit u) => FilePath -> Picture u -> IO ()
- Wumpus.Core.Picture: curveTo :: Point2 u -> Point2 u -> Point2 u -> PrimPathSegment u
+ Wumpus.Core.Picture: curveTo :: Point2 u -> Point2 u -> Point2 u -> AbsPathSegment u
- Wumpus.Core.Picture: curvedPath :: [Point2 u] -> PrimPath u
+ Wumpus.Core.Picture: curvedPath :: Num u => [Point2 u] -> PrimPath u
- Wumpus.Core.Picture: lineTo :: Point2 u -> PrimPathSegment u
+ Wumpus.Core.Picture: lineTo :: Point2 u -> AbsPathSegment u
- Wumpus.Core.Picture: vertexPath :: [Point2 u] -> PrimPath u
+ Wumpus.Core.Picture: vertexPath :: Num u => [Point2 u] -> PrimPath u
- Wumpus.Core.WumpusTypes: type KerningChar u = (u, EncodedChar)
+ Wumpus.Core.WumpusTypes: type KerningChar u = (u, EscapedChar)
Files
- demo/AffineTestBase.hs +14/−14
- demo/DeltaPic.hs +4/−4
- demo/FontMetrics.hs +11/−21
- demo/Hyperlink.hs +21/−0
- demo/KernPic.hs +33/−20
- demo/LabelPic.hs +17/−16
- demo/Latin1Pic.hs +28/−4
- demo/MultiPic.hs +2/−2
- demo/TextBBox.hs +57/−0
- demo/TransformEllipse.hs +13/−12
- demo/TransformPath.hs +14/−13
- demo/TransformTextlabel.hs +13/−12
- demo/ZOrderPic.hs +2/−2
- doc-src/Guide.lhs +70/−43
- doc-src/WorldFrame.hs +4/−4
- doc/Guide.pdf binary
- src/Wumpus/Core.hs +17/−9
- src/Wumpus/Core/BoundingBox.hs +23/−2
- src/Wumpus/Core/FontSize.hs +146/−130
- src/Wumpus/Core/Geometry.hs +7/−0
- src/Wumpus/Core/GraphicProps.hs +18/−9
- src/Wumpus/Core/OutputPostScript.hs +149/−134
- src/Wumpus/Core/OutputSVG.hs +114/−90
- src/Wumpus/Core/PageTranslation.hs +4/−5
- src/Wumpus/Core/Picture.hs +151/−48
- src/Wumpus/Core/PictureInternal.hs +151/−92
- src/Wumpus/Core/PostScriptDoc.hs +13/−6
- src/Wumpus/Core/SVGDoc.hs +17/−5
- src/Wumpus/Core/Text/Base.hs +229/−0
- src/Wumpus/Core/Text/DefaultEncoder.hs +0/−44
- src/Wumpus/Core/Text/Encoder.hs +0/−143
- src/Wumpus/Core/Text/GlyphIndices.lhs +4314/−0
- src/Wumpus/Core/Text/GlyphNames.lhs +3714/−0
- src/Wumpus/Core/Text/Latin1.hs +0/−257
- src/Wumpus/Core/Text/Latin1Encoding.lhs +235/−0
- src/Wumpus/Core/Text/StandardEncoding.lhs +185/−0
- src/Wumpus/Core/Text/Symbol.lhs +225/−0
- src/Wumpus/Core/Text/SymbolFont.hs +0/−249
- src/Wumpus/Core/Text/TextInternal.hs +0/−173
- src/Wumpus/Core/TrafoInternal.hs +69/−21
- src/Wumpus/Core/Utils/FormatCombinators.hs +9/−0
- src/Wumpus/Core/VersionNumber.hs +2/−2
- src/Wumpus/Core/WumpusTypes.hs +6/−0
- wumpus-core.cabal +107/−55
demo/AffineTestBase.hs view
@@ -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) + ]
demo/DeltaPic.hs view
@@ -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.
demo/FontMetrics.hs view
@@ -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 =
+ demo/Hyperlink.hs view
@@ -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"
demo/KernPic.hs view
@@ -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
demo/LabelPic.hs view
@@ -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)
demo/Latin1Pic.hs view
@@ -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ère" (P2 0 60)- , helveticaLabel "myst&#egrave;re" (P2 0 40)+ , helveticaLabel "mystère" (P2 0 40) -- no HASH! , helveticaLabel "myst�o350;re" (P2 0 20) , helveticaLabel "myst�XE8;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)
demo/MultiPic.hs view
@@ -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
+ demo/TextBBox.hs view
@@ -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++
demo/TransformEllipse.hs view
@@ -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]
demo/TransformPath.hs view
@@ -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]
demo/TransformTextlabel.hs view
@@ -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]
demo/ZOrderPic.hs view
@@ -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 $
doc-src/Guide.lhs view
@@ -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}
doc-src/WorldFrame.hs view
@@ -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}
doc/Guide.pdf view
binary file changed (60184 → 62287 bytes)
src/Wumpus/Core.hs view
@@ -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
src/Wumpus/Core/BoundingBox.hs view
@@ -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? --
src/Wumpus/Core/FontSize.hs view
@@ -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)
src/Wumpus/Core/Geometry.hs view
@@ -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.
src/Wumpus/Core/GraphicProps.hs view
@@ -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 }
src/Wumpus/Core/OutputPostScript.hs view
@@ -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
src/Wumpus/Core/OutputSVG.hs view
@@ -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
src/Wumpus/Core/PageTranslation.hs view
@@ -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
src/Wumpus/Core/Picture.hs view
@@ -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)
src/Wumpus/Core/PictureInternal.hs view
@@ -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
src/Wumpus/Core/PostScriptDoc.hs view
@@ -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 @ --
src/Wumpus/Core/SVGDoc.hs view
@@ -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\> @ --
+ src/Wumpus/Core/Text/Base.hs view
@@ -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 & 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 &ersand; 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�o350;re+--+-- > myst�xE8;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è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.:+--+-- > è+--+-- 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
− src/Wumpus/Core/Text/DefaultEncoder.hs
@@ -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 --
− src/Wumpus/Core/Text/Encoder.hs
@@ -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�o350;re------ > myst�xE8;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è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.--
+ src/Wumpus/Core/Text/GlyphIndices.lhs view
@@ -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 ) +> ]
+ src/Wumpus/Core/Text/GlyphNames.lhs view
@@ -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" ) +> ]
− src/Wumpus/Core/Text/Latin1.hs
@@ -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)- ]
+ src/Wumpus/Core/Text/Latin1Encoding.lhs view
@@ -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" ) +> ]
+ src/Wumpus/Core/Text/StandardEncoding.lhs view
@@ -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" ) +> ]
+ src/Wumpus/Core/Text/Symbol.lhs view
@@ -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" ) +> ]
− src/Wumpus/Core/Text/SymbolFont.hs
@@ -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)- ]
− src/Wumpus/Core/Text/TextInternal.hs
@@ -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.:------ > è------ Note, HTML entity names do not seem to be supported in SVG,--- @ è @ 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 [] = []-
src/Wumpus/Core/TrafoInternal.hs view
@@ -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) --------------------------------------------------------------------------------
src/Wumpus/Core/Utils/FormatCombinators.hs view
@@ -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 = (<>)
src/Wumpus/Core/VersionNumber.hs view
@@ -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)
src/Wumpus/Core/WumpusTypes.hs view
@@ -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. -- --------------------------------------------------------------------------------
wumpus-core.cabal view
@@ -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,