content: {-# Language BangPatterns, QuasiQuotes, OverloadedStrings #-}
  {-|
  Module      : Digraphs
  Description : Character mnemonics
  Copyright   : (c) Eric Mertens, 2016
  License     : ISC
  Maintainer  : emertens@gmail.com
  
  This module provides an implementation of /digraphs/ as implemented
  in Vim and as specified in RFC 1345 (2-character only).
  
  <https://tools.ietf.org/html/rfc1345>
  <http://vimdoc.sourceforge.net/htmldoc/digraph.html>
  
  -}
  module Digraphs
    ( Digraph(..)
    , lookupDigraph
    , digraphs
    ) where
  
  import DigraphQuote (digraphTable)
  import Data.Text (Text)
  import Data.Text qualified as Text
  
  -- | Two-character key for digraph lookup
  data Digraph = Digraph !Char !Char
    deriving (Eq, Ord, Read, Show)
  
  -- | States for the digraph lookup state machine
  data St
    = Ready -- ^ ready to match two-character name
    | Match -- ^ first character matched, ready for second
    | Found -- ^ both characters matched, return the next
    | Skip2 -- ^ skip the next two characters
    | Skip1 -- ^ skip the next character
  
  -- | Find the entry in the digraph table give a two-character
  -- key and return the matched value.
  lookupDigraph :: Digraph -> Maybe Char
  lookupDigraph (Digraph x y) = Text.foldr step finish digraphs Ready
    where
      finish _st = Nothing
      step z k st =
        case st of
          Ready | x == z    -> k Match
                | otherwise -> k Skip2
          Match | y == z    -> k Found
                | otherwise -> k Skip1
          Skip1             -> k Ready
          Skip2             -> k Skip1
          Found             -> Just z
  
  ------------------------------------------------------------------------
  
  -- These are explicitly prohibited by the IRC RFC
  -- NU U+0000 -- NULL (NUL)
  -- LF U+000a -- LINE FEED (LF)
  -- CR U+000d -- CARRIAGE RETURN (CR)
  
  digraphs :: Text
  digraphs = [digraphTable|
    SH U+0001 -- START OF HEADING (SOH)
    SX U+0002 -- START OF TEXT (STX)
    EX U+0003 -- END OF TEXT (ETX)
    ET U+0004 -- END OF TRANSMISSION (EOT)
    EQ U+0005 -- ENQUIRY (ENQ)
    AK U+0006 -- ACKNOWLEDGE (ACK)
    BL U+0007 -- BELL (BEL)
    BS U+0008 -- BACKSPACE (BS)
    HT U+0009 -- CHARACTER TABULATION (HT)
    VT U+000B -- LINE TABULATION (VT)
    FF U+000C -- FORM FEED (FF)
    SO U+000E -- SHIFT OUT (SO)
    SI U+000F -- SHIFT IN (SI)
    DL U+0010 -- DATALINK ESCAPE (DLE)
    D1 U+0011 -- DEVICE CONTROL ONE (DC1)
    D2 U+0012 -- DEVICE CONTROL TWO (DC2)
    D3 U+0013 -- DEVICE CONTROL THREE (DC3)
    D4 U+0014 -- DEVICE CONTROL FOUR (DC4)
    NK U+0015 -- NEGATIVE ACKNOWLEDGE (NAK)
    SY U+0016 -- SYNCHRONOUS IDLE (SYN)
    EB U+0017 -- END OF TRANSMISSION BLOCK (ETB)
    CN U+0018 -- CANCEL (CAN)
    EM U+0019 -- END OF MEDIUM (EM)
    SB U+001A -- SUBSTITUTE (SUB)
    EC U+001B -- ESCAPE (ESC)
    FS U+001C -- FILE SEPARATOR (IS4)
    GS U+001D -- GROUP SEPARATOR (IS3)
    RS U+001E -- RECORD SEPARATOR (IS2)
    US U+001F -- UNIT SEPARATOR (IS1)
    SP U+0020 -- SPACE
    Nb U+0023 -- NUMBER SIGN
    DO U+0024 -- DOLLAR SIGN
    At U+0040 -- COMMERCIAL AT
    <( U+005B -- LEFT SQUARE BRACKET
    // U+005C -- REVERSE SOLIDUS
    )> U+005D -- RIGHT SQUARE BRACKET
    '> U+005E -- CIRCUMFLEX ACCENT
    '! U+0060 -- GRAVE ACCENT
    (! U+007B -- LEFT CURLY BRACKET
    !! U+007C -- VERTICAL LINE
    !) U+007D -- RIGHT CURLY BRACKET
    '? U+007E -- TILDE
    DT U+007F -- DELETE (DEL)
    PA U+0080 -- PADDING CHARACTER (PAD)
    HO U+0081 -- HIGH OCTET PRESET (HOP)
    BH U+0082 -- BREAK PERMITTED HERE (BPH)
    NH U+0083 -- NO BREAK HERE (NBH)
    IN U+0084 -- INDEX (IND)
    NL U+0085 -- NEXT LINE (NEL)
    SA U+0086 -- START OF SELECTED AREA (SSA)
    ES U+0087 -- END OF SELECTED AREA (ESA)
    HS U+0088 -- CHARACTER TABULATION SET (HTS)
    HJ U+0089 -- CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
    VS U+008A -- LINE TABULATION SET (VTS)
    PD U+008B -- PARTIAL LINE FORWARD (PLD)
    PU U+008C -- PARTIAL LINE BACKWARD (PLU)
    RI U+008D -- REVERSE LINE FEED (RI)
    S2 U+008E -- SINGLE-SHIFT TWO (SS2)
    S3 U+008F -- SINGLE-SHIFT THREE (SS3)
    DC U+0090 -- DEVICE CONTROL STRING (DCS)
    P1 U+0091 -- PRIVATE USE ONE (PU1)
    P2 U+0092 -- PRIVATE USE TWO (PU2)
    TS U+0093 -- SET TRANSMIT STATE (STS)
    CC U+0094 -- CANCEL CHARACTER (CCH)
    MW U+0095 -- MESSAGE WAITING (MW)
    SG U+0096 -- START OF GUARDED AREA (SPA)
    EG U+0097 -- END OF GUARDED AREA (EPA)
    SS U+0098 -- START OF STRING (SOS)
    GC U+0099 -- SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
    SC U+009A -- SINGLE CHARACTER INTRODUCER (SCI)
    CI U+009B -- CONTROL SEQUENCE INTRODUCER (CSI)
    ST U+009C -- STRING TERMINATOR (ST)
    OC U+009D -- OPERATING SYSTEM COMMAND (OSC)
    PM U+009E -- PRIVACY MESSAGE (PM)
    AC U+009F -- APPLICATION PROGRAM COMMAND (APC)
    NS U+00A0 -- NO-BREAK SPACE
    !I U+00A1 -- INVERTED EXCLAMATION MARK
    Ct U+00A2 -- CENT SIGN
    Pd U+00A3 -- POUND SIGN
    Cu U+00A4 -- CURRENCY SIGN
    Ye U+00A5 -- YEN SIGN
    BB U+00A6 -- BROKEN BAR
    SE U+00A7 -- SECTION SIGN
    ': U+00A8 -- DIAERESIS
    Co U+00A9 -- COPYRIGHT SIGN
    -a U+00AA -- FEMININE ORDINAL INDICATOR
    << U+00AB -- LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
    NO U+00AC -- NOT SIGN
    -- U+00AD -- SOFT HYPHEN
    Rg U+00AE -- REGISTERED SIGN
    'm U+00AF -- MACRON
    DG U+00B0 -- DEGREE SIGN
    +- U+00B1 -- PLUS-MINUS SIGN
    2S U+00B2 -- SUPERSCRIPT TWO
    3S U+00B3 -- SUPERSCRIPT THREE
    '' U+00B4 -- ACUTE ACCENT
    My U+00B5 -- MICRO SIGN
    PI U+00B6 -- PILCROW SIGN
    .M U+00B7 -- MIDDLE DOT
    ', U+00B8 -- CEDILLA
    1S U+00B9 -- SUPERSCRIPT ONE
    -o U+00BA -- MASCULINE ORDINAL INDICATOR
    >> U+00BB -- RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
    14 U+00BC -- VULGAR FRACTION ONE QUARTER
    12 U+00BD -- VULGAR FRACTION ONE HALF
    34 U+00BE -- VULGAR FRACTION THREE QUARTERS
    ?I U+00BF -- INVERTED QUESTION MARK
    A! U+00C0 -- LATIN CAPITAL LETTER A WITH GRAVE
    A' U+00C1 -- LATIN CAPITAL LETTER A WITH ACUTE
    A> U+00C2 -- LATIN CAPITAL LETTER A WITH CIRCUMFLEX
    A? U+00C3 -- LATIN CAPITAL LETTER A WITH TILDE
    A: U+00C4 -- LATIN CAPITAL LETTER A WITH DIAERESIS
    AA U+00C5 -- LATIN CAPITAL LETTER A WITH RING ABOVE
    AE U+00C6 -- LATIN CAPITAL LETTER AE
    C, U+00C7 -- LATIN CAPITAL LETTER C WITH CEDILLA
    E! U+00C8 -- LATIN CAPITAL LETTER E WITH GRAVE
    E' U+00C9 -- LATIN CAPITAL LETTER E WITH ACUTE
    E> U+00CA -- LATIN CAPITAL LETTER E WITH CIRCUMFLEX
    E: U+00CB -- LATIN CAPITAL LETTER E WITH DIAERESIS
    I! U+00CC -- LATIN CAPITAL LETTER I WITH GRAVE
    I' U+00CD -- LATIN CAPITAL LETTER I WITH ACUTE
    I> U+00CE -- LATIN CAPITAL LETTER I WITH CIRCUMFLEX
    I: U+00CF -- LATIN CAPITAL LETTER I WITH DIAERESIS
    D- U+00D0 -- LATIN CAPITAL LETTER ETH (Icelandic)
    N? U+00D1 -- LATIN CAPITAL LETTER N WITH TILDE
    O! U+00D2 -- LATIN CAPITAL LETTER O WITH GRAVE
    O' U+00D3 -- LATIN CAPITAL LETTER O WITH ACUTE
    O> U+00D4 -- LATIN CAPITAL LETTER O WITH CIRCUMFLEX
    O? U+00D5 -- LATIN CAPITAL LETTER O WITH TILDE
    O: U+00D6 -- LATIN CAPITAL LETTER O WITH DIAERESIS
    *X U+00D7 -- MULTIPLICATION SIGN
    O/ U+00D8 -- LATIN CAPITAL LETTER O WITH STROKE
    U! U+00D9 -- LATIN CAPITAL LETTER U WITH GRAVE
    U' U+00DA -- LATIN CAPITAL LETTER U WITH ACUTE
    U> U+00DB -- LATIN CAPITAL LETTER U WITH CIRCUMFLEX
    U: U+00DC -- LATIN CAPITAL LETTER U WITH DIAERESIS
    Y' U+00DD -- LATIN CAPITAL LETTER Y WITH ACUTE
    TH U+00DE -- LATIN CAPITAL LETTER THORN (Icelandic)
    ss U+00DF -- LATIN SMALL LETTER SHARP S (German)
    a! U+00E0 -- LATIN SMALL LETTER A WITH GRAVE
    a' U+00E1 -- LATIN SMALL LETTER A WITH ACUTE
    a> U+00E2 -- LATIN SMALL LETTER A WITH CIRCUMFLEX
    a? U+00E3 -- LATIN SMALL LETTER A WITH TILDE
    a: U+00E4 -- LATIN SMALL LETTER A WITH DIAERESIS
    aa U+00E5 -- LATIN SMALL LETTER A WITH RING ABOVE
    ae U+00E6 -- LATIN SMALL LETTER AE
    c, U+00E7 -- LATIN SMALL LETTER C WITH CEDILLA
    e! U+00E8 -- LATIN SMALL LETTER E WITH GRAVE
    e' U+00E9 -- LATIN SMALL LETTER E WITH ACUTE
    e> U+00EA -- LATIN SMALL LETTER E WITH CIRCUMFLEX
    e: U+00EB -- LATIN SMALL LETTER E WITH DIAERESIS
    i! U+00EC -- LATIN SMALL LETTER I WITH GRAVE
    i' U+00ED -- LATIN SMALL LETTER I WITH ACUTE
    i> U+00EE -- LATIN SMALL LETTER I WITH CIRCUMFLEX
    i: U+00EF -- LATIN SMALL LETTER I WITH DIAERESIS
    d- U+00F0 -- LATIN SMALL LETTER ETH (Icelandic)
    n? U+00F1 -- LATIN SMALL LETTER N WITH TILDE
    o! U+00F2 -- LATIN SMALL LETTER O WITH GRAVE
    o' U+00F3 -- LATIN SMALL LETTER O WITH ACUTE
    o> U+00F4 -- LATIN SMALL LETTER O WITH CIRCUMFLEX
    o? U+00F5 -- LATIN SMALL LETTER O WITH TILDE
    o: U+00F6 -- LATIN SMALL LETTER O WITH DIAERESIS
    -: U+00F7 -- DIVISION SIGN
    o/ U+00F8 -- LATIN SMALL LETTER O WITH STROKE
    u! U+00F9 -- LATIN SMALL LETTER U WITH GRAVE
    u' U+00FA -- LATIN SMALL LETTER U WITH ACUTE
    u> U+00FB -- LATIN SMALL LETTER U WITH CIRCUMFLEX
    u: U+00FC -- LATIN SMALL LETTER U WITH DIAERESIS
    y' U+00FD -- LATIN SMALL LETTER Y WITH ACUTE
    th U+00FE -- LATIN SMALL LETTER THORN (Icelandic)
    y: U+00FF -- LATIN SMALL LETTER Y WITH DIAERESIS
    A- U+0100 -- LATIN CAPITAL LETTER A WITH MACRON
    a- U+0101 -- LATIN SMALL LETTER A WITH MACRON
    A( U+0102 -- LATIN CAPITAL LETTER A WITH BREVE
    a( U+0103 -- LATIN SMALL LETTER A WITH BREVE
    A; U+0104 -- LATIN CAPITAL LETTER A WITH OGONEK
    a; U+0105 -- LATIN SMALL LETTER A WITH OGONEK
    C' U+0106 -- LATIN CAPITAL LETTER C WITH ACUTE
    c' U+0107 -- LATIN SMALL LETTER C WITH ACUTE
    C> U+0108 -- LATIN CAPITAL LETTER C WITH CIRCUMFLEX
    c> U+0109 -- LATIN SMALL LETTER C WITH CIRCUMFLEX
    C. U+010A -- LATIN CAPITAL LETTER C WITH DOT ABOVE
    c. U+010B -- LATIN SMALL LETTER C WITH DOT ABOVE
    C< U+010C -- LATIN CAPITAL LETTER C WITH CARON
    c< U+010D -- LATIN SMALL LETTER C WITH CARON
    D< U+010E -- LATIN CAPITAL LETTER D WITH CARON
    d< U+010F -- LATIN SMALL LETTER D WITH CARON
    D/ U+0110 -- LATIN CAPITAL LETTER D WITH STROKE
    d/ U+0111 -- LATIN SMALL LETTER D WITH STROKE
    E- U+0112 -- LATIN CAPITAL LETTER E WITH MACRON
    e- U+0113 -- LATIN SMALL LETTER E WITH MACRON
    E( U+0114 -- LATIN CAPITAL LETTER E WITH BREVE
    e( U+0115 -- LATIN SMALL LETTER E WITH BREVE
    E. U+0116 -- LATIN CAPITAL LETTER E WITH DOT ABOVE
    e. U+0117 -- LATIN SMALL LETTER E WITH DOT ABOVE
    E; U+0118 -- LATIN CAPITAL LETTER E WITH OGONEK
    e; U+0119 -- LATIN SMALL LETTER E WITH OGONEK
    E< U+011A -- LATIN CAPITAL LETTER E WITH CARON
    e< U+011B -- LATIN SMALL LETTER E WITH CARON
    G> U+011C -- LATIN CAPITAL LETTER G WITH CIRCUMFLEX
    g> U+011D -- LATIN SMALL LETTER G WITH CIRCUMFLEX
    G( U+011E -- LATIN CAPITAL LETTER G WITH BREVE
    g( U+011F -- LATIN SMALL LETTER G WITH BREVE
    G. U+0120 -- LATIN CAPITAL LETTER G WITH DOT ABOVE
    g. U+0121 -- LATIN SMALL LETTER G WITH DOT ABOVE
    G, U+0122 -- LATIN CAPITAL LETTER G WITH CEDILLA
    g, U+0123 -- LATIN SMALL LETTER G WITH CEDILLA
    H> U+0124 -- LATIN CAPITAL LETTER H WITH CIRCUMFLEX
    h> U+0125 -- LATIN SMALL LETTER H WITH CIRCUMFLEX
    H/ U+0126 -- LATIN CAPITAL LETTER H WITH STROKE
    h/ U+0127 -- LATIN SMALL LETTER H WITH STROKE
    I? U+0128 -- LATIN CAPITAL LETTER I WITH TILDE
    i? U+0129 -- LATIN SMALL LETTER I WITH TILDE
    I- U+012A -- LATIN CAPITAL LETTER I WITH MACRON
    i- U+012B -- LATIN SMALL LETTER I WITH MACRON
    I( U+012C -- LATIN CAPITAL LETTER I WITH BREVE
    i( U+012D -- LATIN SMALL LETTER I WITH BREVE
    I; U+012E -- LATIN CAPITAL LETTER I WITH OGONEK
    i; U+012F -- LATIN SMALL LETTER I WITH OGONEK
    I. U+0130 -- LATIN CAPITAL LETTER I WITH DOT ABOVE
    i. U+0131 -- LATIN SMALL LETTER DOTLESS I
    IJ U+0132 -- LATIN CAPITAL LIGATURE IJ
    ij U+0133 -- LATIN SMALL LIGATURE IJ
    J> U+0134 -- LATIN CAPITAL LETTER J WITH CIRCUMFLEX
    j> U+0135 -- LATIN SMALL LETTER J WITH CIRCUMFLEX
    K, U+0136 -- LATIN CAPITAL LETTER K WITH CEDILLA
    k, U+0137 -- LATIN SMALL LETTER K WITH CEDILLA
    kk U+0138 -- LATIN SMALL LETTER KRA
    L' U+0139 -- LATIN CAPITAL LETTER L WITH ACUTE
    l' U+013A -- LATIN SMALL LETTER L WITH ACUTE
    L, U+013B -- LATIN CAPITAL LETTER L WITH CEDILLA
    l, U+013C -- LATIN SMALL LETTER L WITH CEDILLA
    L< U+013D -- LATIN CAPITAL LETTER L WITH CARON
    l< U+013E -- LATIN SMALL LETTER L WITH CARON
    L. U+013F -- LATIN CAPITAL LETTER L WITH MIDDLE DOT
    l. U+0140 -- LATIN SMALL LETTER L WITH MIDDLE DOT
    L/ U+0141 -- LATIN CAPITAL LETTER L WITH STROKE
    l/ U+0142 -- LATIN SMALL LETTER L WITH STROKE
    N' U+0143 -- LATIN CAPITAL LETTER N WITH ACUTE `
    n' U+0144 -- LATIN SMALL LETTER N WITH ACUTE `
    N, U+0145 -- LATIN CAPITAL LETTER N WITH CEDILLA `
    n, U+0146 -- LATIN SMALL LETTER N WITH CEDILLA `
    N< U+0147 -- LATIN CAPITAL LETTER N WITH CARON `
    n< U+0148 -- LATIN SMALL LETTER N WITH CARON `
    'n U+0149 -- LATIN SMALL LETTER N PRECEDED BY APOSTROPHE `
    NG U+014A -- LATIN CAPITAL LETTER ENG
    ng U+014B -- LATIN SMALL LETTER ENG
    O- U+014C -- LATIN CAPITAL LETTER O WITH MACRON
    o- U+014D -- LATIN SMALL LETTER O WITH MACRON
    O( U+014E -- LATIN CAPITAL LETTER O WITH BREVE
    o( U+014F -- LATIN SMALL LETTER O WITH BREVE
    O" U+0150 -- LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
    o" U+0151 -- LATIN SMALL LETTER O WITH DOUBLE ACUTE
    OE U+0152 -- LATIN CAPITAL LIGATURE OE
    oe U+0153 -- LATIN SMALL LIGATURE OE
    R' U+0154 -- LATIN CAPITAL LETTER R WITH ACUTE
    r' U+0155 -- LATIN SMALL LETTER R WITH ACUTE
    R, U+0156 -- LATIN CAPITAL LETTER R WITH CEDILLA
    r, U+0157 -- LATIN SMALL LETTER R WITH CEDILLA
    R< U+0158 -- LATIN CAPITAL LETTER R WITH CARON
    r< U+0159 -- LATIN SMALL LETTER R WITH CARON
    S' U+015A -- LATIN CAPITAL LETTER S WITH ACUTE
    s' U+015B -- LATIN SMALL LETTER S WITH ACUTE
    S> U+015C -- LATIN CAPITAL LETTER S WITH CIRCUMFLEX
    s> U+015D -- LATIN SMALL LETTER S WITH CIRCUMFLEX
    S, U+015E -- LATIN CAPITAL LETTER S WITH CEDILLA
    s, U+015F -- LATIN SMALL LETTER S WITH CEDILLA
    S< U+0160 -- LATIN CAPITAL LETTER S WITH CARON
    s< U+0161 -- LATIN SMALL LETTER S WITH CARON
    T, U+0162 -- LATIN CAPITAL LETTER T WITH CEDILLA
    t, U+0163 -- LATIN SMALL LETTER T WITH CEDILLA
    T< U+0164 -- LATIN CAPITAL LETTER T WITH CARON
    t< U+0165 -- LATIN SMALL LETTER T WITH CARON
    T/ U+0166 -- LATIN CAPITAL LETTER T WITH STROKE
    t/ U+0167 -- LATIN SMALL LETTER T WITH STROKE
    U? U+0168 -- LATIN CAPITAL LETTER U WITH TILDE
    u? U+0169 -- LATIN SMALL LETTER U WITH TILDE
    U- U+016A -- LATIN CAPITAL LETTER U WITH MACRON
    u- U+016B -- LATIN SMALL LETTER U WITH MACRON
    U( U+016C -- LATIN CAPITAL LETTER U WITH BREVE
    u( U+016D -- LATIN SMALL LETTER U WITH BREVE
    U0 U+016E -- LATIN CAPITAL LETTER U WITH RING ABOVE
    u0 U+016F -- LATIN SMALL LETTER U WITH RING ABOVE
    U" U+0170 -- LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
    u" U+0171 -- LATIN SMALL LETTER U WITH DOUBLE ACUTE
    U; U+0172 -- LATIN CAPITAL LETTER U WITH OGONEK
    u; U+0173 -- LATIN SMALL LETTER U WITH OGONEK
    W> U+0174 -- LATIN CAPITAL LETTER W WITH CIRCUMFLEX
    w> U+0175 -- LATIN SMALL LETTER W WITH CIRCUMFLEX
    Y> U+0176 -- LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
    y> U+0177 -- LATIN SMALL LETTER Y WITH CIRCUMFLEX
    Y: U+0178 -- LATIN CAPITAL LETTER Y WITH DIAERESIS
    Z' U+0179 -- LATIN CAPITAL LETTER Z WITH ACUTE
    z' U+017A -- LATIN SMALL LETTER Z WITH ACUTE
    Z. U+017B -- LATIN CAPITAL LETTER Z WITH DOT ABOVE
    z. U+017C -- LATIN SMALL LETTER Z WITH DOT ABOVE
    Z< U+017D -- LATIN CAPITAL LETTER Z WITH CARON
    z< U+017E -- LATIN SMALL LETTER Z WITH CARON
    O9 U+01A0 -- LATIN CAPITAL LETTER O WITH HORN
    o9 U+01A1 -- LATIN SMALL LETTER O WITH HORN
    OI U+01A2 -- LATIN CAPITAL LETTER OI
    oi U+01A3 -- LATIN SMALL LETTER OI
    yr U+01A6 -- LATIN LETTER YR
    U9 U+01AF -- LATIN CAPITAL LETTER U WITH HORN
    u9 U+01B0 -- LATIN SMALL LETTER U WITH HORN
    Z/ U+01B5 -- LATIN CAPITAL LETTER Z WITH STROKE
    z/ U+01B6 -- LATIN SMALL LETTER Z WITH STROKE
    ED U+01B7 -- LATIN CAPITAL LETTER EZH
    A< U+01CD -- LATIN CAPITAL LETTER A WITH CARON
    a< U+01CE -- LATIN SMALL LETTER A WITH CARON
    I< U+01CF -- LATIN CAPITAL LETTER I WITH CARON
    i< U+01D0 -- LATIN SMALL LETTER I WITH CARON
    O< U+01D1 -- LATIN CAPITAL LETTER O WITH CARON
    o< U+01D2 -- LATIN SMALL LETTER O WITH CARON
    U< U+01D3 -- LATIN CAPITAL LETTER U WITH CARON
    u< U+01D4 -- LATIN SMALL LETTER U WITH CARON
    A1 U+01DE -- LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
    a1 U+01DF -- LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
    A7 U+01E0 -- LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
    a7 U+01E1 -- LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
    A3 U+01E2 -- LATIN CAPITAL LETTER AE WITH MACRON
    a3 U+01E3 -- LATIN SMALL LETTER AE WITH MACRON
    G/ U+01E4 -- LATIN CAPITAL LETTER G WITH STROKE
    g/ U+01E5 -- LATIN SMALL LETTER G WITH STROKE
    G< U+01E6 -- LATIN CAPITAL LETTER G WITH CARON
    g< U+01E7 -- LATIN SMALL LETTER G WITH CARON
    K< U+01E8 -- LATIN CAPITAL LETTER K WITH CARON
    k< U+01E9 -- LATIN SMALL LETTER K WITH CARON
    O; U+01EA -- LATIN CAPITAL LETTER O WITH OGONEK
    o; U+01EB -- LATIN SMALL LETTER O WITH OGONEK
    O1 U+01EC -- LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
    o1 U+01ED -- LATIN SMALL LETTER O WITH OGONEK AND MACRON
    EZ U+01EE -- LATIN CAPITAL LETTER EZH WITH CARON
    ez U+01EF -- LATIN SMALL LETTER EZH WITH CARON
    j< U+01F0 -- LATIN SMALL LETTER J WITH CARON
    G' U+01F4 -- LATIN CAPITAL LETTER G WITH ACUTE
    g' U+01F5 -- LATIN SMALL LETTER G WITH ACUTE
    ;S U+02BF -- MODIFIER LETTER LEFT HALF RING
    '< U+02C7 -- CARON
    '( U+02D8 -- BREVE
    '. U+02D9 -- DOT ABOVE
    '0 U+02DA -- RING ABOVE
    '; U+02DB -- OGONEK
    '" U+02DD -- DOUBLE ACUTE ACCENT
    A% U+0386 -- GREEK CAPITAL LETTER ALPHA WITH TONOS
    E% U+0388 -- GREEK CAPITAL LETTER EPSILON WITH TONOS
    Y% U+0389 -- GREEK CAPITAL LETTER ETA WITH TONOS
    I% U+038A -- GREEK CAPITAL LETTER IOTA WITH TONOS
    O% U+038C -- GREEK CAPITAL LETTER OMICRON WITH TONOS
    U% U+038E -- GREEK CAPITAL LETTER UPSILON WITH TONOS
    W% U+038F -- GREEK CAPITAL LETTER OMEGA WITH TONOS
    i3 U+0390 -- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
    A* U+0391 -- GREEK CAPITAL LETTER ALPHA
    B* U+0392 -- GREEK CAPITAL LETTER BETA
    G* U+0393 -- GREEK CAPITAL LETTER GAMMA
    D* U+0394 -- GREEK CAPITAL LETTER DELTA
    E* U+0395 -- GREEK CAPITAL LETTER EPSILON
    Z* U+0396 -- GREEK CAPITAL LETTER ZETA
    Y* U+0397 -- GREEK CAPITAL LETTER ETA
    H* U+0398 -- GREEK CAPITAL LETTER THETA
    I* U+0399 -- GREEK CAPITAL LETTER IOTA
    K* U+039A -- GREEK CAPITAL LETTER KAPPA
    L* U+039B -- GREEK CAPITAL LETTER LAMDA
    M* U+039C -- GREEK CAPITAL LETTER MU
    N* U+039D -- GREEK CAPITAL LETTER NU
    C* U+039E -- GREEK CAPITAL LETTER XI
    O* U+039F -- GREEK CAPITAL LETTER OMICRON
    P* U+03A0 -- GREEK CAPITAL LETTER PI
    R* U+03A1 -- GREEK CAPITAL LETTER RHO
    S* U+03A3 -- GREEK CAPITAL LETTER SIGMA
    T* U+03A4 -- GREEK CAPITAL LETTER TAU
    U* U+03A5 -- GREEK CAPITAL LETTER UPSILON
    F* U+03A6 -- GREEK CAPITAL LETTER PHI
    X* U+03A7 -- GREEK CAPITAL LETTER CHI
    Q* U+03A8 -- GREEK CAPITAL LETTER PSI
    W* U+03A9 -- GREEK CAPITAL LETTER OMEGA
    J* U+03AA -- GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
    V* U+03AB -- GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
    a% U+03AC -- GREEK SMALL LETTER ALPHA WITH TONOS
    e% U+03AD -- GREEK SMALL LETTER EPSILON WITH TONOS
    y% U+03AE -- GREEK SMALL LETTER ETA WITH TONOS
    i% U+03AF -- GREEK SMALL LETTER IOTA WITH TONOS
    u3 U+03B0 -- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
    a* U+03B1 -- GREEK SMALL LETTER ALPHA
    b* U+03B2 -- GREEK SMALL LETTER BETA
    g* U+03B3 -- GREEK SMALL LETTER GAMMA
    d* U+03B4 -- GREEK SMALL LETTER DELTA
    e* U+03B5 -- GREEK SMALL LETTER EPSILON
    z* U+03B6 -- GREEK SMALL LETTER ZETA
    y* U+03B7 -- GREEK SMALL LETTER ETA
    h* U+03B8 -- GREEK SMALL LETTER THETA
    i* U+03B9 -- GREEK SMALL LETTER IOTA
    k* U+03BA -- GREEK SMALL LETTER KAPPA
    l* U+03BB -- GREEK SMALL LETTER LAMDA
    m* U+03BC -- GREEK SMALL LETTER MU
    n* U+03BD -- GREEK SMALL LETTER NU
    c* U+03BE -- GREEK SMALL LETTER XI
    o* U+03BF -- GREEK SMALL LETTER OMICRON
    p* U+03C0 -- GREEK SMALL LETTER PI
    r* U+03C1 -- GREEK SMALL LETTER RHO
    *s U+03C2 -- GREEK SMALL LETTER FINAL SIGMA
    s* U+03C3 -- GREEK SMALL LETTER SIGMA
    t* U+03C4 -- GREEK SMALL LETTER TAU
    u* U+03C5 -- GREEK SMALL LETTER UPSILON
    f* U+03C6 -- GREEK SMALL LETTER PHI
    x* U+03C7 -- GREEK SMALL LETTER CHI
    q* U+03C8 -- GREEK SMALL LETTER PSI
    w* U+03C9 -- GREEK SMALL LETTER OMEGA
    j* U+03CA -- GREEK SMALL LETTER IOTA WITH DIALYTIKA
    v* U+03CB -- GREEK SMALL LETTER UPSILON WITH DIALYTIKA
    o% U+03CC -- GREEK SMALL LETTER OMICRON WITH TONOS
    u% U+03CD -- GREEK SMALL LETTER UPSILON WITH TONOS
    w% U+03CE -- GREEK SMALL LETTER OMEGA WITH TONOS
    'G U+03D8 -- GREEK LETTER ARCHAIC KOPPA
    ,G U+03D9 -- GREEK SMALL LETTER ARCHAIC KOPPA
    T3 U+03DA -- GREEK LETTER STIGMA
    t3 U+03DB -- GREEK SMALL LETTER STIGMA
    M3 U+03DC -- GREEK LETTER DIGAMMA
    m3 U+03DD -- GREEK SMALL LETTER DIGAMMA
    K3 U+03DE -- GREEK LETTER KOPPA
    k3 U+03DF -- GREEK SMALL LETTER KOPPA
    P3 U+03E0 -- GREEK LETTER SAMPI
    p3 U+03E1 -- GREEK SMALL LETTER SAMPI
    '% U+03F4 -- GREEK CAPITAL THETA SYMBOL
    j3 U+03F5 -- GREEK LUNATE EPSILON SYMBOL
    IO U+0401 -- CYRILLIC CAPITAL LETTER IO
    D% U+0402 -- CYRILLIC CAPITAL LETTER DJE
    G% U+0403 -- CYRILLIC CAPITAL LETTER GJE
    IE U+0404 -- CYRILLIC CAPITAL LETTER UKRAINIAN IE
    DS U+0405 -- CYRILLIC CAPITAL LETTER DZE
    II U+0406 -- CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
    YI U+0407 -- CYRILLIC CAPITAL LETTER YI
    J% U+0408 -- CYRILLIC CAPITAL LETTER JE
    LJ U+0409 -- CYRILLIC CAPITAL LETTER LJE
    NJ U+040A -- CYRILLIC CAPITAL LETTER NJE
    Ts U+040B -- CYRILLIC CAPITAL LETTER TSHE
    KJ U+040C -- CYRILLIC CAPITAL LETTER KJE
    V% U+040E -- CYRILLIC CAPITAL LETTER SHORT U
    DZ U+040F -- CYRILLIC CAPITAL LETTER DZHE
    A= U+0410 -- CYRILLIC CAPITAL LETTER A
    B= U+0411 -- CYRILLIC CAPITAL LETTER BE
    V= U+0412 -- CYRILLIC CAPITAL LETTER VE
    G= U+0413 -- CYRILLIC CAPITAL LETTER GHE
    D= U+0414 -- CYRILLIC CAPITAL LETTER DE
    E= U+0415 -- CYRILLIC CAPITAL LETTER IE
    Z% U+0416 -- CYRILLIC CAPITAL LETTER ZHE
    Z= U+0417 -- CYRILLIC CAPITAL LETTER ZE
    I= U+0418 -- CYRILLIC CAPITAL LETTER I
    J= U+0419 -- CYRILLIC CAPITAL LETTER SHORT I
    K= U+041A -- CYRILLIC CAPITAL LETTER KA
    L= U+041B -- CYRILLIC CAPITAL LETTER EL
    M= U+041C -- CYRILLIC CAPITAL LETTER EM
    N= U+041D -- CYRILLIC CAPITAL LETTER EN
    O= U+041E -- CYRILLIC CAPITAL LETTER O
    P= U+041F -- CYRILLIC CAPITAL LETTER PE
    R= U+0420 -- CYRILLIC CAPITAL LETTER ER
    S= U+0421 -- CYRILLIC CAPITAL LETTER ES
    T= U+0422 -- CYRILLIC CAPITAL LETTER TE
    U= U+0423 -- CYRILLIC CAPITAL LETTER U
    F= U+0424 -- CYRILLIC CAPITAL LETTER EF
    H= U+0425 -- CYRILLIC CAPITAL LETTER HA
    C= U+0426 -- CYRILLIC CAPITAL LETTER TSE
    C% U+0427 -- CYRILLIC CAPITAL LETTER CHE
    S% U+0428 -- CYRILLIC CAPITAL LETTER SHA
    Sc U+0429 -- CYRILLIC CAPITAL LETTER SHCHA
    =' U+042A -- CYRILLIC CAPITAL LETTER HARD SIGN
    Y= U+042B -- CYRILLIC CAPITAL LETTER YERU
    %' U+042C -- CYRILLIC CAPITAL LETTER SOFT SIGN
    JE U+042D -- CYRILLIC CAPITAL LETTER E
    JU U+042E -- CYRILLIC CAPITAL LETTER YU
    JA U+042F -- CYRILLIC CAPITAL LETTER YA
    a= U+0430 -- CYRILLIC SMALL LETTER A
    b= U+0431 -- CYRILLIC SMALL LETTER BE
    v= U+0432 -- CYRILLIC SMALL LETTER VE
    g= U+0433 -- CYRILLIC SMALL LETTER GHE
    d= U+0434 -- CYRILLIC SMALL LETTER DE
    e= U+0435 -- CYRILLIC SMALL LETTER IE
    z% U+0436 -- CYRILLIC SMALL LETTER ZHE
    z= U+0437 -- CYRILLIC SMALL LETTER ZE
    i= U+0438 -- CYRILLIC SMALL LETTER I
    j= U+0439 -- CYRILLIC SMALL LETTER SHORT I
    k= U+043A -- CYRILLIC SMALL LETTER KA
    l= U+043B -- CYRILLIC SMALL LETTER EL
    m= U+043C -- CYRILLIC SMALL LETTER EM
    n= U+043D -- CYRILLIC SMALL LETTER EN
    o= U+043E -- CYRILLIC SMALL LETTER O
    p= U+043F -- CYRILLIC SMALL LETTER PE
    r= U+0440 -- CYRILLIC SMALL LETTER ER
    s= U+0441 -- CYRILLIC SMALL LETTER ES
    t= U+0442 -- CYRILLIC SMALL LETTER TE
    u= U+0443 -- CYRILLIC SMALL LETTER U
    f= U+0444 -- CYRILLIC SMALL LETTER EF
    h= U+0445 -- CYRILLIC SMALL LETTER HA
    c= U+0446 -- CYRILLIC SMALL LETTER TSE
    c% U+0447 -- CYRILLIC SMALL LETTER CHE
    s% U+0448 -- CYRILLIC SMALL LETTER SHA
    sc U+0449 -- CYRILLIC SMALL LETTER SHCHA
    =' U+044A -- CYRILLIC SMALL LETTER HARD SIGN
    y= U+044B -- CYRILLIC SMALL LETTER YERU
    %' U+044C -- CYRILLIC SMALL LETTER SOFT SIGN
    je U+044D -- CYRILLIC SMALL LETTER E
    ju U+044E -- CYRILLIC SMALL LETTER YU
    ja U+044F -- CYRILLIC SMALL LETTER YA
    io U+0451 -- CYRILLIC SMALL LETTER IO
    d% U+0452 -- CYRILLIC SMALL LETTER DJE
    g% U+0453 -- CYRILLIC SMALL LETTER GJE
    ie U+0454 -- CYRILLIC SMALL LETTER UKRAINIAN IE
    ds U+0455 -- CYRILLIC SMALL LETTER DZE
    ii U+0456 -- CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
    yi U+0457 -- CYRILLIC SMALL LETTER YI
    j% U+0458 -- CYRILLIC SMALL LETTER JE
    lj U+0459 -- CYRILLIC SMALL LETTER LJE
    nj U+045A -- CYRILLIC SMALL LETTER NJE
    ts U+045B -- CYRILLIC SMALL LETTER TSHE
    kj U+045C -- CYRILLIC SMALL LETTER KJE
    v% U+045E -- CYRILLIC SMALL LETTER SHORT U
    dz U+045F -- CYRILLIC SMALL LETTER DZHE
    Y3 U+0462 -- CYRILLIC CAPITAL LETTER YAT
    y3 U+0463 -- CYRILLIC SMALL LETTER YAT
    O3 U+046A -- CYRILLIC CAPITAL LETTER BIG YUS
    o3 U+046B -- CYRILLIC SMALL LETTER BIG YUS
    F3 U+0472 -- CYRILLIC CAPITAL LETTER FITA
    f3 U+0473 -- CYRILLIC SMALL LETTER FITA
    V3 U+0474 -- CYRILLIC CAPITAL LETTER IZHITSA
    v3 U+0475 -- CYRILLIC SMALL LETTER IZHITSA
    C3 U+0480 -- CYRILLIC CAPITAL LETTER KOPPA
    c3 U+0481 -- CYRILLIC SMALL LETTER KOPPA
    G3 U+0490 -- CYRILLIC CAPITAL LETTER GHE WITH UPTURN
    g3 U+0491 -- CYRILLIC SMALL LETTER GHE WITH UPTURN
    A+ U+05D0 -- HEBREW LETTER ALEF
    B+ U+05D1 -- HEBREW LETTER BET
    G+ U+05D2 -- HEBREW LETTER GIMEL
    D+ U+05D3 -- HEBREW LETTER DALET
    H+ U+05D4 -- HEBREW LETTER HE
    W+ U+05D5 -- HEBREW LETTER VAV
    Z+ U+05D6 -- HEBREW LETTER ZAYIN
    X+ U+05D7 -- HEBREW LETTER HET
    Tj U+05D8 -- HEBREW LETTER TET
    J+ U+05D9 -- HEBREW LETTER YOD
    K% U+05DA -- HEBREW LETTER FINAL KAF
    K+ U+05DB -- HEBREW LETTER KAF
    L+ U+05DC -- HEBREW LETTER LAMED
    M% U+05DD -- HEBREW LETTER FINAL MEM
    M+ U+05DE -- HEBREW LETTER MEM
    N% U+05DF -- HEBREW LETTER FINAL NUN `
    N+ U+05E0 -- HEBREW LETTER NUN `
    S+ U+05E1 -- HEBREW LETTER SAMEKH
    E+ U+05E2 -- HEBREW LETTER AYIN
    P% U+05E3 -- HEBREW LETTER FINAL PE
    P+ U+05E4 -- HEBREW LETTER PE
    Zj U+05E5 -- HEBREW LETTER FINAL TSADI
    ZJ U+05E6 -- HEBREW LETTER TSADI
    Q+ U+05E7 -- HEBREW LETTER QOF
    R+ U+05E8 -- HEBREW LETTER RESH
    Sh U+05E9 -- HEBREW LETTER SHIN
    T+ U+05EA -- HEBREW LETTER TAV
    ,+ U+060C -- ARABIC COMMA
    ;+ U+061B -- ARABIC SEMICOLON
    ?+ U+061F -- ARABIC QUESTION MARK
    H' U+0621 -- ARABIC LETTER HAMZA
    aM U+0622 -- ARABIC LETTER ALEF WITH MADDA ABOVE
    aH U+0623 -- ARABIC LETTER ALEF WITH HAMZA ABOVE
    wH U+0624 -- ARABIC LETTER WAW WITH HAMZA ABOVE
    ah U+0625 -- ARABIC LETTER ALEF WITH HAMZA BELOW
    yH U+0626 -- ARABIC LETTER YEH WITH HAMZA ABOVE
    a+ U+0627 -- ARABIC LETTER ALEF
    b+ U+0628 -- ARABIC LETTER BEH
    tm U+0629 -- ARABIC LETTER TEH MARBUTA
    t+ U+062A -- ARABIC LETTER TEH
    tk U+062B -- ARABIC LETTER THEH
    g+ U+062C -- ARABIC LETTER JEEM
    hk U+062D -- ARABIC LETTER HAH
    x+ U+062E -- ARABIC LETTER KHAH
    d+ U+062F -- ARABIC LETTER DAL
    dk U+0630 -- ARABIC LETTER THAL
    r+ U+0631 -- ARABIC LETTER REH
    z+ U+0632 -- ARABIC LETTER ZAIN
    s+ U+0633 -- ARABIC LETTER SEEN
    sn U+0634 -- ARABIC LETTER SHEEN
    c+ U+0635 -- ARABIC LETTER SAD
    dd U+0636 -- ARABIC LETTER DAD
    tj U+0637 -- ARABIC LETTER TAH
    zH U+0638 -- ARABIC LETTER ZAH
    e+ U+0639 -- ARABIC LETTER AIN
    i+ U+063A -- ARABIC LETTER GHAIN
    ++ U+0640 -- ARABIC TATWEEL
    f+ U+0641 -- ARABIC LETTER FEH
    q+ U+0642 -- ARABIC LETTER QAF
    k+ U+0643 -- ARABIC LETTER KAF
    l+ U+0644 -- ARABIC LETTER LAM
    m+ U+0645 -- ARABIC LETTER MEEM
    n+ U+0646 -- ARABIC LETTER NOON
    h+ U+0647 -- ARABIC LETTER HEH
    w+ U+0648 -- ARABIC LETTER WAW
    j+ U+0649 -- ARABIC LETTER ALEF MAKSURA
    y+ U+064A -- ARABIC LETTER YEH
    :+ U+064B -- ARABIC FATHATAN
    "+ U+064C -- ARABIC DAMMATAN
    =+ U+064D -- ARABIC KASRATAN
    /+ U+064E -- ARABIC FATHA
    '+ U+064F -- ARABIC DAMMA
    1+ U+0650 -- ARABIC KASRA
    3+ U+0651 -- ARABIC SHADDA
    0+ U+0652 -- ARABIC SUKUN
    aS U+0670 -- ARABIC LETTER SUPERSCRIPT ALEF
    p+ U+067E -- ARABIC LETTER PEH
    v+ U+06A4 -- ARABIC LETTER VEH
    gf U+06AF -- ARABIC LETTER GAF
    0a U+06F0 -- EXTENDED ARABIC-INDIC DIGIT ZERO
    1a U+06F1 -- EXTENDED ARABIC-INDIC DIGIT ONE
    2a U+06F2 -- EXTENDED ARABIC-INDIC DIGIT TWO
    3a U+06F3 -- EXTENDED ARABIC-INDIC DIGIT THREE
    4a U+06F4 -- EXTENDED ARABIC-INDIC DIGIT FOUR
    5a U+06F5 -- EXTENDED ARABIC-INDIC DIGIT FIVE
    6a U+06F6 -- EXTENDED ARABIC-INDIC DIGIT SIX
    7a U+06F7 -- EXTENDED ARABIC-INDIC DIGIT SEVEN
    8a U+06F8 -- EXTENDED ARABIC-INDIC DIGIT EIGHT
    9a U+06F9 -- EXTENDED ARABIC-INDIC DIGIT NINE
    B. U+1E02 -- LATIN CAPITAL LETTER B WITH DOT ABOVE
    b. U+1E03 -- LATIN SMALL LETTER B WITH DOT ABOVE
    B_ U+1E06 -- LATIN CAPITAL LETTER B WITH LINE BELOW
    b_ U+1E07 -- LATIN SMALL LETTER B WITH LINE BELOW
    D. U+1E0A -- LATIN CAPITAL LETTER D WITH DOT ABOVE
    d. U+1E0B -- LATIN SMALL LETTER D WITH DOT ABOVE
    D_ U+1E0E -- LATIN CAPITAL LETTER D WITH LINE BELOW
    d_ U+1E0F -- LATIN SMALL LETTER D WITH LINE BELOW
    D, U+1E10 -- LATIN CAPITAL LETTER D WITH CEDILLA
    d, U+1E11 -- LATIN SMALL LETTER D WITH CEDILLA
    F. U+1E1E -- LATIN CAPITAL LETTER F WITH DOT ABOVE
    f. U+1E1F -- LATIN SMALL LETTER F WITH DOT ABOVE
    G- U+1E20 -- LATIN CAPITAL LETTER G WITH MACRON
    g- U+1E21 -- LATIN SMALL LETTER G WITH MACRON
    H. U+1E22 -- LATIN CAPITAL LETTER H WITH DOT ABOVE
    h. U+1E23 -- LATIN SMALL LETTER H WITH DOT ABOVE
    H: U+1E26 -- LATIN CAPITAL LETTER H WITH DIAERESIS
    h: U+1E27 -- LATIN SMALL LETTER H WITH DIAERESIS
    H, U+1E28 -- LATIN CAPITAL LETTER H WITH CEDILLA
    h, U+1E29 -- LATIN SMALL LETTER H WITH CEDILLA
    K' U+1E30 -- LATIN CAPITAL LETTER K WITH ACUTE
    k' U+1E31 -- LATIN SMALL LETTER K WITH ACUTE
    K_ U+1E34 -- LATIN CAPITAL LETTER K WITH LINE BELOW
    k_ U+1E35 -- LATIN SMALL LETTER K WITH LINE BELOW
    L_ U+1E3A -- LATIN CAPITAL LETTER L WITH LINE BELOW
    l_ U+1E3B -- LATIN SMALL LETTER L WITH LINE BELOW
    M' U+1E3E -- LATIN CAPITAL LETTER M WITH ACUTE
    m' U+1E3F -- LATIN SMALL LETTER M WITH ACUTE
    M. U+1E40 -- LATIN CAPITAL LETTER M WITH DOT ABOVE
    m. U+1E41 -- LATIN SMALL LETTER M WITH DOT ABOVE
    N. U+1E44 -- LATIN CAPITAL LETTER N WITH DOT ABOVE `
    n. U+1E45 -- LATIN SMALL LETTER N WITH DOT ABOVE `
    N_ U+1E48 -- LATIN CAPITAL LETTER N WITH LINE BELOW `
    n_ U+1E49 -- LATIN SMALL LETTER N WITH LINE BELOW `
    P' U+1E54 -- LATIN CAPITAL LETTER P WITH ACUTE
    p' U+1E55 -- LATIN SMALL LETTER P WITH ACUTE
    P. U+1E56 -- LATIN CAPITAL LETTER P WITH DOT ABOVE
    p. U+1E57 -- LATIN SMALL LETTER P WITH DOT ABOVE
    R. U+1E58 -- LATIN CAPITAL LETTER R WITH DOT ABOVE
    r. U+1E59 -- LATIN SMALL LETTER R WITH DOT ABOVE
    R_ U+1E5E -- LATIN CAPITAL LETTER R WITH LINE BELOW
    r_ U+1E5F -- LATIN SMALL LETTER R WITH LINE BELOW
    S. U+1E60 -- LATIN CAPITAL LETTER S WITH DOT ABOVE
    s. U+1E61 -- LATIN SMALL LETTER S WITH DOT ABOVE
    T. U+1E6A -- LATIN CAPITAL LETTER T WITH DOT ABOVE
    t. U+1E6B -- LATIN SMALL LETTER T WITH DOT ABOVE
    T_ U+1E6E -- LATIN CAPITAL LETTER T WITH LINE BELOW
    t_ U+1E6F -- LATIN SMALL LETTER T WITH LINE BELOW
    V? U+1E7C -- LATIN CAPITAL LETTER V WITH TILDE
    v? U+1E7D -- LATIN SMALL LETTER V WITH TILDE
    W! U+1E80 -- LATIN CAPITAL LETTER W WITH GRAVE
    w! U+1E81 -- LATIN SMALL LETTER W WITH GRAVE
    W' U+1E82 -- LATIN CAPITAL LETTER W WITH ACUTE
    w' U+1E83 -- LATIN SMALL LETTER W WITH ACUTE
    W: U+1E84 -- LATIN CAPITAL LETTER W WITH DIAERESIS
    w: U+1E85 -- LATIN SMALL LETTER W WITH DIAERESIS
    W. U+1E86 -- LATIN CAPITAL LETTER W WITH DOT ABOVE
    w. U+1E87 -- LATIN SMALL LETTER W WITH DOT ABOVE
    X. U+1E8A -- LATIN CAPITAL LETTER X WITH DOT ABOVE
    x. U+1E8B -- LATIN SMALL LETTER X WITH DOT ABOVE
    X: U+1E8C -- LATIN CAPITAL LETTER X WITH DIAERESIS
    x: U+1E8D -- LATIN SMALL LETTER X WITH DIAERESIS
    Y. U+1E8E -- LATIN CAPITAL LETTER Y WITH DOT ABOVE
    y. U+1E8F -- LATIN SMALL LETTER Y WITH DOT ABOVE
    Z> U+1E90 -- LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
    z> U+1E91 -- LATIN SMALL LETTER Z WITH CIRCUMFLEX
    Z_ U+1E94 -- LATIN CAPITAL LETTER Z WITH LINE BELOW
    z_ U+1E95 -- LATIN SMALL LETTER Z WITH LINE BELOW
    h_ U+1E96 -- LATIN SMALL LETTER H WITH LINE BELOW
    t: U+1E97 -- LATIN SMALL LETTER T WITH DIAERESIS
    w0 U+1E98 -- LATIN SMALL LETTER W WITH RING ABOVE
    y0 U+1E99 -- LATIN SMALL LETTER Y WITH RING ABOVE
    A2 U+1EA2 -- LATIN CAPITAL LETTER A WITH HOOK ABOVE
    a2 U+1EA3 -- LATIN SMALL LETTER A WITH HOOK ABOVE
    E2 U+1EBA -- LATIN CAPITAL LETTER E WITH HOOK ABOVE
    e2 U+1EBB -- LATIN SMALL LETTER E WITH HOOK ABOVE
    E? U+1EBC -- LATIN CAPITAL LETTER E WITH TILDE
    e? U+1EBD -- LATIN SMALL LETTER E WITH TILDE
    I2 U+1EC8 -- LATIN CAPITAL LETTER I WITH HOOK ABOVE
    i2 U+1EC9 -- LATIN SMALL LETTER I WITH HOOK ABOVE
    O2 U+1ECE -- LATIN CAPITAL LETTER O WITH HOOK ABOVE
    o2 U+1ECF -- LATIN SMALL LETTER O WITH HOOK ABOVE
    U2 U+1EE6 -- LATIN CAPITAL LETTER U WITH HOOK ABOVE
    u2 U+1EE7 -- LATIN SMALL LETTER U WITH HOOK ABOVE
    Y! U+1EF2 -- LATIN CAPITAL LETTER Y WITH GRAVE
    y! U+1EF3 -- LATIN SMALL LETTER Y WITH GRAVE
    Y2 U+1EF6 -- LATIN CAPITAL LETTER Y WITH HOOK ABOVE
    y2 U+1EF7 -- LATIN SMALL LETTER Y WITH HOOK ABOVE
    Y? U+1EF8 -- LATIN CAPITAL LETTER Y WITH TILDE
    y? U+1EF9 -- LATIN SMALL LETTER Y WITH TILDE
    ;' U+1F00 -- GREEK SMALL LETTER ALPHA WITH PSILI
    ,' U+1F01 -- GREEK SMALL LETTER ALPHA WITH DASIA
    ;! U+1F02 -- GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
    ,! U+1F03 -- GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
    ?; U+1F04 -- GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
    ?, U+1F05 -- GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
    !: U+1F06 -- GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
    ?: U+1F07 -- GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
    1N U+2002 -- EN SPACE
    1M U+2003 -- EM SPACE
    3M U+2004 -- THREE-PER-EM SPACE
    4M U+2005 -- FOUR-PER-EM SPACE
    6M U+2006 -- SIX-PER-EM SPACE
    1T U+2009 -- THIN SPACE
    1H U+200A -- HAIR SPACE
    -1 U+2010 -- HYPHEN
    -N U+2013 -- EN DASH `
    -M U+2014 -- EM DASH
    -3 U+2015 -- HORIZONTAL BAR
    !2 U+2016 -- DOUBLE VERTICAL LINE
    =2 U+2017 -- DOUBLE LOW LINE
    '6 U+2018 -- LEFT SINGLE QUOTATION MARK
    '9 U+2019 -- RIGHT SINGLE QUOTATION MARK
    .9 U+201A -- SINGLE LOW-9 QUOTATION MARK
    9' U+201B -- SINGLE HIGH-REVERSED-9 QUOTATION MARK
    "6 U+201C -- LEFT DOUBLE QUOTATION MARK
    "9 U+201D -- RIGHT DOUBLE QUOTATION MARK
    :9 U+201E -- DOUBLE LOW-9 QUOTATION MARK
    9" U+201F -- DOUBLE HIGH-REVERSED-9 QUOTATION MARK
    /- U+2020 -- DAGGER
    /= U+2021 -- DOUBLE DAGGER
    .. U+2025 -- TWO DOT LEADER
    %0 U+2030 -- PER MILLE SIGN
    1' U+2032 -- PRIME
    2' U+2033 -- DOUBLE PRIME
    3' U+2034 -- TRIPLE PRIME
    1" U+2035 -- REVERSED PRIME
    2" U+2036 -- REVERSED DOUBLE PRIME
    3" U+2037 -- REVERSED TRIPLE PRIME
    Ca U+2038 -- CARET
    <1 U+2039 -- SINGLE LEFT-POINTING ANGLE QUOTATION MARK
    >1 U+203A -- SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
    :X U+203B -- REFERENCE MARK
    '- U+203E -- OVERLINE
    /f U+2044 -- FRACTION SLASH
    0S U+2070 -- SUPERSCRIPT ZERO
    4S U+2074 -- SUPERSCRIPT FOUR
    5S U+2075 -- SUPERSCRIPT FIVE
    6S U+2076 -- SUPERSCRIPT SIX
    7S U+2077 -- SUPERSCRIPT SEVEN
    8S U+2078 -- SUPERSCRIPT EIGHT
    9S U+2079 -- SUPERSCRIPT NINE
    +S U+207A -- SUPERSCRIPT PLUS SIGN
    -S U+207B -- SUPERSCRIPT MINUS
    =S U+207C -- SUPERSCRIPT EQUALS SIGN
    (S U+207D -- SUPERSCRIPT LEFT PARENTHESIS
    )S U+207E -- SUPERSCRIPT RIGHT PARENTHESIS
    nS U+207F -- SUPERSCRIPT LATIN SMALL LETTER N `
    0s U+2080 -- SUBSCRIPT ZERO
    1s U+2081 -- SUBSCRIPT ONE
    2s U+2082 -- SUBSCRIPT TWO
    3s U+2083 -- SUBSCRIPT THREE
    4s U+2084 -- SUBSCRIPT FOUR
    5s U+2085 -- SUBSCRIPT FIVE
    6s U+2086 -- SUBSCRIPT SIX
    7s U+2087 -- SUBSCRIPT SEVEN
    8s U+2088 -- SUBSCRIPT EIGHT
    9s U+2089 -- SUBSCRIPT NINE
    +s U+208A -- SUBSCRIPT PLUS SIGN
    -s U+208B -- SUBSCRIPT MINUS
    =s U+208C -- SUBSCRIPT EQUALS SIGN
    (s U+208D -- SUBSCRIPT LEFT PARENTHESIS
    )s U+208E -- SUBSCRIPT RIGHT PARENTHESIS
    Li U+20A4 -- LIRA SIGN
    Pt U+20A7 -- PESETA SIGN
    W= U+20A9 -- WON SIGN
    Eu U+20AC -- EURO SIGN
    oC U+2103 -- DEGREE CELSIUS
    co U+2105 -- CARE OF
    oF U+2109 -- DEGREE FAHRENHEIT
    N0 U+2116 -- NUMERO SIGN
    PO U+2117 -- SOUND RECORDING COPYRIGHT
    Rx U+211E -- PRESCRIPTION TAKE
    SM U+2120 -- SERVICE MARK
    TM U+2122 -- TRADE MARK SIGN
    Om U+2126 -- OHM SIGN
    AO U+212B -- ANGSTROM SIGN
    13 U+2153 -- VULGAR FRACTION ONE THIRD
    23 U+2154 -- VULGAR FRACTION TWO THIRDS
    15 U+2155 -- VULGAR FRACTION ONE FIFTH
    25 U+2156 -- VULGAR FRACTION TWO FIFTHS
    35 U+2157 -- VULGAR FRACTION THREE FIFTHS
    45 U+2158 -- VULGAR FRACTION FOUR FIFTHS
    16 U+2159 -- VULGAR FRACTION ONE SIXTH
    56 U+215A -- VULGAR FRACTION FIVE SIXTHS
    18 U+215B -- VULGAR FRACTION ONE EIGHTH
    38 U+215C -- VULGAR FRACTION THREE EIGHTHS
    58 U+215D -- VULGAR FRACTION FIVE EIGHTHS
    78 U+215E -- VULGAR FRACTION SEVEN EIGHTHS
    1R U+2160 -- ROMAN NUMERAL ONE
    2R U+2161 -- ROMAN NUMERAL TWO
    3R U+2162 -- ROMAN NUMERAL THREE
    4R U+2163 -- ROMAN NUMERAL FOUR
    5R U+2164 -- ROMAN NUMERAL FIVE
    6R U+2165 -- ROMAN NUMERAL SIX
    7R U+2166 -- ROMAN NUMERAL SEVEN
    8R U+2167 -- ROMAN NUMERAL EIGHT
    9R U+2168 -- ROMAN NUMERAL NINE
    aR U+2169 -- ROMAN NUMERAL TEN
    bR U+216A -- ROMAN NUMERAL ELEVEN
    cR U+216B -- ROMAN NUMERAL TWELVE
    1r U+2170 -- SMALL ROMAN NUMERAL ONE
    2r U+2171 -- SMALL ROMAN NUMERAL TWO
    3r U+2172 -- SMALL ROMAN NUMERAL THREE
    4r U+2173 -- SMALL ROMAN NUMERAL FOUR
    5r U+2174 -- SMALL ROMAN NUMERAL FIVE
    6r U+2175 -- SMALL ROMAN NUMERAL SIX
    7r U+2176 -- SMALL ROMAN NUMERAL SEVEN
    8r U+2177 -- SMALL ROMAN NUMERAL EIGHT
    9r U+2178 -- SMALL ROMAN NUMERAL NINE
    ar U+2179 -- SMALL ROMAN NUMERAL TEN
    br U+217A -- SMALL ROMAN NUMERAL ELEVEN
    cr U+217B -- SMALL ROMAN NUMERAL TWELVE
    <- U+2190 -- LEFTWARDS ARROW
    -! U+2191 -- UPWARDS ARROW
    -> U+2192 -- RIGHTWARDS ARROW
    -v U+2193 -- DOWNWARDS ARROW
    <> U+2194 -- LEFT RIGHT ARROW
    UD U+2195 -- UP DOWN ARROW
    <= U+21D0 -- LEFTWARDS DOUBLE ARROW
    => U+21D2 -- RIGHTWARDS DOUBLE ARROW
    == U+21D4 -- LEFT RIGHT DOUBLE ARROW
    FA U+2200 -- FOR ALL
    dP U+2202 -- PARTIAL DIFFERENTIAL
    TE U+2203 -- THERE EXISTS
    /0 U+2205 -- EMPTY SET
    DE U+2206 -- INCREMENT
    NB U+2207 -- NABLA
    (- U+2208 -- ELEMENT OF
    -) U+220B -- CONTAINS AS MEMBER
    *P U+220F -- N-ARY PRODUCT `
    +Z U+2211 -- N-ARY SUMMATION `
    -2 U+2212 -- MINUS SIGN
    -+ U+2213 -- MINUS-OR-PLUS SIGN
    *- U+2217 -- ASTERISK OPERATOR
    Ob U+2218 -- RING OPERATOR
    Sb U+2219 -- BULLET OPERATOR
    RT U+221A -- SQUARE ROOT
    0( U+221D -- PROPORTIONAL TO
    00 U+221E -- INFINITY
    -L U+221F -- RIGHT ANGLE
    -V U+2220 -- ANGLE
    PP U+2225 -- PARALLEL TO
    AN U+2227 -- LOGICAL AND
    OR U+2228 -- LOGICAL OR
    (U U+2229 -- INTERSECTION
    )U U+222A -- UNION
    In U+222B -- INTEGRAL
    DI U+222C -- DOUBLE INTEGRAL
    Io U+222E -- CONTOUR INTEGRAL
    .: U+2234 -- THEREFORE
    :. U+2235 -- BECAUSE
    :R U+2236 -- RATIO
    :: U+2237 -- PROPORTION
    ?1 U+223C -- TILDE OPERATOR
    CG U+223E -- INVERTED LAZY S
    ?- U+2243 -- ASYMPTOTICALLY EQUAL TO
    ?= U+2245 -- APPROXIMATELY EQUAL TO
    ?2 U+2248 -- ALMOST EQUAL TO
    =? U+224C -- ALL EQUAL TO
    HI U+2253 -- IMAGE OF OR APPROXIMATELY EQUAL TO
    != U+2260 -- NOT EQUAL TO
    =3 U+2261 -- IDENTICAL TO
    =< U+2264 -- LESS-THAN OR EQUAL TO
    >= U+2265 -- GREATER-THAN OR EQUAL TO
    <* U+226A -- MUCH LESS-THAN
    *> U+226B -- MUCH GREATER-THAN
    !< U+226E -- NOT LESS-THAN
    !> U+226F -- NOT GREATER-THAN
    (C U+2282 -- SUBSET OF
    )C U+2283 -- SUPERSET OF
    (_ U+2286 -- SUBSET OF OR EQUAL TO
    )_ U+2287 -- SUPERSET OF OR EQUAL TO
    0. U+2299 -- CIRCLED DOT OPERATOR
    02 U+229A -- CIRCLED RING OPERATOR
    -T U+22A5 -- UP TACK
    .P U+22C5 -- DOT OPERATOR
    :3 U+22EE -- VERTICAL ELLIPSIS
    .3 U+22EF -- MIDLINE HORIZONTAL ELLIPSIS
    Eh U+2302 -- HOUSE
    <7 U+2308 -- LEFT CEILING
    >7 U+2309 -- RIGHT CEILING
    7< U+230A -- LEFT FLOOR
    7> U+230B -- RIGHT FLOOR
    NI U+2310 -- REVERSED NOT SIGN
    (A U+2312 -- ARC
    TR U+2315 -- TELEPHONE RECORDER
    Iu U+2320 -- TOP HALF INTEGRAL
    Il U+2321 -- BOTTOM HALF INTEGRAL
    </ U+2329 -- LEFT-POINTING ANGLE BRACKET
    /> U+232A -- RIGHT-POINTING ANGLE BRACKET
    Vs U+2423 -- OPEN BOX
    1h U+2440 -- OCR HOOK
    3h U+2441 -- OCR CHAIR
    2h U+2442 -- OCR FORK
    4h U+2443 -- OCR INVERTED FORK
    1j U+2446 -- OCR BRANCH BANK IDENTIFICATION
    2j U+2447 -- OCR AMOUNT OF CHECK
    3j U+2448 -- OCR DASH
    4j U+2449 -- OCR CUSTOMER ACCOUNT NUMBER
    1. U+2488 -- DIGIT ONE FULL STOP
    2. U+2489 -- DIGIT TWO FULL STOP
    3. U+248A -- DIGIT THREE FULL STOP
    4. U+248B -- DIGIT FOUR FULL STOP
    5. U+248C -- DIGIT FIVE FULL STOP
    6. U+248D -- DIGIT SIX FULL STOP
    7. U+248E -- DIGIT SEVEN FULL STOP
    8. U+248F -- DIGIT EIGHT FULL STOP
    9. U+2490 -- DIGIT NINE FULL STOP
    hh U+2500 -- BOX DRAWINGS LIGHT HORIZONTAL
    HH U+2501 -- BOX DRAWINGS HEAVY HORIZONTAL
    vv U+2502 -- BOX DRAWINGS LIGHT VERTICAL
    VV U+2503 -- BOX DRAWINGS HEAVY VERTICAL
    3- U+2504 -- BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
    3_ U+2505 -- BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
    3! U+2506 -- BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
    3/ U+2507 -- BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
    4- U+2508 -- BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
    4_ U+2509 -- BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
    4! U+250A -- BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
    4/ U+250B -- BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
    dr U+250C -- BOX DRAWINGS LIGHT DOWN AND RIGHT
    dR U+250D -- BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
    Dr U+250E -- BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
    DR U+250F -- BOX DRAWINGS HEAVY DOWN AND RIGHT
    dl U+2510 -- BOX DRAWINGS LIGHT DOWN AND LEFT
    dL U+2511 -- BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
    Dl U+2512 -- BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
    LD U+2513 -- BOX DRAWINGS HEAVY DOWN AND LEFT
    ur U+2514 -- BOX DRAWINGS LIGHT UP AND RIGHT
    uR U+2515 -- BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
    Ur U+2516 -- BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
    UR U+2517 -- BOX DRAWINGS HEAVY UP AND RIGHT
    ul U+2518 -- BOX VOICED SOUND MARKDRAWINGS LIGHT UP AND LEFT
    uL U+2519 -- BOX DRAWINGS UP LIGHT AND LEFT HEAVY
    Ul U+251A -- BOX DRAWINGS UP HEAVY AND LEFT LIGHT
    UL U+251B -- BOX DRAWINGS HEAVY UP AND LEFT
    vr U+251C -- BOX DRAWINGS LIGHT VERTICAL AND RIGHT
    vR U+251D -- BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
    Vr U+2520 -- BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
    VR U+2523 -- BOX DRAWINGS HEAVY VERTICAL AND RIGHT
    vl U+2524 -- BOX DRAWINGS LIGHT VERTICAL AND LEFT
    vL U+2525 -- BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
    Vl U+2528 -- BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
    VL U+252B -- BOX DRAWINGS HEAVY VERTICAL AND LEFT
    dh U+252C -- BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
    dH U+252F -- BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
    Dh U+2530 -- BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
    DH U+2533 -- BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
    uh U+2534 -- BOX DRAWINGS LIGHT UP AND HORIZONTAL
    uH U+2537 -- BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
    Uh U+2538 -- BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
    UH U+253B -- BOX DRAWINGS HEAVY UP AND HORIZONTAL
    vh U+253C -- BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
    vH U+253F -- BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
    Vh U+2542 -- BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
    VH U+254B -- BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
    FD U+2571 -- BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
    BD U+2572 -- BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
    TB U+2580 -- UPPER HALF BLOCK
    LB U+2584 -- LOWER HALF BLOCK
    FB U+2588 -- FULL BLOCK
    lB U+258C -- LEFT HALF BLOCK
    RB U+2590 -- RIGHT HALF BLOCK
    .S U+2591 -- LIGHT SHADE
    :S U+2592 -- MEDIUM SHADE
    ?S U+2593 -- DARK SHADE
    fS U+25A0 -- BLACK SQUARE
    OS U+25A1 -- WHITE SQUARE
    RO U+25A2 -- WHITE SQUARE WITH ROUNDED CORNERS
    Rr U+25A3 -- WHITE SQUARE CONTAINING BLACK SMALL SQUARE
    RF U+25A4 -- SQUARE WITH HORIZONTAL FILL
    RY U+25A5 -- SQUARE WITH VERTICAL FILL
    RH U+25A6 -- SQUARE WITH ORTHOGONAL CROSSHATCH FILL
    RZ U+25A7 -- SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
    RK U+25A8 -- SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
    RX U+25A9 -- SQUARE WITH DIAGONAL CROSSHATCH FILL
    sB U+25AA -- BLACK SMALL SQUARE
    SR U+25AC -- BLACK RECTANGLE
    Or U+25AD -- WHITE RECTANGLE
    UT U+25B2 -- BLACK UP-POINTING TRIANGLE
    uT U+25B3 -- WHITE UP-POINTING TRIANGLE
    PR U+25B6 -- BLACK RIGHT-POINTING TRIANGLE
    Tr U+25B7 -- WHITE RIGHT-POINTING TRIANGLE
    Dt U+25BC -- BLACK DOWN-POINTING TRIANGLE
    dT U+25BD -- WHITE DOWN-POINTING TRIANGLE
    PL U+25C0 -- BLACK LEFT-POINTING TRIANGLE
    Tl U+25C1 -- WHITE LEFT-POINTING TRIANGLE
    Db U+25C6 -- BLACK DIAMOND
    Dw U+25C7 -- WHITE DIAMOND
    LZ U+25CA -- LOZENGE
    0m U+25CB -- WHITE CIRCLE
    0o U+25CE -- BULLSEYE
    0M U+25CF -- BLACK CIRCLE
    0L U+25D0 -- CIRCLE WITH LEFT HALF BLACK
    0R U+25D1 -- CIRCLE WITH RIGHT HALF BLACK
    Sn U+25D8 -- INVERSE BULLET
    Ic U+25D9 -- INVERSE WHITE CIRCLE
    Fd U+25E2 -- BLACK LOWER RIGHT TRIANGLE
    Bd U+25E3 -- BLACK LOWER LEFT TRIANGLE
    *2 U+2605 -- BLACK STAR
    *1 U+2606 -- WHITE STAR
    <H U+261C -- WHITE LEFT POINTING INDEX
    >H U+261E -- WHITE RIGHT POINTING INDEX
    0u U+263A -- WHITE SMILING FACE
    0U U+263B -- BLACK SMILING FACE
    SU U+263C -- WHITE SUN WITH RAYS
    Fm U+2640 -- FEMALE SIGN
    Ml U+2642 -- MALE SIGN
    cS U+2660 -- BLACK SPADE SUIT
    cH U+2661 -- WHITE HEART SUIT
    cD U+2662 -- WHITE DIAMOND SUIT
    cC U+2663 -- BLACK CLUB SUIT
    Md U+2669 -- QUARTER NOTE `
    M8 U+266A -- EIGHTH NOTE `
    M2 U+266B -- BEAMED EIGHTH NOTES
    Mb U+266D -- MUSIC FLAT SIGN
    Mx U+266E -- MUSIC NATURAL SIGN
    MX U+266F -- MUSIC SHARP SIGN
    OK U+2713 -- CHECK MARK
    XX U+2717 -- BALLOT X
    -X U+2720 -- MALTESE CROSS
    IS U+3000 -- IDEOGRAPHIC SPACE
    ,_ U+3001 -- IDEOGRAPHIC COMMA
    ._ U+3002 -- IDEOGRAPHIC FULL STOP
    +" U+3003 -- DITTO MARK
    +_ U+3004 -- JAPANESE INDUSTRIAL STANDARD SYMBOL
    *_ U+3005 -- IDEOGRAPHIC ITERATION MARK
    ;_ U+3006 -- IDEOGRAPHIC CLOSING MARK
    0_ U+3007 -- IDEOGRAPHIC NUMBER ZERO
    <+ U+300A -- LEFT DOUBLE ANGLE BRACKET
    >+ U+300B -- RIGHT DOUBLE ANGLE BRACKET
    <' U+300C -- LEFT CORNER BRACKET
    >' U+300D -- RIGHT CORNER BRACKET
    <" U+300E -- LEFT WHITE CORNER BRACKET
    >" U+300F -- RIGHT WHITE CORNER BRACKET
    (" U+3010 -- LEFT BLACK LENTICULAR BRACKET
    )" U+3011 -- RIGHT BLACK LENTICULAR BRACKET
    =T U+3012 -- POSTAL MARK
    =_ U+3013 -- GETA MARK
    (' U+3014 -- LEFT TORTOISE SHELL BRACKET
    )' U+3015 -- RIGHT TORTOISE SHELL BRACKET
    (I U+3016 -- LEFT WHITE LENTICULAR BRACKET
    )I U+3017 -- RIGHT WHITE LENTICULAR BRACKET
    -? U+301C -- WAVE DASH
    A5 U+3041 -- HIRAGANA LETTER SMALL A
    a5 U+3042 -- HIRAGANA LETTER A
    I5 U+3043 -- HIRAGANA LETTER SMALL I
    i5 U+3044 -- HIRAGANA LETTER I
    U5 U+3045 -- HIRAGANA LETTER SMALL U
    u5 U+3046 -- HIRAGANA LETTER U
    E5 U+3047 -- HIRAGANA LETTER SMALL E
    e5 U+3048 -- HIRAGANA LETTER E
    O5 U+3049 -- HIRAGANA LETTER SMALL O
    o5 U+304A -- HIRAGANA LETTER O
    ka U+304B -- HIRAGANA LETTER KA
    ga U+304C -- HIRAGANA LETTER GA
    ki U+304D -- HIRAGANA LETTER KI
    gi U+304E -- HIRAGANA LETTER GI
    ku U+304F -- HIRAGANA LETTER KU
    gu U+3050 -- HIRAGANA LETTER GU
    ke U+3051 -- HIRAGANA LETTER KE
    ge U+3052 -- HIRAGANA LETTER GE
    ko U+3053 -- HIRAGANA LETTER KO
    go U+3054 -- HIRAGANA LETTER GO
    sa U+3055 -- HIRAGANA LETTER SA
    za U+3056 -- HIRAGANA LETTER ZA
    si U+3057 -- HIRAGANA LETTER SI
    zi U+3058 -- HIRAGANA LETTER ZI
    su U+3059 -- HIRAGANA LETTER SU
    zu U+305A -- HIRAGANA LETTER ZU
    se U+305B -- HIRAGANA LETTER SE
    ze U+305C -- HIRAGANA LETTER ZE
    so U+305D -- HIRAGANA LETTER SO
    zo U+305E -- HIRAGANA LETTER ZO
    ta U+305F -- HIRAGANA LETTER TA
    da U+3060 -- HIRAGANA LETTER DA
    ti U+3061 -- HIRAGANA LETTER TI
    di U+3062 -- HIRAGANA LETTER DI
    tU U+3063 -- HIRAGANA LETTER SMALL TU
    tu U+3064 -- HIRAGANA LETTER TU
    du U+3065 -- HIRAGANA LETTER DU
    te U+3066 -- HIRAGANA LETTER TE
    de U+3067 -- HIRAGANA LETTER DE
    to U+3068 -- HIRAGANA LETTER TO
    do U+3069 -- HIRAGANA LETTER DO
    na U+306A -- HIRAGANA LETTER NA
    ni U+306B -- HIRAGANA LETTER NI
    nu U+306C -- HIRAGANA LETTER NU
    ne U+306D -- HIRAGANA LETTER NE
    no U+306E -- HIRAGANA LETTER NO
    ha U+306F -- HIRAGANA LETTER HA
    ba U+3070 -- HIRAGANA LETTER BA
    pa U+3071 -- HIRAGANA LETTER PA
    hi U+3072 -- HIRAGANA LETTER HI
    bi U+3073 -- HIRAGANA LETTER BI
    pi U+3074 -- HIRAGANA LETTER PI
    hu U+3075 -- HIRAGANA LETTER HU
    bu U+3076 -- HIRAGANA LETTER BU
    pu U+3077 -- HIRAGANA LETTER PU
    he U+3078 -- HIRAGANA LETTER HE
    be U+3079 -- HIRAGANA LETTER BE
    pe U+307A -- HIRAGANA LETTER PE
    ho U+307B -- HIRAGANA LETTER HO
    bo U+307C -- HIRAGANA LETTER BO
    po U+307D -- HIRAGANA LETTER PO
    ma U+307E -- HIRAGANA LETTER MA
    mi U+307F -- HIRAGANA LETTER MI
    mu U+3080 -- HIRAGANA LETTER MU
    me U+3081 -- HIRAGANA LETTER ME
    mo U+3082 -- HIRAGANA LETTER MO
    yA U+3083 -- HIRAGANA LETTER SMALL YA
    ya U+3084 -- HIRAGANA LETTER YA
    yU U+3085 -- HIRAGANA LETTER SMALL YU
    yu U+3086 -- HIRAGANA LETTER YU
    yO U+3087 -- HIRAGANA LETTER SMALL YO
    yo U+3088 -- HIRAGANA LETTER YO
    ra U+3089 -- HIRAGANA LETTER RA
    ri U+308A -- HIRAGANA LETTER RI
    ru U+308B -- HIRAGANA LETTER RU
    re U+308C -- HIRAGANA LETTER RE
    ro U+308D -- HIRAGANA LETTER RO
    wA U+308E -- HIRAGANA LETTER SMALL WA
    wa U+308F -- HIRAGANA LETTER WA
    wi U+3090 -- HIRAGANA LETTER WI
    we U+3091 -- HIRAGANA LETTER WE
    wo U+3092 -- HIRAGANA LETTER WO
    n5 U+3093 -- HIRAGANA LETTER N `
    vu U+3094 -- HIRAGANA LETTER VU
    "5 U+309B -- KATAKANA-HIRAGANA VOICED SOUND MARK
    05 U+309C -- KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
    *5 U+309D -- HIRAGANA ITERATION MARK
    +5 U+309E -- HIRAGANA VOICED ITERATION MARK
    a6 U+30A1 -- KATAKANA LETTER SMALL A
    A6 U+30A2 -- KATAKANA LETTER A
    i6 U+30A3 -- KATAKANA LETTER SMALL I
    I6 U+30A4 -- KATAKANA LETTER I
    u6 U+30A5 -- KATAKANA LETTER SMALL U
    U6 U+30A6 -- KATAKANA LETTER U
    e6 U+30A7 -- KATAKANA LETTER SMALL E
    E6 U+30A8 -- KATAKANA LETTER E
    o6 U+30A9 -- KATAKANA LETTER SMALL O
    O6 U+30AA -- KATAKANA LETTER O
    Ka U+30AB -- KATAKANA LETTER KA
    Ga U+30AC -- KATAKANA LETTER GA
    Ki U+30AD -- KATAKANA LETTER KI
    Gi U+30AE -- KATAKANA LETTER GI
    Ku U+30AF -- KATAKANA LETTER KU
    Gu U+30B0 -- KATAKANA LETTER GU
    Ke U+30B1 -- KATAKANA LETTER KE
    Ge U+30B2 -- KATAKANA LETTER GE
    Ko U+30B3 -- KATAKANA LETTER KO
    Go U+30B4 -- KATAKANA LETTER GO
    Sa U+30B5 -- KATAKANA LETTER SA
    Za U+30B6 -- KATAKANA LETTER ZA
    Si U+30B7 -- KATAKANA LETTER SI
    Zi U+30B8 -- KATAKANA LETTER ZI
    Su U+30B9 -- KATAKANA LETTER SU
    Zu U+30BA -- KATAKANA LETTER ZU
    Se U+30BB -- KATAKANA LETTER SE
    Ze U+30BC -- KATAKANA LETTER ZE
    So U+30BD -- KATAKANA LETTER SO
    Zo U+30BE -- KATAKANA LETTER ZO
    Ta U+30BF -- KATAKANA LETTER TA
    Da U+30C0 -- KATAKANA LETTER DA
    Ti U+30C1 -- KATAKANA LETTER TI
    Di U+30C2 -- KATAKANA LETTER DI
    TU U+30C3 -- KATAKANA LETTER SMALL TU
    Tu U+30C4 -- KATAKANA LETTER TU
    Du U+30C5 -- KATAKANA LETTER DU
    Te U+30C6 -- KATAKANA LETTER TE
    De U+30C7 -- KATAKANA LETTER DE
    To U+30C8 -- KATAKANA LETTER TO
    Do U+30C9 -- KATAKANA LETTER DO
    Na U+30CA -- KATAKANA LETTER NA
    Ni U+30CB -- KATAKANA LETTER NI
    Nu U+30CC -- KATAKANA LETTER NU
    Ne U+30CD -- KATAKANA LETTER NE
    No U+30CE -- KATAKANA LETTER NO
    Ha U+30CF -- KATAKANA LETTER HA
    Ba U+30D0 -- KATAKANA LETTER BA
    Pa U+30D1 -- KATAKANA LETTER PA
    Hi U+30D2 -- KATAKANA LETTER HI
    Bi U+30D3 -- KATAKANA LETTER BI
    Pi U+30D4 -- KATAKANA LETTER PI
    Hu U+30D5 -- KATAKANA LETTER HU
    Bu U+30D6 -- KATAKANA LETTER BU
    Pu U+30D7 -- KATAKANA LETTER PU
    He U+30D8 -- KATAKANA LETTER HE
    Be U+30D9 -- KATAKANA LETTER BE
    Pe U+30DA -- KATAKANA LETTER PE
    Ho U+30DB -- KATAKANA LETTER HO
    Bo U+30DC -- KATAKANA LETTER BO
    Po U+30DD -- KATAKANA LETTER PO
    Ma U+30DE -- KATAKANA LETTER MA
    Mi U+30DF -- KATAKANA LETTER MI
    Mu U+30E0 -- KATAKANA LETTER MU
    Me U+30E1 -- KATAKANA LETTER ME
    Mo U+30E2 -- KATAKANA LETTER MO
    YA U+30E3 -- KATAKANA LETTER SMALL YA
    Ya U+30E4 -- KATAKANA LETTER YA
    YU U+30E5 -- KATAKANA LETTER SMALL YU
    Yu U+30E6 -- KATAKANA LETTER YU
    YO U+30E7 -- KATAKANA LETTER SMALL YO
    Yo U+30E8 -- KATAKANA LETTER YO
    Ra U+30E9 -- KATAKANA LETTER RA
    Ri U+30EA -- KATAKANA LETTER RI
    Ru U+30EB -- KATAKANA LETTER RU
    Re U+30EC -- KATAKANA LETTER RE
    Ro U+30ED -- KATAKANA LETTER RO
    WA U+30EE -- KATAKANA LETTER SMALL WA
    Wa U+30EF -- KATAKANA LETTER WA
    Wi U+30F0 -- KATAKANA LETTER WI
    We U+30F1 -- KATAKANA LETTER WE
    Wo U+30F2 -- KATAKANA LETTER WO
    N6 U+30F3 -- KATAKANA LETTER N `
    Vu U+30F4 -- KATAKANA LETTER VU
    KA U+30F5 -- KATAKANA LETTER SMALL KA
    KE U+30F6 -- KATAKANA LETTER SMALL KE
    Va U+30F7 -- KATAKANA LETTER VA
    Vi U+30F8 -- KATAKANA LETTER VI
    Ve U+30F9 -- KATAKANA LETTER VE
    Vo U+30FA -- KATAKANA LETTER VO
    .6 U+30FB -- KATAKANA MIDDLE DOT
    -6 U+30FC -- KATAKANA-HIRAGANA PROLONGED SOUND MARK
    *6 U+30FD -- KATAKANA ITERATION MARK
    +6 U+30FE -- KATAKANA VOICED ITERATION MARK
    b4 U+3105 -- BOPOMOFO LETTER B
    p4 U+3106 -- BOPOMOFO LETTER P
    m4 U+3107 -- BOPOMOFO LETTER M
    f4 U+3108 -- BOPOMOFO LETTER F
    d4 U+3109 -- BOPOMOFO LETTER D
    t4 U+310A -- BOPOMOFO LETTER T
    n4 U+310B -- BOPOMOFO LETTER N `
    l4 U+310C -- BOPOMOFO LETTER L
    g4 U+310D -- BOPOMOFO LETTER G
    k4 U+310E -- BOPOMOFO LETTER K
    h4 U+310F -- BOPOMOFO LETTER H
    j4 U+3110 -- BOPOMOFO LETTER J
    q4 U+3111 -- BOPOMOFO LETTER Q
    x4 U+3112 -- BOPOMOFO LETTER X
    zh U+3113 -- BOPOMOFO LETTER ZH
    ch U+3114 -- BOPOMOFO LETTER CH
    sh U+3115 -- BOPOMOFO LETTER SH
    r4 U+3116 -- BOPOMOFO LETTER R
    z4 U+3117 -- BOPOMOFO LETTER Z
    c4 U+3118 -- BOPOMOFO LETTER C
    s4 U+3119 -- BOPOMOFO LETTER S
    a4 U+311A -- BOPOMOFO LETTER A
    o4 U+311B -- BOPOMOFO LETTER O
    e4 U+311C -- BOPOMOFO LETTER E
    ai U+311E -- BOPOMOFO LETTER AI
    ei U+311F -- BOPOMOFO LETTER EI
    au U+3120 -- BOPOMOFO LETTER AU
    ou U+3121 -- BOPOMOFO LETTER OU
    an U+3122 -- BOPOMOFO LETTER AN
    en U+3123 -- BOPOMOFO LETTER EN
    aN U+3124 -- BOPOMOFO LETTER ANG
    eN U+3125 -- BOPOMOFO LETTER ENG
    er U+3126 -- BOPOMOFO LETTER ER
    i4 U+3127 -- BOPOMOFO LETTER I
    u4 U+3128 -- BOPOMOFO LETTER U
    iu U+3129 -- BOPOMOFO LETTER IU
    v4 U+312A -- BOPOMOFO LETTER V
    nG U+312B -- BOPOMOFO LETTER NG
    gn U+312C -- BOPOMOFO LETTER GN
    1c U+3220 -- PARENTHESIZED IDEOGRAPH ONE
    2c U+3221 -- PARENTHESIZED IDEOGRAPH TWO
    3c U+3222 -- PARENTHESIZED IDEOGRAPH THREE
    4c U+3223 -- PARENTHESIZED IDEOGRAPH FOUR
    5c U+3224 -- PARENTHESIZED IDEOGRAPH FIVE
    6c U+3225 -- PARENTHESIZED IDEOGRAPH SIX
    7c U+3226 -- PARENTHESIZED IDEOGRAPH SEVEN
    8c U+3227 -- PARENTHESIZED IDEOGRAPH EIGHT
    9c U+3228 -- PARENTHESIZED IDEOGRAPH NINE
    ff U+FB00 -- LATIN SMALL LIGATURE FF
    fi U+FB01 -- LATIN SMALL LIGATURE FI
    fl U+FB02 -- LATIN SMALL LIGATURE FL
    ft U+FB05 -- LATIN SMALL LIGATURE LONG S T
    st U+FB06 -- LATIN SMALL LIGATURE ST
    |]
  