    {-# LANGUAGE FlexibleInstances #-}
    {-# LANGUAGE FlexibleContexts #-}
    {-# LANGUAGE UndecidableInstances #-}
    {-# LANGUAGE OverloadedStrings #-}
    {-# LANGUAGE ScopedTypeVariables #-}
    module Commonmark.Extensions.AutoIdentifiers
      ( autoIdentifiersSpec
      , autoIdentifiersAsciiSpec
      )
    where
    import Commonmark.Types
    import Commonmark.Syntax
    import Commonmark.Blocks
    import Data.Char (isSpace, isAlphaNum, isAscii, isMark,
                      generalCategory, GeneralCategory(ConnectorPunctuation))
    import Data.Dynamic
    import qualified Data.Map as M
    import qualified Data.Text as T
    import qualified Text.Emoji as Emoji
    import Text.Parsec

    autoIdentifiersSpec :: (Monad m, IsBlock il bl, IsInline il, ToPlainText il)
                        => SyntaxSpec m il bl
    autoIdentifiersSpec :: forall (m :: * -> *) il bl.
    (Monad m, IsBlock il bl, IsInline il, ToPlainText il) =>
    SyntaxSpec m il bl
    autoIdentifiersSpec = SyntaxSpec m il bl
    forall a. Monoid a => a
    mempty
      { syntaxFinalParsers = [addAutoIdentifiers False]
      }

    autoIdentifiersAsciiSpec
                        :: (Monad m, IsBlock il bl, IsInline il, ToPlainText il)
                        => SyntaxSpec m il bl
    autoIdentifiersAsciiSpec :: forall (m :: * -> *) il bl.
    (Monad m, IsBlock il bl, IsInline il, ToPlainText il) =>
    SyntaxSpec m il bl
    autoIdentifiersAsciiSpec = SyntaxSpec m il bl
    forall a. Monoid a => a
    mempty
      { syntaxFinalParsers = [addAutoIdentifiers True]
      }

    -- Go through the node stack and add identifiers where they
    -- are missing.
    addAutoIdentifiers :: (Monad m, IsBlock il bl, IsInline il, ToPlainText il)
                       => Bool -> BlockParser m il bl bl
    addAutoIdentifiers :: forall (m :: * -> *) il bl.
    (Monad m, IsBlock il bl, IsInline il, ToPlainText il) =>
    Bool -> BlockParser m il bl bl
    addAutoIdentifiers Bool
    ascii = do
      nodes <- BPState m il bl -> [BlockNode m il bl]
    forall (m :: * -> *) il bl. BPState m il bl -> [BlockNode m il bl]
    nodeStack (BPState m il bl -> [BlockNode m il bl])
    -> ParsecT [Tok] (BPState m il bl) m (BPState m il bl)
    -> ParsecT [Tok] (BPState m il bl) m [BlockNode m il bl]
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    <$> ParsecT [Tok] (BPState m il bl) m (BPState m il bl)
    forall (m :: * -> *) s u. Monad m => ParsecT s u m u
    getState
      nodes' <- mapM (traverse $ addId ascii) nodes
      updateState $ \BPState m il bl
    st -> BPState m il bl
    st{ nodeStack = nodes' }
      return $! mempty

    addId :: (Monad m, IsBlock il bl, IsInline il, ToPlainText il)
           => Bool -> BlockData m il bl -> BlockParser m il bl (BlockData m il bl)
    addId :: forall (m :: * -> *) il bl.
    (Monad m, IsBlock il bl, IsInline il, ToPlainText il) =>
    Bool
    -> BlockData m il bl -> BlockParser m il bl (BlockData m il bl)
    addId Bool
    ascii BlockData m il bl
    bd
      | BlockSpec m il bl -> Text
    forall (m :: * -> *) il bl. BlockSpec m il bl -> Text
    blockType (BlockData m il bl -> BlockSpec m il bl
    forall (m :: * -> *) il bl. BlockData m il bl -> BlockSpec m il bl
    blockSpec BlockData m il bl
    bd) Text -> [Text] -> Bool
    forall a. Eq a => a -> [a] -> Bool
    forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
    `elem` [Text
    "ATXHeading", Text
    "SetextHeading"] =
        case Text -> [(Text, Text)] -> Maybe Text
    forall a b. Eq a => a -> [(a, b)] -> Maybe b
    lookup Text
    "id" (BlockData m il bl -> [(Text, Text)]
    forall (m :: * -> *) il bl. BlockData m il bl -> [(Text, Text)]
    blockAttributes BlockData m il bl
    bd) of
          Maybe Text
    Nothing  -> do
            contents <- [Tok] -> BlockParser m il bl il
    forall (m :: * -> *) il bl.
    Monad m =>
    [Tok] -> BlockParser m il bl il
    runInlineParser
                        ([Tok] -> [Tok]
    removeIndent ([Tok] -> [Tok])
    -> (BlockData m il bl -> [Tok]) -> BlockData m il bl -> [Tok]
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . [[Tok]] -> [Tok]
    forall a. Monoid a => [a] -> a
    mconcat ([[Tok]] -> [Tok])
    -> (BlockData m il bl -> [[Tok]]) -> BlockData m il bl -> [Tok]
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . [[Tok]] -> [[Tok]]
    forall a. [a] -> [a]
    reverse ([[Tok]] -> [[Tok]])
    -> (BlockData m il bl -> [[Tok]]) -> BlockData m il bl -> [[Tok]]
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . BlockData m il bl -> [[Tok]]
    forall (m :: * -> *) il bl. BlockData m il bl -> [[Tok]]
    blockLines (BlockData m il bl -> [Tok]) -> BlockData m il bl -> [Tok]
    forall a b. (a -> b) -> a -> b
    $ BlockData m il bl
    bd)
            let ident = Bool -> Text -> Text
    makeIdentifier Bool
    ascii
                         ((Text -> [Text] -> Text) -> Text -> Text
    Emoji.replaceEmojis Text -> [Text] -> Text
    emojiToAlias (Text -> Text) -> Text -> Text
    forall a b. (a -> b) -> a -> b
    $ il -> Text
    forall a. ToPlainText a => a -> Text
    toPlainText il
    contents)
            counterMap <- counters <$> getState
            let key = Text
    "identifier:" Text -> Text -> Text
    forall a. Semigroup a => a -> a -> a
    <> Text
    ident
            cnt <- case M.lookup key counterMap of
                        Maybe Dynamic
    Nothing -> Int -> ParsecT [Tok] (BPState m il bl) m Int
    forall a. a -> ParsecT [Tok] (BPState m il bl) m a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int
    0
                        Just Dynamic
    x  -> Int -> ParsecT [Tok] (BPState m il bl) m Int
    forall a. a -> ParsecT [Tok] (BPState m il bl) m a
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int -> ParsecT [Tok] (BPState m il bl) m Int)
    -> Int -> ParsecT [Tok] (BPState m il bl) m Int
    forall a b. (a -> b) -> a -> b
    $! (Dynamic -> Int -> Int
    forall a. Typeable a => Dynamic -> a -> a
    fromDyn Dynamic
    x (Int
    0 :: Int) Int -> Int -> Int
    forall a. Num a => a -> a -> a
    + Int
    1)
            let ident' = if Int
    cnt Int -> Int -> Bool
    forall a. Eq a => a -> a -> Bool
    == Int
    0
                            then Text
    ident
                            else Text
    ident Text -> Text -> Text
    forall a. Semigroup a => a -> a -> a
    <> Text
    "-" Text -> Text -> Text
    forall a. Semigroup a => a -> a -> a
    <> String -> Text
    T.pack (Int -> String
    forall a. Show a => a -> String
    show Int
    cnt)
            updateState $ \BPState m il bl
    st ->
              BPState m il bl
    st{ counters = M.insert key (toDyn cnt) counterMap }
            return $! bd{ blockAttributes = ("id",ident') : blockAttributes bd }
          Just Text
    _ -> BlockData m il bl -> BlockParser m il bl (BlockData m il bl)
    forall a. a -> ParsecT [Tok] (BPState m il bl) m a
    forall (m :: * -> *) a. Monad m => a -> m a
    return (BlockData m il bl -> BlockParser m il bl (BlockData m il bl))
    -> BlockData m il bl -> BlockParser m il bl (BlockData m il bl)
    forall a b. (a -> b) -> a -> b
    $! BlockData m il bl
    bd
      | Bool
    otherwise = BlockData m il bl -> BlockParser m il bl (BlockData m il bl)
    forall a. a -> ParsecT [Tok] (BPState m il bl) m a
    forall (m :: * -> *) a. Monad m => a -> m a
    return (BlockData m il bl -> BlockParser m il bl (BlockData m il bl))
    -> BlockData m il bl -> BlockParser m il bl (BlockData m il bl)
    forall a b. (a -> b) -> a -> b
    $! BlockData m il bl
    bd

    emojiToAlias :: T.Text -> [T.Text] -> T.Text
    emojiToAlias :: Text -> [Text] -> Text
    emojiToAlias Text
    t [] = Text
    t
    emojiToAlias Text
    _ (Text
    a:[Text]
    _) = Text
    a

    makeIdentifier :: Bool -> T.Text -> T.Text
    makeIdentifier :: Bool -> Text -> Text
    makeIdentifier Bool
    ascii = Text -> Text
    toIdent (Text -> Text) -> (Text -> Text) -> Text -> Text
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Text -> Text
    T.toLower
      where
        toIdent :: Text -> Text
    toIdent = (Char -> Text) -> Text -> Text
    T.concatMap Char -> Text
    f
        f :: Char -> Text
    f Char
    '-' = Text
    "-"
        f Char
    '_' = Text
    "_"
        f Char
    c | Char -> Bool
    isSpace Char
    c = Text
    "-"
        f Char
    c | Char -> Bool
    isAlphaNum Char
    c Bool -> Bool -> Bool
    || Char -> Bool
    isMark Char
    c Bool -> Bool -> Bool
    ||
              Char -> GeneralCategory
    generalCategory Char
    c GeneralCategory -> GeneralCategory -> Bool
    forall a. Eq a => a -> a -> Bool
    == GeneralCategory
    ConnectorPunctuation
                        = Char -> Text
    fromchar Char
    c
            | Bool
    otherwise = Text
    forall a. Monoid a => a
    mempty
        fromchar :: Char -> Text
    fromchar Char
    c
          | Bool
    ascii =
            if Char -> Bool
    isAscii Char
    c
               then Char -> Text
    T.singleton Char
    c
               else case Char -> Map Char Char -> Maybe Char
    forall k a. Ord k => k -> Map k a -> Maybe a
    M.lookup Char
    c Map Char Char
    asciiMap of
                           Maybe Char
    Nothing -> Text
    forall a. Monoid a => a
    mempty
                           Just Char
    d -> Char -> Text
    T.singleton Char
    d
          | Bool
    otherwise = Char -> Text
    T.singleton Char
    c

    asciiMap :: M.Map Char Char
    asciiMap :: Map Char Char
    asciiMap = [(Char, Char)] -> Map Char Char
    forall k a. Ord k => [(k, a)] -> Map k a
    M.fromList
      [(Char
    '\192',Char
    'A')
      ,(Char
    '\193',Char
    'A')
      ,(Char
    '\194',Char
    'A')
      ,(Char
    '\195',Char
    'A')
      ,(Char
    '\196',Char
    'A')
      ,(Char
    '\197',Char
    'A')
      ,(Char
    '\199',Char
    'C')
      ,(Char
    '\200',Char
    'E')
      ,(Char
    '\201',Char
    'E')
      ,(Char
    '\202',Char
    'E')
      ,(Char
    '\203',Char
    'E')
      ,(Char
    '\204',Char
    'I')
      ,(Char
    '\205',Char
    'I')
      ,(Char
    '\206',Char
    'I')
      ,(Char
    '\207',Char
    'I')
      ,(Char
    '\209',Char
    'N')
      ,(Char
    '\210',Char
    'O')
      ,(Char
    '\211',Char
    'O')
      ,(Char
    '\212',Char
    'O')
      ,(Char
    '\213',Char
    'O')
      ,(Char
    '\214',Char
    'O')
      ,(Char
    '\217',Char
    'U')
      ,(Char
    '\218',Char
    'U')
      ,(Char
    '\219',Char
    'U')
      ,(Char
    '\220',Char
    'U')
      ,(Char
    '\221',Char
    'Y')
      ,(Char
    '\224',Char
    'a')
      ,(Char
    '\225',Char
    'a')
      ,(Char
    '\226',Char
    'a')
      ,(Char
    '\227',Char
    'a')
      ,(Char
    '\228',Char
    'a')
      ,(Char
    '\229',Char
    'a')
      ,(Char
    '\231',Char
    'c')
      ,(Char
    '\232',Char
    'e')
      ,(Char
    '\233',Char
    'e')
      ,(Char
    '\234',Char
    'e')
      ,(Char
    '\235',Char
    'e')
      ,(Char
    '\236',Char
    'i')
      ,(Char
    '\237',Char
    'i')
      ,(Char
    '\238',Char
    'i')
      ,(Char
    '\239',Char
    'i')
      ,(Char
    '\241',Char
    'n')
      ,(Char
    '\242',Char
    'o')
      ,(Char
    '\243',Char
    'o')
      ,(Char
    '\244',Char
    'o')
      ,(Char
    '\245',Char
    'o')
      ,(Char
    '\246',Char
    'o')
      ,(Char
    '\249',Char
    'u')
      ,(Char
    '\250',Char
    'u')
      ,(Char
    '\251',Char
    'u')
      ,(Char
    '\252',Char
    'u')
      ,(Char
    '\253',Char
    'y')
      ,(Char
    '\255',Char
    'y')
      ,(Char
    '\256',Char
    'A')
      ,(Char
    '\257',Char
    'a')
      ,(Char
    '\258',Char
    'A')
      ,(Char
    '\259',Char
    'a')
      ,(Char
    '\260',Char
    'A')
      ,(Char
    '\261',Char
    'a')
      ,(Char
    '\262',Char
    'C')
      ,(Char
    '\263',Char
    'c')
      ,(Char
    '\264',Char
    'C')
      ,(Char
    '\265',Char
    'c')
      ,(Char
    '\266',Char
    'C')
      ,(Char
    '\267',Char
    'c')
      ,(Char
    '\268',Char
    'C')
      ,(Char
    '\269',Char
    'c')
      ,(Char
    '\270',Char
    'D')
      ,(Char
    '\271',Char
    'd')
      ,(Char
    '\274',Char
    'E')
      ,(Char
    '\275',Char
    'e')
      ,(Char
    '\276',Char
    'E')
      ,(Char
    '\277',Char
    'e')
      ,(Char
    '\278',Char
    'E')
      ,(Char
    '\279',Char
    'e')
      ,(Char
    '\280',Char
    'E')
      ,(Char
    '\281',Char
    'e')
      ,(Char
    '\282',Char
    'E')
      ,(Char
    '\283',Char
    'e')
      ,(Char
    '\284',Char
    'G')
      ,(Char
    '\285',Char
    'g')
      ,(Char
    '\286',Char
    'G')
      ,(Char
    '\287',Char
    'g')
      ,(Char
    '\288',Char
    'G')
      ,(Char
    '\289',Char
    'g')
      ,(Char
    '\290',Char
    'G')
      ,(Char
    '\291',Char
    'g')
      ,(Char
    '\292',Char
    'H')
      ,(Char
    '\293',Char
    'h')
      ,(Char
    '\296',Char
    'I')
      ,(Char
    '\297',Char
    'i')
      ,(Char
    '\298',Char
    'I')
      ,(Char
    '\299',Char
    'i')
      ,(Char
    '\300',Char
    'I')
      ,(Char
    '\301',Char
    'i')
      ,(Char
    '\302',Char
    'I')
      ,(Char
    '\303',Char
    'i')
      ,(Char
    '\304',Char
    'I')
      ,(Char
    '\305',Char
    'i')
      ,(Char
    '\308',Char
    'J')
      ,(Char
    '\309',Char
    'j')
      ,(Char
    '\310',Char
    'K')
      ,(Char
    '\311',Char
    'k')
      ,(Char
    '\313',Char
    'L')
      ,(Char
    '\314',Char
    'l')
      ,(Char
    '\315',Char
    'L')
      ,(Char
    '\316',Char
    'l')
      ,(Char
    '\317',Char
    'L')
      ,(Char
    '\318',Char
    'l')
      ,(Char
    '\323',Char
    'N')
      ,(Char
    '\324',Char
    'n')
      ,(Char
    '\325',Char
    'N')
      ,(Char
    '\326',Char
    'n')
      ,(Char
    '\327',Char
    'N')
      ,(Char
    '\328',Char
    'n')
      ,(Char
    '\332',Char
    'O')
      ,(Char
    '\333',Char
    'o')
      ,(Char
    '\334',Char
    'O')
      ,(Char
    '\335',Char
    'o')
      ,(Char
    '\336',Char
    'O')
      ,(Char
    '\337',Char
    'o')
      ,(Char
    '\340',Char
    'R')
      ,(Char
    '\341',Char
    'r')
      ,(Char
    '\342',Char
    'R')
      ,(Char
    '\343',Char
    'r')
      ,(Char
    '\344',Char
    'R')
      ,(Char
    '\345',Char
    'r')
      ,(Char
    '\346',Char
    'S')
      ,(Char
    '\347',Char
    's')
      ,(Char
    '\348',Char
    'S')
      ,(Char
    '\349',Char
    's')
      ,(Char
    '\350',Char
    'S')
      ,(Char
    '\351',Char
    's')
      ,(Char
    '\352',Char
    'S')
      ,(Char
    '\353',Char
    's')
      ,(Char
    '\354',Char
    'T')
      ,(Char
    '\355',Char
    't')
      ,(Char
    '\356',Char
    'T')
      ,(Char
    '\357',Char
    't')
      ,(Char
    '\360',Char
    'U')
      ,(Char
    '\361',Char
    'u')
      ,(Char
    '\362',Char
    'U')
      ,(Char
    '\363',Char
    'u')
      ,(Char
    '\364',Char
    'U')
      ,(Char
    '\365',Char
    'u')
      ,(Char
    '\366',Char
    'U')
      ,(Char
    '\367',Char
    'u')
      ,(Char
    '\368',Char
    'U')
      ,(Char
    '\369',Char
    'u')
      ,(Char
    '\370',Char
    'U')
      ,(Char
    '\371',Char
    'u')
      ,(Char
    '\372',Char
    'W')
      ,(Char
    '\373',Char
    'w')
      ,(Char
    '\374',Char
    'Y')
      ,(Char
    '\375',Char
    'y')
      ,(Char
    '\376',Char
    'Y')
      ,(Char
    '\377',Char
    'Z')
      ,(Char
    '\378',Char
    'z')
      ,(Char
    '\379',Char
    'Z')
      ,(Char
    '\380',Char
    'z')
      ,(Char
    '\381',Char
    'Z')
      ,(Char
    '\382',Char
    'z')
      ,(Char
    '\416',Char
    'O')
      ,(Char
    '\417',Char
    'o')
      ,(Char
    '\431',Char
    'U')
      ,(Char
    '\432',Char
    'u')
      ,(Char
    '\461',Char
    'A')
      ,(Char
    '\462',Char
    'a')
      ,(Char
    '\463',Char
    'I')
      ,(Char
    '\464',Char
    'i')
      ,(Char
    '\465',Char
    'O')
      ,(Char
    '\466',Char
    'o')
      ,(Char
    '\467',Char
    'U')
      ,(Char
    '\468',Char
    'u')
      ,(Char
    '\486',Char
    'G')
      ,(Char
    '\487',Char
    'g')
      ,(Char
    '\488',Char
    'K')
      ,(Char
    '\489',Char
    'k')
      ,(Char
    '\490',Char
    'O')
      ,(Char
    '\491',Char
    'o')
      ,(Char
    '\496',Char
    'j')
      ,(Char
    '\500',Char
    'G')
      ,(Char
    '\501',Char
    'g')
      ,(Char
    '\504',Char
    'N')
      ,(Char
    '\505',Char
    'n')
      ,(Char
    '\512',Char
    'A')
      ,(Char
    '\513',Char
    'a')
      ,(Char
    '\514',Char
    'A')
      ,(Char
    '\515',Char
    'a')
      ,(Char
    '\516',Char
    'E')
      ,(Char
    '\517',Char
    'e')
      ,(Char
    '\518',Char
    'E')
      ,(Char
    '\519',Char
    'e')
      ,(Char
    '\520',Char
    'I')
      ,(Char
    '\521',Char
    'i')
      ,(Char
    '\522',Char
    'I')
      ,(Char
    '\523',Char
    'i')
      ,(Char
    '\524',Char
    'O')
      ,(Char
    '\525',Char
    'o')
      ,(Char
    '\526',Char
    'O')
      ,(Char
    '\527',Char
    'o')
      ,(Char
    '\528',Char
    'R')
      ,(Char
    '\529',Char
    'r')
      ,(Char
    '\530',Char
    'R')
      ,(Char
    '\531',Char
    'r')
      ,(Char
    '\532',Char
    'U')
      ,(Char
    '\533',Char
    'u')
      ,(Char
    '\534',Char
    'U')
      ,(Char
    '\535',Char
    'u')
      ,(Char
    '\536',Char
    'S')
      ,(Char
    '\537',Char
    's')
      ,(Char
    '\538',Char
    'T')
      ,(Char
    '\539',Char
    't')
      ,(Char
    '\542',Char
    'H')
      ,(Char
    '\543',Char
    'h')
      ,(Char
    '\550',Char
    'A')
      ,(Char
    '\551',Char
    'a')
      ,(Char
    '\552',Char
    'E')
      ,(Char
    '\553',Char
    'e')
      ,(Char
    '\558',Char
    'O')
      ,(Char
    '\559',Char
    'o')
      ,(Char
    '\562',Char
    'Y')
      ,(Char
    '\563',Char
    'y')
      ,(Char
    '\894',Char
    ';')
      ,(Char
    '\7680',Char
    'A')
      ,(Char
    '\7681',Char
    'a')
      ,(Char
    '\7682',Char
    'B')
      ,(Char
    '\7683',Char
    'b')
      ,(Char
    '\7684',Char
    'B')
      ,(Char
    '\7685',Char
    'b')
      ,(Char
    '\7686',Char
    'B')
      ,(Char
    '\7687',Char
    'b')
      ,(Char
    '\7690',Char
    'D')
      ,(Char
    '\7691',Char
    'd')
      ,(Char
    '\7692',Char
    'D')
      ,(Char
    '\7693',Char
    'd')
      ,(Char
    '\7694',Char
    'D')
      ,(Char
    '\7695',Char
    'd')
      ,(Char
    '\7696',Char
    'D')
      ,(Char
    '\7697',Char
    'd')
      ,(Char
    '\7698',Char
    'D')
      ,(Char
    '\7699',Char
    'd')
      ,(Char
    '\7704',Char
    'E')
      ,(Char
    '\7705',Char
    'e')
      ,(Char
    '\7706',Char
    'E')
      ,(Char
    '\7707',Char
    'e')
      ,(Char
    '\7710',Char
    'F')
      ,(Char
    '\7711',Char
    'f')
      ,(Char
    '\7712',Char
    'G')
      ,(Char
    '\7713',Char
    'g')
      ,(Char
    '\7714',Char
    'H')
      ,(Char
    '\7715',Char
    'h')
      ,(Char
    '\7716',Char
    'H')
      ,(Char
    '\7717',Char
    'h')
      ,(Char
    '\7718',Char
    'H')
      ,(Char
    '\7719',Char
    'h')
      ,(Char
    '\7720',Char
    'H')
      ,(Char
    '\7721',Char
    'h')
      ,(Char
    '\7722',Char
    'H')
      ,(Char
    '\7723',Char
    'h')
      ,(Char
    '\7724',Char
    'I')
      ,(Char
    '\7725',Char
    'i')
      ,(Char
    '\7728',Char
    'K')
      ,(Char
    '\7729',Char
    'k')
      ,(Char
    '\7730',Char
    'K')
      ,(Char
    '\7731',Char
    'k')
      ,(Char
    '\7732',Char
    'K')
      ,(Char
    '\7733',Char
    'k')
      ,(Char
    '\7734',Char
    'L')
      ,(Char
    '\7735',Char
    'l')
      ,(Char
    '\7738',Char
    'L')
      ,(Char
    '\7739',Char
    'l')
      ,(Char
    '\7740',Char
    'L')
      ,(Char
    '\7741',Char
    'l')
      ,(Char
    '\7742',Char
    'M')
      ,(Char
    '\7743',Char
    'm')
      ,(Char
    '\7744',Char
    'M')
      ,(Char
    '\7745',Char
    'm')
      ,(Char
    '\7746',Char
    'M')
      ,(Char
    '\7747',Char
    'm')
      ,(Char
    '\7748',Char
    'N')
      ,(Char
    '\7749',Char
    'n')
      ,(Char
    '\7750',Char
    'N')
      ,(Char
    '\7751',Char
    'n')
      ,(Char
    '\7752',Char
    'N')
      ,(Char
    '\7753',Char
    'n')
      ,(Char
    '\7754',Char
    'N')
      ,(Char
    '\7755',Char
    'n')
      ,(Char
    '\7764',Char
    'P')
      ,(Char
    '\7765',Char
    'p')
      ,(Char
    '\7766',Char
    'P')
      ,(Char
    '\7767',Char
    'p')
      ,(Char
    '\7768',Char
    'R')
      ,(Char
    '\7769',Char
    'r')
      ,(Char
    '\7770',Char
    'R')
      ,(Char
    '\7771',Char
    'r')
      ,(Char
    '\7774',Char
    'R')
      ,(Char
    '\7775',Char
    'r')
      ,(Char
    '\7776',Char
    'S')
      ,(Char
    '\7777',Char
    's')
      ,(Char
    '\7778',Char
    'S')
      ,(Char
    '\7779',Char
    's')
      ,(Char
    '\7786',Char
    'T')
      ,(Char
    '\7787',Char
    't')
      ,(Char
    '\7788',Char
    'T')
      ,(Char
    '\7789',Char
    't')
      ,(Char
    '\7790',Char
    'T')
      ,(Char
    '\7791',Char
    't')
      ,(Char
    '\7792',Char
    'T')
      ,(Char
    '\7793',Char
    't')
      ,(Char
    '\7794',Char
    'U')
      ,(Char
    '\7795',Char
    'u')
      ,(Char
    '\7796',Char
    'U')
      ,(Char
    '\7797',Char
    'u')
      ,(Char
    '\7798',Char
    'U')
      ,(Char
    '\7799',Char
    'u')
      ,(Char
    '\7804',Char
    'V')
      ,(Char
    '\7805',Char
    'v')
      ,(Char
    '\7806',Char
    'V')
      ,(Char
    '\7807',Char
    'v')
      ,(Char
    '\7808',Char
    'W')
      ,(Char
    '\7809',Char
    'w')
      ,(Char
    '\7810',Char
    'W')
      ,(Char
    '\7811',Char
    'w')
      ,(Char
    '\7812',Char
    'W')
      ,(Char
    '\7813',Char
    'w')
      ,(Char
    '\7814',Char
    'W')
      ,(Char
    '\7815',Char
    'w')
      ,(Char
    '\7816',Char
    'W')
      ,(Char
    '\7817',Char
    'w')
      ,(Char
    '\7818',Char
    'X')
      ,(Char
    '\7819',Char
    'x')
      ,(Char
    '\7820',Char
    'X')
      ,(Char
    '\7821',Char
    'x')
      ,(Char
    '\7822',Char
    'Y')
      ,(Char
    '\7823',Char
    'y')
      ,(Char
    '\7824',Char
    'Z')
      ,(Char
    '\7825',Char
    'z')
      ,(Char
    '\7826',Char
    'Z')
      ,(Char
    '\7827',Char
    'z')
      ,(Char
    '\7828',Char
    'Z')
      ,(Char
    '\7829',Char
    'z')
      ,(Char
    '\7830',Char
    'h')
      ,(Char
    '\7831',Char
    't')
      ,(Char
    '\7832',Char
    'w')
      ,(Char
    '\7833',Char
    'y')
      ,(Char
    '\7840',Char
    'A')
      ,(Char
    '\7841',Char
    'a')
      ,(Char
    '\7842',Char
    'A')
      ,(Char
    '\7843',Char
    'a')
      ,(Char
    '\7864',Char
    'E')
      ,(Char
    '\7865',Char
    'e')
      ,(Char
    '\7866',Char
    'E')
      ,(Char
    '\7867',Char
    'e')
      ,(Char
    '\7868',Char
    'E')
      ,(Char
    '\7869',Char
    'e')
      ,(Char
    '\7880',Char
    'I')
      ,(Char
    '\7881',Char
    'i')
      ,(Char
    '\7882',Char
    'I')
      ,(Char
    '\7883',Char
    'i')
      ,(Char
    '\7884',Char
    'O')
      ,(Char
    '\7885',Char
    'o')
      ,(Char
    '\7886',Char
    'O')
      ,(Char
    '\7887',Char
    'o')
      ,(Char
    '\7908',Char
    'U')
      ,(Char
    '\7909',Char
    'u')
      ,(Char
    '\7910',Char
    'U')
      ,(Char
    '\7911',Char
    'u')
      ,(Char
    '\7922',Char
    'Y')
      ,(Char
    '\7923',Char
    'y')
      ,(Char
    '\7924',Char
    'Y')
      ,(Char
    '\7925',Char
    'y')
      ,(Char
    '\7926',Char
    'Y')
      ,(Char
    '\7927',Char
    'y')
      ,(Char
    '\7928',Char
    'Y')
      ,(Char
    '\7929',Char
    'y')
      ,(Char
    '\8175',Char
    '`')
      ,(Char
    '\8490',Char
    'K')
      ,(Char
    '\8800',Char
    '=')
      ,(Char
    '\8814',Char
    '<')
      ,(Char
    '\8815',Char
    '>')
      ]