unicode-data 0.2.0 → 0.3.0
raw patch · 21 files changed
+5794/−44 lines, 21 filesdep +deepseqdep +hspecdep +tastydep ~basenew-uploader
Dependencies added: deepseq, hspec, tasty, tasty-bench, unicode-data
Dependency ranges changed: base
Files
- Changelog.md +37/−0
- README.md +101/−5
- bench/Main.hs +201/−0
- exe/Parser/Text.hs +224/−17
- lib/Unicode/Char.hs +20/−1
- lib/Unicode/Char/Case.hs +21/−5
- lib/Unicode/Char/Case/Compat.hs +81/−0
- lib/Unicode/Char/General.hs +393/−7
- lib/Unicode/Char/General/Compat.hs +81/−0
- lib/Unicode/Char/Identifiers.hs +12/−0
- lib/Unicode/Char/Normalization.hs +18/−0
- lib/Unicode/Char/Numeric.hs +43/−0
- lib/Unicode/Internal/Bits.hs +41/−4
- lib/Unicode/Internal/Char/UnicodeData/GeneralCategory.hs too large to diff
- lib/Unicode/Internal/Char/UnicodeData/SimpleLowerCaseMapping.hs +1448/−0
- lib/Unicode/Internal/Char/UnicodeData/SimpleTitleCaseMapping.hs +1469/−0
- lib/Unicode/Internal/Char/UnicodeData/SimpleUpperCaseMapping.hs +1465/−0
- test/Main.hs +1/−0
- test/Unicode/CharSpec.hs +88/−0
- ucd.sh +5/−1
- unicode-data.cabal +45/−4
Changelog.md view
@@ -1,5 +1,42 @@ # Changelog +## 0.3.0 (December 2021)++- Support for big-endian architectures.+- Added `unicodeVersion`.+- Added `GeneralCategory` data type and corresponding `generalCategoryAbbr`,+ `generalCategory` functions.+- Added the following functions to `Unicode.Char.General`:+ `isAlphabetic`, `isAlphaNum`,+ `isControl`, `isMark`, `isPrint`, `isPunctuation`, `isSeparator`,+ `isSymbol` and `isWhiteSpace`.+- Added the module `Unicode.Char.Numeric`.+- Add compatibility modules:++ - `Unicode.Char.General.Compat`+ - `Unicode.Char.Case.Compat`++ These modules are compatible with `base:Data.Char`.+- Re-export some functions from `Data.Char` in order to make `Unicode.Char`+ a drop-in replacement in a _future_ version of this package.+- Drop support for GHC 7.10.3++### Deprecations++- In `Unicode.Char.Case`:++ - `isUpper`: use `isUpperCase` instead.+ - `isLower`: use `isLowerCase` instead.++- In `Unicode.Char.General`:++ - `isLetter`: use `isAlphabetic` instead.+ - `isSpace`: use `isWhiteSpace` instead.++- In `Unicode.Char`: same as hereinabove. These functions will be replaced in a+ _future_ release with the functions with the same names from+ `Unicode.Char.Case.Compat` and `Unicode.Char.General.Compat`.+ ## 0.2.0 (November 2021) * Update to [Unicode 14.0.0](https://www.unicode.org/versions/Unicode14.0.0/).
README.md view
@@ -8,12 +8,108 @@ Unicode character database (UCD) files. The latest Unicode version supported by this library is 14.0.0. -This package is far from complete. Currently it supports normalization-related functions and a few other properties, primarily to support-`unicode-transforms` package. More properties can be added as needed by-any other packages or use cases.- Please see the haddock documentation for reference documentation.++## Performance++`unicode-data` is up to _5 times faster_ than `base`.++The following benchmark compares the time taken in milliseconds to process all+the Unicode code points for `base-4.16` (GHC 9.2.1) and this package (v0.3).+Machine: 8 × AMD Ryzen 5 2500U on Linux.++```+All+ Unicode.Char.Case.Compat+ isLower+ base: OK (1.53s)+ 24 ms ± 3.8 ms+ unicode-data: OK (2.25s)+ 4.4 ms ± 88 μs, 0.19x+ isUpper+ base: OK (1.50s)+ 24 ms ± 450 μs+ unicode-data: OK (2.37s)+ 4.7 ms ± 200 μs, 0.19x+ toLower+ base: OK (1.40s)+ 22 ms ± 1.8 ms+ unicode-data: OK (1.89s)+ 7.2 ms ± 297 μs, 0.32x+ toTitle+ base: OK (1.25s)+ 20 ms ± 2.0 ms+ unicode-data: OK (1.65s)+ 6.4 ms ± 509 μs, 0.32x+ toUpper+ base: OK (1.26s)+ 20 ms ± 2.5 ms+ unicode-data: OK (1.72s)+ 6.8 ms ± 335 μs, 0.34x+ Unicode.Char.General+ generalCategory+ base: OK (2.02s)+ 134 ms ± 1.6 ms+ unicode-data: OK (1.75s)+ 116 ms ± 1.6 ms, 0.87x+ isAlphaNum+ base: OK (1.53s)+ 24 ms ± 1.7 ms+ unicode-data: OK (2.16s)+ 4.2 ms ± 29 μs, 0.18x+ isControl+ base: OK (1.47s)+ 23 ms ± 2.6 ms+ unicode-data: OK (2.23s)+ 4.4 ms ± 22 μs, 0.19x+ isMark+ base: OK (1.47s)+ 23 ms ± 624 μs+ unicode-data: OK (2.28s)+ 4.5 ms ± 48 μs, 0.19x+ isPrint+ base: OK (1.53s)+ 25 ms ± 2.4 ms+ unicode-data: OK (2.27s)+ 4.4 ms ± 50 μs, 0.18x+ isPunctuation+ base: OK (1.51s)+ 24 ms ± 459 μs+ unicode-data: OK (2.24s)+ 4.4 ms ± 25 μs, 0.18x+ isSeparator+ base: OK (1.52s)+ 24 ms ± 407 μs+ unicode-data: OK (2.43s)+ 4.8 ms ± 94 μs, 0.20x+ isSymbol+ base: OK (1.49s)+ 24 ms ± 863 μs+ unicode-data: OK (1.34s)+ 5.2 ms ± 92 μs, 0.22x+ Unicode.Char.General.Compat+ isAlpha+ base: OK (1.46s)+ 23 ms ± 322 μs+ unicode-data: OK (2.14s)+ 4.1 ms ± 36 μs, 0.18x+ isLetter+ base: OK (1.44s)+ 22 ms ± 640 μs+ unicode-data: OK (2.17s)+ 4.3 ms ± 58 μs, 0.19x+ isSpace+ base: OK (1.44s)+ 11 ms ± 1.2 ms+ unicode-data: OK (1.36s)+ 5.3 ms ± 243 μs, 0.49x+ Unicode.Char.Numeric+ isNumber+ base: OK (1.52s)+ 24 ms ± 368 μs+ unicode-data: OK (2.41s)+ 4.7 ms ± 41 μs, 0.19x+``` ## Unicode database version update
+ bench/Main.hs view
@@ -0,0 +1,201 @@+import Control.DeepSeq (NFData, deepseq)+import Data.Ix (Ix(..))+import Test.Tasty.Bench (Benchmark, bgroup, bench, bcompare, nf, defaultMain)++import qualified Data.Char as B+import qualified Unicode.Char.Case as C+import qualified Unicode.Char.Case.Compat as CC+import qualified Unicode.Char.General as G+import qualified Unicode.Char.General.Compat as GC+import qualified Unicode.Char.Identifiers as I+import qualified Unicode.Char.Normalization as N+import qualified Unicode.Char.Numeric as Num++-- | A unit benchmark+data Bench a = Bench+ { _title :: !String -- ^ Name+ , _func :: Char -> a -- ^ Function to benchmark+ }++main :: IO ()+main = defaultMain+ [ bgroup "Unicode.Char.Case"+ [ bgroup "isLowerCase"+ [ benchNF "unicode-data" C.isLowerCase+ ]+ , bgroup "isUpperCase"+ [ benchNF "unicode-data" C.isUpperCase+ ]+ ]+ , bgroup "Unicode.Char.Case.Compat"+ [ bgroup' "isLower"+ [ Bench "base" B.isLower+ , Bench "unicode-data" CC.isLower+ ]+ , bgroup' "isUpper"+ [ Bench "base" B.isUpper+ , Bench "unicode-data" CC.isUpper+ ]+ , bgroup' "toLower"+ [ Bench "base" B.toLower+ , Bench "unicode-data" CC.toLower+ ]+ , bgroup' "toTitle"+ [ Bench "base" B.toTitle+ , Bench "unicode-data" CC.toTitle+ ]+ , bgroup' "toUpper"+ [ Bench "base" B.toUpper+ , Bench "unicode-data" CC.toUpper+ ]+ ]+ , bgroup "Unicode.Char.General"+ -- Character classification+ [ bgroup' "generalCategory"+ [ Bench "base" (show . B.generalCategory)+ , Bench "unicode-data" (show . G.generalCategory)+ ]+ , bgroup "isAlphabetic"+ [ benchNF "unicode-data" G.isAlphabetic+ ]+ , bgroup' "isAlphaNum"+ [ Bench "base" B.isAlphaNum+ , Bench "unicode-data" G.isAlphaNum+ ]+ , bgroup' "isControl"+ [ Bench "base" B.isControl+ , Bench "unicode-data" G.isControl+ ]+ , bgroup' "isMark"+ [ Bench "base" B.isMark+ , Bench "unicode-data" G.isMark+ ]+ , bgroup' "isPrint"+ [ Bench "base" B.isPrint+ , Bench "unicode-data" G.isPrint+ ]+ , bgroup' "isPunctuation"+ [ Bench "base" B.isPunctuation+ , Bench "unicode-data" G.isPunctuation+ ]+ , bgroup' "isSeparator"+ [ Bench "base" B.isSeparator+ , Bench "unicode-data" G.isSeparator+ ]+ , bgroup' "isSymbol"+ [ Bench "base" B.isSymbol+ , Bench "unicode-data" G.isSymbol+ ]+ , bgroup "isWhiteSpace"+ [ benchNF "unicode-data" G.isWhiteSpace+ ]+ -- Korean Hangul Characters+ , bgroup "isHangul"+ [ benchNF "unicode-data" G.isHangul+ ]+ , bgroup "isHangulLV"+ [ benchNF "unicode-data" G.isHangul+ ]+ , bgroup "isJamo"+ [ benchNF "unicode-data" G.isJamo+ ]+ , bgroup "jamoLIndex"+ [ benchNF "unicode-data" G.jamoLIndex+ ]+ , bgroup "jamoVIndex"+ [ benchNF "unicode-data" G.jamoVIndex+ ]+ , bgroup "jamoTIndex"+ [ benchNF "unicode-data" G.jamoTIndex+ ]+ ]+ , bgroup "Unicode.Char.General.Compat"+ [ bgroup' "isAlpha"+ [ Bench "base" B.isAlpha+ , Bench "unicode-data" GC.isAlpha+ ]+ , bgroup' "isLetter"+ [ Bench "base" B.isLetter+ , Bench "unicode-data" GC.isLetter+ ]+ , bgroup' "isSpace"+ [ Bench "base" B.isSpace+ , Bench "unicode-data" GC.isSpace+ ]+ ]+ , bgroup "Unicode.Char.Identifiers"+ [ bgroup "isIDContinue"+ [ benchNF "unicode-data" I.isIDContinue+ ]+ , bgroup "isIDStart"+ [ benchNF "unicode-data" I.isIDStart+ ]+ , bgroup "isXIDContinue"+ [ benchNF "unicode-data" I.isXIDContinue+ ]+ , bgroup "isXIDStart"+ [ benchNF "unicode-data" I.isXIDStart+ ]+ , bgroup "isPatternSyntax"+ [ benchNF "unicode-data" I.isPatternSyntax+ ]+ , bgroup "isPatternWhitespace"+ [ benchNF "unicode-data" I.isPatternWhitespace+ ]+ ]+ , bgroup "Unicode.Char.Normalization"+ [ bgroup "isCombining"+ [ benchNF "unicode-data" N.isCombining+ ]+ , bgroup "combiningClass"+ [ benchNF "unicode-data" N.combiningClass+ ]+ , bgroup "isCombiningStarter"+ [ benchNF "unicode-data" N.isCombiningStarter+ ]+ -- [TODO] compose, composeStarters+ , bgroup "isDecomposable"+ [ bgroup "Canonical"+ [ benchNF "unicode-data" (N.isDecomposable N.Canonical)+ ]+ , bgroup "Kompat"+ [ benchNF "unicode-data" (N.isDecomposable N.Kompat)+ ]+ ]+ -- [FIXME] Fail due to non-exhaustive pattern matching+ -- , bgroup "decompose"+ -- [ bgroup "Canonical"+ -- [ benchNF "unicode-data" (N.decompose N.Canonical)+ -- ]+ -- , bgroup "Kompat"+ -- [ benchNF "unicode-data" (N.decompose N.Kompat)+ -- ]+ -- ]+ , bgroup "decomposeHangul"+ [ benchNF "unicode-data" N.decomposeHangul+ ]+ ]+ , bgroup "Unicode.Char.Numeric"+ [ bgroup' "isNumber"+ [ Bench "base" B.isNumber+ , Bench "unicode-data" Num.isNumber+ ]+ ]+ ]+ where+ bgroup' groupTitle bs = bgroup groupTitle+ [ benchNF' groupTitle title f+ | Bench title f <- bs+ ]++ -- [NOTE] Works if groupTitle uniquely identifies the benchmark group.+ benchNF' groupTitle title = case title of+ "base" -> benchNF title+ _ -> bcompare ("$NF == \"base\" && $(NF-1) == \"" ++ groupTitle ++ "\"")+ . benchNF title++ benchNF :: forall a. (NFData a) => String -> (Char -> a) -> Benchmark+ benchNF t f = bench t $ nf (fold_ f) (minBound, maxBound)++ fold_ :: forall a. (NFData a) => (Char -> a) -> (Char, Char) -> ()+ fold_ f = foldr (deepseq . f) () . range
exe/Parser/Text.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE LambdaCase #-}+ -- | -- Module : Parser.Text -- Copyright : (c) 2020 Composewell Technologies and Contributors@@ -19,8 +21,10 @@ import Control.Exception (catch, IOException) import Control.Monad (void) import Control.Monad.IO.Class (MonadIO(liftIO))-import Data.Bits (shiftL)+import Data.Bits (Bits(..))+import Data.Word (Word8) import Data.Char (chr, ord, isSpace)+import Data.Functor ((<&>)) import Data.Function ((&)) import Data.List (unfoldr, intersperse) import Data.Maybe (fromMaybe)@@ -32,6 +36,8 @@ import qualified Data.Set as Set import qualified Streamly.Prelude as Stream import qualified Streamly.Data.Fold as Fold+import qualified Streamly.Internal.Data.Fold as Fold+import qualified Streamly.Data.Unfold as Unfold import qualified Streamly.FileSystem.Handle as Handle import qualified System.IO as Sys import qualified Streamly.Unicode.Stream as Unicode@@ -51,7 +57,7 @@ Sm|Sc|Sk|So| --S Zs|Zl|Zp| --Z Cc|Cf|Cs|Co|Cn --C- deriving (Show, Read)+ deriving (Show, Bounded, Enum, Read) data DecompType = DTCanonical | DTCompat | DTFont@@ -73,6 +79,9 @@ , _combiningClass :: Int , _decompositionType :: Maybe DecompType , _decomposition :: Decomp+ , _simpleUppercaseMapping :: Maybe Char+ , _simpleLowercaseMapping :: Maybe Char+ , _simpleTitlecaseMapping :: Maybe Char } deriving (Show) @@ -94,8 +103,12 @@ readCodePoint :: String -> Char readCodePoint = chr . read . ("0x"++) +readCodePointM :: String -> Maybe Char+readCodePointM "" = Nothing+readCodePointM u = Just (readCodePoint u)+ genSignature :: String -> String-genSignature testBit = testBit <> " :: Char -> Bool"+genSignature = (<> " :: Char -> Bool") -- | Check that var is between minimum and maximum of orderList genRangeCheck :: String -> [Int] -> String@@ -144,7 +157,40 @@ toByte :: [Bool] -> Int toByte xs = sum $ map (\i -> if xs !! i then 1 `shiftL` i else 0) [0..7] +genEnumBitmap :: forall a. (Bounded a, Enum a, Show a) => String -> [a] -> String+genEnumBitmap funcName as = unlines+ [ "{-# INLINE " ++ funcName ++ " #-}"+ , funcName <> " :: Char -> Int"+ , funcName <> " c = let n = ord c in if n >= "+ <> show (length as)+ <> " then "+ <> show (fromEnum Cn)+ <> " else lookupIntN bitmap# n"+ , " where"+ , " bitmap# = "+ <> show (enumMapToAddrLiteral as) <> "#"+ ] +{-| Encode a list of values as a byte map, using their 'Enum' instance.++__Note:__ 'Enum' instance must respect the following:++* @fromEnum minBound >= 0x00@+* @fromEnum maxBound <= 0xff@+-}+enumMapToAddrLiteral :: forall a. (Bounded a, Enum a, Show a) => [a] -> String+enumMapToAddrLiteral = fmap go++ where++ go :: a -> Char+ go = chr . fromIntegral . toWord8++ toWord8 :: a -> Word8+ toWord8 a = let w = fromEnum a in if 0 <= w && w <= 0xff+ then fromIntegral w+ else error $ "Cannot convert to Word8: " <> show a+ -- This bit of code is duplicated but this duplication allows us to reduce 2 -- dependencies on the executable. @@ -175,6 +221,37 @@ -- Parsing UnicodeData.txt ------------------------------------------------------------------------------- +genGeneralCategoryModule+ :: Monad m+ => String+ -> Fold m DetailedChar String+genGeneralCategoryModule moduleName =+ done <$> Fold.foldl' step initial++ where++ -- (categories, expected char)+ initial = ([], '\0')++ step (acc, p) a = if p < _char a+ -- Fill missing char entry with default category Cn+ -- See: https://www.unicode.org/reports/tr44/#Default_Values_Table+ then step (Cn : acc, succ p) a+ -- Regular entry+ else (_generalCategory a : acc, succ (_char a))++ done (acc, _) = unlines+ [ apacheLicense moduleName+ , "module " <> moduleName+ , "(generalCategory)"+ , "where"+ , ""+ , "import Data.Char (ord)"+ , "import Unicode.Internal.Bits (lookupIntN)"+ , ""+ , genEnumBitmap "generalCategory" (reverse acc)+ ]+ readDecomp :: String -> (Maybe DecompType, Decomp) readDecomp s = if null wrds@@ -321,8 +398,8 @@ step st dc = genDecomposeDef dc : st done st =- let body = genHeader ++ before ++ genSign ++ reverse st ++ after- in unlines body+ let body = mconcat [genHeader, before, genSign, reverse st, after]+ in unlines body genDecomposeDef dc = "decompose "@@ -419,6 +496,48 @@ ++ composeStarterPair (reverse sp) ++ isSecondStarter (Set.toList (Set.fromList ss)) +genSimpleCaseMappingModule+ :: Monad m+ => String+ -> String+ -> (DetailedChar -> Maybe Char)+ -> Fold m DetailedChar String+genSimpleCaseMappingModule moduleName funcName field =+ done <$> Fold.foldl' step initial++ where++ genHeader =+ [ apacheLicense moduleName+ , "module " <> moduleName+ , "(" ++ funcName ++ ")"+ , "where"+ , ""+ ]+ genSign =+ [ "{-# NOINLINE " ++ funcName ++ " #-}"+ , funcName ++ " :: Char -> Char"+ ]+ initial = []++ step ds dc = case genUpper dc of+ Nothing -> ds+ Just d -> d : ds++ after = [funcName ++ " c = c"]++ done st =+ let body = mconcat [genHeader, genSign, reverse st, after]+ in unlines body++ genUpper dc = field dc <&> \c -> mconcat+ [ funcName+ , " "+ , show (_char dc)+ , " = "+ , show c+ ]+ genCorePropertiesModule :: Monad m => String -> (String -> Bool) -> Fold m (String, [Int]) String genCorePropertiesModule moduleName isProp =@@ -496,10 +615,72 @@ $ Fold.lmap parsePropertyLine $ Fold.foldl' combinePropertyLines emptyPropertyLine +-- | A range entry in @UnicodeData.txt@.+data UnicodeDataRange+ = SingleCode !DetailedChar+ -- ^ Regular entry for one code point+ | FirstCode !String !DetailedChar+ -- ^ A partial range for entry with a name as: @\<RANGE_IDENTIFIER, First\>@+ | CompleteRange !String !DetailedChar !DetailedChar+ -- ^ A complete range, requiring 2 continuous entries with respective names:+ --+ -- * @\<RANGE_IDENTIFIER, First\>@+ -- * @\<RANGE_IDENTIFIER, Last\>@++{-| Parse UnicodeData.txt lines++Parse ranges according to https://www.unicode.org/reports/tr44/#Code_Point_Ranges.++__Note:__ this does /not/ fill missing char entries,+i.e. entries with no explicit entry nor within a range.+-}+parseUnicodeDataLines :: forall t m. (IsStream t, Monad m) => t m String -> t m DetailedChar+parseUnicodeDataLines+ = Stream.unfoldMany (Unfold.unfoldr unitToRange)+ . Stream.foldMany ( Fold.lmap parseDetailedChar+ $ Fold.mkFold_ step initial )++ where++ step :: Maybe UnicodeDataRange+ -> DetailedChar+ -> Fold.Step (Maybe UnicodeDataRange) (Maybe UnicodeDataRange)+ step Nothing dc = case span (/= ',') (_name dc) of+ (range, ", First>") -> Fold.Partial (Just (FirstCode range dc))+ _ -> Fold.Done (Just (SingleCode dc))+ step (Just (FirstCode range1 dc1)) dc2 = case span (/= ',') (_name dc2) of+ (range2, ", Last>") -> if range1 == range2 && _char dc1 < _char dc2+ then Fold.Done (Just (CompleteRange range1 dc1 dc2))+ else error $ "Cannot create range: incompatible ranges" <> show (dc1, dc2)+ _ -> error $ "Cannot create range: missing <range, Last> entry correspong to: " <> show range1+ step _ _ = error "impossible case"++ initial :: Fold.Step (Maybe UnicodeDataRange) (Maybe UnicodeDataRange)+ initial = Fold.Partial Nothing++ unitToRange :: Maybe UnicodeDataRange -> Maybe (DetailedChar, Maybe UnicodeDataRange)+ unitToRange = fmap $ \case+ SingleCode dc -> (dc, Nothing)+ FirstCode _ dc -> error $ "Incomplete range: " <> show dc+ CompleteRange range dc1 dc2 -> if _char dc1 < _char dc2+ -- [TODO] Create the proper name+ then (dc1{_name="TODO"}, Just (CompleteRange range dc1{_char=succ (_char dc1)} dc2))+ else (dc2{_name="TODO"}, Nothing)++-- | Parse a single entry of @UnicodeData.txt@ parseDetailedChar :: String -> DetailedChar parseDetailedChar line = DetailedChar- (readCodePoint char) name (read gc) (read combining) dctype dcval+ { _char = readCodePoint char+ , _name = name+ , _generalCategory = read gc+ , _combiningClass = read combining+ , _decompositionType = dctype+ , _decomposition = dcval+ , _simpleUppercaseMapping = readCodePointM sUpper+ , _simpleLowercaseMapping = readCodePointM sLower+ , _simpleTitlecaseMapping = readCodePointM sTitle+ } where @@ -510,13 +691,15 @@ (_bidi, line5) = span (/= ';') (tail line4) (decomposition, line6) = span (/= ';') (tail line5) (dctype, dcval) = readDecomp decomposition- (_numeric, line7) = span (/= ';') (tail line6)- (_bidiM, line8) = span (/= ';') (tail line7)- (_uni1Name, line9) = span (/= ';') (tail line8)- (_iso, line10) = span (/= ';') (tail line9)- (_sUpper, line11) = span (/= ';') (tail line10)- (_sLower, line12) = span (/= ';') (tail line11)- _sTitle = tail line12+ (_decimal, line7) = span (/= ';') (tail line6)+ (_digit, line8) = span (/= ';') (tail line7)+ (_numeric, line9) = span (/= ';') (tail line8)+ (_bidiM, line10) = span (/= ';') (tail line9)+ (_uni1Name, line11) = span (/= ';') (tail line10)+ (_iso, line12) = span (/= ';') (tail line11)+ (sUpper, line13) = span (/= ';') (tail line12)+ (sLower, line14) = span (/= ';') (tail line13)+ sTitle = tail line14 ------------------------------------------------------------------------------- -- Generation@@ -555,9 +738,13 @@ where - pretext version =- "-- autogenerated from https://www.unicode.org/Public/"- ++ version ++ "/ucd/" ++ file ++ "\n"+ pretext version = mconcat+ [ "-- autogenerated from https://www.unicode.org/Public/"+ , version+ , "/ucd/"+ , file+ ,"\n"+ ] outfile = outdir <> moduleToFileName modName <> ".hs" outfiledir = dirFromFileName outfile action c = do@@ -602,7 +789,7 @@ runGenerator indir "UnicodeData.txt"- (Stream.map parseDetailedChar)+ parseUnicodeDataLines outdir [ compositions compExclu non0CC , combiningClass@@ -611,6 +798,10 @@ , decompositions , decompositionsK2 , decompositionsK+ , generalCategory+ , simpleUpperCaseMapping+ , simpleLowerCaseMapping+ , simpleTitleCaseMapping ] runGenerator@@ -666,3 +857,19 @@ post = ["decompose c = DK2.decompose c"] in ( "Unicode.Internal.Char.UnicodeData.DecompositionsK" , \m -> genDecomposeDefModule m pre post Kompat (< 60000))++ generalCategory =+ ( "Unicode.Internal.Char.UnicodeData.GeneralCategory"+ , genGeneralCategoryModule)++ simpleUpperCaseMapping =+ ( "Unicode.Internal.Char.UnicodeData.SimpleUpperCaseMapping"+ , \m -> genSimpleCaseMappingModule m "toSimpleUpperCase" _simpleUppercaseMapping)++ simpleLowerCaseMapping =+ ( "Unicode.Internal.Char.UnicodeData.SimpleLowerCaseMapping"+ , \m -> genSimpleCaseMappingModule m "toSimpleLowerCase" _simpleLowercaseMapping)++ simpleTitleCaseMapping =+ ( "Unicode.Internal.Char.UnicodeData.SimpleTitleCaseMapping"+ , \m -> genSimpleCaseMappingModule m "toSimpleTitleCase" _simpleTitlecaseMapping)
lib/Unicode/Char.hs view
@@ -27,13 +27,32 @@ module Unicode.Char ( module Unicode.Char.General+ , module Unicode.Char.General.Compat , module Unicode.Char.Case+ , module Unicode.Char.Case.Compat+ , module Unicode.Char.Numeric , module Unicode.Char.Normalization , module Unicode.Char.Identifiers+ , unicodeVersion++ -- * Re-export+ , ord+ , chr ) where +import Data.Char (chr, ord)+import Data.Version (Version, makeVersion) import Unicode.Char.Case+import Unicode.Char.Case.Compat hiding (isLower, isUpper) import Unicode.Char.General-import Unicode.Char.Normalization+import Unicode.Char.General.Compat hiding (isLetter, isSpace) import Unicode.Char.Identifiers+import Unicode.Char.Numeric+import Unicode.Char.Normalization++-- | Version of Unicode standard used by @unicode-data@.+--+-- @since 0.3.0+unicodeVersion :: Version+unicodeVersion = makeVersion [14, 0, 0]
lib/Unicode/Char/Case.hs view
@@ -8,7 +8,10 @@ -- Case and case mapping related functions. -- module Unicode.Char.Case- ( isLower+ ( -- * Predicates+ isLowerCase+ , isLower+ , isUpperCase , isUpper ) where@@ -17,17 +20,30 @@ -- | Returns 'True' for lower-case letters. ----- prop> isLower c == Data.Char.isLower c+-- @since 0.3.0+{-# INLINE isLowerCase #-}+isLowerCase :: Char -> Bool+isLowerCase = P.isLowercase++-- | Returns 'True' for lower-case letters. --+-- @since 0.1.0 {-# INLINE isLower #-}+{-# DEPRECATED isLower "Use isLowerCase instead. Note that the behavior of this function does not match base:Data.Char.isLower. See Unicode.Char.Case.Compat for behavior compatible with base:Data.Char." #-} isLower :: Char -> Bool isLower = P.isLowercase --- | Returns 'True' for upper-case or title-case letters. Title case is used by--- a small number of letter ligatures like the single-character form of /Lj/.+-- | Returns 'True' for upper-case letters. ----- prop> isUpper c == Data.Char.isUpper c+-- @since 0.3.0+{-# INLINE isUpperCase #-}+isUpperCase :: Char -> Bool+isUpperCase = P.isUppercase++-- | Returns 'True' for upper-case letters. --+-- @since 0.1.0 {-# INLINE isUpper #-}+{-# DEPRECATED isUpper "Use isUpperCase instead. Note that the behavior of this function does not match base:Data.Char.isUpper. See Unicode.Char.Case.Compat for behavior compatible with base:Data.Char." #-} isUpper :: Char -> Bool isUpper = P.isUppercase
+ lib/Unicode/Char/Case/Compat.hs view
@@ -0,0 +1,81 @@+-- |+-- Module : Unicode.Char.Case.Compat+-- Copyright : (c) 2020 Composewell Technologies and Contributors+-- License : Apache-2.0+-- Maintainer : streamly@composewell.com+-- Stability : experimental+--+-- Compatibility module for case and case mapping related functions..+--+-- The functions of this module are drop-in replacement for those in "Data.Char".+-- They are similar but not identical to some functions in "Unicode.Char.Case",+-- therefore they are placed in a separate module in order to avoid ambiguity.+--+module Unicode.Char.Case.Compat+ ( -- * Predicates+ isUpper+ , isLower+ -- * Case conversion+ , toUpper+ , toLower+ , toTitle+ ) where++import Unicode.Char.General (GeneralCategory(..), generalCategory)+import qualified Unicode.Internal.Char.UnicodeData.SimpleLowerCaseMapping as C+import qualified Unicode.Internal.Char.UnicodeData.SimpleTitleCaseMapping as C+import qualified Unicode.Internal.Char.UnicodeData.SimpleUpperCaseMapping as C++-- | Selects upper-case or title-case alphabetic Unicode characters (letters).+-- Title case is used by a small number of letter ligatures like the+-- single-character form of /Lj/.+--+-- prop> isUpper c == Data.Char.isUpper c+--+-- @since 0.3.0+isUpper :: Char -> Bool+isUpper c = case generalCategory c of+ UppercaseLetter -> True+ TitlecaseLetter -> True+ _ -> False++-- | Selects lower-case alphabetic Unicode characters (letters).+--+-- prop> isLower c == Data.Char.isLower c+--+-- @since 0.3.0+isLower :: Char -> Bool+isLower c = case generalCategory c of+ LowercaseLetter -> True+ _ -> False++-- | Convert a letter to the corresponding upper-case letter, if any.+-- Any other character is returned unchanged.+--+-- prop> toUpper c == Data.Char.toUpper c+--+-- @since 0.3.0+{-# INLINE toUpper #-}+toUpper :: Char -> Char+toUpper = C.toSimpleUpperCase++-- | Convert a letter to the corresponding lower-case letter, if any.+-- Any other character is returned unchanged.+--+-- prop> toLower c == Data.Char.toLower c+--+-- @since 0.3.0+{-# INLINE toLower #-}+toLower :: Char -> Char+toLower = C.toSimpleLowerCase++-- | Convert a letter to the corresponding title-case or upper-case letter,+-- if any. (Title case differs from upper case only for a small number of+-- ligature letters.) Any other character is returned unchanged.+--+-- prop> toTitle c == Data.Char.toTitle c+--+-- @since 0.3.0+{-# INLINE toTitle #-}+toTitle :: Char -> Char+toTitle = C.toSimpleTitleCase
lib/Unicode/Char/General.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE LambdaCase #-}+ -- | -- Module : Unicode.Char.General -- Copyright : (c) 2020 Composewell Technologies and Contributors@@ -9,9 +11,28 @@ -- module Unicode.Char.General (- -- * Character Properties- isLetter+ -- * Unicode general categories+ GeneralCategory(..)+ , generalCategoryAbbr+ , generalCategory++ -- * Character classification+ , isAlphabetic+ , isAlphaNum+ , isControl+ , isMark+ , isPrint+ , isPunctuation+ , isSeparator+ , isSymbol+ , isWhiteSpace+ , isLetter , isSpace+ -- ** Re-export+ , isAscii+ , isLatin1+ , isAsciiUpper+ , isAsciiLower -- * Korean Hangul Characters -- | The Hangul script used in the Korean writing system consists of@@ -49,6 +70,7 @@ -- *** Jamo Leading (L) , jamoLFirst+ , jamoLCount , jamoLIndex , jamoLLast @@ -74,28 +96,357 @@ where import Control.Exception (assert)-import Data.Char (ord)+import Data.Char (isAscii, isLatin1, isAsciiUpper, isAsciiLower, ord)+import Data.Ix (Ix) import Unicode.Internal.Division (quotRem28) import qualified Unicode.Internal.Char.DerivedCoreProperties as P import qualified Unicode.Internal.Char.PropList as P+import qualified Unicode.Internal.Char.UnicodeData.GeneralCategory as UC +{-| Unicode General Categories.++These classes are defined in the+[Unicode Character Database](http://www.unicode.org/reports/tr44/tr44-14.html#GC_Values_Table),+part of the Unicode standard++__Note:__ the classes must be in the same order they are listed in the Unicode Standard,+because some functions (e.g. 'generalCategory') rely on the 'Enum' instance.++@since 0.3.0+-}+data GeneralCategory+ -- L: Letter+ = UppercaseLetter -- ^ @Lu@: Letter, Uppercase+ | LowercaseLetter -- ^ @Ll@: Letter, Lowercase+ | TitlecaseLetter -- ^ @Lt@: Letter, Titlecase+ | ModifierLetter -- ^ @Lm@: Letter, Modifier+ | OtherLetter -- ^ @Lo@: Letter, Other++ -- M: Mark+ | NonSpacingMark -- ^ @Mn@: Mark, Non-Spacing+ | SpacingCombiningMark -- ^ @Mc@: Mark, Spacing Combining+ | EnclosingMark -- ^ @Me@: Mark, Enclosing++ -- N: Number+ | DecimalNumber -- ^ @Nd@: Number, Decimal+ | LetterNumber -- ^ @Nl@: Number, Letter+ | OtherNumber -- ^ @No@: Number, Other++ -- P: Punctuation+ | ConnectorPunctuation -- ^ @Pc@: Punctuation, Connector+ | DashPunctuation -- ^ @Pd@: Punctuation, Dash+ | OpenPunctuation -- ^ @Ps@: Punctuation, Open+ | ClosePunctuation -- ^ @Pe@: Punctuation, Close+ | InitialQuote -- ^ @Pi@: Punctuation, Initial quote+ | FinalQuote -- ^ @Pf@: Punctuation, Final quote+ | OtherPunctuation -- ^ @Po@: Punctuation, Other++ -- S: Symbol+ | MathSymbol -- ^ @Sm@: Symbol, Math+ | CurrencySymbol -- ^ @Sc@: Symbol, Currency+ | ModifierSymbol -- ^ @Sk@: Symbol, Modifier+ | OtherSymbol -- ^ @So@: Symbol, Other++ -- Z: Separator+ | Space -- ^ @Zs@: Separator, Space+ | LineSeparator -- ^ @Zl@: Separator, Line+ | ParagraphSeparator -- ^ @Zp@: Separator, Paragraph++ -- C: Other+ | Control -- ^ @Cc@: Other, Control+ | Format -- ^ @Cf@: Other, Format+ | Surrogate -- ^ @Cs@: Other, Surrogate+ | PrivateUse -- ^ @Co@: Other, Private Use+ | NotAssigned -- ^ @Cn@: Other, Not Assigned+ deriving ( Show+ , Eq+ , Ord+ , Enum+ , Bounded+ , Ix+ )++-- | Abbreviation of 'GeneralCategory' used in the Unicode standard.+--+-- @since 0.3.0+generalCategoryAbbr :: GeneralCategory -> String+generalCategoryAbbr = \case+ UppercaseLetter -> "Lu"+ LowercaseLetter -> "Ll"+ TitlecaseLetter -> "Lt"+ ModifierLetter -> "Lm"+ OtherLetter -> "Lo"+ NonSpacingMark -> "Mn"+ SpacingCombiningMark -> "Mc"+ EnclosingMark -> "Me"+ DecimalNumber -> "Nd"+ LetterNumber -> "Nl"+ OtherNumber -> "No"+ ConnectorPunctuation -> "Pc"+ DashPunctuation -> "Pd"+ OpenPunctuation -> "Ps"+ ClosePunctuation -> "Pe"+ InitialQuote -> "Pi"+ FinalQuote -> "Pf"+ OtherPunctuation -> "Po"+ MathSymbol -> "Sm"+ CurrencySymbol -> "Sc"+ ModifierSymbol -> "Sk"+ OtherSymbol -> "So"+ Space -> "Zs"+ LineSeparator -> "Zl"+ ParagraphSeparator -> "Zp"+ Control -> "Cc"+ Format -> "Cf"+ Surrogate -> "Cs"+ PrivateUse -> "Co"+ NotAssigned -> "Cn"++{-| The Unicode general category of the character.++This property is defined in the column 2 of the @UnicodeData@ table.++This relies on the 'Enum' instance of 'GeneralCategory', which must remain in the+same order as the categories are presented in the Unicode standard.++prop> show (generalCategory c) == show (Data.Char.generalCategory c)++@since 0.3.0+-}+{-# INLINE generalCategory #-}+generalCategory :: Char -> GeneralCategory+generalCategory = toEnum . UC.generalCategory++{-| Returns 'True' for alphabetic Unicode characters (lower-case, upper-case+and title-case letters, plus letters of caseless scripts and modifiers+letters).++__Note:__ this function is /not/ equivalent to 'Unicode.Char.General.Compat.isAlpha'+/'Unicode.Char.General.Compat.isLetter':++* 'isAlpha' matches the following general categories:++ * 'UppercaseLetter' (@Lu@)+ * 'LowercaseLetter' (@Ll@)+ * 'TitlecaseLetter' (@Lt@)+ * 'ModifierLetter' (@Lm@)+ * 'OtherLetter' (@Lo@)++* whereas 'isAlphabetic' matches:++ * @Uppercase@ [property](https://www.unicode.org/reports/tr44/#Uppercase)+ * @Lowercase@ [property](https://www.unicode.org/reports/tr44/#Lowercase)+ * 'TitlecaseLetter' (@Lt@)+ * 'ModifierLetter' (@Lm@)+ * 'OtherLetter' (@Lo@)+ * 'LetterNumber' (@Nl@)+ * @Other_Alphabetic@ [property](https://www.unicode.org/reports/tr44/#Other_Alphabetic)++@since 0.3.0+-}+{-# INLINE isAlphabetic #-}+isAlphabetic :: Char -> Bool+isAlphabetic = P.isAlphabetic++{-| Selects alphabetic or numeric Unicode characters.++This function returns 'True' if its argument has one of the+following 'GeneralCategory's, or 'False' otherwise:++* 'UppercaseLetter'+* 'LowercaseLetter'+* 'TitlecaseLetter'+* 'ModifierLetter'+* 'OtherLetter'+* 'DecimalNumber'+* 'LetterNumber'+* 'OtherNumber'++prop> isAlphaNum c == Data.Char.isAlphaNum c++@since 0.3.0+-}+isAlphaNum :: Char -> Bool+isAlphaNum c = case generalCategory c of+ UppercaseLetter -> True+ LowercaseLetter -> True+ TitlecaseLetter -> True+ ModifierLetter -> True+ OtherLetter -> True+ DecimalNumber -> True+ LetterNumber -> True+ OtherNumber -> True+ _ -> False++{-| Selects control characters, which are the non-printing characters+of the Latin-1 subset of Unicode.++This function returns 'True' if its argument has the 'GeneralCategory' 'Control'.++prop> isControl c == Data.Char.isControl c++@since 0.3.0+-}+isControl :: Char -> Bool+isControl c = case generalCategory c of+ Control -> True+ _ -> False++{-| Selects Unicode mark characters, for example accents and the+like, which combine with preceding characters.++This function returns 'True' if its argument has one of the+following 'GeneralCategory's, or 'False' otherwise:++* 'NonSpacingMark'+* 'SpacingCombiningMark'+* 'EnclosingMark'++prop> isMark c == Data.Char.isMark c++@since 0.3.0+-}+isMark :: Char -> Bool+isMark c = case generalCategory c of+ NonSpacingMark -> True+ SpacingCombiningMark -> True+ EnclosingMark -> True+ _ -> False++{-| Selects printable Unicode characters (letters, numbers, marks, punctuation,+symbols and spaces).++This function returns 'False' if its argument has one of the+following 'GeneralCategory's, or 'True' otherwise:++* 'LineSeparator'+* 'ParagraphSeparator'+* 'Control'+* 'Format'+* 'Surrogate'+* 'PrivateUse'+* 'NotAssigned'++prop> isPrint c == Data.Char.isPrint c++@since 0.3.0+-}+isPrint :: Char -> Bool+isPrint c = case generalCategory c of+ LineSeparator -> False+ ParagraphSeparator -> False+ Control -> False+ Format -> False+ Surrogate -> False+ PrivateUse -> False+ NotAssigned -> False+ _ -> True++{-| Selects Unicode punctuation characters, including various kinds+of connectors, brackets and quotes.++This function returns 'True' if its argument has one of the+following 'GeneralCategory's, or 'False' otherwise:++* 'ConnectorPunctuation'+* 'DashPunctuation'+* 'OpenPunctuation'+* 'ClosePunctuation'+* 'InitialQuote'+* 'FinalQuote'+* 'OtherPunctuation'++prop> isPunctuation c == Data.Char.isPunctuation c++@since 0.3.0+-}+isPunctuation :: Char -> Bool+isPunctuation c = case generalCategory c of+ ConnectorPunctuation -> True+ DashPunctuation -> True+ OpenPunctuation -> True+ ClosePunctuation -> True+ InitialQuote -> True+ FinalQuote -> True+ OtherPunctuation -> True+ _ -> False++{- | Returns 'True' for any whitespace characters, and the control+characters @\\t@, @\\n@, @\\r@, @\\f@, @\\v@.++See: [Unicode @White_Space@](https://www.unicode.org/reports/tr44/#White_Space).++__Note:__ 'isWhiteSpace' is /not/ equivalent to 'Unicode.Char.General.Compat.isSpace'.+'isWhiteSpace' selects the same characters from 'isSpace' plus the following:++* @U+0085@ NEXT LINE (NEL)+* @U+2028@ LINE SEPARATOR+* @U+2029@ PARAGRAPH SEPARATOR++@since 0.3.0+-}+{-# INLINE isWhiteSpace #-}+isWhiteSpace :: Char -> Bool+isWhiteSpace = P.isWhite_Space++{-| Selects Unicode space and separator characters.++This function returns 'True' if its argument has one of the+following 'GeneralCategory's, or 'False' otherwise:++* 'Space'+* 'LineSeparator'+* 'ParagraphSeparator'++prop> isSeparator c == Data.Char.isSeparator c++@since 0.3.0+-}+isSeparator :: Char -> Bool+isSeparator c = case generalCategory c of+ Space -> True+ LineSeparator -> True+ ParagraphSeparator -> True+ _ -> False++{-| Selects Unicode symbol characters, including mathematical and currency symbols.++This function returns 'True' if its argument has one of the+following 'GeneralCategory's, or 'False' otherwise:+* 'MathSymbol'+* 'CurrencySymbol'+* 'ModifierSymbol'+* 'OtherSymbol'++prop> isSymbol c == Data.Char.isSymbol c++@since 0.3.0+-}+isSymbol :: Char -> Bool+isSymbol c = case generalCategory c of+ MathSymbol -> True+ CurrencySymbol -> True+ ModifierSymbol -> True+ OtherSymbol -> True+ _ -> False+ -- | Returns 'True' for alphabetic Unicode characters (lower-case, upper-case -- and title-case letters, plus letters of caseless scripts and modifiers -- letters). ----- prop> isLetter c == Data.Char.isLetter c---+-- @since 0.1.0 {-# INLINE isLetter #-}+{-# DEPRECATED isLetter "Use isAlphabetic instead. Note that the behavior of this function does not match base:Data.Char.isLetter. See Unicode.Char.General.Compat for behavior compatible with base:Data.Char." #-} isLetter :: Char -> Bool isLetter = P.isAlphabetic -- | Returns 'True' for any whitespace characters, and the control -- characters @\\t@, @\\n@, @\\r@, @\\f@, @\\v@. ----- prop> isSpace c == Data.Char.isSpace c---+-- @since 0.1.0 {-# INLINE isSpace #-}+{-# DEPRECATED isSpace "Use isWhiteSpace instead. Note that the behavior of this function does not match base:Data.Char.isSpace. See Unicode.Char.General.Compat for behavior compatible with base:Data.Char." #-} isSpace :: Char -> Bool isSpace = P.isWhite_Space @@ -107,24 +458,36 @@ jamoLFirst, jamoLCount, jamoLLast :: Int -- | First leading consonant jamo.+--+-- @since 0.1.0 jamoLFirst = 0x1100 -- | Total count of leading consonant jamo.+--+-- @since 0.3.0 jamoLCount = 19 -- | Last leading consonant jamo.+--+-- @since 0.1.0 jamoLLast = jamoLFirst + jamoLCount - 1 -- jamo vowel jamoVFirst, jamoVCount, jamoVLast :: Int -- | First vowel jamo.+--+-- @since 0.1.0 jamoVFirst = 0x1161 -- | Total count of vowel jamo.+--+-- @since 0.1.0 jamoVCount = 21 -- | Last vowel jamo.+--+-- @since 0.1.0 jamoVLast = jamoVFirst + jamoVCount - 1 -- jamo trailing@@ -134,18 +497,26 @@ -- -- Note that 'jamoTFirst' does not represent a valid T, it represents a missing -- T i.e. LV without a T. See comments under 'jamoTIndex' .+--+-- @since 0.1.0 jamoTFirst = 0x11a7 -- | Total count of trailing consonant jamo.+--+-- @since 0.1.0 jamoTCount = 28 -- | Last trailing consonant jamo.+--+-- @since 0.1.0 jamoTLast :: Int jamoTLast = jamoTFirst + jamoTCount - 1 -- | Total count of all jamo characters. -- -- @jamoNCount = jamoVCount * jamoTCount@+--+-- @since 0.1.0 jamoNCount :: Int jamoNCount = 588 @@ -153,28 +524,40 @@ hangulFirst, hangulLast :: Int -- | Codepoint of the first pre-composed Hangul character.+--+-- @since 0.1.0 hangulFirst = 0xac00 -- | Codepoint of the last Hangul character.+--+-- @since 0.1.0 hangulLast = hangulFirst + jamoLCount * jamoVCount * jamoTCount - 1 -- | Determine if the given character is a precomposed Hangul syllable.+--+-- @since 0.1.0 isHangul :: Char -> Bool isHangul c = n >= hangulFirst && n <= hangulLast where n = ord c -- | Determine if the given character is a Hangul LV syllable.+--+-- @since 0.1.0 isHangulLV :: Char -> Bool isHangulLV c = assert (jamoTCount == 28) snd (quotRem28 (ord c - hangulFirst)) == 0 -- | Determine whether a character is a jamo L, V or T character.+--+-- @since 0.1.0 isJamo :: Char -> Bool isJamo c = n >= jamoLFirst && n <= jamoTLast where n = ord c -- | Given a Unicode character, if it is a leading jamo, return its index in -- the list of leading jamo consonants, otherwise return 'Nothing'.+--+-- @since 0.1.0 jamoLIndex :: Char -> Maybe Int jamoLIndex c | index >= 0 && index < jamoLCount = Just index@@ -183,6 +566,8 @@ -- | Given a Unicode character, if it is a vowel jamo, return its index in the -- list of vowel jamo, otherwise return 'Nothing'.+--+-- @since 0.1.0 jamoVIndex :: Char -> Maybe Int jamoVIndex c | index >= 0 && index < jamoVCount = Just index@@ -197,6 +582,7 @@ -- Decomposition" in the Conformance chapter of the Unicode standard for more -- details. --+-- @since 0.1.0 jamoTIndex :: Char -> Maybe Int jamoTIndex c | index > 0 && index < jamoTCount = Just index
+ lib/Unicode/Char/General/Compat.hs view
@@ -0,0 +1,81 @@+-- |+-- Module : Unicode.Char.General.Compat+-- Copyright : (c) 2020 Composewell Technologies and Contributors+-- License : Apache-2.0+-- Maintainer : streamly@composewell.com+-- Stability : experimental+--+-- Compatibility module for general character property related functions.+--+-- The functions of this module are drop-in replacement for those in "Data.Char".+-- They are similar but not identical to some functions in "Unicode.Char.General",+-- therefore they are placed in a separate module in order to avoid ambiguity.+--+module Unicode.Char.General.Compat+ ( isAlpha+ , isLetter+ , isSpace+ ) where++import Unicode.Char.General (GeneralCategory(..), generalCategory)++-- | Same as 'isLetter'.+--+-- @since 0.3.0+{-# INLINE isAlpha #-}+isAlpha :: Char -> Bool+isAlpha = isLetter++{-| Selects alphabetic Unicode characters (lower-case, upper-case and title-case+letters, plus letters of caseless scripts and modifiers letters).++This function returns 'True' if its argument has one of the+following 'GeneralCategory's, or 'False' otherwise:++* 'UppercaseLetter'+* 'LowercaseLetter'+* 'TitlecaseLetter'+* 'ModifierLetter'+* 'OtherLetter'++__Note:__ this function is /not/ equivalent to 'Unicode.Char.General.isAlphabetic'.+See the description of 'Unicode.Char.General.isAlphabetic' for further details.++prop> isLetter c == Data.Char.isLetter c++@since 0.3.0+-}+{-# INLINE isLetter #-}+isLetter :: Char -> Bool+isLetter c = case generalCategory c of+ UppercaseLetter -> True+ LowercaseLetter -> True+ TitlecaseLetter -> True+ ModifierLetter -> True+ OtherLetter -> True+ _ -> False++{-| Selects Unicode space characters (general category 'Space'),+and the control characters @\\t@, @\\n@, @\\r@, @\\f@, @\\v@.++__Note:__ 'isSpace' is /not/ equivalent to 'Unicode.Char.General.isWhiteSpace'.+'Unicode.Char.General.isWhiteSpace' selects the same characters from 'isSpace'+plus the following:++* @U+0085@ NEXT LINE (NEL)+* @U+2028@ LINE SEPARATOR+* @U+2029@ PARAGRAPH SEPARATOR++prop> isSpace c == Data.Char.isSpace c++@since 0.3.0+-}+isSpace :: Char -> Bool+isSpace '\t' = True+isSpace '\n' = True+isSpace '\v' = True+isSpace '\f' = True+isSpace '\r' = True+isSpace c = case generalCategory c of+ Space -> True+ _ -> False
lib/Unicode/Char/Identifiers.hs view
@@ -22,11 +22,15 @@ import qualified Unicode.Internal.Char.PropList as P -- | Returns 'True' if a character is an identifier continue character.+--+-- @since 0.2.0 {-# INLINE isIDContinue #-} isIDContinue :: Char -> Bool isIDContinue = P.isID_Continue -- | Returns 'True' if a character is an identifier start character.+--+-- @since 0.2.0 {-# INLINE isIDStart #-} isIDStart :: Char -> Bool isIDStart = P.isID_Start@@ -34,6 +38,8 @@ -- | Returns 'True' if a character is an identifier continue character, -- using the NFKC modifications detailed in -- [UAX #31, 5.1](https://www.unicode.org/reports/tr31/#NFKC_Modifications).+--+-- @since 0.2.0 {-# INLINE isXIDContinue #-} isXIDContinue :: Char -> Bool isXIDContinue = P.isXID_Continue@@ -42,16 +48,22 @@ -- | Returns 'True' if a character is an identifier start character, -- using the NFKC modifications detailed in -- [UAX #31, 5.1](https://www.unicode.org/reports/tr31/#NFKC_Modifications).+--+-- @since 0.2.0 {-# INLINE isXIDStart #-} isXIDStart :: Char -> Bool isXIDStart = P.isXID_Start -- | Returns 'True' if a character is a pattern syntax character.+--+-- @since 0.2.0 {-# INLINE isPatternSyntax #-} isPatternSyntax :: Char -> Bool isPatternSyntax = P.isPattern_Syntax -- | Returns 'True' if a character is a pattern whitespace character.+--+-- @since 0.2.0 {-# INLINE isPatternWhitespace #-} isPatternWhitespace :: Char -> Bool isPatternWhitespace = P.isPattern_White_Space
lib/Unicode/Char/Normalization.hs view
@@ -73,18 +73,24 @@ -- | Compose a starter character (combining class 0) with a combining character -- (non-zero combining class). Returns the composed character if the starter -- combines with the combining character, returns 'Nothing' otherwise.+--+-- @since 0.1.0 {-# INLINE compose #-} compose :: Char -> Char -> Maybe Char compose = C.compose -- | Compose a starter character with another starter character. Returns the -- composed character if the two starters combine, returns 'Nothing' otherwise.+--+-- @since 0.1.0 {-# INLINE composeStarters #-} composeStarters :: Char -> Char -> Maybe Char composeStarters = C.composeStarters -- | Return 'True' if a starter character may combine with some preceding -- starter character.+--+-- @since 0.1.0 {-# INLINE isCombiningStarter #-} isCombiningStarter :: Char -> Bool isCombiningStarter = C.isSecondStarter@@ -98,10 +104,14 @@ ------------------------------------------------------------------------------- -- | Whether we are decomposing in canonical or compatibility mode.+--+-- @since 0.1.0 data DecomposeMode = Canonical | Kompat -- | Decompose a non-Hangul character into its canonical or compatibility -- decompositions. Note that the resulting characters may further decompose.+--+-- @since 0.1.0 {-# INLINE decompose #-} decompose :: DecomposeMode -> Char -> [Char] decompose Canonical = D.decompose@@ -110,6 +120,8 @@ -- | Given a non-Hangul character determine if the character is decomposable. -- Note that in case compatibility decompositions a character may decompose -- into a single compatibility character.+--+-- @since 0.1.0 {-# INLINE isDecomposable #-} isDecomposable :: DecomposeMode -> Char -> Bool isDecomposable Canonical = D.isDecomposable@@ -120,6 +132,8 @@ ------------------------------------------------------------------------------- -- | Decompose a Hangul syllable into its corresponding Jamo characters.+--+-- @since 0.1.0 {-# INLINE decomposeHangul #-} decomposeHangul :: Char -> (Char, Char, Char) decomposeHangul c = (l, v, t)@@ -140,11 +154,15 @@ -- Determine the combining properties of characters. -- | Returns the combining class of a character.+--+-- @since 0.1.0 {-# INLINE combiningClass #-} combiningClass :: Char -> Int combiningClass = CC.combiningClass -- | Returns 'True' if a character is a combining character.+--+-- @since 0.1.0 {-# INLINE isCombining #-} isCombining :: Char -> Bool isCombining = CC.isCombining
+ lib/Unicode/Char/Numeric.hs view
@@ -0,0 +1,43 @@+-- |+-- Module : Unicode.Char.Numeric+-- Copyright : (c) 2020 Composewell Technologies and Contributors+-- License : Apache-2.0+-- Maintainer : streamly@composewell.com+-- Stability : experimental+--+-- Numeric character property related functions.+--+module Unicode.Char.Numeric+ ( isNumber++ -- * Re-export+ , isDigit+ , isOctDigit+ , isHexDigit+ , digitToInt+ , intToDigit+ ) where++import Data.Char (digitToInt, intToDigit, isDigit, isHexDigit, isOctDigit)+import Unicode.Char.General (GeneralCategory(..), generalCategory)++{-| Selects Unicode numeric characters, including digits from various+scripts, Roman numerals, et cetera.++This function returns 'True' if its argument has one of the+following 'GeneralCategory's, or 'False' otherwise:++* 'DecimalNumber'+* 'LetterNumber'+* 'OtherNumber'++prop> isNumber c == Data.Char.isNumber c++@since 0.3.0+-}+isNumber :: Char -> Bool+isNumber c = case generalCategory c of+ DecimalNumber -> True+ LetterNumber -> True+ OtherNumber -> True+ _ -> False
lib/Unicode/Internal/Bits.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE CPP #-}+ -- | -- Module : Unicode.Internal.Bits -- Copyright : (c) 2020 Andrew Lelechenko@@ -10,14 +12,24 @@ -- Fast, static bitmap lookup utilities module Unicode.Internal.Bits- (- lookupBit64+ ( lookupBit64,+ lookupIntN ) where +#include "MachDeps.h"+ import Data.Bits (finiteBitSize, popCount) import GHC.Exts- (Addr#, Int(..), Word(..), indexWordOffAddr#, and#, andI#,- uncheckedIShiftRL#, uncheckedShiftL#)+ (Addr#, Int(..), Word(..),+ indexWordOffAddr#, indexWord8OffAddr#,+ andI#, uncheckedIShiftRL#,+ and#, word2Int#, uncheckedShiftL#)+#if MIN_VERSION_base(4,16,0)+import GHC.Exts (word8ToWord#)+#endif+#ifdef WORDS_BIGENDIAN+import GHC.Exts (byteSwap#)+#endif -- | @lookup64 addr index@ looks up the bit stored at bit index @index@ using a -- bitmap starting at the address @addr@. Looks up the 64-bit word containing@@ -35,6 +47,31 @@ _ -> popCount fbs -- this is a really weird architecture wordIndex# = index# `uncheckedIShiftRL#` logFbs#+#ifdef WORDS_BIGENDIAN+ word## = byteSwap# (indexWordOffAddr# addr# wordIndex#)+#else word## = indexWordOffAddr# addr# wordIndex#+#endif bitIndex# = index# `andI#` fbs# bitMask## = 1## `uncheckedShiftL#` bitIndex#++{-| @lookupIntN addr index@ looks up for the @index@-th @8@-bits word in+the bitmap starting at @addr@, then convert it to an Int.++The caller must make sure that:++* @ceiling (addr + (n * 8))@ is legally accessible @Word8@.++@since 0.3.0+-}+lookupIntN+ :: Addr# -- ^ Bitmap address+ -> Int -- ^ Word index+ -> Int -- ^ Resulting word as 'Int'+lookupIntN addr# (I# index#) = I# (word2Int# word##)+ where+#if MIN_VERSION_base(4,16,0)+ word## = word8ToWord# (indexWord8OffAddr# addr# index#)+#else+ word## = indexWord8OffAddr# addr# index#+#endif
+ lib/Unicode/Internal/Char/UnicodeData/GeneralCategory.hs view
file too large to diff
+ lib/Unicode/Internal/Char/UnicodeData/SimpleLowerCaseMapping.hs view
@@ -0,0 +1,1448 @@+-- autogenerated from https://www.unicode.org/Public/14.0.0/ucd/UnicodeData.txt+-- |+-- Module : Unicode.Internal.Char.UnicodeData.SimpleLowerCaseMapping+-- Copyright : (c) 2020 Composewell Technologies and Contributors+-- License : Apache-2.0+-- Maintainer : streamly@composewell.com+-- Stability : experimental++module Unicode.Internal.Char.UnicodeData.SimpleLowerCaseMapping+(toSimpleLowerCase)+where++{-# NOINLINE toSimpleLowerCase #-}+toSimpleLowerCase :: Char -> Char+toSimpleLowerCase 'A' = 'a'+toSimpleLowerCase 'B' = 'b'+toSimpleLowerCase 'C' = 'c'+toSimpleLowerCase 'D' = 'd'+toSimpleLowerCase 'E' = 'e'+toSimpleLowerCase 'F' = 'f'+toSimpleLowerCase 'G' = 'g'+toSimpleLowerCase 'H' = 'h'+toSimpleLowerCase 'I' = 'i'+toSimpleLowerCase 'J' = 'j'+toSimpleLowerCase 'K' = 'k'+toSimpleLowerCase 'L' = 'l'+toSimpleLowerCase 'M' = 'm'+toSimpleLowerCase 'N' = 'n'+toSimpleLowerCase 'O' = 'o'+toSimpleLowerCase 'P' = 'p'+toSimpleLowerCase 'Q' = 'q'+toSimpleLowerCase 'R' = 'r'+toSimpleLowerCase 'S' = 's'+toSimpleLowerCase 'T' = 't'+toSimpleLowerCase 'U' = 'u'+toSimpleLowerCase 'V' = 'v'+toSimpleLowerCase 'W' = 'w'+toSimpleLowerCase 'X' = 'x'+toSimpleLowerCase 'Y' = 'y'+toSimpleLowerCase 'Z' = 'z'+toSimpleLowerCase '\192' = '\224'+toSimpleLowerCase '\193' = '\225'+toSimpleLowerCase '\194' = '\226'+toSimpleLowerCase '\195' = '\227'+toSimpleLowerCase '\196' = '\228'+toSimpleLowerCase '\197' = '\229'+toSimpleLowerCase '\198' = '\230'+toSimpleLowerCase '\199' = '\231'+toSimpleLowerCase '\200' = '\232'+toSimpleLowerCase '\201' = '\233'+toSimpleLowerCase '\202' = '\234'+toSimpleLowerCase '\203' = '\235'+toSimpleLowerCase '\204' = '\236'+toSimpleLowerCase '\205' = '\237'+toSimpleLowerCase '\206' = '\238'+toSimpleLowerCase '\207' = '\239'+toSimpleLowerCase '\208' = '\240'+toSimpleLowerCase '\209' = '\241'+toSimpleLowerCase '\210' = '\242'+toSimpleLowerCase '\211' = '\243'+toSimpleLowerCase '\212' = '\244'+toSimpleLowerCase '\213' = '\245'+toSimpleLowerCase '\214' = '\246'+toSimpleLowerCase '\216' = '\248'+toSimpleLowerCase '\217' = '\249'+toSimpleLowerCase '\218' = '\250'+toSimpleLowerCase '\219' = '\251'+toSimpleLowerCase '\220' = '\252'+toSimpleLowerCase '\221' = '\253'+toSimpleLowerCase '\222' = '\254'+toSimpleLowerCase '\256' = '\257'+toSimpleLowerCase '\258' = '\259'+toSimpleLowerCase '\260' = '\261'+toSimpleLowerCase '\262' = '\263'+toSimpleLowerCase '\264' = '\265'+toSimpleLowerCase '\266' = '\267'+toSimpleLowerCase '\268' = '\269'+toSimpleLowerCase '\270' = '\271'+toSimpleLowerCase '\272' = '\273'+toSimpleLowerCase '\274' = '\275'+toSimpleLowerCase '\276' = '\277'+toSimpleLowerCase '\278' = '\279'+toSimpleLowerCase '\280' = '\281'+toSimpleLowerCase '\282' = '\283'+toSimpleLowerCase '\284' = '\285'+toSimpleLowerCase '\286' = '\287'+toSimpleLowerCase '\288' = '\289'+toSimpleLowerCase '\290' = '\291'+toSimpleLowerCase '\292' = '\293'+toSimpleLowerCase '\294' = '\295'+toSimpleLowerCase '\296' = '\297'+toSimpleLowerCase '\298' = '\299'+toSimpleLowerCase '\300' = '\301'+toSimpleLowerCase '\302' = '\303'+toSimpleLowerCase '\304' = 'i'+toSimpleLowerCase '\306' = '\307'+toSimpleLowerCase '\308' = '\309'+toSimpleLowerCase '\310' = '\311'+toSimpleLowerCase '\313' = '\314'+toSimpleLowerCase '\315' = '\316'+toSimpleLowerCase '\317' = '\318'+toSimpleLowerCase '\319' = '\320'+toSimpleLowerCase '\321' = '\322'+toSimpleLowerCase '\323' = '\324'+toSimpleLowerCase '\325' = '\326'+toSimpleLowerCase '\327' = '\328'+toSimpleLowerCase '\330' = '\331'+toSimpleLowerCase '\332' = '\333'+toSimpleLowerCase '\334' = '\335'+toSimpleLowerCase '\336' = '\337'+toSimpleLowerCase '\338' = '\339'+toSimpleLowerCase '\340' = '\341'+toSimpleLowerCase '\342' = '\343'+toSimpleLowerCase '\344' = '\345'+toSimpleLowerCase '\346' = '\347'+toSimpleLowerCase '\348' = '\349'+toSimpleLowerCase '\350' = '\351'+toSimpleLowerCase '\352' = '\353'+toSimpleLowerCase '\354' = '\355'+toSimpleLowerCase '\356' = '\357'+toSimpleLowerCase '\358' = '\359'+toSimpleLowerCase '\360' = '\361'+toSimpleLowerCase '\362' = '\363'+toSimpleLowerCase '\364' = '\365'+toSimpleLowerCase '\366' = '\367'+toSimpleLowerCase '\368' = '\369'+toSimpleLowerCase '\370' = '\371'+toSimpleLowerCase '\372' = '\373'+toSimpleLowerCase '\374' = '\375'+toSimpleLowerCase '\376' = '\255'+toSimpleLowerCase '\377' = '\378'+toSimpleLowerCase '\379' = '\380'+toSimpleLowerCase '\381' = '\382'+toSimpleLowerCase '\385' = '\595'+toSimpleLowerCase '\386' = '\387'+toSimpleLowerCase '\388' = '\389'+toSimpleLowerCase '\390' = '\596'+toSimpleLowerCase '\391' = '\392'+toSimpleLowerCase '\393' = '\598'+toSimpleLowerCase '\394' = '\599'+toSimpleLowerCase '\395' = '\396'+toSimpleLowerCase '\398' = '\477'+toSimpleLowerCase '\399' = '\601'+toSimpleLowerCase '\400' = '\603'+toSimpleLowerCase '\401' = '\402'+toSimpleLowerCase '\403' = '\608'+toSimpleLowerCase '\404' = '\611'+toSimpleLowerCase '\406' = '\617'+toSimpleLowerCase '\407' = '\616'+toSimpleLowerCase '\408' = '\409'+toSimpleLowerCase '\412' = '\623'+toSimpleLowerCase '\413' = '\626'+toSimpleLowerCase '\415' = '\629'+toSimpleLowerCase '\416' = '\417'+toSimpleLowerCase '\418' = '\419'+toSimpleLowerCase '\420' = '\421'+toSimpleLowerCase '\422' = '\640'+toSimpleLowerCase '\423' = '\424'+toSimpleLowerCase '\425' = '\643'+toSimpleLowerCase '\428' = '\429'+toSimpleLowerCase '\430' = '\648'+toSimpleLowerCase '\431' = '\432'+toSimpleLowerCase '\433' = '\650'+toSimpleLowerCase '\434' = '\651'+toSimpleLowerCase '\435' = '\436'+toSimpleLowerCase '\437' = '\438'+toSimpleLowerCase '\439' = '\658'+toSimpleLowerCase '\440' = '\441'+toSimpleLowerCase '\444' = '\445'+toSimpleLowerCase '\452' = '\454'+toSimpleLowerCase '\453' = '\454'+toSimpleLowerCase '\455' = '\457'+toSimpleLowerCase '\456' = '\457'+toSimpleLowerCase '\458' = '\460'+toSimpleLowerCase '\459' = '\460'+toSimpleLowerCase '\461' = '\462'+toSimpleLowerCase '\463' = '\464'+toSimpleLowerCase '\465' = '\466'+toSimpleLowerCase '\467' = '\468'+toSimpleLowerCase '\469' = '\470'+toSimpleLowerCase '\471' = '\472'+toSimpleLowerCase '\473' = '\474'+toSimpleLowerCase '\475' = '\476'+toSimpleLowerCase '\478' = '\479'+toSimpleLowerCase '\480' = '\481'+toSimpleLowerCase '\482' = '\483'+toSimpleLowerCase '\484' = '\485'+toSimpleLowerCase '\486' = '\487'+toSimpleLowerCase '\488' = '\489'+toSimpleLowerCase '\490' = '\491'+toSimpleLowerCase '\492' = '\493'+toSimpleLowerCase '\494' = '\495'+toSimpleLowerCase '\497' = '\499'+toSimpleLowerCase '\498' = '\499'+toSimpleLowerCase '\500' = '\501'+toSimpleLowerCase '\502' = '\405'+toSimpleLowerCase '\503' = '\447'+toSimpleLowerCase '\504' = '\505'+toSimpleLowerCase '\506' = '\507'+toSimpleLowerCase '\508' = '\509'+toSimpleLowerCase '\510' = '\511'+toSimpleLowerCase '\512' = '\513'+toSimpleLowerCase '\514' = '\515'+toSimpleLowerCase '\516' = '\517'+toSimpleLowerCase '\518' = '\519'+toSimpleLowerCase '\520' = '\521'+toSimpleLowerCase '\522' = '\523'+toSimpleLowerCase '\524' = '\525'+toSimpleLowerCase '\526' = '\527'+toSimpleLowerCase '\528' = '\529'+toSimpleLowerCase '\530' = '\531'+toSimpleLowerCase '\532' = '\533'+toSimpleLowerCase '\534' = '\535'+toSimpleLowerCase '\536' = '\537'+toSimpleLowerCase '\538' = '\539'+toSimpleLowerCase '\540' = '\541'+toSimpleLowerCase '\542' = '\543'+toSimpleLowerCase '\544' = '\414'+toSimpleLowerCase '\546' = '\547'+toSimpleLowerCase '\548' = '\549'+toSimpleLowerCase '\550' = '\551'+toSimpleLowerCase '\552' = '\553'+toSimpleLowerCase '\554' = '\555'+toSimpleLowerCase '\556' = '\557'+toSimpleLowerCase '\558' = '\559'+toSimpleLowerCase '\560' = '\561'+toSimpleLowerCase '\562' = '\563'+toSimpleLowerCase '\570' = '\11365'+toSimpleLowerCase '\571' = '\572'+toSimpleLowerCase '\573' = '\410'+toSimpleLowerCase '\574' = '\11366'+toSimpleLowerCase '\577' = '\578'+toSimpleLowerCase '\579' = '\384'+toSimpleLowerCase '\580' = '\649'+toSimpleLowerCase '\581' = '\652'+toSimpleLowerCase '\582' = '\583'+toSimpleLowerCase '\584' = '\585'+toSimpleLowerCase '\586' = '\587'+toSimpleLowerCase '\588' = '\589'+toSimpleLowerCase '\590' = '\591'+toSimpleLowerCase '\880' = '\881'+toSimpleLowerCase '\882' = '\883'+toSimpleLowerCase '\886' = '\887'+toSimpleLowerCase '\895' = '\1011'+toSimpleLowerCase '\902' = '\940'+toSimpleLowerCase '\904' = '\941'+toSimpleLowerCase '\905' = '\942'+toSimpleLowerCase '\906' = '\943'+toSimpleLowerCase '\908' = '\972'+toSimpleLowerCase '\910' = '\973'+toSimpleLowerCase '\911' = '\974'+toSimpleLowerCase '\913' = '\945'+toSimpleLowerCase '\914' = '\946'+toSimpleLowerCase '\915' = '\947'+toSimpleLowerCase '\916' = '\948'+toSimpleLowerCase '\917' = '\949'+toSimpleLowerCase '\918' = '\950'+toSimpleLowerCase '\919' = '\951'+toSimpleLowerCase '\920' = '\952'+toSimpleLowerCase '\921' = '\953'+toSimpleLowerCase '\922' = '\954'+toSimpleLowerCase '\923' = '\955'+toSimpleLowerCase '\924' = '\956'+toSimpleLowerCase '\925' = '\957'+toSimpleLowerCase '\926' = '\958'+toSimpleLowerCase '\927' = '\959'+toSimpleLowerCase '\928' = '\960'+toSimpleLowerCase '\929' = '\961'+toSimpleLowerCase '\931' = '\963'+toSimpleLowerCase '\932' = '\964'+toSimpleLowerCase '\933' = '\965'+toSimpleLowerCase '\934' = '\966'+toSimpleLowerCase '\935' = '\967'+toSimpleLowerCase '\936' = '\968'+toSimpleLowerCase '\937' = '\969'+toSimpleLowerCase '\938' = '\970'+toSimpleLowerCase '\939' = '\971'+toSimpleLowerCase '\975' = '\983'+toSimpleLowerCase '\984' = '\985'+toSimpleLowerCase '\986' = '\987'+toSimpleLowerCase '\988' = '\989'+toSimpleLowerCase '\990' = '\991'+toSimpleLowerCase '\992' = '\993'+toSimpleLowerCase '\994' = '\995'+toSimpleLowerCase '\996' = '\997'+toSimpleLowerCase '\998' = '\999'+toSimpleLowerCase '\1000' = '\1001'+toSimpleLowerCase '\1002' = '\1003'+toSimpleLowerCase '\1004' = '\1005'+toSimpleLowerCase '\1006' = '\1007'+toSimpleLowerCase '\1012' = '\952'+toSimpleLowerCase '\1015' = '\1016'+toSimpleLowerCase '\1017' = '\1010'+toSimpleLowerCase '\1018' = '\1019'+toSimpleLowerCase '\1021' = '\891'+toSimpleLowerCase '\1022' = '\892'+toSimpleLowerCase '\1023' = '\893'+toSimpleLowerCase '\1024' = '\1104'+toSimpleLowerCase '\1025' = '\1105'+toSimpleLowerCase '\1026' = '\1106'+toSimpleLowerCase '\1027' = '\1107'+toSimpleLowerCase '\1028' = '\1108'+toSimpleLowerCase '\1029' = '\1109'+toSimpleLowerCase '\1030' = '\1110'+toSimpleLowerCase '\1031' = '\1111'+toSimpleLowerCase '\1032' = '\1112'+toSimpleLowerCase '\1033' = '\1113'+toSimpleLowerCase '\1034' = '\1114'+toSimpleLowerCase '\1035' = '\1115'+toSimpleLowerCase '\1036' = '\1116'+toSimpleLowerCase '\1037' = '\1117'+toSimpleLowerCase '\1038' = '\1118'+toSimpleLowerCase '\1039' = '\1119'+toSimpleLowerCase '\1040' = '\1072'+toSimpleLowerCase '\1041' = '\1073'+toSimpleLowerCase '\1042' = '\1074'+toSimpleLowerCase '\1043' = '\1075'+toSimpleLowerCase '\1044' = '\1076'+toSimpleLowerCase '\1045' = '\1077'+toSimpleLowerCase '\1046' = '\1078'+toSimpleLowerCase '\1047' = '\1079'+toSimpleLowerCase '\1048' = '\1080'+toSimpleLowerCase '\1049' = '\1081'+toSimpleLowerCase '\1050' = '\1082'+toSimpleLowerCase '\1051' = '\1083'+toSimpleLowerCase '\1052' = '\1084'+toSimpleLowerCase '\1053' = '\1085'+toSimpleLowerCase '\1054' = '\1086'+toSimpleLowerCase '\1055' = '\1087'+toSimpleLowerCase '\1056' = '\1088'+toSimpleLowerCase '\1057' = '\1089'+toSimpleLowerCase '\1058' = '\1090'+toSimpleLowerCase '\1059' = '\1091'+toSimpleLowerCase '\1060' = '\1092'+toSimpleLowerCase '\1061' = '\1093'+toSimpleLowerCase '\1062' = '\1094'+toSimpleLowerCase '\1063' = '\1095'+toSimpleLowerCase '\1064' = '\1096'+toSimpleLowerCase '\1065' = '\1097'+toSimpleLowerCase '\1066' = '\1098'+toSimpleLowerCase '\1067' = '\1099'+toSimpleLowerCase '\1068' = '\1100'+toSimpleLowerCase '\1069' = '\1101'+toSimpleLowerCase '\1070' = '\1102'+toSimpleLowerCase '\1071' = '\1103'+toSimpleLowerCase '\1120' = '\1121'+toSimpleLowerCase '\1122' = '\1123'+toSimpleLowerCase '\1124' = '\1125'+toSimpleLowerCase '\1126' = '\1127'+toSimpleLowerCase '\1128' = '\1129'+toSimpleLowerCase '\1130' = '\1131'+toSimpleLowerCase '\1132' = '\1133'+toSimpleLowerCase '\1134' = '\1135'+toSimpleLowerCase '\1136' = '\1137'+toSimpleLowerCase '\1138' = '\1139'+toSimpleLowerCase '\1140' = '\1141'+toSimpleLowerCase '\1142' = '\1143'+toSimpleLowerCase '\1144' = '\1145'+toSimpleLowerCase '\1146' = '\1147'+toSimpleLowerCase '\1148' = '\1149'+toSimpleLowerCase '\1150' = '\1151'+toSimpleLowerCase '\1152' = '\1153'+toSimpleLowerCase '\1162' = '\1163'+toSimpleLowerCase '\1164' = '\1165'+toSimpleLowerCase '\1166' = '\1167'+toSimpleLowerCase '\1168' = '\1169'+toSimpleLowerCase '\1170' = '\1171'+toSimpleLowerCase '\1172' = '\1173'+toSimpleLowerCase '\1174' = '\1175'+toSimpleLowerCase '\1176' = '\1177'+toSimpleLowerCase '\1178' = '\1179'+toSimpleLowerCase '\1180' = '\1181'+toSimpleLowerCase '\1182' = '\1183'+toSimpleLowerCase '\1184' = '\1185'+toSimpleLowerCase '\1186' = '\1187'+toSimpleLowerCase '\1188' = '\1189'+toSimpleLowerCase '\1190' = '\1191'+toSimpleLowerCase '\1192' = '\1193'+toSimpleLowerCase '\1194' = '\1195'+toSimpleLowerCase '\1196' = '\1197'+toSimpleLowerCase '\1198' = '\1199'+toSimpleLowerCase '\1200' = '\1201'+toSimpleLowerCase '\1202' = '\1203'+toSimpleLowerCase '\1204' = '\1205'+toSimpleLowerCase '\1206' = '\1207'+toSimpleLowerCase '\1208' = '\1209'+toSimpleLowerCase '\1210' = '\1211'+toSimpleLowerCase '\1212' = '\1213'+toSimpleLowerCase '\1214' = '\1215'+toSimpleLowerCase '\1216' = '\1231'+toSimpleLowerCase '\1217' = '\1218'+toSimpleLowerCase '\1219' = '\1220'+toSimpleLowerCase '\1221' = '\1222'+toSimpleLowerCase '\1223' = '\1224'+toSimpleLowerCase '\1225' = '\1226'+toSimpleLowerCase '\1227' = '\1228'+toSimpleLowerCase '\1229' = '\1230'+toSimpleLowerCase '\1232' = '\1233'+toSimpleLowerCase '\1234' = '\1235'+toSimpleLowerCase '\1236' = '\1237'+toSimpleLowerCase '\1238' = '\1239'+toSimpleLowerCase '\1240' = '\1241'+toSimpleLowerCase '\1242' = '\1243'+toSimpleLowerCase '\1244' = '\1245'+toSimpleLowerCase '\1246' = '\1247'+toSimpleLowerCase '\1248' = '\1249'+toSimpleLowerCase '\1250' = '\1251'+toSimpleLowerCase '\1252' = '\1253'+toSimpleLowerCase '\1254' = '\1255'+toSimpleLowerCase '\1256' = '\1257'+toSimpleLowerCase '\1258' = '\1259'+toSimpleLowerCase '\1260' = '\1261'+toSimpleLowerCase '\1262' = '\1263'+toSimpleLowerCase '\1264' = '\1265'+toSimpleLowerCase '\1266' = '\1267'+toSimpleLowerCase '\1268' = '\1269'+toSimpleLowerCase '\1270' = '\1271'+toSimpleLowerCase '\1272' = '\1273'+toSimpleLowerCase '\1274' = '\1275'+toSimpleLowerCase '\1276' = '\1277'+toSimpleLowerCase '\1278' = '\1279'+toSimpleLowerCase '\1280' = '\1281'+toSimpleLowerCase '\1282' = '\1283'+toSimpleLowerCase '\1284' = '\1285'+toSimpleLowerCase '\1286' = '\1287'+toSimpleLowerCase '\1288' = '\1289'+toSimpleLowerCase '\1290' = '\1291'+toSimpleLowerCase '\1292' = '\1293'+toSimpleLowerCase '\1294' = '\1295'+toSimpleLowerCase '\1296' = '\1297'+toSimpleLowerCase '\1298' = '\1299'+toSimpleLowerCase '\1300' = '\1301'+toSimpleLowerCase '\1302' = '\1303'+toSimpleLowerCase '\1304' = '\1305'+toSimpleLowerCase '\1306' = '\1307'+toSimpleLowerCase '\1308' = '\1309'+toSimpleLowerCase '\1310' = '\1311'+toSimpleLowerCase '\1312' = '\1313'+toSimpleLowerCase '\1314' = '\1315'+toSimpleLowerCase '\1316' = '\1317'+toSimpleLowerCase '\1318' = '\1319'+toSimpleLowerCase '\1320' = '\1321'+toSimpleLowerCase '\1322' = '\1323'+toSimpleLowerCase '\1324' = '\1325'+toSimpleLowerCase '\1326' = '\1327'+toSimpleLowerCase '\1329' = '\1377'+toSimpleLowerCase '\1330' = '\1378'+toSimpleLowerCase '\1331' = '\1379'+toSimpleLowerCase '\1332' = '\1380'+toSimpleLowerCase '\1333' = '\1381'+toSimpleLowerCase '\1334' = '\1382'+toSimpleLowerCase '\1335' = '\1383'+toSimpleLowerCase '\1336' = '\1384'+toSimpleLowerCase '\1337' = '\1385'+toSimpleLowerCase '\1338' = '\1386'+toSimpleLowerCase '\1339' = '\1387'+toSimpleLowerCase '\1340' = '\1388'+toSimpleLowerCase '\1341' = '\1389'+toSimpleLowerCase '\1342' = '\1390'+toSimpleLowerCase '\1343' = '\1391'+toSimpleLowerCase '\1344' = '\1392'+toSimpleLowerCase '\1345' = '\1393'+toSimpleLowerCase '\1346' = '\1394'+toSimpleLowerCase '\1347' = '\1395'+toSimpleLowerCase '\1348' = '\1396'+toSimpleLowerCase '\1349' = '\1397'+toSimpleLowerCase '\1350' = '\1398'+toSimpleLowerCase '\1351' = '\1399'+toSimpleLowerCase '\1352' = '\1400'+toSimpleLowerCase '\1353' = '\1401'+toSimpleLowerCase '\1354' = '\1402'+toSimpleLowerCase '\1355' = '\1403'+toSimpleLowerCase '\1356' = '\1404'+toSimpleLowerCase '\1357' = '\1405'+toSimpleLowerCase '\1358' = '\1406'+toSimpleLowerCase '\1359' = '\1407'+toSimpleLowerCase '\1360' = '\1408'+toSimpleLowerCase '\1361' = '\1409'+toSimpleLowerCase '\1362' = '\1410'+toSimpleLowerCase '\1363' = '\1411'+toSimpleLowerCase '\1364' = '\1412'+toSimpleLowerCase '\1365' = '\1413'+toSimpleLowerCase '\1366' = '\1414'+toSimpleLowerCase '\4256' = '\11520'+toSimpleLowerCase '\4257' = '\11521'+toSimpleLowerCase '\4258' = '\11522'+toSimpleLowerCase '\4259' = '\11523'+toSimpleLowerCase '\4260' = '\11524'+toSimpleLowerCase '\4261' = '\11525'+toSimpleLowerCase '\4262' = '\11526'+toSimpleLowerCase '\4263' = '\11527'+toSimpleLowerCase '\4264' = '\11528'+toSimpleLowerCase '\4265' = '\11529'+toSimpleLowerCase '\4266' = '\11530'+toSimpleLowerCase '\4267' = '\11531'+toSimpleLowerCase '\4268' = '\11532'+toSimpleLowerCase '\4269' = '\11533'+toSimpleLowerCase '\4270' = '\11534'+toSimpleLowerCase '\4271' = '\11535'+toSimpleLowerCase '\4272' = '\11536'+toSimpleLowerCase '\4273' = '\11537'+toSimpleLowerCase '\4274' = '\11538'+toSimpleLowerCase '\4275' = '\11539'+toSimpleLowerCase '\4276' = '\11540'+toSimpleLowerCase '\4277' = '\11541'+toSimpleLowerCase '\4278' = '\11542'+toSimpleLowerCase '\4279' = '\11543'+toSimpleLowerCase '\4280' = '\11544'+toSimpleLowerCase '\4281' = '\11545'+toSimpleLowerCase '\4282' = '\11546'+toSimpleLowerCase '\4283' = '\11547'+toSimpleLowerCase '\4284' = '\11548'+toSimpleLowerCase '\4285' = '\11549'+toSimpleLowerCase '\4286' = '\11550'+toSimpleLowerCase '\4287' = '\11551'+toSimpleLowerCase '\4288' = '\11552'+toSimpleLowerCase '\4289' = '\11553'+toSimpleLowerCase '\4290' = '\11554'+toSimpleLowerCase '\4291' = '\11555'+toSimpleLowerCase '\4292' = '\11556'+toSimpleLowerCase '\4293' = '\11557'+toSimpleLowerCase '\4295' = '\11559'+toSimpleLowerCase '\4301' = '\11565'+toSimpleLowerCase '\5024' = '\43888'+toSimpleLowerCase '\5025' = '\43889'+toSimpleLowerCase '\5026' = '\43890'+toSimpleLowerCase '\5027' = '\43891'+toSimpleLowerCase '\5028' = '\43892'+toSimpleLowerCase '\5029' = '\43893'+toSimpleLowerCase '\5030' = '\43894'+toSimpleLowerCase '\5031' = '\43895'+toSimpleLowerCase '\5032' = '\43896'+toSimpleLowerCase '\5033' = '\43897'+toSimpleLowerCase '\5034' = '\43898'+toSimpleLowerCase '\5035' = '\43899'+toSimpleLowerCase '\5036' = '\43900'+toSimpleLowerCase '\5037' = '\43901'+toSimpleLowerCase '\5038' = '\43902'+toSimpleLowerCase '\5039' = '\43903'+toSimpleLowerCase '\5040' = '\43904'+toSimpleLowerCase '\5041' = '\43905'+toSimpleLowerCase '\5042' = '\43906'+toSimpleLowerCase '\5043' = '\43907'+toSimpleLowerCase '\5044' = '\43908'+toSimpleLowerCase '\5045' = '\43909'+toSimpleLowerCase '\5046' = '\43910'+toSimpleLowerCase '\5047' = '\43911'+toSimpleLowerCase '\5048' = '\43912'+toSimpleLowerCase '\5049' = '\43913'+toSimpleLowerCase '\5050' = '\43914'+toSimpleLowerCase '\5051' = '\43915'+toSimpleLowerCase '\5052' = '\43916'+toSimpleLowerCase '\5053' = '\43917'+toSimpleLowerCase '\5054' = '\43918'+toSimpleLowerCase '\5055' = '\43919'+toSimpleLowerCase '\5056' = '\43920'+toSimpleLowerCase '\5057' = '\43921'+toSimpleLowerCase '\5058' = '\43922'+toSimpleLowerCase '\5059' = '\43923'+toSimpleLowerCase '\5060' = '\43924'+toSimpleLowerCase '\5061' = '\43925'+toSimpleLowerCase '\5062' = '\43926'+toSimpleLowerCase '\5063' = '\43927'+toSimpleLowerCase '\5064' = '\43928'+toSimpleLowerCase '\5065' = '\43929'+toSimpleLowerCase '\5066' = '\43930'+toSimpleLowerCase '\5067' = '\43931'+toSimpleLowerCase '\5068' = '\43932'+toSimpleLowerCase '\5069' = '\43933'+toSimpleLowerCase '\5070' = '\43934'+toSimpleLowerCase '\5071' = '\43935'+toSimpleLowerCase '\5072' = '\43936'+toSimpleLowerCase '\5073' = '\43937'+toSimpleLowerCase '\5074' = '\43938'+toSimpleLowerCase '\5075' = '\43939'+toSimpleLowerCase '\5076' = '\43940'+toSimpleLowerCase '\5077' = '\43941'+toSimpleLowerCase '\5078' = '\43942'+toSimpleLowerCase '\5079' = '\43943'+toSimpleLowerCase '\5080' = '\43944'+toSimpleLowerCase '\5081' = '\43945'+toSimpleLowerCase '\5082' = '\43946'+toSimpleLowerCase '\5083' = '\43947'+toSimpleLowerCase '\5084' = '\43948'+toSimpleLowerCase '\5085' = '\43949'+toSimpleLowerCase '\5086' = '\43950'+toSimpleLowerCase '\5087' = '\43951'+toSimpleLowerCase '\5088' = '\43952'+toSimpleLowerCase '\5089' = '\43953'+toSimpleLowerCase '\5090' = '\43954'+toSimpleLowerCase '\5091' = '\43955'+toSimpleLowerCase '\5092' = '\43956'+toSimpleLowerCase '\5093' = '\43957'+toSimpleLowerCase '\5094' = '\43958'+toSimpleLowerCase '\5095' = '\43959'+toSimpleLowerCase '\5096' = '\43960'+toSimpleLowerCase '\5097' = '\43961'+toSimpleLowerCase '\5098' = '\43962'+toSimpleLowerCase '\5099' = '\43963'+toSimpleLowerCase '\5100' = '\43964'+toSimpleLowerCase '\5101' = '\43965'+toSimpleLowerCase '\5102' = '\43966'+toSimpleLowerCase '\5103' = '\43967'+toSimpleLowerCase '\5104' = '\5112'+toSimpleLowerCase '\5105' = '\5113'+toSimpleLowerCase '\5106' = '\5114'+toSimpleLowerCase '\5107' = '\5115'+toSimpleLowerCase '\5108' = '\5116'+toSimpleLowerCase '\5109' = '\5117'+toSimpleLowerCase '\7312' = '\4304'+toSimpleLowerCase '\7313' = '\4305'+toSimpleLowerCase '\7314' = '\4306'+toSimpleLowerCase '\7315' = '\4307'+toSimpleLowerCase '\7316' = '\4308'+toSimpleLowerCase '\7317' = '\4309'+toSimpleLowerCase '\7318' = '\4310'+toSimpleLowerCase '\7319' = '\4311'+toSimpleLowerCase '\7320' = '\4312'+toSimpleLowerCase '\7321' = '\4313'+toSimpleLowerCase '\7322' = '\4314'+toSimpleLowerCase '\7323' = '\4315'+toSimpleLowerCase '\7324' = '\4316'+toSimpleLowerCase '\7325' = '\4317'+toSimpleLowerCase '\7326' = '\4318'+toSimpleLowerCase '\7327' = '\4319'+toSimpleLowerCase '\7328' = '\4320'+toSimpleLowerCase '\7329' = '\4321'+toSimpleLowerCase '\7330' = '\4322'+toSimpleLowerCase '\7331' = '\4323'+toSimpleLowerCase '\7332' = '\4324'+toSimpleLowerCase '\7333' = '\4325'+toSimpleLowerCase '\7334' = '\4326'+toSimpleLowerCase '\7335' = '\4327'+toSimpleLowerCase '\7336' = '\4328'+toSimpleLowerCase '\7337' = '\4329'+toSimpleLowerCase '\7338' = '\4330'+toSimpleLowerCase '\7339' = '\4331'+toSimpleLowerCase '\7340' = '\4332'+toSimpleLowerCase '\7341' = '\4333'+toSimpleLowerCase '\7342' = '\4334'+toSimpleLowerCase '\7343' = '\4335'+toSimpleLowerCase '\7344' = '\4336'+toSimpleLowerCase '\7345' = '\4337'+toSimpleLowerCase '\7346' = '\4338'+toSimpleLowerCase '\7347' = '\4339'+toSimpleLowerCase '\7348' = '\4340'+toSimpleLowerCase '\7349' = '\4341'+toSimpleLowerCase '\7350' = '\4342'+toSimpleLowerCase '\7351' = '\4343'+toSimpleLowerCase '\7352' = '\4344'+toSimpleLowerCase '\7353' = '\4345'+toSimpleLowerCase '\7354' = '\4346'+toSimpleLowerCase '\7357' = '\4349'+toSimpleLowerCase '\7358' = '\4350'+toSimpleLowerCase '\7359' = '\4351'+toSimpleLowerCase '\7680' = '\7681'+toSimpleLowerCase '\7682' = '\7683'+toSimpleLowerCase '\7684' = '\7685'+toSimpleLowerCase '\7686' = '\7687'+toSimpleLowerCase '\7688' = '\7689'+toSimpleLowerCase '\7690' = '\7691'+toSimpleLowerCase '\7692' = '\7693'+toSimpleLowerCase '\7694' = '\7695'+toSimpleLowerCase '\7696' = '\7697'+toSimpleLowerCase '\7698' = '\7699'+toSimpleLowerCase '\7700' = '\7701'+toSimpleLowerCase '\7702' = '\7703'+toSimpleLowerCase '\7704' = '\7705'+toSimpleLowerCase '\7706' = '\7707'+toSimpleLowerCase '\7708' = '\7709'+toSimpleLowerCase '\7710' = '\7711'+toSimpleLowerCase '\7712' = '\7713'+toSimpleLowerCase '\7714' = '\7715'+toSimpleLowerCase '\7716' = '\7717'+toSimpleLowerCase '\7718' = '\7719'+toSimpleLowerCase '\7720' = '\7721'+toSimpleLowerCase '\7722' = '\7723'+toSimpleLowerCase '\7724' = '\7725'+toSimpleLowerCase '\7726' = '\7727'+toSimpleLowerCase '\7728' = '\7729'+toSimpleLowerCase '\7730' = '\7731'+toSimpleLowerCase '\7732' = '\7733'+toSimpleLowerCase '\7734' = '\7735'+toSimpleLowerCase '\7736' = '\7737'+toSimpleLowerCase '\7738' = '\7739'+toSimpleLowerCase '\7740' = '\7741'+toSimpleLowerCase '\7742' = '\7743'+toSimpleLowerCase '\7744' = '\7745'+toSimpleLowerCase '\7746' = '\7747'+toSimpleLowerCase '\7748' = '\7749'+toSimpleLowerCase '\7750' = '\7751'+toSimpleLowerCase '\7752' = '\7753'+toSimpleLowerCase '\7754' = '\7755'+toSimpleLowerCase '\7756' = '\7757'+toSimpleLowerCase '\7758' = '\7759'+toSimpleLowerCase '\7760' = '\7761'+toSimpleLowerCase '\7762' = '\7763'+toSimpleLowerCase '\7764' = '\7765'+toSimpleLowerCase '\7766' = '\7767'+toSimpleLowerCase '\7768' = '\7769'+toSimpleLowerCase '\7770' = '\7771'+toSimpleLowerCase '\7772' = '\7773'+toSimpleLowerCase '\7774' = '\7775'+toSimpleLowerCase '\7776' = '\7777'+toSimpleLowerCase '\7778' = '\7779'+toSimpleLowerCase '\7780' = '\7781'+toSimpleLowerCase '\7782' = '\7783'+toSimpleLowerCase '\7784' = '\7785'+toSimpleLowerCase '\7786' = '\7787'+toSimpleLowerCase '\7788' = '\7789'+toSimpleLowerCase '\7790' = '\7791'+toSimpleLowerCase '\7792' = '\7793'+toSimpleLowerCase '\7794' = '\7795'+toSimpleLowerCase '\7796' = '\7797'+toSimpleLowerCase '\7798' = '\7799'+toSimpleLowerCase '\7800' = '\7801'+toSimpleLowerCase '\7802' = '\7803'+toSimpleLowerCase '\7804' = '\7805'+toSimpleLowerCase '\7806' = '\7807'+toSimpleLowerCase '\7808' = '\7809'+toSimpleLowerCase '\7810' = '\7811'+toSimpleLowerCase '\7812' = '\7813'+toSimpleLowerCase '\7814' = '\7815'+toSimpleLowerCase '\7816' = '\7817'+toSimpleLowerCase '\7818' = '\7819'+toSimpleLowerCase '\7820' = '\7821'+toSimpleLowerCase '\7822' = '\7823'+toSimpleLowerCase '\7824' = '\7825'+toSimpleLowerCase '\7826' = '\7827'+toSimpleLowerCase '\7828' = '\7829'+toSimpleLowerCase '\7838' = '\223'+toSimpleLowerCase '\7840' = '\7841'+toSimpleLowerCase '\7842' = '\7843'+toSimpleLowerCase '\7844' = '\7845'+toSimpleLowerCase '\7846' = '\7847'+toSimpleLowerCase '\7848' = '\7849'+toSimpleLowerCase '\7850' = '\7851'+toSimpleLowerCase '\7852' = '\7853'+toSimpleLowerCase '\7854' = '\7855'+toSimpleLowerCase '\7856' = '\7857'+toSimpleLowerCase '\7858' = '\7859'+toSimpleLowerCase '\7860' = '\7861'+toSimpleLowerCase '\7862' = '\7863'+toSimpleLowerCase '\7864' = '\7865'+toSimpleLowerCase '\7866' = '\7867'+toSimpleLowerCase '\7868' = '\7869'+toSimpleLowerCase '\7870' = '\7871'+toSimpleLowerCase '\7872' = '\7873'+toSimpleLowerCase '\7874' = '\7875'+toSimpleLowerCase '\7876' = '\7877'+toSimpleLowerCase '\7878' = '\7879'+toSimpleLowerCase '\7880' = '\7881'+toSimpleLowerCase '\7882' = '\7883'+toSimpleLowerCase '\7884' = '\7885'+toSimpleLowerCase '\7886' = '\7887'+toSimpleLowerCase '\7888' = '\7889'+toSimpleLowerCase '\7890' = '\7891'+toSimpleLowerCase '\7892' = '\7893'+toSimpleLowerCase '\7894' = '\7895'+toSimpleLowerCase '\7896' = '\7897'+toSimpleLowerCase '\7898' = '\7899'+toSimpleLowerCase '\7900' = '\7901'+toSimpleLowerCase '\7902' = '\7903'+toSimpleLowerCase '\7904' = '\7905'+toSimpleLowerCase '\7906' = '\7907'+toSimpleLowerCase '\7908' = '\7909'+toSimpleLowerCase '\7910' = '\7911'+toSimpleLowerCase '\7912' = '\7913'+toSimpleLowerCase '\7914' = '\7915'+toSimpleLowerCase '\7916' = '\7917'+toSimpleLowerCase '\7918' = '\7919'+toSimpleLowerCase '\7920' = '\7921'+toSimpleLowerCase '\7922' = '\7923'+toSimpleLowerCase '\7924' = '\7925'+toSimpleLowerCase '\7926' = '\7927'+toSimpleLowerCase '\7928' = '\7929'+toSimpleLowerCase '\7930' = '\7931'+toSimpleLowerCase '\7932' = '\7933'+toSimpleLowerCase '\7934' = '\7935'+toSimpleLowerCase '\7944' = '\7936'+toSimpleLowerCase '\7945' = '\7937'+toSimpleLowerCase '\7946' = '\7938'+toSimpleLowerCase '\7947' = '\7939'+toSimpleLowerCase '\7948' = '\7940'+toSimpleLowerCase '\7949' = '\7941'+toSimpleLowerCase '\7950' = '\7942'+toSimpleLowerCase '\7951' = '\7943'+toSimpleLowerCase '\7960' = '\7952'+toSimpleLowerCase '\7961' = '\7953'+toSimpleLowerCase '\7962' = '\7954'+toSimpleLowerCase '\7963' = '\7955'+toSimpleLowerCase '\7964' = '\7956'+toSimpleLowerCase '\7965' = '\7957'+toSimpleLowerCase '\7976' = '\7968'+toSimpleLowerCase '\7977' = '\7969'+toSimpleLowerCase '\7978' = '\7970'+toSimpleLowerCase '\7979' = '\7971'+toSimpleLowerCase '\7980' = '\7972'+toSimpleLowerCase '\7981' = '\7973'+toSimpleLowerCase '\7982' = '\7974'+toSimpleLowerCase '\7983' = '\7975'+toSimpleLowerCase '\7992' = '\7984'+toSimpleLowerCase '\7993' = '\7985'+toSimpleLowerCase '\7994' = '\7986'+toSimpleLowerCase '\7995' = '\7987'+toSimpleLowerCase '\7996' = '\7988'+toSimpleLowerCase '\7997' = '\7989'+toSimpleLowerCase '\7998' = '\7990'+toSimpleLowerCase '\7999' = '\7991'+toSimpleLowerCase '\8008' = '\8000'+toSimpleLowerCase '\8009' = '\8001'+toSimpleLowerCase '\8010' = '\8002'+toSimpleLowerCase '\8011' = '\8003'+toSimpleLowerCase '\8012' = '\8004'+toSimpleLowerCase '\8013' = '\8005'+toSimpleLowerCase '\8025' = '\8017'+toSimpleLowerCase '\8027' = '\8019'+toSimpleLowerCase '\8029' = '\8021'+toSimpleLowerCase '\8031' = '\8023'+toSimpleLowerCase '\8040' = '\8032'+toSimpleLowerCase '\8041' = '\8033'+toSimpleLowerCase '\8042' = '\8034'+toSimpleLowerCase '\8043' = '\8035'+toSimpleLowerCase '\8044' = '\8036'+toSimpleLowerCase '\8045' = '\8037'+toSimpleLowerCase '\8046' = '\8038'+toSimpleLowerCase '\8047' = '\8039'+toSimpleLowerCase '\8072' = '\8064'+toSimpleLowerCase '\8073' = '\8065'+toSimpleLowerCase '\8074' = '\8066'+toSimpleLowerCase '\8075' = '\8067'+toSimpleLowerCase '\8076' = '\8068'+toSimpleLowerCase '\8077' = '\8069'+toSimpleLowerCase '\8078' = '\8070'+toSimpleLowerCase '\8079' = '\8071'+toSimpleLowerCase '\8088' = '\8080'+toSimpleLowerCase '\8089' = '\8081'+toSimpleLowerCase '\8090' = '\8082'+toSimpleLowerCase '\8091' = '\8083'+toSimpleLowerCase '\8092' = '\8084'+toSimpleLowerCase '\8093' = '\8085'+toSimpleLowerCase '\8094' = '\8086'+toSimpleLowerCase '\8095' = '\8087'+toSimpleLowerCase '\8104' = '\8096'+toSimpleLowerCase '\8105' = '\8097'+toSimpleLowerCase '\8106' = '\8098'+toSimpleLowerCase '\8107' = '\8099'+toSimpleLowerCase '\8108' = '\8100'+toSimpleLowerCase '\8109' = '\8101'+toSimpleLowerCase '\8110' = '\8102'+toSimpleLowerCase '\8111' = '\8103'+toSimpleLowerCase '\8120' = '\8112'+toSimpleLowerCase '\8121' = '\8113'+toSimpleLowerCase '\8122' = '\8048'+toSimpleLowerCase '\8123' = '\8049'+toSimpleLowerCase '\8124' = '\8115'+toSimpleLowerCase '\8136' = '\8050'+toSimpleLowerCase '\8137' = '\8051'+toSimpleLowerCase '\8138' = '\8052'+toSimpleLowerCase '\8139' = '\8053'+toSimpleLowerCase '\8140' = '\8131'+toSimpleLowerCase '\8152' = '\8144'+toSimpleLowerCase '\8153' = '\8145'+toSimpleLowerCase '\8154' = '\8054'+toSimpleLowerCase '\8155' = '\8055'+toSimpleLowerCase '\8168' = '\8160'+toSimpleLowerCase '\8169' = '\8161'+toSimpleLowerCase '\8170' = '\8058'+toSimpleLowerCase '\8171' = '\8059'+toSimpleLowerCase '\8172' = '\8165'+toSimpleLowerCase '\8184' = '\8056'+toSimpleLowerCase '\8185' = '\8057'+toSimpleLowerCase '\8186' = '\8060'+toSimpleLowerCase '\8187' = '\8061'+toSimpleLowerCase '\8188' = '\8179'+toSimpleLowerCase '\8486' = '\969'+toSimpleLowerCase '\8490' = 'k'+toSimpleLowerCase '\8491' = '\229'+toSimpleLowerCase '\8498' = '\8526'+toSimpleLowerCase '\8544' = '\8560'+toSimpleLowerCase '\8545' = '\8561'+toSimpleLowerCase '\8546' = '\8562'+toSimpleLowerCase '\8547' = '\8563'+toSimpleLowerCase '\8548' = '\8564'+toSimpleLowerCase '\8549' = '\8565'+toSimpleLowerCase '\8550' = '\8566'+toSimpleLowerCase '\8551' = '\8567'+toSimpleLowerCase '\8552' = '\8568'+toSimpleLowerCase '\8553' = '\8569'+toSimpleLowerCase '\8554' = '\8570'+toSimpleLowerCase '\8555' = '\8571'+toSimpleLowerCase '\8556' = '\8572'+toSimpleLowerCase '\8557' = '\8573'+toSimpleLowerCase '\8558' = '\8574'+toSimpleLowerCase '\8559' = '\8575'+toSimpleLowerCase '\8579' = '\8580'+toSimpleLowerCase '\9398' = '\9424'+toSimpleLowerCase '\9399' = '\9425'+toSimpleLowerCase '\9400' = '\9426'+toSimpleLowerCase '\9401' = '\9427'+toSimpleLowerCase '\9402' = '\9428'+toSimpleLowerCase '\9403' = '\9429'+toSimpleLowerCase '\9404' = '\9430'+toSimpleLowerCase '\9405' = '\9431'+toSimpleLowerCase '\9406' = '\9432'+toSimpleLowerCase '\9407' = '\9433'+toSimpleLowerCase '\9408' = '\9434'+toSimpleLowerCase '\9409' = '\9435'+toSimpleLowerCase '\9410' = '\9436'+toSimpleLowerCase '\9411' = '\9437'+toSimpleLowerCase '\9412' = '\9438'+toSimpleLowerCase '\9413' = '\9439'+toSimpleLowerCase '\9414' = '\9440'+toSimpleLowerCase '\9415' = '\9441'+toSimpleLowerCase '\9416' = '\9442'+toSimpleLowerCase '\9417' = '\9443'+toSimpleLowerCase '\9418' = '\9444'+toSimpleLowerCase '\9419' = '\9445'+toSimpleLowerCase '\9420' = '\9446'+toSimpleLowerCase '\9421' = '\9447'+toSimpleLowerCase '\9422' = '\9448'+toSimpleLowerCase '\9423' = '\9449'+toSimpleLowerCase '\11264' = '\11312'+toSimpleLowerCase '\11265' = '\11313'+toSimpleLowerCase '\11266' = '\11314'+toSimpleLowerCase '\11267' = '\11315'+toSimpleLowerCase '\11268' = '\11316'+toSimpleLowerCase '\11269' = '\11317'+toSimpleLowerCase '\11270' = '\11318'+toSimpleLowerCase '\11271' = '\11319'+toSimpleLowerCase '\11272' = '\11320'+toSimpleLowerCase '\11273' = '\11321'+toSimpleLowerCase '\11274' = '\11322'+toSimpleLowerCase '\11275' = '\11323'+toSimpleLowerCase '\11276' = '\11324'+toSimpleLowerCase '\11277' = '\11325'+toSimpleLowerCase '\11278' = '\11326'+toSimpleLowerCase '\11279' = '\11327'+toSimpleLowerCase '\11280' = '\11328'+toSimpleLowerCase '\11281' = '\11329'+toSimpleLowerCase '\11282' = '\11330'+toSimpleLowerCase '\11283' = '\11331'+toSimpleLowerCase '\11284' = '\11332'+toSimpleLowerCase '\11285' = '\11333'+toSimpleLowerCase '\11286' = '\11334'+toSimpleLowerCase '\11287' = '\11335'+toSimpleLowerCase '\11288' = '\11336'+toSimpleLowerCase '\11289' = '\11337'+toSimpleLowerCase '\11290' = '\11338'+toSimpleLowerCase '\11291' = '\11339'+toSimpleLowerCase '\11292' = '\11340'+toSimpleLowerCase '\11293' = '\11341'+toSimpleLowerCase '\11294' = '\11342'+toSimpleLowerCase '\11295' = '\11343'+toSimpleLowerCase '\11296' = '\11344'+toSimpleLowerCase '\11297' = '\11345'+toSimpleLowerCase '\11298' = '\11346'+toSimpleLowerCase '\11299' = '\11347'+toSimpleLowerCase '\11300' = '\11348'+toSimpleLowerCase '\11301' = '\11349'+toSimpleLowerCase '\11302' = '\11350'+toSimpleLowerCase '\11303' = '\11351'+toSimpleLowerCase '\11304' = '\11352'+toSimpleLowerCase '\11305' = '\11353'+toSimpleLowerCase '\11306' = '\11354'+toSimpleLowerCase '\11307' = '\11355'+toSimpleLowerCase '\11308' = '\11356'+toSimpleLowerCase '\11309' = '\11357'+toSimpleLowerCase '\11310' = '\11358'+toSimpleLowerCase '\11311' = '\11359'+toSimpleLowerCase '\11360' = '\11361'+toSimpleLowerCase '\11362' = '\619'+toSimpleLowerCase '\11363' = '\7549'+toSimpleLowerCase '\11364' = '\637'+toSimpleLowerCase '\11367' = '\11368'+toSimpleLowerCase '\11369' = '\11370'+toSimpleLowerCase '\11371' = '\11372'+toSimpleLowerCase '\11373' = '\593'+toSimpleLowerCase '\11374' = '\625'+toSimpleLowerCase '\11375' = '\592'+toSimpleLowerCase '\11376' = '\594'+toSimpleLowerCase '\11378' = '\11379'+toSimpleLowerCase '\11381' = '\11382'+toSimpleLowerCase '\11390' = '\575'+toSimpleLowerCase '\11391' = '\576'+toSimpleLowerCase '\11392' = '\11393'+toSimpleLowerCase '\11394' = '\11395'+toSimpleLowerCase '\11396' = '\11397'+toSimpleLowerCase '\11398' = '\11399'+toSimpleLowerCase '\11400' = '\11401'+toSimpleLowerCase '\11402' = '\11403'+toSimpleLowerCase '\11404' = '\11405'+toSimpleLowerCase '\11406' = '\11407'+toSimpleLowerCase '\11408' = '\11409'+toSimpleLowerCase '\11410' = '\11411'+toSimpleLowerCase '\11412' = '\11413'+toSimpleLowerCase '\11414' = '\11415'+toSimpleLowerCase '\11416' = '\11417'+toSimpleLowerCase '\11418' = '\11419'+toSimpleLowerCase '\11420' = '\11421'+toSimpleLowerCase '\11422' = '\11423'+toSimpleLowerCase '\11424' = '\11425'+toSimpleLowerCase '\11426' = '\11427'+toSimpleLowerCase '\11428' = '\11429'+toSimpleLowerCase '\11430' = '\11431'+toSimpleLowerCase '\11432' = '\11433'+toSimpleLowerCase '\11434' = '\11435'+toSimpleLowerCase '\11436' = '\11437'+toSimpleLowerCase '\11438' = '\11439'+toSimpleLowerCase '\11440' = '\11441'+toSimpleLowerCase '\11442' = '\11443'+toSimpleLowerCase '\11444' = '\11445'+toSimpleLowerCase '\11446' = '\11447'+toSimpleLowerCase '\11448' = '\11449'+toSimpleLowerCase '\11450' = '\11451'+toSimpleLowerCase '\11452' = '\11453'+toSimpleLowerCase '\11454' = '\11455'+toSimpleLowerCase '\11456' = '\11457'+toSimpleLowerCase '\11458' = '\11459'+toSimpleLowerCase '\11460' = '\11461'+toSimpleLowerCase '\11462' = '\11463'+toSimpleLowerCase '\11464' = '\11465'+toSimpleLowerCase '\11466' = '\11467'+toSimpleLowerCase '\11468' = '\11469'+toSimpleLowerCase '\11470' = '\11471'+toSimpleLowerCase '\11472' = '\11473'+toSimpleLowerCase '\11474' = '\11475'+toSimpleLowerCase '\11476' = '\11477'+toSimpleLowerCase '\11478' = '\11479'+toSimpleLowerCase '\11480' = '\11481'+toSimpleLowerCase '\11482' = '\11483'+toSimpleLowerCase '\11484' = '\11485'+toSimpleLowerCase '\11486' = '\11487'+toSimpleLowerCase '\11488' = '\11489'+toSimpleLowerCase '\11490' = '\11491'+toSimpleLowerCase '\11499' = '\11500'+toSimpleLowerCase '\11501' = '\11502'+toSimpleLowerCase '\11506' = '\11507'+toSimpleLowerCase '\42560' = '\42561'+toSimpleLowerCase '\42562' = '\42563'+toSimpleLowerCase '\42564' = '\42565'+toSimpleLowerCase '\42566' = '\42567'+toSimpleLowerCase '\42568' = '\42569'+toSimpleLowerCase '\42570' = '\42571'+toSimpleLowerCase '\42572' = '\42573'+toSimpleLowerCase '\42574' = '\42575'+toSimpleLowerCase '\42576' = '\42577'+toSimpleLowerCase '\42578' = '\42579'+toSimpleLowerCase '\42580' = '\42581'+toSimpleLowerCase '\42582' = '\42583'+toSimpleLowerCase '\42584' = '\42585'+toSimpleLowerCase '\42586' = '\42587'+toSimpleLowerCase '\42588' = '\42589'+toSimpleLowerCase '\42590' = '\42591'+toSimpleLowerCase '\42592' = '\42593'+toSimpleLowerCase '\42594' = '\42595'+toSimpleLowerCase '\42596' = '\42597'+toSimpleLowerCase '\42598' = '\42599'+toSimpleLowerCase '\42600' = '\42601'+toSimpleLowerCase '\42602' = '\42603'+toSimpleLowerCase '\42604' = '\42605'+toSimpleLowerCase '\42624' = '\42625'+toSimpleLowerCase '\42626' = '\42627'+toSimpleLowerCase '\42628' = '\42629'+toSimpleLowerCase '\42630' = '\42631'+toSimpleLowerCase '\42632' = '\42633'+toSimpleLowerCase '\42634' = '\42635'+toSimpleLowerCase '\42636' = '\42637'+toSimpleLowerCase '\42638' = '\42639'+toSimpleLowerCase '\42640' = '\42641'+toSimpleLowerCase '\42642' = '\42643'+toSimpleLowerCase '\42644' = '\42645'+toSimpleLowerCase '\42646' = '\42647'+toSimpleLowerCase '\42648' = '\42649'+toSimpleLowerCase '\42650' = '\42651'+toSimpleLowerCase '\42786' = '\42787'+toSimpleLowerCase '\42788' = '\42789'+toSimpleLowerCase '\42790' = '\42791'+toSimpleLowerCase '\42792' = '\42793'+toSimpleLowerCase '\42794' = '\42795'+toSimpleLowerCase '\42796' = '\42797'+toSimpleLowerCase '\42798' = '\42799'+toSimpleLowerCase '\42802' = '\42803'+toSimpleLowerCase '\42804' = '\42805'+toSimpleLowerCase '\42806' = '\42807'+toSimpleLowerCase '\42808' = '\42809'+toSimpleLowerCase '\42810' = '\42811'+toSimpleLowerCase '\42812' = '\42813'+toSimpleLowerCase '\42814' = '\42815'+toSimpleLowerCase '\42816' = '\42817'+toSimpleLowerCase '\42818' = '\42819'+toSimpleLowerCase '\42820' = '\42821'+toSimpleLowerCase '\42822' = '\42823'+toSimpleLowerCase '\42824' = '\42825'+toSimpleLowerCase '\42826' = '\42827'+toSimpleLowerCase '\42828' = '\42829'+toSimpleLowerCase '\42830' = '\42831'+toSimpleLowerCase '\42832' = '\42833'+toSimpleLowerCase '\42834' = '\42835'+toSimpleLowerCase '\42836' = '\42837'+toSimpleLowerCase '\42838' = '\42839'+toSimpleLowerCase '\42840' = '\42841'+toSimpleLowerCase '\42842' = '\42843'+toSimpleLowerCase '\42844' = '\42845'+toSimpleLowerCase '\42846' = '\42847'+toSimpleLowerCase '\42848' = '\42849'+toSimpleLowerCase '\42850' = '\42851'+toSimpleLowerCase '\42852' = '\42853'+toSimpleLowerCase '\42854' = '\42855'+toSimpleLowerCase '\42856' = '\42857'+toSimpleLowerCase '\42858' = '\42859'+toSimpleLowerCase '\42860' = '\42861'+toSimpleLowerCase '\42862' = '\42863'+toSimpleLowerCase '\42873' = '\42874'+toSimpleLowerCase '\42875' = '\42876'+toSimpleLowerCase '\42877' = '\7545'+toSimpleLowerCase '\42878' = '\42879'+toSimpleLowerCase '\42880' = '\42881'+toSimpleLowerCase '\42882' = '\42883'+toSimpleLowerCase '\42884' = '\42885'+toSimpleLowerCase '\42886' = '\42887'+toSimpleLowerCase '\42891' = '\42892'+toSimpleLowerCase '\42893' = '\613'+toSimpleLowerCase '\42896' = '\42897'+toSimpleLowerCase '\42898' = '\42899'+toSimpleLowerCase '\42902' = '\42903'+toSimpleLowerCase '\42904' = '\42905'+toSimpleLowerCase '\42906' = '\42907'+toSimpleLowerCase '\42908' = '\42909'+toSimpleLowerCase '\42910' = '\42911'+toSimpleLowerCase '\42912' = '\42913'+toSimpleLowerCase '\42914' = '\42915'+toSimpleLowerCase '\42916' = '\42917'+toSimpleLowerCase '\42918' = '\42919'+toSimpleLowerCase '\42920' = '\42921'+toSimpleLowerCase '\42922' = '\614'+toSimpleLowerCase '\42923' = '\604'+toSimpleLowerCase '\42924' = '\609'+toSimpleLowerCase '\42925' = '\620'+toSimpleLowerCase '\42926' = '\618'+toSimpleLowerCase '\42928' = '\670'+toSimpleLowerCase '\42929' = '\647'+toSimpleLowerCase '\42930' = '\669'+toSimpleLowerCase '\42931' = '\43859'+toSimpleLowerCase '\42932' = '\42933'+toSimpleLowerCase '\42934' = '\42935'+toSimpleLowerCase '\42936' = '\42937'+toSimpleLowerCase '\42938' = '\42939'+toSimpleLowerCase '\42940' = '\42941'+toSimpleLowerCase '\42942' = '\42943'+toSimpleLowerCase '\42944' = '\42945'+toSimpleLowerCase '\42946' = '\42947'+toSimpleLowerCase '\42948' = '\42900'+toSimpleLowerCase '\42949' = '\642'+toSimpleLowerCase '\42950' = '\7566'+toSimpleLowerCase '\42951' = '\42952'+toSimpleLowerCase '\42953' = '\42954'+toSimpleLowerCase '\42960' = '\42961'+toSimpleLowerCase '\42966' = '\42967'+toSimpleLowerCase '\42968' = '\42969'+toSimpleLowerCase '\42997' = '\42998'+toSimpleLowerCase '\65313' = '\65345'+toSimpleLowerCase '\65314' = '\65346'+toSimpleLowerCase '\65315' = '\65347'+toSimpleLowerCase '\65316' = '\65348'+toSimpleLowerCase '\65317' = '\65349'+toSimpleLowerCase '\65318' = '\65350'+toSimpleLowerCase '\65319' = '\65351'+toSimpleLowerCase '\65320' = '\65352'+toSimpleLowerCase '\65321' = '\65353'+toSimpleLowerCase '\65322' = '\65354'+toSimpleLowerCase '\65323' = '\65355'+toSimpleLowerCase '\65324' = '\65356'+toSimpleLowerCase '\65325' = '\65357'+toSimpleLowerCase '\65326' = '\65358'+toSimpleLowerCase '\65327' = '\65359'+toSimpleLowerCase '\65328' = '\65360'+toSimpleLowerCase '\65329' = '\65361'+toSimpleLowerCase '\65330' = '\65362'+toSimpleLowerCase '\65331' = '\65363'+toSimpleLowerCase '\65332' = '\65364'+toSimpleLowerCase '\65333' = '\65365'+toSimpleLowerCase '\65334' = '\65366'+toSimpleLowerCase '\65335' = '\65367'+toSimpleLowerCase '\65336' = '\65368'+toSimpleLowerCase '\65337' = '\65369'+toSimpleLowerCase '\65338' = '\65370'+toSimpleLowerCase '\66560' = '\66600'+toSimpleLowerCase '\66561' = '\66601'+toSimpleLowerCase '\66562' = '\66602'+toSimpleLowerCase '\66563' = '\66603'+toSimpleLowerCase '\66564' = '\66604'+toSimpleLowerCase '\66565' = '\66605'+toSimpleLowerCase '\66566' = '\66606'+toSimpleLowerCase '\66567' = '\66607'+toSimpleLowerCase '\66568' = '\66608'+toSimpleLowerCase '\66569' = '\66609'+toSimpleLowerCase '\66570' = '\66610'+toSimpleLowerCase '\66571' = '\66611'+toSimpleLowerCase '\66572' = '\66612'+toSimpleLowerCase '\66573' = '\66613'+toSimpleLowerCase '\66574' = '\66614'+toSimpleLowerCase '\66575' = '\66615'+toSimpleLowerCase '\66576' = '\66616'+toSimpleLowerCase '\66577' = '\66617'+toSimpleLowerCase '\66578' = '\66618'+toSimpleLowerCase '\66579' = '\66619'+toSimpleLowerCase '\66580' = '\66620'+toSimpleLowerCase '\66581' = '\66621'+toSimpleLowerCase '\66582' = '\66622'+toSimpleLowerCase '\66583' = '\66623'+toSimpleLowerCase '\66584' = '\66624'+toSimpleLowerCase '\66585' = '\66625'+toSimpleLowerCase '\66586' = '\66626'+toSimpleLowerCase '\66587' = '\66627'+toSimpleLowerCase '\66588' = '\66628'+toSimpleLowerCase '\66589' = '\66629'+toSimpleLowerCase '\66590' = '\66630'+toSimpleLowerCase '\66591' = '\66631'+toSimpleLowerCase '\66592' = '\66632'+toSimpleLowerCase '\66593' = '\66633'+toSimpleLowerCase '\66594' = '\66634'+toSimpleLowerCase '\66595' = '\66635'+toSimpleLowerCase '\66596' = '\66636'+toSimpleLowerCase '\66597' = '\66637'+toSimpleLowerCase '\66598' = '\66638'+toSimpleLowerCase '\66599' = '\66639'+toSimpleLowerCase '\66736' = '\66776'+toSimpleLowerCase '\66737' = '\66777'+toSimpleLowerCase '\66738' = '\66778'+toSimpleLowerCase '\66739' = '\66779'+toSimpleLowerCase '\66740' = '\66780'+toSimpleLowerCase '\66741' = '\66781'+toSimpleLowerCase '\66742' = '\66782'+toSimpleLowerCase '\66743' = '\66783'+toSimpleLowerCase '\66744' = '\66784'+toSimpleLowerCase '\66745' = '\66785'+toSimpleLowerCase '\66746' = '\66786'+toSimpleLowerCase '\66747' = '\66787'+toSimpleLowerCase '\66748' = '\66788'+toSimpleLowerCase '\66749' = '\66789'+toSimpleLowerCase '\66750' = '\66790'+toSimpleLowerCase '\66751' = '\66791'+toSimpleLowerCase '\66752' = '\66792'+toSimpleLowerCase '\66753' = '\66793'+toSimpleLowerCase '\66754' = '\66794'+toSimpleLowerCase '\66755' = '\66795'+toSimpleLowerCase '\66756' = '\66796'+toSimpleLowerCase '\66757' = '\66797'+toSimpleLowerCase '\66758' = '\66798'+toSimpleLowerCase '\66759' = '\66799'+toSimpleLowerCase '\66760' = '\66800'+toSimpleLowerCase '\66761' = '\66801'+toSimpleLowerCase '\66762' = '\66802'+toSimpleLowerCase '\66763' = '\66803'+toSimpleLowerCase '\66764' = '\66804'+toSimpleLowerCase '\66765' = '\66805'+toSimpleLowerCase '\66766' = '\66806'+toSimpleLowerCase '\66767' = '\66807'+toSimpleLowerCase '\66768' = '\66808'+toSimpleLowerCase '\66769' = '\66809'+toSimpleLowerCase '\66770' = '\66810'+toSimpleLowerCase '\66771' = '\66811'+toSimpleLowerCase '\66928' = '\66967'+toSimpleLowerCase '\66929' = '\66968'+toSimpleLowerCase '\66930' = '\66969'+toSimpleLowerCase '\66931' = '\66970'+toSimpleLowerCase '\66932' = '\66971'+toSimpleLowerCase '\66933' = '\66972'+toSimpleLowerCase '\66934' = '\66973'+toSimpleLowerCase '\66935' = '\66974'+toSimpleLowerCase '\66936' = '\66975'+toSimpleLowerCase '\66937' = '\66976'+toSimpleLowerCase '\66938' = '\66977'+toSimpleLowerCase '\66940' = '\66979'+toSimpleLowerCase '\66941' = '\66980'+toSimpleLowerCase '\66942' = '\66981'+toSimpleLowerCase '\66943' = '\66982'+toSimpleLowerCase '\66944' = '\66983'+toSimpleLowerCase '\66945' = '\66984'+toSimpleLowerCase '\66946' = '\66985'+toSimpleLowerCase '\66947' = '\66986'+toSimpleLowerCase '\66948' = '\66987'+toSimpleLowerCase '\66949' = '\66988'+toSimpleLowerCase '\66950' = '\66989'+toSimpleLowerCase '\66951' = '\66990'+toSimpleLowerCase '\66952' = '\66991'+toSimpleLowerCase '\66953' = '\66992'+toSimpleLowerCase '\66954' = '\66993'+toSimpleLowerCase '\66956' = '\66995'+toSimpleLowerCase '\66957' = '\66996'+toSimpleLowerCase '\66958' = '\66997'+toSimpleLowerCase '\66959' = '\66998'+toSimpleLowerCase '\66960' = '\66999'+toSimpleLowerCase '\66961' = '\67000'+toSimpleLowerCase '\66962' = '\67001'+toSimpleLowerCase '\66964' = '\67003'+toSimpleLowerCase '\66965' = '\67004'+toSimpleLowerCase '\68736' = '\68800'+toSimpleLowerCase '\68737' = '\68801'+toSimpleLowerCase '\68738' = '\68802'+toSimpleLowerCase '\68739' = '\68803'+toSimpleLowerCase '\68740' = '\68804'+toSimpleLowerCase '\68741' = '\68805'+toSimpleLowerCase '\68742' = '\68806'+toSimpleLowerCase '\68743' = '\68807'+toSimpleLowerCase '\68744' = '\68808'+toSimpleLowerCase '\68745' = '\68809'+toSimpleLowerCase '\68746' = '\68810'+toSimpleLowerCase '\68747' = '\68811'+toSimpleLowerCase '\68748' = '\68812'+toSimpleLowerCase '\68749' = '\68813'+toSimpleLowerCase '\68750' = '\68814'+toSimpleLowerCase '\68751' = '\68815'+toSimpleLowerCase '\68752' = '\68816'+toSimpleLowerCase '\68753' = '\68817'+toSimpleLowerCase '\68754' = '\68818'+toSimpleLowerCase '\68755' = '\68819'+toSimpleLowerCase '\68756' = '\68820'+toSimpleLowerCase '\68757' = '\68821'+toSimpleLowerCase '\68758' = '\68822'+toSimpleLowerCase '\68759' = '\68823'+toSimpleLowerCase '\68760' = '\68824'+toSimpleLowerCase '\68761' = '\68825'+toSimpleLowerCase '\68762' = '\68826'+toSimpleLowerCase '\68763' = '\68827'+toSimpleLowerCase '\68764' = '\68828'+toSimpleLowerCase '\68765' = '\68829'+toSimpleLowerCase '\68766' = '\68830'+toSimpleLowerCase '\68767' = '\68831'+toSimpleLowerCase '\68768' = '\68832'+toSimpleLowerCase '\68769' = '\68833'+toSimpleLowerCase '\68770' = '\68834'+toSimpleLowerCase '\68771' = '\68835'+toSimpleLowerCase '\68772' = '\68836'+toSimpleLowerCase '\68773' = '\68837'+toSimpleLowerCase '\68774' = '\68838'+toSimpleLowerCase '\68775' = '\68839'+toSimpleLowerCase '\68776' = '\68840'+toSimpleLowerCase '\68777' = '\68841'+toSimpleLowerCase '\68778' = '\68842'+toSimpleLowerCase '\68779' = '\68843'+toSimpleLowerCase '\68780' = '\68844'+toSimpleLowerCase '\68781' = '\68845'+toSimpleLowerCase '\68782' = '\68846'+toSimpleLowerCase '\68783' = '\68847'+toSimpleLowerCase '\68784' = '\68848'+toSimpleLowerCase '\68785' = '\68849'+toSimpleLowerCase '\68786' = '\68850'+toSimpleLowerCase '\71840' = '\71872'+toSimpleLowerCase '\71841' = '\71873'+toSimpleLowerCase '\71842' = '\71874'+toSimpleLowerCase '\71843' = '\71875'+toSimpleLowerCase '\71844' = '\71876'+toSimpleLowerCase '\71845' = '\71877'+toSimpleLowerCase '\71846' = '\71878'+toSimpleLowerCase '\71847' = '\71879'+toSimpleLowerCase '\71848' = '\71880'+toSimpleLowerCase '\71849' = '\71881'+toSimpleLowerCase '\71850' = '\71882'+toSimpleLowerCase '\71851' = '\71883'+toSimpleLowerCase '\71852' = '\71884'+toSimpleLowerCase '\71853' = '\71885'+toSimpleLowerCase '\71854' = '\71886'+toSimpleLowerCase '\71855' = '\71887'+toSimpleLowerCase '\71856' = '\71888'+toSimpleLowerCase '\71857' = '\71889'+toSimpleLowerCase '\71858' = '\71890'+toSimpleLowerCase '\71859' = '\71891'+toSimpleLowerCase '\71860' = '\71892'+toSimpleLowerCase '\71861' = '\71893'+toSimpleLowerCase '\71862' = '\71894'+toSimpleLowerCase '\71863' = '\71895'+toSimpleLowerCase '\71864' = '\71896'+toSimpleLowerCase '\71865' = '\71897'+toSimpleLowerCase '\71866' = '\71898'+toSimpleLowerCase '\71867' = '\71899'+toSimpleLowerCase '\71868' = '\71900'+toSimpleLowerCase '\71869' = '\71901'+toSimpleLowerCase '\71870' = '\71902'+toSimpleLowerCase '\71871' = '\71903'+toSimpleLowerCase '\93760' = '\93792'+toSimpleLowerCase '\93761' = '\93793'+toSimpleLowerCase '\93762' = '\93794'+toSimpleLowerCase '\93763' = '\93795'+toSimpleLowerCase '\93764' = '\93796'+toSimpleLowerCase '\93765' = '\93797'+toSimpleLowerCase '\93766' = '\93798'+toSimpleLowerCase '\93767' = '\93799'+toSimpleLowerCase '\93768' = '\93800'+toSimpleLowerCase '\93769' = '\93801'+toSimpleLowerCase '\93770' = '\93802'+toSimpleLowerCase '\93771' = '\93803'+toSimpleLowerCase '\93772' = '\93804'+toSimpleLowerCase '\93773' = '\93805'+toSimpleLowerCase '\93774' = '\93806'+toSimpleLowerCase '\93775' = '\93807'+toSimpleLowerCase '\93776' = '\93808'+toSimpleLowerCase '\93777' = '\93809'+toSimpleLowerCase '\93778' = '\93810'+toSimpleLowerCase '\93779' = '\93811'+toSimpleLowerCase '\93780' = '\93812'+toSimpleLowerCase '\93781' = '\93813'+toSimpleLowerCase '\93782' = '\93814'+toSimpleLowerCase '\93783' = '\93815'+toSimpleLowerCase '\93784' = '\93816'+toSimpleLowerCase '\93785' = '\93817'+toSimpleLowerCase '\93786' = '\93818'+toSimpleLowerCase '\93787' = '\93819'+toSimpleLowerCase '\93788' = '\93820'+toSimpleLowerCase '\93789' = '\93821'+toSimpleLowerCase '\93790' = '\93822'+toSimpleLowerCase '\93791' = '\93823'+toSimpleLowerCase '\125184' = '\125218'+toSimpleLowerCase '\125185' = '\125219'+toSimpleLowerCase '\125186' = '\125220'+toSimpleLowerCase '\125187' = '\125221'+toSimpleLowerCase '\125188' = '\125222'+toSimpleLowerCase '\125189' = '\125223'+toSimpleLowerCase '\125190' = '\125224'+toSimpleLowerCase '\125191' = '\125225'+toSimpleLowerCase '\125192' = '\125226'+toSimpleLowerCase '\125193' = '\125227'+toSimpleLowerCase '\125194' = '\125228'+toSimpleLowerCase '\125195' = '\125229'+toSimpleLowerCase '\125196' = '\125230'+toSimpleLowerCase '\125197' = '\125231'+toSimpleLowerCase '\125198' = '\125232'+toSimpleLowerCase '\125199' = '\125233'+toSimpleLowerCase '\125200' = '\125234'+toSimpleLowerCase '\125201' = '\125235'+toSimpleLowerCase '\125202' = '\125236'+toSimpleLowerCase '\125203' = '\125237'+toSimpleLowerCase '\125204' = '\125238'+toSimpleLowerCase '\125205' = '\125239'+toSimpleLowerCase '\125206' = '\125240'+toSimpleLowerCase '\125207' = '\125241'+toSimpleLowerCase '\125208' = '\125242'+toSimpleLowerCase '\125209' = '\125243'+toSimpleLowerCase '\125210' = '\125244'+toSimpleLowerCase '\125211' = '\125245'+toSimpleLowerCase '\125212' = '\125246'+toSimpleLowerCase '\125213' = '\125247'+toSimpleLowerCase '\125214' = '\125248'+toSimpleLowerCase '\125215' = '\125249'+toSimpleLowerCase '\125216' = '\125250'+toSimpleLowerCase '\125217' = '\125251'+toSimpleLowerCase c = c
+ lib/Unicode/Internal/Char/UnicodeData/SimpleTitleCaseMapping.hs view
@@ -0,0 +1,1469 @@+-- autogenerated from https://www.unicode.org/Public/14.0.0/ucd/UnicodeData.txt+-- |+-- Module : Unicode.Internal.Char.UnicodeData.SimpleTitleCaseMapping+-- Copyright : (c) 2020 Composewell Technologies and Contributors+-- License : Apache-2.0+-- Maintainer : streamly@composewell.com+-- Stability : experimental++module Unicode.Internal.Char.UnicodeData.SimpleTitleCaseMapping+(toSimpleTitleCase)+where++{-# NOINLINE toSimpleTitleCase #-}+toSimpleTitleCase :: Char -> Char+toSimpleTitleCase 'a' = 'A'+toSimpleTitleCase 'b' = 'B'+toSimpleTitleCase 'c' = 'C'+toSimpleTitleCase 'd' = 'D'+toSimpleTitleCase 'e' = 'E'+toSimpleTitleCase 'f' = 'F'+toSimpleTitleCase 'g' = 'G'+toSimpleTitleCase 'h' = 'H'+toSimpleTitleCase 'i' = 'I'+toSimpleTitleCase 'j' = 'J'+toSimpleTitleCase 'k' = 'K'+toSimpleTitleCase 'l' = 'L'+toSimpleTitleCase 'm' = 'M'+toSimpleTitleCase 'n' = 'N'+toSimpleTitleCase 'o' = 'O'+toSimpleTitleCase 'p' = 'P'+toSimpleTitleCase 'q' = 'Q'+toSimpleTitleCase 'r' = 'R'+toSimpleTitleCase 's' = 'S'+toSimpleTitleCase 't' = 'T'+toSimpleTitleCase 'u' = 'U'+toSimpleTitleCase 'v' = 'V'+toSimpleTitleCase 'w' = 'W'+toSimpleTitleCase 'x' = 'X'+toSimpleTitleCase 'y' = 'Y'+toSimpleTitleCase 'z' = 'Z'+toSimpleTitleCase '\181' = '\924'+toSimpleTitleCase '\224' = '\192'+toSimpleTitleCase '\225' = '\193'+toSimpleTitleCase '\226' = '\194'+toSimpleTitleCase '\227' = '\195'+toSimpleTitleCase '\228' = '\196'+toSimpleTitleCase '\229' = '\197'+toSimpleTitleCase '\230' = '\198'+toSimpleTitleCase '\231' = '\199'+toSimpleTitleCase '\232' = '\200'+toSimpleTitleCase '\233' = '\201'+toSimpleTitleCase '\234' = '\202'+toSimpleTitleCase '\235' = '\203'+toSimpleTitleCase '\236' = '\204'+toSimpleTitleCase '\237' = '\205'+toSimpleTitleCase '\238' = '\206'+toSimpleTitleCase '\239' = '\207'+toSimpleTitleCase '\240' = '\208'+toSimpleTitleCase '\241' = '\209'+toSimpleTitleCase '\242' = '\210'+toSimpleTitleCase '\243' = '\211'+toSimpleTitleCase '\244' = '\212'+toSimpleTitleCase '\245' = '\213'+toSimpleTitleCase '\246' = '\214'+toSimpleTitleCase '\248' = '\216'+toSimpleTitleCase '\249' = '\217'+toSimpleTitleCase '\250' = '\218'+toSimpleTitleCase '\251' = '\219'+toSimpleTitleCase '\252' = '\220'+toSimpleTitleCase '\253' = '\221'+toSimpleTitleCase '\254' = '\222'+toSimpleTitleCase '\255' = '\376'+toSimpleTitleCase '\257' = '\256'+toSimpleTitleCase '\259' = '\258'+toSimpleTitleCase '\261' = '\260'+toSimpleTitleCase '\263' = '\262'+toSimpleTitleCase '\265' = '\264'+toSimpleTitleCase '\267' = '\266'+toSimpleTitleCase '\269' = '\268'+toSimpleTitleCase '\271' = '\270'+toSimpleTitleCase '\273' = '\272'+toSimpleTitleCase '\275' = '\274'+toSimpleTitleCase '\277' = '\276'+toSimpleTitleCase '\279' = '\278'+toSimpleTitleCase '\281' = '\280'+toSimpleTitleCase '\283' = '\282'+toSimpleTitleCase '\285' = '\284'+toSimpleTitleCase '\287' = '\286'+toSimpleTitleCase '\289' = '\288'+toSimpleTitleCase '\291' = '\290'+toSimpleTitleCase '\293' = '\292'+toSimpleTitleCase '\295' = '\294'+toSimpleTitleCase '\297' = '\296'+toSimpleTitleCase '\299' = '\298'+toSimpleTitleCase '\301' = '\300'+toSimpleTitleCase '\303' = '\302'+toSimpleTitleCase '\305' = 'I'+toSimpleTitleCase '\307' = '\306'+toSimpleTitleCase '\309' = '\308'+toSimpleTitleCase '\311' = '\310'+toSimpleTitleCase '\314' = '\313'+toSimpleTitleCase '\316' = '\315'+toSimpleTitleCase '\318' = '\317'+toSimpleTitleCase '\320' = '\319'+toSimpleTitleCase '\322' = '\321'+toSimpleTitleCase '\324' = '\323'+toSimpleTitleCase '\326' = '\325'+toSimpleTitleCase '\328' = '\327'+toSimpleTitleCase '\331' = '\330'+toSimpleTitleCase '\333' = '\332'+toSimpleTitleCase '\335' = '\334'+toSimpleTitleCase '\337' = '\336'+toSimpleTitleCase '\339' = '\338'+toSimpleTitleCase '\341' = '\340'+toSimpleTitleCase '\343' = '\342'+toSimpleTitleCase '\345' = '\344'+toSimpleTitleCase '\347' = '\346'+toSimpleTitleCase '\349' = '\348'+toSimpleTitleCase '\351' = '\350'+toSimpleTitleCase '\353' = '\352'+toSimpleTitleCase '\355' = '\354'+toSimpleTitleCase '\357' = '\356'+toSimpleTitleCase '\359' = '\358'+toSimpleTitleCase '\361' = '\360'+toSimpleTitleCase '\363' = '\362'+toSimpleTitleCase '\365' = '\364'+toSimpleTitleCase '\367' = '\366'+toSimpleTitleCase '\369' = '\368'+toSimpleTitleCase '\371' = '\370'+toSimpleTitleCase '\373' = '\372'+toSimpleTitleCase '\375' = '\374'+toSimpleTitleCase '\378' = '\377'+toSimpleTitleCase '\380' = '\379'+toSimpleTitleCase '\382' = '\381'+toSimpleTitleCase '\383' = 'S'+toSimpleTitleCase '\384' = '\579'+toSimpleTitleCase '\387' = '\386'+toSimpleTitleCase '\389' = '\388'+toSimpleTitleCase '\392' = '\391'+toSimpleTitleCase '\396' = '\395'+toSimpleTitleCase '\402' = '\401'+toSimpleTitleCase '\405' = '\502'+toSimpleTitleCase '\409' = '\408'+toSimpleTitleCase '\410' = '\573'+toSimpleTitleCase '\414' = '\544'+toSimpleTitleCase '\417' = '\416'+toSimpleTitleCase '\419' = '\418'+toSimpleTitleCase '\421' = '\420'+toSimpleTitleCase '\424' = '\423'+toSimpleTitleCase '\429' = '\428'+toSimpleTitleCase '\432' = '\431'+toSimpleTitleCase '\436' = '\435'+toSimpleTitleCase '\438' = '\437'+toSimpleTitleCase '\441' = '\440'+toSimpleTitleCase '\445' = '\444'+toSimpleTitleCase '\447' = '\503'+toSimpleTitleCase '\452' = '\453'+toSimpleTitleCase '\453' = '\453'+toSimpleTitleCase '\454' = '\453'+toSimpleTitleCase '\455' = '\456'+toSimpleTitleCase '\456' = '\456'+toSimpleTitleCase '\457' = '\456'+toSimpleTitleCase '\458' = '\459'+toSimpleTitleCase '\459' = '\459'+toSimpleTitleCase '\460' = '\459'+toSimpleTitleCase '\462' = '\461'+toSimpleTitleCase '\464' = '\463'+toSimpleTitleCase '\466' = '\465'+toSimpleTitleCase '\468' = '\467'+toSimpleTitleCase '\470' = '\469'+toSimpleTitleCase '\472' = '\471'+toSimpleTitleCase '\474' = '\473'+toSimpleTitleCase '\476' = '\475'+toSimpleTitleCase '\477' = '\398'+toSimpleTitleCase '\479' = '\478'+toSimpleTitleCase '\481' = '\480'+toSimpleTitleCase '\483' = '\482'+toSimpleTitleCase '\485' = '\484'+toSimpleTitleCase '\487' = '\486'+toSimpleTitleCase '\489' = '\488'+toSimpleTitleCase '\491' = '\490'+toSimpleTitleCase '\493' = '\492'+toSimpleTitleCase '\495' = '\494'+toSimpleTitleCase '\497' = '\498'+toSimpleTitleCase '\498' = '\498'+toSimpleTitleCase '\499' = '\498'+toSimpleTitleCase '\501' = '\500'+toSimpleTitleCase '\505' = '\504'+toSimpleTitleCase '\507' = '\506'+toSimpleTitleCase '\509' = '\508'+toSimpleTitleCase '\511' = '\510'+toSimpleTitleCase '\513' = '\512'+toSimpleTitleCase '\515' = '\514'+toSimpleTitleCase '\517' = '\516'+toSimpleTitleCase '\519' = '\518'+toSimpleTitleCase '\521' = '\520'+toSimpleTitleCase '\523' = '\522'+toSimpleTitleCase '\525' = '\524'+toSimpleTitleCase '\527' = '\526'+toSimpleTitleCase '\529' = '\528'+toSimpleTitleCase '\531' = '\530'+toSimpleTitleCase '\533' = '\532'+toSimpleTitleCase '\535' = '\534'+toSimpleTitleCase '\537' = '\536'+toSimpleTitleCase '\539' = '\538'+toSimpleTitleCase '\541' = '\540'+toSimpleTitleCase '\543' = '\542'+toSimpleTitleCase '\547' = '\546'+toSimpleTitleCase '\549' = '\548'+toSimpleTitleCase '\551' = '\550'+toSimpleTitleCase '\553' = '\552'+toSimpleTitleCase '\555' = '\554'+toSimpleTitleCase '\557' = '\556'+toSimpleTitleCase '\559' = '\558'+toSimpleTitleCase '\561' = '\560'+toSimpleTitleCase '\563' = '\562'+toSimpleTitleCase '\572' = '\571'+toSimpleTitleCase '\575' = '\11390'+toSimpleTitleCase '\576' = '\11391'+toSimpleTitleCase '\578' = '\577'+toSimpleTitleCase '\583' = '\582'+toSimpleTitleCase '\585' = '\584'+toSimpleTitleCase '\587' = '\586'+toSimpleTitleCase '\589' = '\588'+toSimpleTitleCase '\591' = '\590'+toSimpleTitleCase '\592' = '\11375'+toSimpleTitleCase '\593' = '\11373'+toSimpleTitleCase '\594' = '\11376'+toSimpleTitleCase '\595' = '\385'+toSimpleTitleCase '\596' = '\390'+toSimpleTitleCase '\598' = '\393'+toSimpleTitleCase '\599' = '\394'+toSimpleTitleCase '\601' = '\399'+toSimpleTitleCase '\603' = '\400'+toSimpleTitleCase '\604' = '\42923'+toSimpleTitleCase '\608' = '\403'+toSimpleTitleCase '\609' = '\42924'+toSimpleTitleCase '\611' = '\404'+toSimpleTitleCase '\613' = '\42893'+toSimpleTitleCase '\614' = '\42922'+toSimpleTitleCase '\616' = '\407'+toSimpleTitleCase '\617' = '\406'+toSimpleTitleCase '\618' = '\42926'+toSimpleTitleCase '\619' = '\11362'+toSimpleTitleCase '\620' = '\42925'+toSimpleTitleCase '\623' = '\412'+toSimpleTitleCase '\625' = '\11374'+toSimpleTitleCase '\626' = '\413'+toSimpleTitleCase '\629' = '\415'+toSimpleTitleCase '\637' = '\11364'+toSimpleTitleCase '\640' = '\422'+toSimpleTitleCase '\642' = '\42949'+toSimpleTitleCase '\643' = '\425'+toSimpleTitleCase '\647' = '\42929'+toSimpleTitleCase '\648' = '\430'+toSimpleTitleCase '\649' = '\580'+toSimpleTitleCase '\650' = '\433'+toSimpleTitleCase '\651' = '\434'+toSimpleTitleCase '\652' = '\581'+toSimpleTitleCase '\658' = '\439'+toSimpleTitleCase '\669' = '\42930'+toSimpleTitleCase '\670' = '\42928'+toSimpleTitleCase '\837' = '\921'+toSimpleTitleCase '\881' = '\880'+toSimpleTitleCase '\883' = '\882'+toSimpleTitleCase '\887' = '\886'+toSimpleTitleCase '\891' = '\1021'+toSimpleTitleCase '\892' = '\1022'+toSimpleTitleCase '\893' = '\1023'+toSimpleTitleCase '\940' = '\902'+toSimpleTitleCase '\941' = '\904'+toSimpleTitleCase '\942' = '\905'+toSimpleTitleCase '\943' = '\906'+toSimpleTitleCase '\945' = '\913'+toSimpleTitleCase '\946' = '\914'+toSimpleTitleCase '\947' = '\915'+toSimpleTitleCase '\948' = '\916'+toSimpleTitleCase '\949' = '\917'+toSimpleTitleCase '\950' = '\918'+toSimpleTitleCase '\951' = '\919'+toSimpleTitleCase '\952' = '\920'+toSimpleTitleCase '\953' = '\921'+toSimpleTitleCase '\954' = '\922'+toSimpleTitleCase '\955' = '\923'+toSimpleTitleCase '\956' = '\924'+toSimpleTitleCase '\957' = '\925'+toSimpleTitleCase '\958' = '\926'+toSimpleTitleCase '\959' = '\927'+toSimpleTitleCase '\960' = '\928'+toSimpleTitleCase '\961' = '\929'+toSimpleTitleCase '\962' = '\931'+toSimpleTitleCase '\963' = '\931'+toSimpleTitleCase '\964' = '\932'+toSimpleTitleCase '\965' = '\933'+toSimpleTitleCase '\966' = '\934'+toSimpleTitleCase '\967' = '\935'+toSimpleTitleCase '\968' = '\936'+toSimpleTitleCase '\969' = '\937'+toSimpleTitleCase '\970' = '\938'+toSimpleTitleCase '\971' = '\939'+toSimpleTitleCase '\972' = '\908'+toSimpleTitleCase '\973' = '\910'+toSimpleTitleCase '\974' = '\911'+toSimpleTitleCase '\976' = '\914'+toSimpleTitleCase '\977' = '\920'+toSimpleTitleCase '\981' = '\934'+toSimpleTitleCase '\982' = '\928'+toSimpleTitleCase '\983' = '\975'+toSimpleTitleCase '\985' = '\984'+toSimpleTitleCase '\987' = '\986'+toSimpleTitleCase '\989' = '\988'+toSimpleTitleCase '\991' = '\990'+toSimpleTitleCase '\993' = '\992'+toSimpleTitleCase '\995' = '\994'+toSimpleTitleCase '\997' = '\996'+toSimpleTitleCase '\999' = '\998'+toSimpleTitleCase '\1001' = '\1000'+toSimpleTitleCase '\1003' = '\1002'+toSimpleTitleCase '\1005' = '\1004'+toSimpleTitleCase '\1007' = '\1006'+toSimpleTitleCase '\1008' = '\922'+toSimpleTitleCase '\1009' = '\929'+toSimpleTitleCase '\1010' = '\1017'+toSimpleTitleCase '\1011' = '\895'+toSimpleTitleCase '\1013' = '\917'+toSimpleTitleCase '\1016' = '\1015'+toSimpleTitleCase '\1019' = '\1018'+toSimpleTitleCase '\1072' = '\1040'+toSimpleTitleCase '\1073' = '\1041'+toSimpleTitleCase '\1074' = '\1042'+toSimpleTitleCase '\1075' = '\1043'+toSimpleTitleCase '\1076' = '\1044'+toSimpleTitleCase '\1077' = '\1045'+toSimpleTitleCase '\1078' = '\1046'+toSimpleTitleCase '\1079' = '\1047'+toSimpleTitleCase '\1080' = '\1048'+toSimpleTitleCase '\1081' = '\1049'+toSimpleTitleCase '\1082' = '\1050'+toSimpleTitleCase '\1083' = '\1051'+toSimpleTitleCase '\1084' = '\1052'+toSimpleTitleCase '\1085' = '\1053'+toSimpleTitleCase '\1086' = '\1054'+toSimpleTitleCase '\1087' = '\1055'+toSimpleTitleCase '\1088' = '\1056'+toSimpleTitleCase '\1089' = '\1057'+toSimpleTitleCase '\1090' = '\1058'+toSimpleTitleCase '\1091' = '\1059'+toSimpleTitleCase '\1092' = '\1060'+toSimpleTitleCase '\1093' = '\1061'+toSimpleTitleCase '\1094' = '\1062'+toSimpleTitleCase '\1095' = '\1063'+toSimpleTitleCase '\1096' = '\1064'+toSimpleTitleCase '\1097' = '\1065'+toSimpleTitleCase '\1098' = '\1066'+toSimpleTitleCase '\1099' = '\1067'+toSimpleTitleCase '\1100' = '\1068'+toSimpleTitleCase '\1101' = '\1069'+toSimpleTitleCase '\1102' = '\1070'+toSimpleTitleCase '\1103' = '\1071'+toSimpleTitleCase '\1104' = '\1024'+toSimpleTitleCase '\1105' = '\1025'+toSimpleTitleCase '\1106' = '\1026'+toSimpleTitleCase '\1107' = '\1027'+toSimpleTitleCase '\1108' = '\1028'+toSimpleTitleCase '\1109' = '\1029'+toSimpleTitleCase '\1110' = '\1030'+toSimpleTitleCase '\1111' = '\1031'+toSimpleTitleCase '\1112' = '\1032'+toSimpleTitleCase '\1113' = '\1033'+toSimpleTitleCase '\1114' = '\1034'+toSimpleTitleCase '\1115' = '\1035'+toSimpleTitleCase '\1116' = '\1036'+toSimpleTitleCase '\1117' = '\1037'+toSimpleTitleCase '\1118' = '\1038'+toSimpleTitleCase '\1119' = '\1039'+toSimpleTitleCase '\1121' = '\1120'+toSimpleTitleCase '\1123' = '\1122'+toSimpleTitleCase '\1125' = '\1124'+toSimpleTitleCase '\1127' = '\1126'+toSimpleTitleCase '\1129' = '\1128'+toSimpleTitleCase '\1131' = '\1130'+toSimpleTitleCase '\1133' = '\1132'+toSimpleTitleCase '\1135' = '\1134'+toSimpleTitleCase '\1137' = '\1136'+toSimpleTitleCase '\1139' = '\1138'+toSimpleTitleCase '\1141' = '\1140'+toSimpleTitleCase '\1143' = '\1142'+toSimpleTitleCase '\1145' = '\1144'+toSimpleTitleCase '\1147' = '\1146'+toSimpleTitleCase '\1149' = '\1148'+toSimpleTitleCase '\1151' = '\1150'+toSimpleTitleCase '\1153' = '\1152'+toSimpleTitleCase '\1163' = '\1162'+toSimpleTitleCase '\1165' = '\1164'+toSimpleTitleCase '\1167' = '\1166'+toSimpleTitleCase '\1169' = '\1168'+toSimpleTitleCase '\1171' = '\1170'+toSimpleTitleCase '\1173' = '\1172'+toSimpleTitleCase '\1175' = '\1174'+toSimpleTitleCase '\1177' = '\1176'+toSimpleTitleCase '\1179' = '\1178'+toSimpleTitleCase '\1181' = '\1180'+toSimpleTitleCase '\1183' = '\1182'+toSimpleTitleCase '\1185' = '\1184'+toSimpleTitleCase '\1187' = '\1186'+toSimpleTitleCase '\1189' = '\1188'+toSimpleTitleCase '\1191' = '\1190'+toSimpleTitleCase '\1193' = '\1192'+toSimpleTitleCase '\1195' = '\1194'+toSimpleTitleCase '\1197' = '\1196'+toSimpleTitleCase '\1199' = '\1198'+toSimpleTitleCase '\1201' = '\1200'+toSimpleTitleCase '\1203' = '\1202'+toSimpleTitleCase '\1205' = '\1204'+toSimpleTitleCase '\1207' = '\1206'+toSimpleTitleCase '\1209' = '\1208'+toSimpleTitleCase '\1211' = '\1210'+toSimpleTitleCase '\1213' = '\1212'+toSimpleTitleCase '\1215' = '\1214'+toSimpleTitleCase '\1218' = '\1217'+toSimpleTitleCase '\1220' = '\1219'+toSimpleTitleCase '\1222' = '\1221'+toSimpleTitleCase '\1224' = '\1223'+toSimpleTitleCase '\1226' = '\1225'+toSimpleTitleCase '\1228' = '\1227'+toSimpleTitleCase '\1230' = '\1229'+toSimpleTitleCase '\1231' = '\1216'+toSimpleTitleCase '\1233' = '\1232'+toSimpleTitleCase '\1235' = '\1234'+toSimpleTitleCase '\1237' = '\1236'+toSimpleTitleCase '\1239' = '\1238'+toSimpleTitleCase '\1241' = '\1240'+toSimpleTitleCase '\1243' = '\1242'+toSimpleTitleCase '\1245' = '\1244'+toSimpleTitleCase '\1247' = '\1246'+toSimpleTitleCase '\1249' = '\1248'+toSimpleTitleCase '\1251' = '\1250'+toSimpleTitleCase '\1253' = '\1252'+toSimpleTitleCase '\1255' = '\1254'+toSimpleTitleCase '\1257' = '\1256'+toSimpleTitleCase '\1259' = '\1258'+toSimpleTitleCase '\1261' = '\1260'+toSimpleTitleCase '\1263' = '\1262'+toSimpleTitleCase '\1265' = '\1264'+toSimpleTitleCase '\1267' = '\1266'+toSimpleTitleCase '\1269' = '\1268'+toSimpleTitleCase '\1271' = '\1270'+toSimpleTitleCase '\1273' = '\1272'+toSimpleTitleCase '\1275' = '\1274'+toSimpleTitleCase '\1277' = '\1276'+toSimpleTitleCase '\1279' = '\1278'+toSimpleTitleCase '\1281' = '\1280'+toSimpleTitleCase '\1283' = '\1282'+toSimpleTitleCase '\1285' = '\1284'+toSimpleTitleCase '\1287' = '\1286'+toSimpleTitleCase '\1289' = '\1288'+toSimpleTitleCase '\1291' = '\1290'+toSimpleTitleCase '\1293' = '\1292'+toSimpleTitleCase '\1295' = '\1294'+toSimpleTitleCase '\1297' = '\1296'+toSimpleTitleCase '\1299' = '\1298'+toSimpleTitleCase '\1301' = '\1300'+toSimpleTitleCase '\1303' = '\1302'+toSimpleTitleCase '\1305' = '\1304'+toSimpleTitleCase '\1307' = '\1306'+toSimpleTitleCase '\1309' = '\1308'+toSimpleTitleCase '\1311' = '\1310'+toSimpleTitleCase '\1313' = '\1312'+toSimpleTitleCase '\1315' = '\1314'+toSimpleTitleCase '\1317' = '\1316'+toSimpleTitleCase '\1319' = '\1318'+toSimpleTitleCase '\1321' = '\1320'+toSimpleTitleCase '\1323' = '\1322'+toSimpleTitleCase '\1325' = '\1324'+toSimpleTitleCase '\1327' = '\1326'+toSimpleTitleCase '\1377' = '\1329'+toSimpleTitleCase '\1378' = '\1330'+toSimpleTitleCase '\1379' = '\1331'+toSimpleTitleCase '\1380' = '\1332'+toSimpleTitleCase '\1381' = '\1333'+toSimpleTitleCase '\1382' = '\1334'+toSimpleTitleCase '\1383' = '\1335'+toSimpleTitleCase '\1384' = '\1336'+toSimpleTitleCase '\1385' = '\1337'+toSimpleTitleCase '\1386' = '\1338'+toSimpleTitleCase '\1387' = '\1339'+toSimpleTitleCase '\1388' = '\1340'+toSimpleTitleCase '\1389' = '\1341'+toSimpleTitleCase '\1390' = '\1342'+toSimpleTitleCase '\1391' = '\1343'+toSimpleTitleCase '\1392' = '\1344'+toSimpleTitleCase '\1393' = '\1345'+toSimpleTitleCase '\1394' = '\1346'+toSimpleTitleCase '\1395' = '\1347'+toSimpleTitleCase '\1396' = '\1348'+toSimpleTitleCase '\1397' = '\1349'+toSimpleTitleCase '\1398' = '\1350'+toSimpleTitleCase '\1399' = '\1351'+toSimpleTitleCase '\1400' = '\1352'+toSimpleTitleCase '\1401' = '\1353'+toSimpleTitleCase '\1402' = '\1354'+toSimpleTitleCase '\1403' = '\1355'+toSimpleTitleCase '\1404' = '\1356'+toSimpleTitleCase '\1405' = '\1357'+toSimpleTitleCase '\1406' = '\1358'+toSimpleTitleCase '\1407' = '\1359'+toSimpleTitleCase '\1408' = '\1360'+toSimpleTitleCase '\1409' = '\1361'+toSimpleTitleCase '\1410' = '\1362'+toSimpleTitleCase '\1411' = '\1363'+toSimpleTitleCase '\1412' = '\1364'+toSimpleTitleCase '\1413' = '\1365'+toSimpleTitleCase '\1414' = '\1366'+toSimpleTitleCase '\4304' = '\4304'+toSimpleTitleCase '\4305' = '\4305'+toSimpleTitleCase '\4306' = '\4306'+toSimpleTitleCase '\4307' = '\4307'+toSimpleTitleCase '\4308' = '\4308'+toSimpleTitleCase '\4309' = '\4309'+toSimpleTitleCase '\4310' = '\4310'+toSimpleTitleCase '\4311' = '\4311'+toSimpleTitleCase '\4312' = '\4312'+toSimpleTitleCase '\4313' = '\4313'+toSimpleTitleCase '\4314' = '\4314'+toSimpleTitleCase '\4315' = '\4315'+toSimpleTitleCase '\4316' = '\4316'+toSimpleTitleCase '\4317' = '\4317'+toSimpleTitleCase '\4318' = '\4318'+toSimpleTitleCase '\4319' = '\4319'+toSimpleTitleCase '\4320' = '\4320'+toSimpleTitleCase '\4321' = '\4321'+toSimpleTitleCase '\4322' = '\4322'+toSimpleTitleCase '\4323' = '\4323'+toSimpleTitleCase '\4324' = '\4324'+toSimpleTitleCase '\4325' = '\4325'+toSimpleTitleCase '\4326' = '\4326'+toSimpleTitleCase '\4327' = '\4327'+toSimpleTitleCase '\4328' = '\4328'+toSimpleTitleCase '\4329' = '\4329'+toSimpleTitleCase '\4330' = '\4330'+toSimpleTitleCase '\4331' = '\4331'+toSimpleTitleCase '\4332' = '\4332'+toSimpleTitleCase '\4333' = '\4333'+toSimpleTitleCase '\4334' = '\4334'+toSimpleTitleCase '\4335' = '\4335'+toSimpleTitleCase '\4336' = '\4336'+toSimpleTitleCase '\4337' = '\4337'+toSimpleTitleCase '\4338' = '\4338'+toSimpleTitleCase '\4339' = '\4339'+toSimpleTitleCase '\4340' = '\4340'+toSimpleTitleCase '\4341' = '\4341'+toSimpleTitleCase '\4342' = '\4342'+toSimpleTitleCase '\4343' = '\4343'+toSimpleTitleCase '\4344' = '\4344'+toSimpleTitleCase '\4345' = '\4345'+toSimpleTitleCase '\4346' = '\4346'+toSimpleTitleCase '\4349' = '\4349'+toSimpleTitleCase '\4350' = '\4350'+toSimpleTitleCase '\4351' = '\4351'+toSimpleTitleCase '\5112' = '\5104'+toSimpleTitleCase '\5113' = '\5105'+toSimpleTitleCase '\5114' = '\5106'+toSimpleTitleCase '\5115' = '\5107'+toSimpleTitleCase '\5116' = '\5108'+toSimpleTitleCase '\5117' = '\5109'+toSimpleTitleCase '\7296' = '\1042'+toSimpleTitleCase '\7297' = '\1044'+toSimpleTitleCase '\7298' = '\1054'+toSimpleTitleCase '\7299' = '\1057'+toSimpleTitleCase '\7300' = '\1058'+toSimpleTitleCase '\7301' = '\1058'+toSimpleTitleCase '\7302' = '\1066'+toSimpleTitleCase '\7303' = '\1122'+toSimpleTitleCase '\7304' = '\42570'+toSimpleTitleCase '\7545' = '\42877'+toSimpleTitleCase '\7549' = '\11363'+toSimpleTitleCase '\7566' = '\42950'+toSimpleTitleCase '\7681' = '\7680'+toSimpleTitleCase '\7683' = '\7682'+toSimpleTitleCase '\7685' = '\7684'+toSimpleTitleCase '\7687' = '\7686'+toSimpleTitleCase '\7689' = '\7688'+toSimpleTitleCase '\7691' = '\7690'+toSimpleTitleCase '\7693' = '\7692'+toSimpleTitleCase '\7695' = '\7694'+toSimpleTitleCase '\7697' = '\7696'+toSimpleTitleCase '\7699' = '\7698'+toSimpleTitleCase '\7701' = '\7700'+toSimpleTitleCase '\7703' = '\7702'+toSimpleTitleCase '\7705' = '\7704'+toSimpleTitleCase '\7707' = '\7706'+toSimpleTitleCase '\7709' = '\7708'+toSimpleTitleCase '\7711' = '\7710'+toSimpleTitleCase '\7713' = '\7712'+toSimpleTitleCase '\7715' = '\7714'+toSimpleTitleCase '\7717' = '\7716'+toSimpleTitleCase '\7719' = '\7718'+toSimpleTitleCase '\7721' = '\7720'+toSimpleTitleCase '\7723' = '\7722'+toSimpleTitleCase '\7725' = '\7724'+toSimpleTitleCase '\7727' = '\7726'+toSimpleTitleCase '\7729' = '\7728'+toSimpleTitleCase '\7731' = '\7730'+toSimpleTitleCase '\7733' = '\7732'+toSimpleTitleCase '\7735' = '\7734'+toSimpleTitleCase '\7737' = '\7736'+toSimpleTitleCase '\7739' = '\7738'+toSimpleTitleCase '\7741' = '\7740'+toSimpleTitleCase '\7743' = '\7742'+toSimpleTitleCase '\7745' = '\7744'+toSimpleTitleCase '\7747' = '\7746'+toSimpleTitleCase '\7749' = '\7748'+toSimpleTitleCase '\7751' = '\7750'+toSimpleTitleCase '\7753' = '\7752'+toSimpleTitleCase '\7755' = '\7754'+toSimpleTitleCase '\7757' = '\7756'+toSimpleTitleCase '\7759' = '\7758'+toSimpleTitleCase '\7761' = '\7760'+toSimpleTitleCase '\7763' = '\7762'+toSimpleTitleCase '\7765' = '\7764'+toSimpleTitleCase '\7767' = '\7766'+toSimpleTitleCase '\7769' = '\7768'+toSimpleTitleCase '\7771' = '\7770'+toSimpleTitleCase '\7773' = '\7772'+toSimpleTitleCase '\7775' = '\7774'+toSimpleTitleCase '\7777' = '\7776'+toSimpleTitleCase '\7779' = '\7778'+toSimpleTitleCase '\7781' = '\7780'+toSimpleTitleCase '\7783' = '\7782'+toSimpleTitleCase '\7785' = '\7784'+toSimpleTitleCase '\7787' = '\7786'+toSimpleTitleCase '\7789' = '\7788'+toSimpleTitleCase '\7791' = '\7790'+toSimpleTitleCase '\7793' = '\7792'+toSimpleTitleCase '\7795' = '\7794'+toSimpleTitleCase '\7797' = '\7796'+toSimpleTitleCase '\7799' = '\7798'+toSimpleTitleCase '\7801' = '\7800'+toSimpleTitleCase '\7803' = '\7802'+toSimpleTitleCase '\7805' = '\7804'+toSimpleTitleCase '\7807' = '\7806'+toSimpleTitleCase '\7809' = '\7808'+toSimpleTitleCase '\7811' = '\7810'+toSimpleTitleCase '\7813' = '\7812'+toSimpleTitleCase '\7815' = '\7814'+toSimpleTitleCase '\7817' = '\7816'+toSimpleTitleCase '\7819' = '\7818'+toSimpleTitleCase '\7821' = '\7820'+toSimpleTitleCase '\7823' = '\7822'+toSimpleTitleCase '\7825' = '\7824'+toSimpleTitleCase '\7827' = '\7826'+toSimpleTitleCase '\7829' = '\7828'+toSimpleTitleCase '\7835' = '\7776'+toSimpleTitleCase '\7841' = '\7840'+toSimpleTitleCase '\7843' = '\7842'+toSimpleTitleCase '\7845' = '\7844'+toSimpleTitleCase '\7847' = '\7846'+toSimpleTitleCase '\7849' = '\7848'+toSimpleTitleCase '\7851' = '\7850'+toSimpleTitleCase '\7853' = '\7852'+toSimpleTitleCase '\7855' = '\7854'+toSimpleTitleCase '\7857' = '\7856'+toSimpleTitleCase '\7859' = '\7858'+toSimpleTitleCase '\7861' = '\7860'+toSimpleTitleCase '\7863' = '\7862'+toSimpleTitleCase '\7865' = '\7864'+toSimpleTitleCase '\7867' = '\7866'+toSimpleTitleCase '\7869' = '\7868'+toSimpleTitleCase '\7871' = '\7870'+toSimpleTitleCase '\7873' = '\7872'+toSimpleTitleCase '\7875' = '\7874'+toSimpleTitleCase '\7877' = '\7876'+toSimpleTitleCase '\7879' = '\7878'+toSimpleTitleCase '\7881' = '\7880'+toSimpleTitleCase '\7883' = '\7882'+toSimpleTitleCase '\7885' = '\7884'+toSimpleTitleCase '\7887' = '\7886'+toSimpleTitleCase '\7889' = '\7888'+toSimpleTitleCase '\7891' = '\7890'+toSimpleTitleCase '\7893' = '\7892'+toSimpleTitleCase '\7895' = '\7894'+toSimpleTitleCase '\7897' = '\7896'+toSimpleTitleCase '\7899' = '\7898'+toSimpleTitleCase '\7901' = '\7900'+toSimpleTitleCase '\7903' = '\7902'+toSimpleTitleCase '\7905' = '\7904'+toSimpleTitleCase '\7907' = '\7906'+toSimpleTitleCase '\7909' = '\7908'+toSimpleTitleCase '\7911' = '\7910'+toSimpleTitleCase '\7913' = '\7912'+toSimpleTitleCase '\7915' = '\7914'+toSimpleTitleCase '\7917' = '\7916'+toSimpleTitleCase '\7919' = '\7918'+toSimpleTitleCase '\7921' = '\7920'+toSimpleTitleCase '\7923' = '\7922'+toSimpleTitleCase '\7925' = '\7924'+toSimpleTitleCase '\7927' = '\7926'+toSimpleTitleCase '\7929' = '\7928'+toSimpleTitleCase '\7931' = '\7930'+toSimpleTitleCase '\7933' = '\7932'+toSimpleTitleCase '\7935' = '\7934'+toSimpleTitleCase '\7936' = '\7944'+toSimpleTitleCase '\7937' = '\7945'+toSimpleTitleCase '\7938' = '\7946'+toSimpleTitleCase '\7939' = '\7947'+toSimpleTitleCase '\7940' = '\7948'+toSimpleTitleCase '\7941' = '\7949'+toSimpleTitleCase '\7942' = '\7950'+toSimpleTitleCase '\7943' = '\7951'+toSimpleTitleCase '\7952' = '\7960'+toSimpleTitleCase '\7953' = '\7961'+toSimpleTitleCase '\7954' = '\7962'+toSimpleTitleCase '\7955' = '\7963'+toSimpleTitleCase '\7956' = '\7964'+toSimpleTitleCase '\7957' = '\7965'+toSimpleTitleCase '\7968' = '\7976'+toSimpleTitleCase '\7969' = '\7977'+toSimpleTitleCase '\7970' = '\7978'+toSimpleTitleCase '\7971' = '\7979'+toSimpleTitleCase '\7972' = '\7980'+toSimpleTitleCase '\7973' = '\7981'+toSimpleTitleCase '\7974' = '\7982'+toSimpleTitleCase '\7975' = '\7983'+toSimpleTitleCase '\7984' = '\7992'+toSimpleTitleCase '\7985' = '\7993'+toSimpleTitleCase '\7986' = '\7994'+toSimpleTitleCase '\7987' = '\7995'+toSimpleTitleCase '\7988' = '\7996'+toSimpleTitleCase '\7989' = '\7997'+toSimpleTitleCase '\7990' = '\7998'+toSimpleTitleCase '\7991' = '\7999'+toSimpleTitleCase '\8000' = '\8008'+toSimpleTitleCase '\8001' = '\8009'+toSimpleTitleCase '\8002' = '\8010'+toSimpleTitleCase '\8003' = '\8011'+toSimpleTitleCase '\8004' = '\8012'+toSimpleTitleCase '\8005' = '\8013'+toSimpleTitleCase '\8017' = '\8025'+toSimpleTitleCase '\8019' = '\8027'+toSimpleTitleCase '\8021' = '\8029'+toSimpleTitleCase '\8023' = '\8031'+toSimpleTitleCase '\8032' = '\8040'+toSimpleTitleCase '\8033' = '\8041'+toSimpleTitleCase '\8034' = '\8042'+toSimpleTitleCase '\8035' = '\8043'+toSimpleTitleCase '\8036' = '\8044'+toSimpleTitleCase '\8037' = '\8045'+toSimpleTitleCase '\8038' = '\8046'+toSimpleTitleCase '\8039' = '\8047'+toSimpleTitleCase '\8048' = '\8122'+toSimpleTitleCase '\8049' = '\8123'+toSimpleTitleCase '\8050' = '\8136'+toSimpleTitleCase '\8051' = '\8137'+toSimpleTitleCase '\8052' = '\8138'+toSimpleTitleCase '\8053' = '\8139'+toSimpleTitleCase '\8054' = '\8154'+toSimpleTitleCase '\8055' = '\8155'+toSimpleTitleCase '\8056' = '\8184'+toSimpleTitleCase '\8057' = '\8185'+toSimpleTitleCase '\8058' = '\8170'+toSimpleTitleCase '\8059' = '\8171'+toSimpleTitleCase '\8060' = '\8186'+toSimpleTitleCase '\8061' = '\8187'+toSimpleTitleCase '\8064' = '\8072'+toSimpleTitleCase '\8065' = '\8073'+toSimpleTitleCase '\8066' = '\8074'+toSimpleTitleCase '\8067' = '\8075'+toSimpleTitleCase '\8068' = '\8076'+toSimpleTitleCase '\8069' = '\8077'+toSimpleTitleCase '\8070' = '\8078'+toSimpleTitleCase '\8071' = '\8079'+toSimpleTitleCase '\8080' = '\8088'+toSimpleTitleCase '\8081' = '\8089'+toSimpleTitleCase '\8082' = '\8090'+toSimpleTitleCase '\8083' = '\8091'+toSimpleTitleCase '\8084' = '\8092'+toSimpleTitleCase '\8085' = '\8093'+toSimpleTitleCase '\8086' = '\8094'+toSimpleTitleCase '\8087' = '\8095'+toSimpleTitleCase '\8096' = '\8104'+toSimpleTitleCase '\8097' = '\8105'+toSimpleTitleCase '\8098' = '\8106'+toSimpleTitleCase '\8099' = '\8107'+toSimpleTitleCase '\8100' = '\8108'+toSimpleTitleCase '\8101' = '\8109'+toSimpleTitleCase '\8102' = '\8110'+toSimpleTitleCase '\8103' = '\8111'+toSimpleTitleCase '\8112' = '\8120'+toSimpleTitleCase '\8113' = '\8121'+toSimpleTitleCase '\8115' = '\8124'+toSimpleTitleCase '\8126' = '\921'+toSimpleTitleCase '\8131' = '\8140'+toSimpleTitleCase '\8144' = '\8152'+toSimpleTitleCase '\8145' = '\8153'+toSimpleTitleCase '\8160' = '\8168'+toSimpleTitleCase '\8161' = '\8169'+toSimpleTitleCase '\8165' = '\8172'+toSimpleTitleCase '\8179' = '\8188'+toSimpleTitleCase '\8526' = '\8498'+toSimpleTitleCase '\8560' = '\8544'+toSimpleTitleCase '\8561' = '\8545'+toSimpleTitleCase '\8562' = '\8546'+toSimpleTitleCase '\8563' = '\8547'+toSimpleTitleCase '\8564' = '\8548'+toSimpleTitleCase '\8565' = '\8549'+toSimpleTitleCase '\8566' = '\8550'+toSimpleTitleCase '\8567' = '\8551'+toSimpleTitleCase '\8568' = '\8552'+toSimpleTitleCase '\8569' = '\8553'+toSimpleTitleCase '\8570' = '\8554'+toSimpleTitleCase '\8571' = '\8555'+toSimpleTitleCase '\8572' = '\8556'+toSimpleTitleCase '\8573' = '\8557'+toSimpleTitleCase '\8574' = '\8558'+toSimpleTitleCase '\8575' = '\8559'+toSimpleTitleCase '\8580' = '\8579'+toSimpleTitleCase '\9424' = '\9398'+toSimpleTitleCase '\9425' = '\9399'+toSimpleTitleCase '\9426' = '\9400'+toSimpleTitleCase '\9427' = '\9401'+toSimpleTitleCase '\9428' = '\9402'+toSimpleTitleCase '\9429' = '\9403'+toSimpleTitleCase '\9430' = '\9404'+toSimpleTitleCase '\9431' = '\9405'+toSimpleTitleCase '\9432' = '\9406'+toSimpleTitleCase '\9433' = '\9407'+toSimpleTitleCase '\9434' = '\9408'+toSimpleTitleCase '\9435' = '\9409'+toSimpleTitleCase '\9436' = '\9410'+toSimpleTitleCase '\9437' = '\9411'+toSimpleTitleCase '\9438' = '\9412'+toSimpleTitleCase '\9439' = '\9413'+toSimpleTitleCase '\9440' = '\9414'+toSimpleTitleCase '\9441' = '\9415'+toSimpleTitleCase '\9442' = '\9416'+toSimpleTitleCase '\9443' = '\9417'+toSimpleTitleCase '\9444' = '\9418'+toSimpleTitleCase '\9445' = '\9419'+toSimpleTitleCase '\9446' = '\9420'+toSimpleTitleCase '\9447' = '\9421'+toSimpleTitleCase '\9448' = '\9422'+toSimpleTitleCase '\9449' = '\9423'+toSimpleTitleCase '\11312' = '\11264'+toSimpleTitleCase '\11313' = '\11265'+toSimpleTitleCase '\11314' = '\11266'+toSimpleTitleCase '\11315' = '\11267'+toSimpleTitleCase '\11316' = '\11268'+toSimpleTitleCase '\11317' = '\11269'+toSimpleTitleCase '\11318' = '\11270'+toSimpleTitleCase '\11319' = '\11271'+toSimpleTitleCase '\11320' = '\11272'+toSimpleTitleCase '\11321' = '\11273'+toSimpleTitleCase '\11322' = '\11274'+toSimpleTitleCase '\11323' = '\11275'+toSimpleTitleCase '\11324' = '\11276'+toSimpleTitleCase '\11325' = '\11277'+toSimpleTitleCase '\11326' = '\11278'+toSimpleTitleCase '\11327' = '\11279'+toSimpleTitleCase '\11328' = '\11280'+toSimpleTitleCase '\11329' = '\11281'+toSimpleTitleCase '\11330' = '\11282'+toSimpleTitleCase '\11331' = '\11283'+toSimpleTitleCase '\11332' = '\11284'+toSimpleTitleCase '\11333' = '\11285'+toSimpleTitleCase '\11334' = '\11286'+toSimpleTitleCase '\11335' = '\11287'+toSimpleTitleCase '\11336' = '\11288'+toSimpleTitleCase '\11337' = '\11289'+toSimpleTitleCase '\11338' = '\11290'+toSimpleTitleCase '\11339' = '\11291'+toSimpleTitleCase '\11340' = '\11292'+toSimpleTitleCase '\11341' = '\11293'+toSimpleTitleCase '\11342' = '\11294'+toSimpleTitleCase '\11343' = '\11295'+toSimpleTitleCase '\11344' = '\11296'+toSimpleTitleCase '\11345' = '\11297'+toSimpleTitleCase '\11346' = '\11298'+toSimpleTitleCase '\11347' = '\11299'+toSimpleTitleCase '\11348' = '\11300'+toSimpleTitleCase '\11349' = '\11301'+toSimpleTitleCase '\11350' = '\11302'+toSimpleTitleCase '\11351' = '\11303'+toSimpleTitleCase '\11352' = '\11304'+toSimpleTitleCase '\11353' = '\11305'+toSimpleTitleCase '\11354' = '\11306'+toSimpleTitleCase '\11355' = '\11307'+toSimpleTitleCase '\11356' = '\11308'+toSimpleTitleCase '\11357' = '\11309'+toSimpleTitleCase '\11358' = '\11310'+toSimpleTitleCase '\11359' = '\11311'+toSimpleTitleCase '\11361' = '\11360'+toSimpleTitleCase '\11365' = '\570'+toSimpleTitleCase '\11366' = '\574'+toSimpleTitleCase '\11368' = '\11367'+toSimpleTitleCase '\11370' = '\11369'+toSimpleTitleCase '\11372' = '\11371'+toSimpleTitleCase '\11379' = '\11378'+toSimpleTitleCase '\11382' = '\11381'+toSimpleTitleCase '\11393' = '\11392'+toSimpleTitleCase '\11395' = '\11394'+toSimpleTitleCase '\11397' = '\11396'+toSimpleTitleCase '\11399' = '\11398'+toSimpleTitleCase '\11401' = '\11400'+toSimpleTitleCase '\11403' = '\11402'+toSimpleTitleCase '\11405' = '\11404'+toSimpleTitleCase '\11407' = '\11406'+toSimpleTitleCase '\11409' = '\11408'+toSimpleTitleCase '\11411' = '\11410'+toSimpleTitleCase '\11413' = '\11412'+toSimpleTitleCase '\11415' = '\11414'+toSimpleTitleCase '\11417' = '\11416'+toSimpleTitleCase '\11419' = '\11418'+toSimpleTitleCase '\11421' = '\11420'+toSimpleTitleCase '\11423' = '\11422'+toSimpleTitleCase '\11425' = '\11424'+toSimpleTitleCase '\11427' = '\11426'+toSimpleTitleCase '\11429' = '\11428'+toSimpleTitleCase '\11431' = '\11430'+toSimpleTitleCase '\11433' = '\11432'+toSimpleTitleCase '\11435' = '\11434'+toSimpleTitleCase '\11437' = '\11436'+toSimpleTitleCase '\11439' = '\11438'+toSimpleTitleCase '\11441' = '\11440'+toSimpleTitleCase '\11443' = '\11442'+toSimpleTitleCase '\11445' = '\11444'+toSimpleTitleCase '\11447' = '\11446'+toSimpleTitleCase '\11449' = '\11448'+toSimpleTitleCase '\11451' = '\11450'+toSimpleTitleCase '\11453' = '\11452'+toSimpleTitleCase '\11455' = '\11454'+toSimpleTitleCase '\11457' = '\11456'+toSimpleTitleCase '\11459' = '\11458'+toSimpleTitleCase '\11461' = '\11460'+toSimpleTitleCase '\11463' = '\11462'+toSimpleTitleCase '\11465' = '\11464'+toSimpleTitleCase '\11467' = '\11466'+toSimpleTitleCase '\11469' = '\11468'+toSimpleTitleCase '\11471' = '\11470'+toSimpleTitleCase '\11473' = '\11472'+toSimpleTitleCase '\11475' = '\11474'+toSimpleTitleCase '\11477' = '\11476'+toSimpleTitleCase '\11479' = '\11478'+toSimpleTitleCase '\11481' = '\11480'+toSimpleTitleCase '\11483' = '\11482'+toSimpleTitleCase '\11485' = '\11484'+toSimpleTitleCase '\11487' = '\11486'+toSimpleTitleCase '\11489' = '\11488'+toSimpleTitleCase '\11491' = '\11490'+toSimpleTitleCase '\11500' = '\11499'+toSimpleTitleCase '\11502' = '\11501'+toSimpleTitleCase '\11507' = '\11506'+toSimpleTitleCase '\11520' = '\4256'+toSimpleTitleCase '\11521' = '\4257'+toSimpleTitleCase '\11522' = '\4258'+toSimpleTitleCase '\11523' = '\4259'+toSimpleTitleCase '\11524' = '\4260'+toSimpleTitleCase '\11525' = '\4261'+toSimpleTitleCase '\11526' = '\4262'+toSimpleTitleCase '\11527' = '\4263'+toSimpleTitleCase '\11528' = '\4264'+toSimpleTitleCase '\11529' = '\4265'+toSimpleTitleCase '\11530' = '\4266'+toSimpleTitleCase '\11531' = '\4267'+toSimpleTitleCase '\11532' = '\4268'+toSimpleTitleCase '\11533' = '\4269'+toSimpleTitleCase '\11534' = '\4270'+toSimpleTitleCase '\11535' = '\4271'+toSimpleTitleCase '\11536' = '\4272'+toSimpleTitleCase '\11537' = '\4273'+toSimpleTitleCase '\11538' = '\4274'+toSimpleTitleCase '\11539' = '\4275'+toSimpleTitleCase '\11540' = '\4276'+toSimpleTitleCase '\11541' = '\4277'+toSimpleTitleCase '\11542' = '\4278'+toSimpleTitleCase '\11543' = '\4279'+toSimpleTitleCase '\11544' = '\4280'+toSimpleTitleCase '\11545' = '\4281'+toSimpleTitleCase '\11546' = '\4282'+toSimpleTitleCase '\11547' = '\4283'+toSimpleTitleCase '\11548' = '\4284'+toSimpleTitleCase '\11549' = '\4285'+toSimpleTitleCase '\11550' = '\4286'+toSimpleTitleCase '\11551' = '\4287'+toSimpleTitleCase '\11552' = '\4288'+toSimpleTitleCase '\11553' = '\4289'+toSimpleTitleCase '\11554' = '\4290'+toSimpleTitleCase '\11555' = '\4291'+toSimpleTitleCase '\11556' = '\4292'+toSimpleTitleCase '\11557' = '\4293'+toSimpleTitleCase '\11559' = '\4295'+toSimpleTitleCase '\11565' = '\4301'+toSimpleTitleCase '\42561' = '\42560'+toSimpleTitleCase '\42563' = '\42562'+toSimpleTitleCase '\42565' = '\42564'+toSimpleTitleCase '\42567' = '\42566'+toSimpleTitleCase '\42569' = '\42568'+toSimpleTitleCase '\42571' = '\42570'+toSimpleTitleCase '\42573' = '\42572'+toSimpleTitleCase '\42575' = '\42574'+toSimpleTitleCase '\42577' = '\42576'+toSimpleTitleCase '\42579' = '\42578'+toSimpleTitleCase '\42581' = '\42580'+toSimpleTitleCase '\42583' = '\42582'+toSimpleTitleCase '\42585' = '\42584'+toSimpleTitleCase '\42587' = '\42586'+toSimpleTitleCase '\42589' = '\42588'+toSimpleTitleCase '\42591' = '\42590'+toSimpleTitleCase '\42593' = '\42592'+toSimpleTitleCase '\42595' = '\42594'+toSimpleTitleCase '\42597' = '\42596'+toSimpleTitleCase '\42599' = '\42598'+toSimpleTitleCase '\42601' = '\42600'+toSimpleTitleCase '\42603' = '\42602'+toSimpleTitleCase '\42605' = '\42604'+toSimpleTitleCase '\42625' = '\42624'+toSimpleTitleCase '\42627' = '\42626'+toSimpleTitleCase '\42629' = '\42628'+toSimpleTitleCase '\42631' = '\42630'+toSimpleTitleCase '\42633' = '\42632'+toSimpleTitleCase '\42635' = '\42634'+toSimpleTitleCase '\42637' = '\42636'+toSimpleTitleCase '\42639' = '\42638'+toSimpleTitleCase '\42641' = '\42640'+toSimpleTitleCase '\42643' = '\42642'+toSimpleTitleCase '\42645' = '\42644'+toSimpleTitleCase '\42647' = '\42646'+toSimpleTitleCase '\42649' = '\42648'+toSimpleTitleCase '\42651' = '\42650'+toSimpleTitleCase '\42787' = '\42786'+toSimpleTitleCase '\42789' = '\42788'+toSimpleTitleCase '\42791' = '\42790'+toSimpleTitleCase '\42793' = '\42792'+toSimpleTitleCase '\42795' = '\42794'+toSimpleTitleCase '\42797' = '\42796'+toSimpleTitleCase '\42799' = '\42798'+toSimpleTitleCase '\42803' = '\42802'+toSimpleTitleCase '\42805' = '\42804'+toSimpleTitleCase '\42807' = '\42806'+toSimpleTitleCase '\42809' = '\42808'+toSimpleTitleCase '\42811' = '\42810'+toSimpleTitleCase '\42813' = '\42812'+toSimpleTitleCase '\42815' = '\42814'+toSimpleTitleCase '\42817' = '\42816'+toSimpleTitleCase '\42819' = '\42818'+toSimpleTitleCase '\42821' = '\42820'+toSimpleTitleCase '\42823' = '\42822'+toSimpleTitleCase '\42825' = '\42824'+toSimpleTitleCase '\42827' = '\42826'+toSimpleTitleCase '\42829' = '\42828'+toSimpleTitleCase '\42831' = '\42830'+toSimpleTitleCase '\42833' = '\42832'+toSimpleTitleCase '\42835' = '\42834'+toSimpleTitleCase '\42837' = '\42836'+toSimpleTitleCase '\42839' = '\42838'+toSimpleTitleCase '\42841' = '\42840'+toSimpleTitleCase '\42843' = '\42842'+toSimpleTitleCase '\42845' = '\42844'+toSimpleTitleCase '\42847' = '\42846'+toSimpleTitleCase '\42849' = '\42848'+toSimpleTitleCase '\42851' = '\42850'+toSimpleTitleCase '\42853' = '\42852'+toSimpleTitleCase '\42855' = '\42854'+toSimpleTitleCase '\42857' = '\42856'+toSimpleTitleCase '\42859' = '\42858'+toSimpleTitleCase '\42861' = '\42860'+toSimpleTitleCase '\42863' = '\42862'+toSimpleTitleCase '\42874' = '\42873'+toSimpleTitleCase '\42876' = '\42875'+toSimpleTitleCase '\42879' = '\42878'+toSimpleTitleCase '\42881' = '\42880'+toSimpleTitleCase '\42883' = '\42882'+toSimpleTitleCase '\42885' = '\42884'+toSimpleTitleCase '\42887' = '\42886'+toSimpleTitleCase '\42892' = '\42891'+toSimpleTitleCase '\42897' = '\42896'+toSimpleTitleCase '\42899' = '\42898'+toSimpleTitleCase '\42900' = '\42948'+toSimpleTitleCase '\42903' = '\42902'+toSimpleTitleCase '\42905' = '\42904'+toSimpleTitleCase '\42907' = '\42906'+toSimpleTitleCase '\42909' = '\42908'+toSimpleTitleCase '\42911' = '\42910'+toSimpleTitleCase '\42913' = '\42912'+toSimpleTitleCase '\42915' = '\42914'+toSimpleTitleCase '\42917' = '\42916'+toSimpleTitleCase '\42919' = '\42918'+toSimpleTitleCase '\42921' = '\42920'+toSimpleTitleCase '\42933' = '\42932'+toSimpleTitleCase '\42935' = '\42934'+toSimpleTitleCase '\42937' = '\42936'+toSimpleTitleCase '\42939' = '\42938'+toSimpleTitleCase '\42941' = '\42940'+toSimpleTitleCase '\42943' = '\42942'+toSimpleTitleCase '\42945' = '\42944'+toSimpleTitleCase '\42947' = '\42946'+toSimpleTitleCase '\42952' = '\42951'+toSimpleTitleCase '\42954' = '\42953'+toSimpleTitleCase '\42961' = '\42960'+toSimpleTitleCase '\42967' = '\42966'+toSimpleTitleCase '\42969' = '\42968'+toSimpleTitleCase '\42998' = '\42997'+toSimpleTitleCase '\43859' = '\42931'+toSimpleTitleCase '\43888' = '\5024'+toSimpleTitleCase '\43889' = '\5025'+toSimpleTitleCase '\43890' = '\5026'+toSimpleTitleCase '\43891' = '\5027'+toSimpleTitleCase '\43892' = '\5028'+toSimpleTitleCase '\43893' = '\5029'+toSimpleTitleCase '\43894' = '\5030'+toSimpleTitleCase '\43895' = '\5031'+toSimpleTitleCase '\43896' = '\5032'+toSimpleTitleCase '\43897' = '\5033'+toSimpleTitleCase '\43898' = '\5034'+toSimpleTitleCase '\43899' = '\5035'+toSimpleTitleCase '\43900' = '\5036'+toSimpleTitleCase '\43901' = '\5037'+toSimpleTitleCase '\43902' = '\5038'+toSimpleTitleCase '\43903' = '\5039'+toSimpleTitleCase '\43904' = '\5040'+toSimpleTitleCase '\43905' = '\5041'+toSimpleTitleCase '\43906' = '\5042'+toSimpleTitleCase '\43907' = '\5043'+toSimpleTitleCase '\43908' = '\5044'+toSimpleTitleCase '\43909' = '\5045'+toSimpleTitleCase '\43910' = '\5046'+toSimpleTitleCase '\43911' = '\5047'+toSimpleTitleCase '\43912' = '\5048'+toSimpleTitleCase '\43913' = '\5049'+toSimpleTitleCase '\43914' = '\5050'+toSimpleTitleCase '\43915' = '\5051'+toSimpleTitleCase '\43916' = '\5052'+toSimpleTitleCase '\43917' = '\5053'+toSimpleTitleCase '\43918' = '\5054'+toSimpleTitleCase '\43919' = '\5055'+toSimpleTitleCase '\43920' = '\5056'+toSimpleTitleCase '\43921' = '\5057'+toSimpleTitleCase '\43922' = '\5058'+toSimpleTitleCase '\43923' = '\5059'+toSimpleTitleCase '\43924' = '\5060'+toSimpleTitleCase '\43925' = '\5061'+toSimpleTitleCase '\43926' = '\5062'+toSimpleTitleCase '\43927' = '\5063'+toSimpleTitleCase '\43928' = '\5064'+toSimpleTitleCase '\43929' = '\5065'+toSimpleTitleCase '\43930' = '\5066'+toSimpleTitleCase '\43931' = '\5067'+toSimpleTitleCase '\43932' = '\5068'+toSimpleTitleCase '\43933' = '\5069'+toSimpleTitleCase '\43934' = '\5070'+toSimpleTitleCase '\43935' = '\5071'+toSimpleTitleCase '\43936' = '\5072'+toSimpleTitleCase '\43937' = '\5073'+toSimpleTitleCase '\43938' = '\5074'+toSimpleTitleCase '\43939' = '\5075'+toSimpleTitleCase '\43940' = '\5076'+toSimpleTitleCase '\43941' = '\5077'+toSimpleTitleCase '\43942' = '\5078'+toSimpleTitleCase '\43943' = '\5079'+toSimpleTitleCase '\43944' = '\5080'+toSimpleTitleCase '\43945' = '\5081'+toSimpleTitleCase '\43946' = '\5082'+toSimpleTitleCase '\43947' = '\5083'+toSimpleTitleCase '\43948' = '\5084'+toSimpleTitleCase '\43949' = '\5085'+toSimpleTitleCase '\43950' = '\5086'+toSimpleTitleCase '\43951' = '\5087'+toSimpleTitleCase '\43952' = '\5088'+toSimpleTitleCase '\43953' = '\5089'+toSimpleTitleCase '\43954' = '\5090'+toSimpleTitleCase '\43955' = '\5091'+toSimpleTitleCase '\43956' = '\5092'+toSimpleTitleCase '\43957' = '\5093'+toSimpleTitleCase '\43958' = '\5094'+toSimpleTitleCase '\43959' = '\5095'+toSimpleTitleCase '\43960' = '\5096'+toSimpleTitleCase '\43961' = '\5097'+toSimpleTitleCase '\43962' = '\5098'+toSimpleTitleCase '\43963' = '\5099'+toSimpleTitleCase '\43964' = '\5100'+toSimpleTitleCase '\43965' = '\5101'+toSimpleTitleCase '\43966' = '\5102'+toSimpleTitleCase '\43967' = '\5103'+toSimpleTitleCase '\65345' = '\65313'+toSimpleTitleCase '\65346' = '\65314'+toSimpleTitleCase '\65347' = '\65315'+toSimpleTitleCase '\65348' = '\65316'+toSimpleTitleCase '\65349' = '\65317'+toSimpleTitleCase '\65350' = '\65318'+toSimpleTitleCase '\65351' = '\65319'+toSimpleTitleCase '\65352' = '\65320'+toSimpleTitleCase '\65353' = '\65321'+toSimpleTitleCase '\65354' = '\65322'+toSimpleTitleCase '\65355' = '\65323'+toSimpleTitleCase '\65356' = '\65324'+toSimpleTitleCase '\65357' = '\65325'+toSimpleTitleCase '\65358' = '\65326'+toSimpleTitleCase '\65359' = '\65327'+toSimpleTitleCase '\65360' = '\65328'+toSimpleTitleCase '\65361' = '\65329'+toSimpleTitleCase '\65362' = '\65330'+toSimpleTitleCase '\65363' = '\65331'+toSimpleTitleCase '\65364' = '\65332'+toSimpleTitleCase '\65365' = '\65333'+toSimpleTitleCase '\65366' = '\65334'+toSimpleTitleCase '\65367' = '\65335'+toSimpleTitleCase '\65368' = '\65336'+toSimpleTitleCase '\65369' = '\65337'+toSimpleTitleCase '\65370' = '\65338'+toSimpleTitleCase '\66600' = '\66560'+toSimpleTitleCase '\66601' = '\66561'+toSimpleTitleCase '\66602' = '\66562'+toSimpleTitleCase '\66603' = '\66563'+toSimpleTitleCase '\66604' = '\66564'+toSimpleTitleCase '\66605' = '\66565'+toSimpleTitleCase '\66606' = '\66566'+toSimpleTitleCase '\66607' = '\66567'+toSimpleTitleCase '\66608' = '\66568'+toSimpleTitleCase '\66609' = '\66569'+toSimpleTitleCase '\66610' = '\66570'+toSimpleTitleCase '\66611' = '\66571'+toSimpleTitleCase '\66612' = '\66572'+toSimpleTitleCase '\66613' = '\66573'+toSimpleTitleCase '\66614' = '\66574'+toSimpleTitleCase '\66615' = '\66575'+toSimpleTitleCase '\66616' = '\66576'+toSimpleTitleCase '\66617' = '\66577'+toSimpleTitleCase '\66618' = '\66578'+toSimpleTitleCase '\66619' = '\66579'+toSimpleTitleCase '\66620' = '\66580'+toSimpleTitleCase '\66621' = '\66581'+toSimpleTitleCase '\66622' = '\66582'+toSimpleTitleCase '\66623' = '\66583'+toSimpleTitleCase '\66624' = '\66584'+toSimpleTitleCase '\66625' = '\66585'+toSimpleTitleCase '\66626' = '\66586'+toSimpleTitleCase '\66627' = '\66587'+toSimpleTitleCase '\66628' = '\66588'+toSimpleTitleCase '\66629' = '\66589'+toSimpleTitleCase '\66630' = '\66590'+toSimpleTitleCase '\66631' = '\66591'+toSimpleTitleCase '\66632' = '\66592'+toSimpleTitleCase '\66633' = '\66593'+toSimpleTitleCase '\66634' = '\66594'+toSimpleTitleCase '\66635' = '\66595'+toSimpleTitleCase '\66636' = '\66596'+toSimpleTitleCase '\66637' = '\66597'+toSimpleTitleCase '\66638' = '\66598'+toSimpleTitleCase '\66639' = '\66599'+toSimpleTitleCase '\66776' = '\66736'+toSimpleTitleCase '\66777' = '\66737'+toSimpleTitleCase '\66778' = '\66738'+toSimpleTitleCase '\66779' = '\66739'+toSimpleTitleCase '\66780' = '\66740'+toSimpleTitleCase '\66781' = '\66741'+toSimpleTitleCase '\66782' = '\66742'+toSimpleTitleCase '\66783' = '\66743'+toSimpleTitleCase '\66784' = '\66744'+toSimpleTitleCase '\66785' = '\66745'+toSimpleTitleCase '\66786' = '\66746'+toSimpleTitleCase '\66787' = '\66747'+toSimpleTitleCase '\66788' = '\66748'+toSimpleTitleCase '\66789' = '\66749'+toSimpleTitleCase '\66790' = '\66750'+toSimpleTitleCase '\66791' = '\66751'+toSimpleTitleCase '\66792' = '\66752'+toSimpleTitleCase '\66793' = '\66753'+toSimpleTitleCase '\66794' = '\66754'+toSimpleTitleCase '\66795' = '\66755'+toSimpleTitleCase '\66796' = '\66756'+toSimpleTitleCase '\66797' = '\66757'+toSimpleTitleCase '\66798' = '\66758'+toSimpleTitleCase '\66799' = '\66759'+toSimpleTitleCase '\66800' = '\66760'+toSimpleTitleCase '\66801' = '\66761'+toSimpleTitleCase '\66802' = '\66762'+toSimpleTitleCase '\66803' = '\66763'+toSimpleTitleCase '\66804' = '\66764'+toSimpleTitleCase '\66805' = '\66765'+toSimpleTitleCase '\66806' = '\66766'+toSimpleTitleCase '\66807' = '\66767'+toSimpleTitleCase '\66808' = '\66768'+toSimpleTitleCase '\66809' = '\66769'+toSimpleTitleCase '\66810' = '\66770'+toSimpleTitleCase '\66811' = '\66771'+toSimpleTitleCase '\66967' = '\66928'+toSimpleTitleCase '\66968' = '\66929'+toSimpleTitleCase '\66969' = '\66930'+toSimpleTitleCase '\66970' = '\66931'+toSimpleTitleCase '\66971' = '\66932'+toSimpleTitleCase '\66972' = '\66933'+toSimpleTitleCase '\66973' = '\66934'+toSimpleTitleCase '\66974' = '\66935'+toSimpleTitleCase '\66975' = '\66936'+toSimpleTitleCase '\66976' = '\66937'+toSimpleTitleCase '\66977' = '\66938'+toSimpleTitleCase '\66979' = '\66940'+toSimpleTitleCase '\66980' = '\66941'+toSimpleTitleCase '\66981' = '\66942'+toSimpleTitleCase '\66982' = '\66943'+toSimpleTitleCase '\66983' = '\66944'+toSimpleTitleCase '\66984' = '\66945'+toSimpleTitleCase '\66985' = '\66946'+toSimpleTitleCase '\66986' = '\66947'+toSimpleTitleCase '\66987' = '\66948'+toSimpleTitleCase '\66988' = '\66949'+toSimpleTitleCase '\66989' = '\66950'+toSimpleTitleCase '\66990' = '\66951'+toSimpleTitleCase '\66991' = '\66952'+toSimpleTitleCase '\66992' = '\66953'+toSimpleTitleCase '\66993' = '\66954'+toSimpleTitleCase '\66995' = '\66956'+toSimpleTitleCase '\66996' = '\66957'+toSimpleTitleCase '\66997' = '\66958'+toSimpleTitleCase '\66998' = '\66959'+toSimpleTitleCase '\66999' = '\66960'+toSimpleTitleCase '\67000' = '\66961'+toSimpleTitleCase '\67001' = '\66962'+toSimpleTitleCase '\67003' = '\66964'+toSimpleTitleCase '\67004' = '\66965'+toSimpleTitleCase '\68800' = '\68736'+toSimpleTitleCase '\68801' = '\68737'+toSimpleTitleCase '\68802' = '\68738'+toSimpleTitleCase '\68803' = '\68739'+toSimpleTitleCase '\68804' = '\68740'+toSimpleTitleCase '\68805' = '\68741'+toSimpleTitleCase '\68806' = '\68742'+toSimpleTitleCase '\68807' = '\68743'+toSimpleTitleCase '\68808' = '\68744'+toSimpleTitleCase '\68809' = '\68745'+toSimpleTitleCase '\68810' = '\68746'+toSimpleTitleCase '\68811' = '\68747'+toSimpleTitleCase '\68812' = '\68748'+toSimpleTitleCase '\68813' = '\68749'+toSimpleTitleCase '\68814' = '\68750'+toSimpleTitleCase '\68815' = '\68751'+toSimpleTitleCase '\68816' = '\68752'+toSimpleTitleCase '\68817' = '\68753'+toSimpleTitleCase '\68818' = '\68754'+toSimpleTitleCase '\68819' = '\68755'+toSimpleTitleCase '\68820' = '\68756'+toSimpleTitleCase '\68821' = '\68757'+toSimpleTitleCase '\68822' = '\68758'+toSimpleTitleCase '\68823' = '\68759'+toSimpleTitleCase '\68824' = '\68760'+toSimpleTitleCase '\68825' = '\68761'+toSimpleTitleCase '\68826' = '\68762'+toSimpleTitleCase '\68827' = '\68763'+toSimpleTitleCase '\68828' = '\68764'+toSimpleTitleCase '\68829' = '\68765'+toSimpleTitleCase '\68830' = '\68766'+toSimpleTitleCase '\68831' = '\68767'+toSimpleTitleCase '\68832' = '\68768'+toSimpleTitleCase '\68833' = '\68769'+toSimpleTitleCase '\68834' = '\68770'+toSimpleTitleCase '\68835' = '\68771'+toSimpleTitleCase '\68836' = '\68772'+toSimpleTitleCase '\68837' = '\68773'+toSimpleTitleCase '\68838' = '\68774'+toSimpleTitleCase '\68839' = '\68775'+toSimpleTitleCase '\68840' = '\68776'+toSimpleTitleCase '\68841' = '\68777'+toSimpleTitleCase '\68842' = '\68778'+toSimpleTitleCase '\68843' = '\68779'+toSimpleTitleCase '\68844' = '\68780'+toSimpleTitleCase '\68845' = '\68781'+toSimpleTitleCase '\68846' = '\68782'+toSimpleTitleCase '\68847' = '\68783'+toSimpleTitleCase '\68848' = '\68784'+toSimpleTitleCase '\68849' = '\68785'+toSimpleTitleCase '\68850' = '\68786'+toSimpleTitleCase '\71872' = '\71840'+toSimpleTitleCase '\71873' = '\71841'+toSimpleTitleCase '\71874' = '\71842'+toSimpleTitleCase '\71875' = '\71843'+toSimpleTitleCase '\71876' = '\71844'+toSimpleTitleCase '\71877' = '\71845'+toSimpleTitleCase '\71878' = '\71846'+toSimpleTitleCase '\71879' = '\71847'+toSimpleTitleCase '\71880' = '\71848'+toSimpleTitleCase '\71881' = '\71849'+toSimpleTitleCase '\71882' = '\71850'+toSimpleTitleCase '\71883' = '\71851'+toSimpleTitleCase '\71884' = '\71852'+toSimpleTitleCase '\71885' = '\71853'+toSimpleTitleCase '\71886' = '\71854'+toSimpleTitleCase '\71887' = '\71855'+toSimpleTitleCase '\71888' = '\71856'+toSimpleTitleCase '\71889' = '\71857'+toSimpleTitleCase '\71890' = '\71858'+toSimpleTitleCase '\71891' = '\71859'+toSimpleTitleCase '\71892' = '\71860'+toSimpleTitleCase '\71893' = '\71861'+toSimpleTitleCase '\71894' = '\71862'+toSimpleTitleCase '\71895' = '\71863'+toSimpleTitleCase '\71896' = '\71864'+toSimpleTitleCase '\71897' = '\71865'+toSimpleTitleCase '\71898' = '\71866'+toSimpleTitleCase '\71899' = '\71867'+toSimpleTitleCase '\71900' = '\71868'+toSimpleTitleCase '\71901' = '\71869'+toSimpleTitleCase '\71902' = '\71870'+toSimpleTitleCase '\71903' = '\71871'+toSimpleTitleCase '\93792' = '\93760'+toSimpleTitleCase '\93793' = '\93761'+toSimpleTitleCase '\93794' = '\93762'+toSimpleTitleCase '\93795' = '\93763'+toSimpleTitleCase '\93796' = '\93764'+toSimpleTitleCase '\93797' = '\93765'+toSimpleTitleCase '\93798' = '\93766'+toSimpleTitleCase '\93799' = '\93767'+toSimpleTitleCase '\93800' = '\93768'+toSimpleTitleCase '\93801' = '\93769'+toSimpleTitleCase '\93802' = '\93770'+toSimpleTitleCase '\93803' = '\93771'+toSimpleTitleCase '\93804' = '\93772'+toSimpleTitleCase '\93805' = '\93773'+toSimpleTitleCase '\93806' = '\93774'+toSimpleTitleCase '\93807' = '\93775'+toSimpleTitleCase '\93808' = '\93776'+toSimpleTitleCase '\93809' = '\93777'+toSimpleTitleCase '\93810' = '\93778'+toSimpleTitleCase '\93811' = '\93779'+toSimpleTitleCase '\93812' = '\93780'+toSimpleTitleCase '\93813' = '\93781'+toSimpleTitleCase '\93814' = '\93782'+toSimpleTitleCase '\93815' = '\93783'+toSimpleTitleCase '\93816' = '\93784'+toSimpleTitleCase '\93817' = '\93785'+toSimpleTitleCase '\93818' = '\93786'+toSimpleTitleCase '\93819' = '\93787'+toSimpleTitleCase '\93820' = '\93788'+toSimpleTitleCase '\93821' = '\93789'+toSimpleTitleCase '\93822' = '\93790'+toSimpleTitleCase '\93823' = '\93791'+toSimpleTitleCase '\125218' = '\125184'+toSimpleTitleCase '\125219' = '\125185'+toSimpleTitleCase '\125220' = '\125186'+toSimpleTitleCase '\125221' = '\125187'+toSimpleTitleCase '\125222' = '\125188'+toSimpleTitleCase '\125223' = '\125189'+toSimpleTitleCase '\125224' = '\125190'+toSimpleTitleCase '\125225' = '\125191'+toSimpleTitleCase '\125226' = '\125192'+toSimpleTitleCase '\125227' = '\125193'+toSimpleTitleCase '\125228' = '\125194'+toSimpleTitleCase '\125229' = '\125195'+toSimpleTitleCase '\125230' = '\125196'+toSimpleTitleCase '\125231' = '\125197'+toSimpleTitleCase '\125232' = '\125198'+toSimpleTitleCase '\125233' = '\125199'+toSimpleTitleCase '\125234' = '\125200'+toSimpleTitleCase '\125235' = '\125201'+toSimpleTitleCase '\125236' = '\125202'+toSimpleTitleCase '\125237' = '\125203'+toSimpleTitleCase '\125238' = '\125204'+toSimpleTitleCase '\125239' = '\125205'+toSimpleTitleCase '\125240' = '\125206'+toSimpleTitleCase '\125241' = '\125207'+toSimpleTitleCase '\125242' = '\125208'+toSimpleTitleCase '\125243' = '\125209'+toSimpleTitleCase '\125244' = '\125210'+toSimpleTitleCase '\125245' = '\125211'+toSimpleTitleCase '\125246' = '\125212'+toSimpleTitleCase '\125247' = '\125213'+toSimpleTitleCase '\125248' = '\125214'+toSimpleTitleCase '\125249' = '\125215'+toSimpleTitleCase '\125250' = '\125216'+toSimpleTitleCase '\125251' = '\125217'+toSimpleTitleCase c = c
+ lib/Unicode/Internal/Char/UnicodeData/SimpleUpperCaseMapping.hs view
@@ -0,0 +1,1465 @@+-- autogenerated from https://www.unicode.org/Public/14.0.0/ucd/UnicodeData.txt+-- |+-- Module : Unicode.Internal.Char.UnicodeData.SimpleUpperCaseMapping+-- Copyright : (c) 2020 Composewell Technologies and Contributors+-- License : Apache-2.0+-- Maintainer : streamly@composewell.com+-- Stability : experimental++module Unicode.Internal.Char.UnicodeData.SimpleUpperCaseMapping+(toSimpleUpperCase)+where++{-# NOINLINE toSimpleUpperCase #-}+toSimpleUpperCase :: Char -> Char+toSimpleUpperCase 'a' = 'A'+toSimpleUpperCase 'b' = 'B'+toSimpleUpperCase 'c' = 'C'+toSimpleUpperCase 'd' = 'D'+toSimpleUpperCase 'e' = 'E'+toSimpleUpperCase 'f' = 'F'+toSimpleUpperCase 'g' = 'G'+toSimpleUpperCase 'h' = 'H'+toSimpleUpperCase 'i' = 'I'+toSimpleUpperCase 'j' = 'J'+toSimpleUpperCase 'k' = 'K'+toSimpleUpperCase 'l' = 'L'+toSimpleUpperCase 'm' = 'M'+toSimpleUpperCase 'n' = 'N'+toSimpleUpperCase 'o' = 'O'+toSimpleUpperCase 'p' = 'P'+toSimpleUpperCase 'q' = 'Q'+toSimpleUpperCase 'r' = 'R'+toSimpleUpperCase 's' = 'S'+toSimpleUpperCase 't' = 'T'+toSimpleUpperCase 'u' = 'U'+toSimpleUpperCase 'v' = 'V'+toSimpleUpperCase 'w' = 'W'+toSimpleUpperCase 'x' = 'X'+toSimpleUpperCase 'y' = 'Y'+toSimpleUpperCase 'z' = 'Z'+toSimpleUpperCase '\181' = '\924'+toSimpleUpperCase '\224' = '\192'+toSimpleUpperCase '\225' = '\193'+toSimpleUpperCase '\226' = '\194'+toSimpleUpperCase '\227' = '\195'+toSimpleUpperCase '\228' = '\196'+toSimpleUpperCase '\229' = '\197'+toSimpleUpperCase '\230' = '\198'+toSimpleUpperCase '\231' = '\199'+toSimpleUpperCase '\232' = '\200'+toSimpleUpperCase '\233' = '\201'+toSimpleUpperCase '\234' = '\202'+toSimpleUpperCase '\235' = '\203'+toSimpleUpperCase '\236' = '\204'+toSimpleUpperCase '\237' = '\205'+toSimpleUpperCase '\238' = '\206'+toSimpleUpperCase '\239' = '\207'+toSimpleUpperCase '\240' = '\208'+toSimpleUpperCase '\241' = '\209'+toSimpleUpperCase '\242' = '\210'+toSimpleUpperCase '\243' = '\211'+toSimpleUpperCase '\244' = '\212'+toSimpleUpperCase '\245' = '\213'+toSimpleUpperCase '\246' = '\214'+toSimpleUpperCase '\248' = '\216'+toSimpleUpperCase '\249' = '\217'+toSimpleUpperCase '\250' = '\218'+toSimpleUpperCase '\251' = '\219'+toSimpleUpperCase '\252' = '\220'+toSimpleUpperCase '\253' = '\221'+toSimpleUpperCase '\254' = '\222'+toSimpleUpperCase '\255' = '\376'+toSimpleUpperCase '\257' = '\256'+toSimpleUpperCase '\259' = '\258'+toSimpleUpperCase '\261' = '\260'+toSimpleUpperCase '\263' = '\262'+toSimpleUpperCase '\265' = '\264'+toSimpleUpperCase '\267' = '\266'+toSimpleUpperCase '\269' = '\268'+toSimpleUpperCase '\271' = '\270'+toSimpleUpperCase '\273' = '\272'+toSimpleUpperCase '\275' = '\274'+toSimpleUpperCase '\277' = '\276'+toSimpleUpperCase '\279' = '\278'+toSimpleUpperCase '\281' = '\280'+toSimpleUpperCase '\283' = '\282'+toSimpleUpperCase '\285' = '\284'+toSimpleUpperCase '\287' = '\286'+toSimpleUpperCase '\289' = '\288'+toSimpleUpperCase '\291' = '\290'+toSimpleUpperCase '\293' = '\292'+toSimpleUpperCase '\295' = '\294'+toSimpleUpperCase '\297' = '\296'+toSimpleUpperCase '\299' = '\298'+toSimpleUpperCase '\301' = '\300'+toSimpleUpperCase '\303' = '\302'+toSimpleUpperCase '\305' = 'I'+toSimpleUpperCase '\307' = '\306'+toSimpleUpperCase '\309' = '\308'+toSimpleUpperCase '\311' = '\310'+toSimpleUpperCase '\314' = '\313'+toSimpleUpperCase '\316' = '\315'+toSimpleUpperCase '\318' = '\317'+toSimpleUpperCase '\320' = '\319'+toSimpleUpperCase '\322' = '\321'+toSimpleUpperCase '\324' = '\323'+toSimpleUpperCase '\326' = '\325'+toSimpleUpperCase '\328' = '\327'+toSimpleUpperCase '\331' = '\330'+toSimpleUpperCase '\333' = '\332'+toSimpleUpperCase '\335' = '\334'+toSimpleUpperCase '\337' = '\336'+toSimpleUpperCase '\339' = '\338'+toSimpleUpperCase '\341' = '\340'+toSimpleUpperCase '\343' = '\342'+toSimpleUpperCase '\345' = '\344'+toSimpleUpperCase '\347' = '\346'+toSimpleUpperCase '\349' = '\348'+toSimpleUpperCase '\351' = '\350'+toSimpleUpperCase '\353' = '\352'+toSimpleUpperCase '\355' = '\354'+toSimpleUpperCase '\357' = '\356'+toSimpleUpperCase '\359' = '\358'+toSimpleUpperCase '\361' = '\360'+toSimpleUpperCase '\363' = '\362'+toSimpleUpperCase '\365' = '\364'+toSimpleUpperCase '\367' = '\366'+toSimpleUpperCase '\369' = '\368'+toSimpleUpperCase '\371' = '\370'+toSimpleUpperCase '\373' = '\372'+toSimpleUpperCase '\375' = '\374'+toSimpleUpperCase '\378' = '\377'+toSimpleUpperCase '\380' = '\379'+toSimpleUpperCase '\382' = '\381'+toSimpleUpperCase '\383' = 'S'+toSimpleUpperCase '\384' = '\579'+toSimpleUpperCase '\387' = '\386'+toSimpleUpperCase '\389' = '\388'+toSimpleUpperCase '\392' = '\391'+toSimpleUpperCase '\396' = '\395'+toSimpleUpperCase '\402' = '\401'+toSimpleUpperCase '\405' = '\502'+toSimpleUpperCase '\409' = '\408'+toSimpleUpperCase '\410' = '\573'+toSimpleUpperCase '\414' = '\544'+toSimpleUpperCase '\417' = '\416'+toSimpleUpperCase '\419' = '\418'+toSimpleUpperCase '\421' = '\420'+toSimpleUpperCase '\424' = '\423'+toSimpleUpperCase '\429' = '\428'+toSimpleUpperCase '\432' = '\431'+toSimpleUpperCase '\436' = '\435'+toSimpleUpperCase '\438' = '\437'+toSimpleUpperCase '\441' = '\440'+toSimpleUpperCase '\445' = '\444'+toSimpleUpperCase '\447' = '\503'+toSimpleUpperCase '\453' = '\452'+toSimpleUpperCase '\454' = '\452'+toSimpleUpperCase '\456' = '\455'+toSimpleUpperCase '\457' = '\455'+toSimpleUpperCase '\459' = '\458'+toSimpleUpperCase '\460' = '\458'+toSimpleUpperCase '\462' = '\461'+toSimpleUpperCase '\464' = '\463'+toSimpleUpperCase '\466' = '\465'+toSimpleUpperCase '\468' = '\467'+toSimpleUpperCase '\470' = '\469'+toSimpleUpperCase '\472' = '\471'+toSimpleUpperCase '\474' = '\473'+toSimpleUpperCase '\476' = '\475'+toSimpleUpperCase '\477' = '\398'+toSimpleUpperCase '\479' = '\478'+toSimpleUpperCase '\481' = '\480'+toSimpleUpperCase '\483' = '\482'+toSimpleUpperCase '\485' = '\484'+toSimpleUpperCase '\487' = '\486'+toSimpleUpperCase '\489' = '\488'+toSimpleUpperCase '\491' = '\490'+toSimpleUpperCase '\493' = '\492'+toSimpleUpperCase '\495' = '\494'+toSimpleUpperCase '\498' = '\497'+toSimpleUpperCase '\499' = '\497'+toSimpleUpperCase '\501' = '\500'+toSimpleUpperCase '\505' = '\504'+toSimpleUpperCase '\507' = '\506'+toSimpleUpperCase '\509' = '\508'+toSimpleUpperCase '\511' = '\510'+toSimpleUpperCase '\513' = '\512'+toSimpleUpperCase '\515' = '\514'+toSimpleUpperCase '\517' = '\516'+toSimpleUpperCase '\519' = '\518'+toSimpleUpperCase '\521' = '\520'+toSimpleUpperCase '\523' = '\522'+toSimpleUpperCase '\525' = '\524'+toSimpleUpperCase '\527' = '\526'+toSimpleUpperCase '\529' = '\528'+toSimpleUpperCase '\531' = '\530'+toSimpleUpperCase '\533' = '\532'+toSimpleUpperCase '\535' = '\534'+toSimpleUpperCase '\537' = '\536'+toSimpleUpperCase '\539' = '\538'+toSimpleUpperCase '\541' = '\540'+toSimpleUpperCase '\543' = '\542'+toSimpleUpperCase '\547' = '\546'+toSimpleUpperCase '\549' = '\548'+toSimpleUpperCase '\551' = '\550'+toSimpleUpperCase '\553' = '\552'+toSimpleUpperCase '\555' = '\554'+toSimpleUpperCase '\557' = '\556'+toSimpleUpperCase '\559' = '\558'+toSimpleUpperCase '\561' = '\560'+toSimpleUpperCase '\563' = '\562'+toSimpleUpperCase '\572' = '\571'+toSimpleUpperCase '\575' = '\11390'+toSimpleUpperCase '\576' = '\11391'+toSimpleUpperCase '\578' = '\577'+toSimpleUpperCase '\583' = '\582'+toSimpleUpperCase '\585' = '\584'+toSimpleUpperCase '\587' = '\586'+toSimpleUpperCase '\589' = '\588'+toSimpleUpperCase '\591' = '\590'+toSimpleUpperCase '\592' = '\11375'+toSimpleUpperCase '\593' = '\11373'+toSimpleUpperCase '\594' = '\11376'+toSimpleUpperCase '\595' = '\385'+toSimpleUpperCase '\596' = '\390'+toSimpleUpperCase '\598' = '\393'+toSimpleUpperCase '\599' = '\394'+toSimpleUpperCase '\601' = '\399'+toSimpleUpperCase '\603' = '\400'+toSimpleUpperCase '\604' = '\42923'+toSimpleUpperCase '\608' = '\403'+toSimpleUpperCase '\609' = '\42924'+toSimpleUpperCase '\611' = '\404'+toSimpleUpperCase '\613' = '\42893'+toSimpleUpperCase '\614' = '\42922'+toSimpleUpperCase '\616' = '\407'+toSimpleUpperCase '\617' = '\406'+toSimpleUpperCase '\618' = '\42926'+toSimpleUpperCase '\619' = '\11362'+toSimpleUpperCase '\620' = '\42925'+toSimpleUpperCase '\623' = '\412'+toSimpleUpperCase '\625' = '\11374'+toSimpleUpperCase '\626' = '\413'+toSimpleUpperCase '\629' = '\415'+toSimpleUpperCase '\637' = '\11364'+toSimpleUpperCase '\640' = '\422'+toSimpleUpperCase '\642' = '\42949'+toSimpleUpperCase '\643' = '\425'+toSimpleUpperCase '\647' = '\42929'+toSimpleUpperCase '\648' = '\430'+toSimpleUpperCase '\649' = '\580'+toSimpleUpperCase '\650' = '\433'+toSimpleUpperCase '\651' = '\434'+toSimpleUpperCase '\652' = '\581'+toSimpleUpperCase '\658' = '\439'+toSimpleUpperCase '\669' = '\42930'+toSimpleUpperCase '\670' = '\42928'+toSimpleUpperCase '\837' = '\921'+toSimpleUpperCase '\881' = '\880'+toSimpleUpperCase '\883' = '\882'+toSimpleUpperCase '\887' = '\886'+toSimpleUpperCase '\891' = '\1021'+toSimpleUpperCase '\892' = '\1022'+toSimpleUpperCase '\893' = '\1023'+toSimpleUpperCase '\940' = '\902'+toSimpleUpperCase '\941' = '\904'+toSimpleUpperCase '\942' = '\905'+toSimpleUpperCase '\943' = '\906'+toSimpleUpperCase '\945' = '\913'+toSimpleUpperCase '\946' = '\914'+toSimpleUpperCase '\947' = '\915'+toSimpleUpperCase '\948' = '\916'+toSimpleUpperCase '\949' = '\917'+toSimpleUpperCase '\950' = '\918'+toSimpleUpperCase '\951' = '\919'+toSimpleUpperCase '\952' = '\920'+toSimpleUpperCase '\953' = '\921'+toSimpleUpperCase '\954' = '\922'+toSimpleUpperCase '\955' = '\923'+toSimpleUpperCase '\956' = '\924'+toSimpleUpperCase '\957' = '\925'+toSimpleUpperCase '\958' = '\926'+toSimpleUpperCase '\959' = '\927'+toSimpleUpperCase '\960' = '\928'+toSimpleUpperCase '\961' = '\929'+toSimpleUpperCase '\962' = '\931'+toSimpleUpperCase '\963' = '\931'+toSimpleUpperCase '\964' = '\932'+toSimpleUpperCase '\965' = '\933'+toSimpleUpperCase '\966' = '\934'+toSimpleUpperCase '\967' = '\935'+toSimpleUpperCase '\968' = '\936'+toSimpleUpperCase '\969' = '\937'+toSimpleUpperCase '\970' = '\938'+toSimpleUpperCase '\971' = '\939'+toSimpleUpperCase '\972' = '\908'+toSimpleUpperCase '\973' = '\910'+toSimpleUpperCase '\974' = '\911'+toSimpleUpperCase '\976' = '\914'+toSimpleUpperCase '\977' = '\920'+toSimpleUpperCase '\981' = '\934'+toSimpleUpperCase '\982' = '\928'+toSimpleUpperCase '\983' = '\975'+toSimpleUpperCase '\985' = '\984'+toSimpleUpperCase '\987' = '\986'+toSimpleUpperCase '\989' = '\988'+toSimpleUpperCase '\991' = '\990'+toSimpleUpperCase '\993' = '\992'+toSimpleUpperCase '\995' = '\994'+toSimpleUpperCase '\997' = '\996'+toSimpleUpperCase '\999' = '\998'+toSimpleUpperCase '\1001' = '\1000'+toSimpleUpperCase '\1003' = '\1002'+toSimpleUpperCase '\1005' = '\1004'+toSimpleUpperCase '\1007' = '\1006'+toSimpleUpperCase '\1008' = '\922'+toSimpleUpperCase '\1009' = '\929'+toSimpleUpperCase '\1010' = '\1017'+toSimpleUpperCase '\1011' = '\895'+toSimpleUpperCase '\1013' = '\917'+toSimpleUpperCase '\1016' = '\1015'+toSimpleUpperCase '\1019' = '\1018'+toSimpleUpperCase '\1072' = '\1040'+toSimpleUpperCase '\1073' = '\1041'+toSimpleUpperCase '\1074' = '\1042'+toSimpleUpperCase '\1075' = '\1043'+toSimpleUpperCase '\1076' = '\1044'+toSimpleUpperCase '\1077' = '\1045'+toSimpleUpperCase '\1078' = '\1046'+toSimpleUpperCase '\1079' = '\1047'+toSimpleUpperCase '\1080' = '\1048'+toSimpleUpperCase '\1081' = '\1049'+toSimpleUpperCase '\1082' = '\1050'+toSimpleUpperCase '\1083' = '\1051'+toSimpleUpperCase '\1084' = '\1052'+toSimpleUpperCase '\1085' = '\1053'+toSimpleUpperCase '\1086' = '\1054'+toSimpleUpperCase '\1087' = '\1055'+toSimpleUpperCase '\1088' = '\1056'+toSimpleUpperCase '\1089' = '\1057'+toSimpleUpperCase '\1090' = '\1058'+toSimpleUpperCase '\1091' = '\1059'+toSimpleUpperCase '\1092' = '\1060'+toSimpleUpperCase '\1093' = '\1061'+toSimpleUpperCase '\1094' = '\1062'+toSimpleUpperCase '\1095' = '\1063'+toSimpleUpperCase '\1096' = '\1064'+toSimpleUpperCase '\1097' = '\1065'+toSimpleUpperCase '\1098' = '\1066'+toSimpleUpperCase '\1099' = '\1067'+toSimpleUpperCase '\1100' = '\1068'+toSimpleUpperCase '\1101' = '\1069'+toSimpleUpperCase '\1102' = '\1070'+toSimpleUpperCase '\1103' = '\1071'+toSimpleUpperCase '\1104' = '\1024'+toSimpleUpperCase '\1105' = '\1025'+toSimpleUpperCase '\1106' = '\1026'+toSimpleUpperCase '\1107' = '\1027'+toSimpleUpperCase '\1108' = '\1028'+toSimpleUpperCase '\1109' = '\1029'+toSimpleUpperCase '\1110' = '\1030'+toSimpleUpperCase '\1111' = '\1031'+toSimpleUpperCase '\1112' = '\1032'+toSimpleUpperCase '\1113' = '\1033'+toSimpleUpperCase '\1114' = '\1034'+toSimpleUpperCase '\1115' = '\1035'+toSimpleUpperCase '\1116' = '\1036'+toSimpleUpperCase '\1117' = '\1037'+toSimpleUpperCase '\1118' = '\1038'+toSimpleUpperCase '\1119' = '\1039'+toSimpleUpperCase '\1121' = '\1120'+toSimpleUpperCase '\1123' = '\1122'+toSimpleUpperCase '\1125' = '\1124'+toSimpleUpperCase '\1127' = '\1126'+toSimpleUpperCase '\1129' = '\1128'+toSimpleUpperCase '\1131' = '\1130'+toSimpleUpperCase '\1133' = '\1132'+toSimpleUpperCase '\1135' = '\1134'+toSimpleUpperCase '\1137' = '\1136'+toSimpleUpperCase '\1139' = '\1138'+toSimpleUpperCase '\1141' = '\1140'+toSimpleUpperCase '\1143' = '\1142'+toSimpleUpperCase '\1145' = '\1144'+toSimpleUpperCase '\1147' = '\1146'+toSimpleUpperCase '\1149' = '\1148'+toSimpleUpperCase '\1151' = '\1150'+toSimpleUpperCase '\1153' = '\1152'+toSimpleUpperCase '\1163' = '\1162'+toSimpleUpperCase '\1165' = '\1164'+toSimpleUpperCase '\1167' = '\1166'+toSimpleUpperCase '\1169' = '\1168'+toSimpleUpperCase '\1171' = '\1170'+toSimpleUpperCase '\1173' = '\1172'+toSimpleUpperCase '\1175' = '\1174'+toSimpleUpperCase '\1177' = '\1176'+toSimpleUpperCase '\1179' = '\1178'+toSimpleUpperCase '\1181' = '\1180'+toSimpleUpperCase '\1183' = '\1182'+toSimpleUpperCase '\1185' = '\1184'+toSimpleUpperCase '\1187' = '\1186'+toSimpleUpperCase '\1189' = '\1188'+toSimpleUpperCase '\1191' = '\1190'+toSimpleUpperCase '\1193' = '\1192'+toSimpleUpperCase '\1195' = '\1194'+toSimpleUpperCase '\1197' = '\1196'+toSimpleUpperCase '\1199' = '\1198'+toSimpleUpperCase '\1201' = '\1200'+toSimpleUpperCase '\1203' = '\1202'+toSimpleUpperCase '\1205' = '\1204'+toSimpleUpperCase '\1207' = '\1206'+toSimpleUpperCase '\1209' = '\1208'+toSimpleUpperCase '\1211' = '\1210'+toSimpleUpperCase '\1213' = '\1212'+toSimpleUpperCase '\1215' = '\1214'+toSimpleUpperCase '\1218' = '\1217'+toSimpleUpperCase '\1220' = '\1219'+toSimpleUpperCase '\1222' = '\1221'+toSimpleUpperCase '\1224' = '\1223'+toSimpleUpperCase '\1226' = '\1225'+toSimpleUpperCase '\1228' = '\1227'+toSimpleUpperCase '\1230' = '\1229'+toSimpleUpperCase '\1231' = '\1216'+toSimpleUpperCase '\1233' = '\1232'+toSimpleUpperCase '\1235' = '\1234'+toSimpleUpperCase '\1237' = '\1236'+toSimpleUpperCase '\1239' = '\1238'+toSimpleUpperCase '\1241' = '\1240'+toSimpleUpperCase '\1243' = '\1242'+toSimpleUpperCase '\1245' = '\1244'+toSimpleUpperCase '\1247' = '\1246'+toSimpleUpperCase '\1249' = '\1248'+toSimpleUpperCase '\1251' = '\1250'+toSimpleUpperCase '\1253' = '\1252'+toSimpleUpperCase '\1255' = '\1254'+toSimpleUpperCase '\1257' = '\1256'+toSimpleUpperCase '\1259' = '\1258'+toSimpleUpperCase '\1261' = '\1260'+toSimpleUpperCase '\1263' = '\1262'+toSimpleUpperCase '\1265' = '\1264'+toSimpleUpperCase '\1267' = '\1266'+toSimpleUpperCase '\1269' = '\1268'+toSimpleUpperCase '\1271' = '\1270'+toSimpleUpperCase '\1273' = '\1272'+toSimpleUpperCase '\1275' = '\1274'+toSimpleUpperCase '\1277' = '\1276'+toSimpleUpperCase '\1279' = '\1278'+toSimpleUpperCase '\1281' = '\1280'+toSimpleUpperCase '\1283' = '\1282'+toSimpleUpperCase '\1285' = '\1284'+toSimpleUpperCase '\1287' = '\1286'+toSimpleUpperCase '\1289' = '\1288'+toSimpleUpperCase '\1291' = '\1290'+toSimpleUpperCase '\1293' = '\1292'+toSimpleUpperCase '\1295' = '\1294'+toSimpleUpperCase '\1297' = '\1296'+toSimpleUpperCase '\1299' = '\1298'+toSimpleUpperCase '\1301' = '\1300'+toSimpleUpperCase '\1303' = '\1302'+toSimpleUpperCase '\1305' = '\1304'+toSimpleUpperCase '\1307' = '\1306'+toSimpleUpperCase '\1309' = '\1308'+toSimpleUpperCase '\1311' = '\1310'+toSimpleUpperCase '\1313' = '\1312'+toSimpleUpperCase '\1315' = '\1314'+toSimpleUpperCase '\1317' = '\1316'+toSimpleUpperCase '\1319' = '\1318'+toSimpleUpperCase '\1321' = '\1320'+toSimpleUpperCase '\1323' = '\1322'+toSimpleUpperCase '\1325' = '\1324'+toSimpleUpperCase '\1327' = '\1326'+toSimpleUpperCase '\1377' = '\1329'+toSimpleUpperCase '\1378' = '\1330'+toSimpleUpperCase '\1379' = '\1331'+toSimpleUpperCase '\1380' = '\1332'+toSimpleUpperCase '\1381' = '\1333'+toSimpleUpperCase '\1382' = '\1334'+toSimpleUpperCase '\1383' = '\1335'+toSimpleUpperCase '\1384' = '\1336'+toSimpleUpperCase '\1385' = '\1337'+toSimpleUpperCase '\1386' = '\1338'+toSimpleUpperCase '\1387' = '\1339'+toSimpleUpperCase '\1388' = '\1340'+toSimpleUpperCase '\1389' = '\1341'+toSimpleUpperCase '\1390' = '\1342'+toSimpleUpperCase '\1391' = '\1343'+toSimpleUpperCase '\1392' = '\1344'+toSimpleUpperCase '\1393' = '\1345'+toSimpleUpperCase '\1394' = '\1346'+toSimpleUpperCase '\1395' = '\1347'+toSimpleUpperCase '\1396' = '\1348'+toSimpleUpperCase '\1397' = '\1349'+toSimpleUpperCase '\1398' = '\1350'+toSimpleUpperCase '\1399' = '\1351'+toSimpleUpperCase '\1400' = '\1352'+toSimpleUpperCase '\1401' = '\1353'+toSimpleUpperCase '\1402' = '\1354'+toSimpleUpperCase '\1403' = '\1355'+toSimpleUpperCase '\1404' = '\1356'+toSimpleUpperCase '\1405' = '\1357'+toSimpleUpperCase '\1406' = '\1358'+toSimpleUpperCase '\1407' = '\1359'+toSimpleUpperCase '\1408' = '\1360'+toSimpleUpperCase '\1409' = '\1361'+toSimpleUpperCase '\1410' = '\1362'+toSimpleUpperCase '\1411' = '\1363'+toSimpleUpperCase '\1412' = '\1364'+toSimpleUpperCase '\1413' = '\1365'+toSimpleUpperCase '\1414' = '\1366'+toSimpleUpperCase '\4304' = '\7312'+toSimpleUpperCase '\4305' = '\7313'+toSimpleUpperCase '\4306' = '\7314'+toSimpleUpperCase '\4307' = '\7315'+toSimpleUpperCase '\4308' = '\7316'+toSimpleUpperCase '\4309' = '\7317'+toSimpleUpperCase '\4310' = '\7318'+toSimpleUpperCase '\4311' = '\7319'+toSimpleUpperCase '\4312' = '\7320'+toSimpleUpperCase '\4313' = '\7321'+toSimpleUpperCase '\4314' = '\7322'+toSimpleUpperCase '\4315' = '\7323'+toSimpleUpperCase '\4316' = '\7324'+toSimpleUpperCase '\4317' = '\7325'+toSimpleUpperCase '\4318' = '\7326'+toSimpleUpperCase '\4319' = '\7327'+toSimpleUpperCase '\4320' = '\7328'+toSimpleUpperCase '\4321' = '\7329'+toSimpleUpperCase '\4322' = '\7330'+toSimpleUpperCase '\4323' = '\7331'+toSimpleUpperCase '\4324' = '\7332'+toSimpleUpperCase '\4325' = '\7333'+toSimpleUpperCase '\4326' = '\7334'+toSimpleUpperCase '\4327' = '\7335'+toSimpleUpperCase '\4328' = '\7336'+toSimpleUpperCase '\4329' = '\7337'+toSimpleUpperCase '\4330' = '\7338'+toSimpleUpperCase '\4331' = '\7339'+toSimpleUpperCase '\4332' = '\7340'+toSimpleUpperCase '\4333' = '\7341'+toSimpleUpperCase '\4334' = '\7342'+toSimpleUpperCase '\4335' = '\7343'+toSimpleUpperCase '\4336' = '\7344'+toSimpleUpperCase '\4337' = '\7345'+toSimpleUpperCase '\4338' = '\7346'+toSimpleUpperCase '\4339' = '\7347'+toSimpleUpperCase '\4340' = '\7348'+toSimpleUpperCase '\4341' = '\7349'+toSimpleUpperCase '\4342' = '\7350'+toSimpleUpperCase '\4343' = '\7351'+toSimpleUpperCase '\4344' = '\7352'+toSimpleUpperCase '\4345' = '\7353'+toSimpleUpperCase '\4346' = '\7354'+toSimpleUpperCase '\4349' = '\7357'+toSimpleUpperCase '\4350' = '\7358'+toSimpleUpperCase '\4351' = '\7359'+toSimpleUpperCase '\5112' = '\5104'+toSimpleUpperCase '\5113' = '\5105'+toSimpleUpperCase '\5114' = '\5106'+toSimpleUpperCase '\5115' = '\5107'+toSimpleUpperCase '\5116' = '\5108'+toSimpleUpperCase '\5117' = '\5109'+toSimpleUpperCase '\7296' = '\1042'+toSimpleUpperCase '\7297' = '\1044'+toSimpleUpperCase '\7298' = '\1054'+toSimpleUpperCase '\7299' = '\1057'+toSimpleUpperCase '\7300' = '\1058'+toSimpleUpperCase '\7301' = '\1058'+toSimpleUpperCase '\7302' = '\1066'+toSimpleUpperCase '\7303' = '\1122'+toSimpleUpperCase '\7304' = '\42570'+toSimpleUpperCase '\7545' = '\42877'+toSimpleUpperCase '\7549' = '\11363'+toSimpleUpperCase '\7566' = '\42950'+toSimpleUpperCase '\7681' = '\7680'+toSimpleUpperCase '\7683' = '\7682'+toSimpleUpperCase '\7685' = '\7684'+toSimpleUpperCase '\7687' = '\7686'+toSimpleUpperCase '\7689' = '\7688'+toSimpleUpperCase '\7691' = '\7690'+toSimpleUpperCase '\7693' = '\7692'+toSimpleUpperCase '\7695' = '\7694'+toSimpleUpperCase '\7697' = '\7696'+toSimpleUpperCase '\7699' = '\7698'+toSimpleUpperCase '\7701' = '\7700'+toSimpleUpperCase '\7703' = '\7702'+toSimpleUpperCase '\7705' = '\7704'+toSimpleUpperCase '\7707' = '\7706'+toSimpleUpperCase '\7709' = '\7708'+toSimpleUpperCase '\7711' = '\7710'+toSimpleUpperCase '\7713' = '\7712'+toSimpleUpperCase '\7715' = '\7714'+toSimpleUpperCase '\7717' = '\7716'+toSimpleUpperCase '\7719' = '\7718'+toSimpleUpperCase '\7721' = '\7720'+toSimpleUpperCase '\7723' = '\7722'+toSimpleUpperCase '\7725' = '\7724'+toSimpleUpperCase '\7727' = '\7726'+toSimpleUpperCase '\7729' = '\7728'+toSimpleUpperCase '\7731' = '\7730'+toSimpleUpperCase '\7733' = '\7732'+toSimpleUpperCase '\7735' = '\7734'+toSimpleUpperCase '\7737' = '\7736'+toSimpleUpperCase '\7739' = '\7738'+toSimpleUpperCase '\7741' = '\7740'+toSimpleUpperCase '\7743' = '\7742'+toSimpleUpperCase '\7745' = '\7744'+toSimpleUpperCase '\7747' = '\7746'+toSimpleUpperCase '\7749' = '\7748'+toSimpleUpperCase '\7751' = '\7750'+toSimpleUpperCase '\7753' = '\7752'+toSimpleUpperCase '\7755' = '\7754'+toSimpleUpperCase '\7757' = '\7756'+toSimpleUpperCase '\7759' = '\7758'+toSimpleUpperCase '\7761' = '\7760'+toSimpleUpperCase '\7763' = '\7762'+toSimpleUpperCase '\7765' = '\7764'+toSimpleUpperCase '\7767' = '\7766'+toSimpleUpperCase '\7769' = '\7768'+toSimpleUpperCase '\7771' = '\7770'+toSimpleUpperCase '\7773' = '\7772'+toSimpleUpperCase '\7775' = '\7774'+toSimpleUpperCase '\7777' = '\7776'+toSimpleUpperCase '\7779' = '\7778'+toSimpleUpperCase '\7781' = '\7780'+toSimpleUpperCase '\7783' = '\7782'+toSimpleUpperCase '\7785' = '\7784'+toSimpleUpperCase '\7787' = '\7786'+toSimpleUpperCase '\7789' = '\7788'+toSimpleUpperCase '\7791' = '\7790'+toSimpleUpperCase '\7793' = '\7792'+toSimpleUpperCase '\7795' = '\7794'+toSimpleUpperCase '\7797' = '\7796'+toSimpleUpperCase '\7799' = '\7798'+toSimpleUpperCase '\7801' = '\7800'+toSimpleUpperCase '\7803' = '\7802'+toSimpleUpperCase '\7805' = '\7804'+toSimpleUpperCase '\7807' = '\7806'+toSimpleUpperCase '\7809' = '\7808'+toSimpleUpperCase '\7811' = '\7810'+toSimpleUpperCase '\7813' = '\7812'+toSimpleUpperCase '\7815' = '\7814'+toSimpleUpperCase '\7817' = '\7816'+toSimpleUpperCase '\7819' = '\7818'+toSimpleUpperCase '\7821' = '\7820'+toSimpleUpperCase '\7823' = '\7822'+toSimpleUpperCase '\7825' = '\7824'+toSimpleUpperCase '\7827' = '\7826'+toSimpleUpperCase '\7829' = '\7828'+toSimpleUpperCase '\7835' = '\7776'+toSimpleUpperCase '\7841' = '\7840'+toSimpleUpperCase '\7843' = '\7842'+toSimpleUpperCase '\7845' = '\7844'+toSimpleUpperCase '\7847' = '\7846'+toSimpleUpperCase '\7849' = '\7848'+toSimpleUpperCase '\7851' = '\7850'+toSimpleUpperCase '\7853' = '\7852'+toSimpleUpperCase '\7855' = '\7854'+toSimpleUpperCase '\7857' = '\7856'+toSimpleUpperCase '\7859' = '\7858'+toSimpleUpperCase '\7861' = '\7860'+toSimpleUpperCase '\7863' = '\7862'+toSimpleUpperCase '\7865' = '\7864'+toSimpleUpperCase '\7867' = '\7866'+toSimpleUpperCase '\7869' = '\7868'+toSimpleUpperCase '\7871' = '\7870'+toSimpleUpperCase '\7873' = '\7872'+toSimpleUpperCase '\7875' = '\7874'+toSimpleUpperCase '\7877' = '\7876'+toSimpleUpperCase '\7879' = '\7878'+toSimpleUpperCase '\7881' = '\7880'+toSimpleUpperCase '\7883' = '\7882'+toSimpleUpperCase '\7885' = '\7884'+toSimpleUpperCase '\7887' = '\7886'+toSimpleUpperCase '\7889' = '\7888'+toSimpleUpperCase '\7891' = '\7890'+toSimpleUpperCase '\7893' = '\7892'+toSimpleUpperCase '\7895' = '\7894'+toSimpleUpperCase '\7897' = '\7896'+toSimpleUpperCase '\7899' = '\7898'+toSimpleUpperCase '\7901' = '\7900'+toSimpleUpperCase '\7903' = '\7902'+toSimpleUpperCase '\7905' = '\7904'+toSimpleUpperCase '\7907' = '\7906'+toSimpleUpperCase '\7909' = '\7908'+toSimpleUpperCase '\7911' = '\7910'+toSimpleUpperCase '\7913' = '\7912'+toSimpleUpperCase '\7915' = '\7914'+toSimpleUpperCase '\7917' = '\7916'+toSimpleUpperCase '\7919' = '\7918'+toSimpleUpperCase '\7921' = '\7920'+toSimpleUpperCase '\7923' = '\7922'+toSimpleUpperCase '\7925' = '\7924'+toSimpleUpperCase '\7927' = '\7926'+toSimpleUpperCase '\7929' = '\7928'+toSimpleUpperCase '\7931' = '\7930'+toSimpleUpperCase '\7933' = '\7932'+toSimpleUpperCase '\7935' = '\7934'+toSimpleUpperCase '\7936' = '\7944'+toSimpleUpperCase '\7937' = '\7945'+toSimpleUpperCase '\7938' = '\7946'+toSimpleUpperCase '\7939' = '\7947'+toSimpleUpperCase '\7940' = '\7948'+toSimpleUpperCase '\7941' = '\7949'+toSimpleUpperCase '\7942' = '\7950'+toSimpleUpperCase '\7943' = '\7951'+toSimpleUpperCase '\7952' = '\7960'+toSimpleUpperCase '\7953' = '\7961'+toSimpleUpperCase '\7954' = '\7962'+toSimpleUpperCase '\7955' = '\7963'+toSimpleUpperCase '\7956' = '\7964'+toSimpleUpperCase '\7957' = '\7965'+toSimpleUpperCase '\7968' = '\7976'+toSimpleUpperCase '\7969' = '\7977'+toSimpleUpperCase '\7970' = '\7978'+toSimpleUpperCase '\7971' = '\7979'+toSimpleUpperCase '\7972' = '\7980'+toSimpleUpperCase '\7973' = '\7981'+toSimpleUpperCase '\7974' = '\7982'+toSimpleUpperCase '\7975' = '\7983'+toSimpleUpperCase '\7984' = '\7992'+toSimpleUpperCase '\7985' = '\7993'+toSimpleUpperCase '\7986' = '\7994'+toSimpleUpperCase '\7987' = '\7995'+toSimpleUpperCase '\7988' = '\7996'+toSimpleUpperCase '\7989' = '\7997'+toSimpleUpperCase '\7990' = '\7998'+toSimpleUpperCase '\7991' = '\7999'+toSimpleUpperCase '\8000' = '\8008'+toSimpleUpperCase '\8001' = '\8009'+toSimpleUpperCase '\8002' = '\8010'+toSimpleUpperCase '\8003' = '\8011'+toSimpleUpperCase '\8004' = '\8012'+toSimpleUpperCase '\8005' = '\8013'+toSimpleUpperCase '\8017' = '\8025'+toSimpleUpperCase '\8019' = '\8027'+toSimpleUpperCase '\8021' = '\8029'+toSimpleUpperCase '\8023' = '\8031'+toSimpleUpperCase '\8032' = '\8040'+toSimpleUpperCase '\8033' = '\8041'+toSimpleUpperCase '\8034' = '\8042'+toSimpleUpperCase '\8035' = '\8043'+toSimpleUpperCase '\8036' = '\8044'+toSimpleUpperCase '\8037' = '\8045'+toSimpleUpperCase '\8038' = '\8046'+toSimpleUpperCase '\8039' = '\8047'+toSimpleUpperCase '\8048' = '\8122'+toSimpleUpperCase '\8049' = '\8123'+toSimpleUpperCase '\8050' = '\8136'+toSimpleUpperCase '\8051' = '\8137'+toSimpleUpperCase '\8052' = '\8138'+toSimpleUpperCase '\8053' = '\8139'+toSimpleUpperCase '\8054' = '\8154'+toSimpleUpperCase '\8055' = '\8155'+toSimpleUpperCase '\8056' = '\8184'+toSimpleUpperCase '\8057' = '\8185'+toSimpleUpperCase '\8058' = '\8170'+toSimpleUpperCase '\8059' = '\8171'+toSimpleUpperCase '\8060' = '\8186'+toSimpleUpperCase '\8061' = '\8187'+toSimpleUpperCase '\8064' = '\8072'+toSimpleUpperCase '\8065' = '\8073'+toSimpleUpperCase '\8066' = '\8074'+toSimpleUpperCase '\8067' = '\8075'+toSimpleUpperCase '\8068' = '\8076'+toSimpleUpperCase '\8069' = '\8077'+toSimpleUpperCase '\8070' = '\8078'+toSimpleUpperCase '\8071' = '\8079'+toSimpleUpperCase '\8080' = '\8088'+toSimpleUpperCase '\8081' = '\8089'+toSimpleUpperCase '\8082' = '\8090'+toSimpleUpperCase '\8083' = '\8091'+toSimpleUpperCase '\8084' = '\8092'+toSimpleUpperCase '\8085' = '\8093'+toSimpleUpperCase '\8086' = '\8094'+toSimpleUpperCase '\8087' = '\8095'+toSimpleUpperCase '\8096' = '\8104'+toSimpleUpperCase '\8097' = '\8105'+toSimpleUpperCase '\8098' = '\8106'+toSimpleUpperCase '\8099' = '\8107'+toSimpleUpperCase '\8100' = '\8108'+toSimpleUpperCase '\8101' = '\8109'+toSimpleUpperCase '\8102' = '\8110'+toSimpleUpperCase '\8103' = '\8111'+toSimpleUpperCase '\8112' = '\8120'+toSimpleUpperCase '\8113' = '\8121'+toSimpleUpperCase '\8115' = '\8124'+toSimpleUpperCase '\8126' = '\921'+toSimpleUpperCase '\8131' = '\8140'+toSimpleUpperCase '\8144' = '\8152'+toSimpleUpperCase '\8145' = '\8153'+toSimpleUpperCase '\8160' = '\8168'+toSimpleUpperCase '\8161' = '\8169'+toSimpleUpperCase '\8165' = '\8172'+toSimpleUpperCase '\8179' = '\8188'+toSimpleUpperCase '\8526' = '\8498'+toSimpleUpperCase '\8560' = '\8544'+toSimpleUpperCase '\8561' = '\8545'+toSimpleUpperCase '\8562' = '\8546'+toSimpleUpperCase '\8563' = '\8547'+toSimpleUpperCase '\8564' = '\8548'+toSimpleUpperCase '\8565' = '\8549'+toSimpleUpperCase '\8566' = '\8550'+toSimpleUpperCase '\8567' = '\8551'+toSimpleUpperCase '\8568' = '\8552'+toSimpleUpperCase '\8569' = '\8553'+toSimpleUpperCase '\8570' = '\8554'+toSimpleUpperCase '\8571' = '\8555'+toSimpleUpperCase '\8572' = '\8556'+toSimpleUpperCase '\8573' = '\8557'+toSimpleUpperCase '\8574' = '\8558'+toSimpleUpperCase '\8575' = '\8559'+toSimpleUpperCase '\8580' = '\8579'+toSimpleUpperCase '\9424' = '\9398'+toSimpleUpperCase '\9425' = '\9399'+toSimpleUpperCase '\9426' = '\9400'+toSimpleUpperCase '\9427' = '\9401'+toSimpleUpperCase '\9428' = '\9402'+toSimpleUpperCase '\9429' = '\9403'+toSimpleUpperCase '\9430' = '\9404'+toSimpleUpperCase '\9431' = '\9405'+toSimpleUpperCase '\9432' = '\9406'+toSimpleUpperCase '\9433' = '\9407'+toSimpleUpperCase '\9434' = '\9408'+toSimpleUpperCase '\9435' = '\9409'+toSimpleUpperCase '\9436' = '\9410'+toSimpleUpperCase '\9437' = '\9411'+toSimpleUpperCase '\9438' = '\9412'+toSimpleUpperCase '\9439' = '\9413'+toSimpleUpperCase '\9440' = '\9414'+toSimpleUpperCase '\9441' = '\9415'+toSimpleUpperCase '\9442' = '\9416'+toSimpleUpperCase '\9443' = '\9417'+toSimpleUpperCase '\9444' = '\9418'+toSimpleUpperCase '\9445' = '\9419'+toSimpleUpperCase '\9446' = '\9420'+toSimpleUpperCase '\9447' = '\9421'+toSimpleUpperCase '\9448' = '\9422'+toSimpleUpperCase '\9449' = '\9423'+toSimpleUpperCase '\11312' = '\11264'+toSimpleUpperCase '\11313' = '\11265'+toSimpleUpperCase '\11314' = '\11266'+toSimpleUpperCase '\11315' = '\11267'+toSimpleUpperCase '\11316' = '\11268'+toSimpleUpperCase '\11317' = '\11269'+toSimpleUpperCase '\11318' = '\11270'+toSimpleUpperCase '\11319' = '\11271'+toSimpleUpperCase '\11320' = '\11272'+toSimpleUpperCase '\11321' = '\11273'+toSimpleUpperCase '\11322' = '\11274'+toSimpleUpperCase '\11323' = '\11275'+toSimpleUpperCase '\11324' = '\11276'+toSimpleUpperCase '\11325' = '\11277'+toSimpleUpperCase '\11326' = '\11278'+toSimpleUpperCase '\11327' = '\11279'+toSimpleUpperCase '\11328' = '\11280'+toSimpleUpperCase '\11329' = '\11281'+toSimpleUpperCase '\11330' = '\11282'+toSimpleUpperCase '\11331' = '\11283'+toSimpleUpperCase '\11332' = '\11284'+toSimpleUpperCase '\11333' = '\11285'+toSimpleUpperCase '\11334' = '\11286'+toSimpleUpperCase '\11335' = '\11287'+toSimpleUpperCase '\11336' = '\11288'+toSimpleUpperCase '\11337' = '\11289'+toSimpleUpperCase '\11338' = '\11290'+toSimpleUpperCase '\11339' = '\11291'+toSimpleUpperCase '\11340' = '\11292'+toSimpleUpperCase '\11341' = '\11293'+toSimpleUpperCase '\11342' = '\11294'+toSimpleUpperCase '\11343' = '\11295'+toSimpleUpperCase '\11344' = '\11296'+toSimpleUpperCase '\11345' = '\11297'+toSimpleUpperCase '\11346' = '\11298'+toSimpleUpperCase '\11347' = '\11299'+toSimpleUpperCase '\11348' = '\11300'+toSimpleUpperCase '\11349' = '\11301'+toSimpleUpperCase '\11350' = '\11302'+toSimpleUpperCase '\11351' = '\11303'+toSimpleUpperCase '\11352' = '\11304'+toSimpleUpperCase '\11353' = '\11305'+toSimpleUpperCase '\11354' = '\11306'+toSimpleUpperCase '\11355' = '\11307'+toSimpleUpperCase '\11356' = '\11308'+toSimpleUpperCase '\11357' = '\11309'+toSimpleUpperCase '\11358' = '\11310'+toSimpleUpperCase '\11359' = '\11311'+toSimpleUpperCase '\11361' = '\11360'+toSimpleUpperCase '\11365' = '\570'+toSimpleUpperCase '\11366' = '\574'+toSimpleUpperCase '\11368' = '\11367'+toSimpleUpperCase '\11370' = '\11369'+toSimpleUpperCase '\11372' = '\11371'+toSimpleUpperCase '\11379' = '\11378'+toSimpleUpperCase '\11382' = '\11381'+toSimpleUpperCase '\11393' = '\11392'+toSimpleUpperCase '\11395' = '\11394'+toSimpleUpperCase '\11397' = '\11396'+toSimpleUpperCase '\11399' = '\11398'+toSimpleUpperCase '\11401' = '\11400'+toSimpleUpperCase '\11403' = '\11402'+toSimpleUpperCase '\11405' = '\11404'+toSimpleUpperCase '\11407' = '\11406'+toSimpleUpperCase '\11409' = '\11408'+toSimpleUpperCase '\11411' = '\11410'+toSimpleUpperCase '\11413' = '\11412'+toSimpleUpperCase '\11415' = '\11414'+toSimpleUpperCase '\11417' = '\11416'+toSimpleUpperCase '\11419' = '\11418'+toSimpleUpperCase '\11421' = '\11420'+toSimpleUpperCase '\11423' = '\11422'+toSimpleUpperCase '\11425' = '\11424'+toSimpleUpperCase '\11427' = '\11426'+toSimpleUpperCase '\11429' = '\11428'+toSimpleUpperCase '\11431' = '\11430'+toSimpleUpperCase '\11433' = '\11432'+toSimpleUpperCase '\11435' = '\11434'+toSimpleUpperCase '\11437' = '\11436'+toSimpleUpperCase '\11439' = '\11438'+toSimpleUpperCase '\11441' = '\11440'+toSimpleUpperCase '\11443' = '\11442'+toSimpleUpperCase '\11445' = '\11444'+toSimpleUpperCase '\11447' = '\11446'+toSimpleUpperCase '\11449' = '\11448'+toSimpleUpperCase '\11451' = '\11450'+toSimpleUpperCase '\11453' = '\11452'+toSimpleUpperCase '\11455' = '\11454'+toSimpleUpperCase '\11457' = '\11456'+toSimpleUpperCase '\11459' = '\11458'+toSimpleUpperCase '\11461' = '\11460'+toSimpleUpperCase '\11463' = '\11462'+toSimpleUpperCase '\11465' = '\11464'+toSimpleUpperCase '\11467' = '\11466'+toSimpleUpperCase '\11469' = '\11468'+toSimpleUpperCase '\11471' = '\11470'+toSimpleUpperCase '\11473' = '\11472'+toSimpleUpperCase '\11475' = '\11474'+toSimpleUpperCase '\11477' = '\11476'+toSimpleUpperCase '\11479' = '\11478'+toSimpleUpperCase '\11481' = '\11480'+toSimpleUpperCase '\11483' = '\11482'+toSimpleUpperCase '\11485' = '\11484'+toSimpleUpperCase '\11487' = '\11486'+toSimpleUpperCase '\11489' = '\11488'+toSimpleUpperCase '\11491' = '\11490'+toSimpleUpperCase '\11500' = '\11499'+toSimpleUpperCase '\11502' = '\11501'+toSimpleUpperCase '\11507' = '\11506'+toSimpleUpperCase '\11520' = '\4256'+toSimpleUpperCase '\11521' = '\4257'+toSimpleUpperCase '\11522' = '\4258'+toSimpleUpperCase '\11523' = '\4259'+toSimpleUpperCase '\11524' = '\4260'+toSimpleUpperCase '\11525' = '\4261'+toSimpleUpperCase '\11526' = '\4262'+toSimpleUpperCase '\11527' = '\4263'+toSimpleUpperCase '\11528' = '\4264'+toSimpleUpperCase '\11529' = '\4265'+toSimpleUpperCase '\11530' = '\4266'+toSimpleUpperCase '\11531' = '\4267'+toSimpleUpperCase '\11532' = '\4268'+toSimpleUpperCase '\11533' = '\4269'+toSimpleUpperCase '\11534' = '\4270'+toSimpleUpperCase '\11535' = '\4271'+toSimpleUpperCase '\11536' = '\4272'+toSimpleUpperCase '\11537' = '\4273'+toSimpleUpperCase '\11538' = '\4274'+toSimpleUpperCase '\11539' = '\4275'+toSimpleUpperCase '\11540' = '\4276'+toSimpleUpperCase '\11541' = '\4277'+toSimpleUpperCase '\11542' = '\4278'+toSimpleUpperCase '\11543' = '\4279'+toSimpleUpperCase '\11544' = '\4280'+toSimpleUpperCase '\11545' = '\4281'+toSimpleUpperCase '\11546' = '\4282'+toSimpleUpperCase '\11547' = '\4283'+toSimpleUpperCase '\11548' = '\4284'+toSimpleUpperCase '\11549' = '\4285'+toSimpleUpperCase '\11550' = '\4286'+toSimpleUpperCase '\11551' = '\4287'+toSimpleUpperCase '\11552' = '\4288'+toSimpleUpperCase '\11553' = '\4289'+toSimpleUpperCase '\11554' = '\4290'+toSimpleUpperCase '\11555' = '\4291'+toSimpleUpperCase '\11556' = '\4292'+toSimpleUpperCase '\11557' = '\4293'+toSimpleUpperCase '\11559' = '\4295'+toSimpleUpperCase '\11565' = '\4301'+toSimpleUpperCase '\42561' = '\42560'+toSimpleUpperCase '\42563' = '\42562'+toSimpleUpperCase '\42565' = '\42564'+toSimpleUpperCase '\42567' = '\42566'+toSimpleUpperCase '\42569' = '\42568'+toSimpleUpperCase '\42571' = '\42570'+toSimpleUpperCase '\42573' = '\42572'+toSimpleUpperCase '\42575' = '\42574'+toSimpleUpperCase '\42577' = '\42576'+toSimpleUpperCase '\42579' = '\42578'+toSimpleUpperCase '\42581' = '\42580'+toSimpleUpperCase '\42583' = '\42582'+toSimpleUpperCase '\42585' = '\42584'+toSimpleUpperCase '\42587' = '\42586'+toSimpleUpperCase '\42589' = '\42588'+toSimpleUpperCase '\42591' = '\42590'+toSimpleUpperCase '\42593' = '\42592'+toSimpleUpperCase '\42595' = '\42594'+toSimpleUpperCase '\42597' = '\42596'+toSimpleUpperCase '\42599' = '\42598'+toSimpleUpperCase '\42601' = '\42600'+toSimpleUpperCase '\42603' = '\42602'+toSimpleUpperCase '\42605' = '\42604'+toSimpleUpperCase '\42625' = '\42624'+toSimpleUpperCase '\42627' = '\42626'+toSimpleUpperCase '\42629' = '\42628'+toSimpleUpperCase '\42631' = '\42630'+toSimpleUpperCase '\42633' = '\42632'+toSimpleUpperCase '\42635' = '\42634'+toSimpleUpperCase '\42637' = '\42636'+toSimpleUpperCase '\42639' = '\42638'+toSimpleUpperCase '\42641' = '\42640'+toSimpleUpperCase '\42643' = '\42642'+toSimpleUpperCase '\42645' = '\42644'+toSimpleUpperCase '\42647' = '\42646'+toSimpleUpperCase '\42649' = '\42648'+toSimpleUpperCase '\42651' = '\42650'+toSimpleUpperCase '\42787' = '\42786'+toSimpleUpperCase '\42789' = '\42788'+toSimpleUpperCase '\42791' = '\42790'+toSimpleUpperCase '\42793' = '\42792'+toSimpleUpperCase '\42795' = '\42794'+toSimpleUpperCase '\42797' = '\42796'+toSimpleUpperCase '\42799' = '\42798'+toSimpleUpperCase '\42803' = '\42802'+toSimpleUpperCase '\42805' = '\42804'+toSimpleUpperCase '\42807' = '\42806'+toSimpleUpperCase '\42809' = '\42808'+toSimpleUpperCase '\42811' = '\42810'+toSimpleUpperCase '\42813' = '\42812'+toSimpleUpperCase '\42815' = '\42814'+toSimpleUpperCase '\42817' = '\42816'+toSimpleUpperCase '\42819' = '\42818'+toSimpleUpperCase '\42821' = '\42820'+toSimpleUpperCase '\42823' = '\42822'+toSimpleUpperCase '\42825' = '\42824'+toSimpleUpperCase '\42827' = '\42826'+toSimpleUpperCase '\42829' = '\42828'+toSimpleUpperCase '\42831' = '\42830'+toSimpleUpperCase '\42833' = '\42832'+toSimpleUpperCase '\42835' = '\42834'+toSimpleUpperCase '\42837' = '\42836'+toSimpleUpperCase '\42839' = '\42838'+toSimpleUpperCase '\42841' = '\42840'+toSimpleUpperCase '\42843' = '\42842'+toSimpleUpperCase '\42845' = '\42844'+toSimpleUpperCase '\42847' = '\42846'+toSimpleUpperCase '\42849' = '\42848'+toSimpleUpperCase '\42851' = '\42850'+toSimpleUpperCase '\42853' = '\42852'+toSimpleUpperCase '\42855' = '\42854'+toSimpleUpperCase '\42857' = '\42856'+toSimpleUpperCase '\42859' = '\42858'+toSimpleUpperCase '\42861' = '\42860'+toSimpleUpperCase '\42863' = '\42862'+toSimpleUpperCase '\42874' = '\42873'+toSimpleUpperCase '\42876' = '\42875'+toSimpleUpperCase '\42879' = '\42878'+toSimpleUpperCase '\42881' = '\42880'+toSimpleUpperCase '\42883' = '\42882'+toSimpleUpperCase '\42885' = '\42884'+toSimpleUpperCase '\42887' = '\42886'+toSimpleUpperCase '\42892' = '\42891'+toSimpleUpperCase '\42897' = '\42896'+toSimpleUpperCase '\42899' = '\42898'+toSimpleUpperCase '\42900' = '\42948'+toSimpleUpperCase '\42903' = '\42902'+toSimpleUpperCase '\42905' = '\42904'+toSimpleUpperCase '\42907' = '\42906'+toSimpleUpperCase '\42909' = '\42908'+toSimpleUpperCase '\42911' = '\42910'+toSimpleUpperCase '\42913' = '\42912'+toSimpleUpperCase '\42915' = '\42914'+toSimpleUpperCase '\42917' = '\42916'+toSimpleUpperCase '\42919' = '\42918'+toSimpleUpperCase '\42921' = '\42920'+toSimpleUpperCase '\42933' = '\42932'+toSimpleUpperCase '\42935' = '\42934'+toSimpleUpperCase '\42937' = '\42936'+toSimpleUpperCase '\42939' = '\42938'+toSimpleUpperCase '\42941' = '\42940'+toSimpleUpperCase '\42943' = '\42942'+toSimpleUpperCase '\42945' = '\42944'+toSimpleUpperCase '\42947' = '\42946'+toSimpleUpperCase '\42952' = '\42951'+toSimpleUpperCase '\42954' = '\42953'+toSimpleUpperCase '\42961' = '\42960'+toSimpleUpperCase '\42967' = '\42966'+toSimpleUpperCase '\42969' = '\42968'+toSimpleUpperCase '\42998' = '\42997'+toSimpleUpperCase '\43859' = '\42931'+toSimpleUpperCase '\43888' = '\5024'+toSimpleUpperCase '\43889' = '\5025'+toSimpleUpperCase '\43890' = '\5026'+toSimpleUpperCase '\43891' = '\5027'+toSimpleUpperCase '\43892' = '\5028'+toSimpleUpperCase '\43893' = '\5029'+toSimpleUpperCase '\43894' = '\5030'+toSimpleUpperCase '\43895' = '\5031'+toSimpleUpperCase '\43896' = '\5032'+toSimpleUpperCase '\43897' = '\5033'+toSimpleUpperCase '\43898' = '\5034'+toSimpleUpperCase '\43899' = '\5035'+toSimpleUpperCase '\43900' = '\5036'+toSimpleUpperCase '\43901' = '\5037'+toSimpleUpperCase '\43902' = '\5038'+toSimpleUpperCase '\43903' = '\5039'+toSimpleUpperCase '\43904' = '\5040'+toSimpleUpperCase '\43905' = '\5041'+toSimpleUpperCase '\43906' = '\5042'+toSimpleUpperCase '\43907' = '\5043'+toSimpleUpperCase '\43908' = '\5044'+toSimpleUpperCase '\43909' = '\5045'+toSimpleUpperCase '\43910' = '\5046'+toSimpleUpperCase '\43911' = '\5047'+toSimpleUpperCase '\43912' = '\5048'+toSimpleUpperCase '\43913' = '\5049'+toSimpleUpperCase '\43914' = '\5050'+toSimpleUpperCase '\43915' = '\5051'+toSimpleUpperCase '\43916' = '\5052'+toSimpleUpperCase '\43917' = '\5053'+toSimpleUpperCase '\43918' = '\5054'+toSimpleUpperCase '\43919' = '\5055'+toSimpleUpperCase '\43920' = '\5056'+toSimpleUpperCase '\43921' = '\5057'+toSimpleUpperCase '\43922' = '\5058'+toSimpleUpperCase '\43923' = '\5059'+toSimpleUpperCase '\43924' = '\5060'+toSimpleUpperCase '\43925' = '\5061'+toSimpleUpperCase '\43926' = '\5062'+toSimpleUpperCase '\43927' = '\5063'+toSimpleUpperCase '\43928' = '\5064'+toSimpleUpperCase '\43929' = '\5065'+toSimpleUpperCase '\43930' = '\5066'+toSimpleUpperCase '\43931' = '\5067'+toSimpleUpperCase '\43932' = '\5068'+toSimpleUpperCase '\43933' = '\5069'+toSimpleUpperCase '\43934' = '\5070'+toSimpleUpperCase '\43935' = '\5071'+toSimpleUpperCase '\43936' = '\5072'+toSimpleUpperCase '\43937' = '\5073'+toSimpleUpperCase '\43938' = '\5074'+toSimpleUpperCase '\43939' = '\5075'+toSimpleUpperCase '\43940' = '\5076'+toSimpleUpperCase '\43941' = '\5077'+toSimpleUpperCase '\43942' = '\5078'+toSimpleUpperCase '\43943' = '\5079'+toSimpleUpperCase '\43944' = '\5080'+toSimpleUpperCase '\43945' = '\5081'+toSimpleUpperCase '\43946' = '\5082'+toSimpleUpperCase '\43947' = '\5083'+toSimpleUpperCase '\43948' = '\5084'+toSimpleUpperCase '\43949' = '\5085'+toSimpleUpperCase '\43950' = '\5086'+toSimpleUpperCase '\43951' = '\5087'+toSimpleUpperCase '\43952' = '\5088'+toSimpleUpperCase '\43953' = '\5089'+toSimpleUpperCase '\43954' = '\5090'+toSimpleUpperCase '\43955' = '\5091'+toSimpleUpperCase '\43956' = '\5092'+toSimpleUpperCase '\43957' = '\5093'+toSimpleUpperCase '\43958' = '\5094'+toSimpleUpperCase '\43959' = '\5095'+toSimpleUpperCase '\43960' = '\5096'+toSimpleUpperCase '\43961' = '\5097'+toSimpleUpperCase '\43962' = '\5098'+toSimpleUpperCase '\43963' = '\5099'+toSimpleUpperCase '\43964' = '\5100'+toSimpleUpperCase '\43965' = '\5101'+toSimpleUpperCase '\43966' = '\5102'+toSimpleUpperCase '\43967' = '\5103'+toSimpleUpperCase '\65345' = '\65313'+toSimpleUpperCase '\65346' = '\65314'+toSimpleUpperCase '\65347' = '\65315'+toSimpleUpperCase '\65348' = '\65316'+toSimpleUpperCase '\65349' = '\65317'+toSimpleUpperCase '\65350' = '\65318'+toSimpleUpperCase '\65351' = '\65319'+toSimpleUpperCase '\65352' = '\65320'+toSimpleUpperCase '\65353' = '\65321'+toSimpleUpperCase '\65354' = '\65322'+toSimpleUpperCase '\65355' = '\65323'+toSimpleUpperCase '\65356' = '\65324'+toSimpleUpperCase '\65357' = '\65325'+toSimpleUpperCase '\65358' = '\65326'+toSimpleUpperCase '\65359' = '\65327'+toSimpleUpperCase '\65360' = '\65328'+toSimpleUpperCase '\65361' = '\65329'+toSimpleUpperCase '\65362' = '\65330'+toSimpleUpperCase '\65363' = '\65331'+toSimpleUpperCase '\65364' = '\65332'+toSimpleUpperCase '\65365' = '\65333'+toSimpleUpperCase '\65366' = '\65334'+toSimpleUpperCase '\65367' = '\65335'+toSimpleUpperCase '\65368' = '\65336'+toSimpleUpperCase '\65369' = '\65337'+toSimpleUpperCase '\65370' = '\65338'+toSimpleUpperCase '\66600' = '\66560'+toSimpleUpperCase '\66601' = '\66561'+toSimpleUpperCase '\66602' = '\66562'+toSimpleUpperCase '\66603' = '\66563'+toSimpleUpperCase '\66604' = '\66564'+toSimpleUpperCase '\66605' = '\66565'+toSimpleUpperCase '\66606' = '\66566'+toSimpleUpperCase '\66607' = '\66567'+toSimpleUpperCase '\66608' = '\66568'+toSimpleUpperCase '\66609' = '\66569'+toSimpleUpperCase '\66610' = '\66570'+toSimpleUpperCase '\66611' = '\66571'+toSimpleUpperCase '\66612' = '\66572'+toSimpleUpperCase '\66613' = '\66573'+toSimpleUpperCase '\66614' = '\66574'+toSimpleUpperCase '\66615' = '\66575'+toSimpleUpperCase '\66616' = '\66576'+toSimpleUpperCase '\66617' = '\66577'+toSimpleUpperCase '\66618' = '\66578'+toSimpleUpperCase '\66619' = '\66579'+toSimpleUpperCase '\66620' = '\66580'+toSimpleUpperCase '\66621' = '\66581'+toSimpleUpperCase '\66622' = '\66582'+toSimpleUpperCase '\66623' = '\66583'+toSimpleUpperCase '\66624' = '\66584'+toSimpleUpperCase '\66625' = '\66585'+toSimpleUpperCase '\66626' = '\66586'+toSimpleUpperCase '\66627' = '\66587'+toSimpleUpperCase '\66628' = '\66588'+toSimpleUpperCase '\66629' = '\66589'+toSimpleUpperCase '\66630' = '\66590'+toSimpleUpperCase '\66631' = '\66591'+toSimpleUpperCase '\66632' = '\66592'+toSimpleUpperCase '\66633' = '\66593'+toSimpleUpperCase '\66634' = '\66594'+toSimpleUpperCase '\66635' = '\66595'+toSimpleUpperCase '\66636' = '\66596'+toSimpleUpperCase '\66637' = '\66597'+toSimpleUpperCase '\66638' = '\66598'+toSimpleUpperCase '\66639' = '\66599'+toSimpleUpperCase '\66776' = '\66736'+toSimpleUpperCase '\66777' = '\66737'+toSimpleUpperCase '\66778' = '\66738'+toSimpleUpperCase '\66779' = '\66739'+toSimpleUpperCase '\66780' = '\66740'+toSimpleUpperCase '\66781' = '\66741'+toSimpleUpperCase '\66782' = '\66742'+toSimpleUpperCase '\66783' = '\66743'+toSimpleUpperCase '\66784' = '\66744'+toSimpleUpperCase '\66785' = '\66745'+toSimpleUpperCase '\66786' = '\66746'+toSimpleUpperCase '\66787' = '\66747'+toSimpleUpperCase '\66788' = '\66748'+toSimpleUpperCase '\66789' = '\66749'+toSimpleUpperCase '\66790' = '\66750'+toSimpleUpperCase '\66791' = '\66751'+toSimpleUpperCase '\66792' = '\66752'+toSimpleUpperCase '\66793' = '\66753'+toSimpleUpperCase '\66794' = '\66754'+toSimpleUpperCase '\66795' = '\66755'+toSimpleUpperCase '\66796' = '\66756'+toSimpleUpperCase '\66797' = '\66757'+toSimpleUpperCase '\66798' = '\66758'+toSimpleUpperCase '\66799' = '\66759'+toSimpleUpperCase '\66800' = '\66760'+toSimpleUpperCase '\66801' = '\66761'+toSimpleUpperCase '\66802' = '\66762'+toSimpleUpperCase '\66803' = '\66763'+toSimpleUpperCase '\66804' = '\66764'+toSimpleUpperCase '\66805' = '\66765'+toSimpleUpperCase '\66806' = '\66766'+toSimpleUpperCase '\66807' = '\66767'+toSimpleUpperCase '\66808' = '\66768'+toSimpleUpperCase '\66809' = '\66769'+toSimpleUpperCase '\66810' = '\66770'+toSimpleUpperCase '\66811' = '\66771'+toSimpleUpperCase '\66967' = '\66928'+toSimpleUpperCase '\66968' = '\66929'+toSimpleUpperCase '\66969' = '\66930'+toSimpleUpperCase '\66970' = '\66931'+toSimpleUpperCase '\66971' = '\66932'+toSimpleUpperCase '\66972' = '\66933'+toSimpleUpperCase '\66973' = '\66934'+toSimpleUpperCase '\66974' = '\66935'+toSimpleUpperCase '\66975' = '\66936'+toSimpleUpperCase '\66976' = '\66937'+toSimpleUpperCase '\66977' = '\66938'+toSimpleUpperCase '\66979' = '\66940'+toSimpleUpperCase '\66980' = '\66941'+toSimpleUpperCase '\66981' = '\66942'+toSimpleUpperCase '\66982' = '\66943'+toSimpleUpperCase '\66983' = '\66944'+toSimpleUpperCase '\66984' = '\66945'+toSimpleUpperCase '\66985' = '\66946'+toSimpleUpperCase '\66986' = '\66947'+toSimpleUpperCase '\66987' = '\66948'+toSimpleUpperCase '\66988' = '\66949'+toSimpleUpperCase '\66989' = '\66950'+toSimpleUpperCase '\66990' = '\66951'+toSimpleUpperCase '\66991' = '\66952'+toSimpleUpperCase '\66992' = '\66953'+toSimpleUpperCase '\66993' = '\66954'+toSimpleUpperCase '\66995' = '\66956'+toSimpleUpperCase '\66996' = '\66957'+toSimpleUpperCase '\66997' = '\66958'+toSimpleUpperCase '\66998' = '\66959'+toSimpleUpperCase '\66999' = '\66960'+toSimpleUpperCase '\67000' = '\66961'+toSimpleUpperCase '\67001' = '\66962'+toSimpleUpperCase '\67003' = '\66964'+toSimpleUpperCase '\67004' = '\66965'+toSimpleUpperCase '\68800' = '\68736'+toSimpleUpperCase '\68801' = '\68737'+toSimpleUpperCase '\68802' = '\68738'+toSimpleUpperCase '\68803' = '\68739'+toSimpleUpperCase '\68804' = '\68740'+toSimpleUpperCase '\68805' = '\68741'+toSimpleUpperCase '\68806' = '\68742'+toSimpleUpperCase '\68807' = '\68743'+toSimpleUpperCase '\68808' = '\68744'+toSimpleUpperCase '\68809' = '\68745'+toSimpleUpperCase '\68810' = '\68746'+toSimpleUpperCase '\68811' = '\68747'+toSimpleUpperCase '\68812' = '\68748'+toSimpleUpperCase '\68813' = '\68749'+toSimpleUpperCase '\68814' = '\68750'+toSimpleUpperCase '\68815' = '\68751'+toSimpleUpperCase '\68816' = '\68752'+toSimpleUpperCase '\68817' = '\68753'+toSimpleUpperCase '\68818' = '\68754'+toSimpleUpperCase '\68819' = '\68755'+toSimpleUpperCase '\68820' = '\68756'+toSimpleUpperCase '\68821' = '\68757'+toSimpleUpperCase '\68822' = '\68758'+toSimpleUpperCase '\68823' = '\68759'+toSimpleUpperCase '\68824' = '\68760'+toSimpleUpperCase '\68825' = '\68761'+toSimpleUpperCase '\68826' = '\68762'+toSimpleUpperCase '\68827' = '\68763'+toSimpleUpperCase '\68828' = '\68764'+toSimpleUpperCase '\68829' = '\68765'+toSimpleUpperCase '\68830' = '\68766'+toSimpleUpperCase '\68831' = '\68767'+toSimpleUpperCase '\68832' = '\68768'+toSimpleUpperCase '\68833' = '\68769'+toSimpleUpperCase '\68834' = '\68770'+toSimpleUpperCase '\68835' = '\68771'+toSimpleUpperCase '\68836' = '\68772'+toSimpleUpperCase '\68837' = '\68773'+toSimpleUpperCase '\68838' = '\68774'+toSimpleUpperCase '\68839' = '\68775'+toSimpleUpperCase '\68840' = '\68776'+toSimpleUpperCase '\68841' = '\68777'+toSimpleUpperCase '\68842' = '\68778'+toSimpleUpperCase '\68843' = '\68779'+toSimpleUpperCase '\68844' = '\68780'+toSimpleUpperCase '\68845' = '\68781'+toSimpleUpperCase '\68846' = '\68782'+toSimpleUpperCase '\68847' = '\68783'+toSimpleUpperCase '\68848' = '\68784'+toSimpleUpperCase '\68849' = '\68785'+toSimpleUpperCase '\68850' = '\68786'+toSimpleUpperCase '\71872' = '\71840'+toSimpleUpperCase '\71873' = '\71841'+toSimpleUpperCase '\71874' = '\71842'+toSimpleUpperCase '\71875' = '\71843'+toSimpleUpperCase '\71876' = '\71844'+toSimpleUpperCase '\71877' = '\71845'+toSimpleUpperCase '\71878' = '\71846'+toSimpleUpperCase '\71879' = '\71847'+toSimpleUpperCase '\71880' = '\71848'+toSimpleUpperCase '\71881' = '\71849'+toSimpleUpperCase '\71882' = '\71850'+toSimpleUpperCase '\71883' = '\71851'+toSimpleUpperCase '\71884' = '\71852'+toSimpleUpperCase '\71885' = '\71853'+toSimpleUpperCase '\71886' = '\71854'+toSimpleUpperCase '\71887' = '\71855'+toSimpleUpperCase '\71888' = '\71856'+toSimpleUpperCase '\71889' = '\71857'+toSimpleUpperCase '\71890' = '\71858'+toSimpleUpperCase '\71891' = '\71859'+toSimpleUpperCase '\71892' = '\71860'+toSimpleUpperCase '\71893' = '\71861'+toSimpleUpperCase '\71894' = '\71862'+toSimpleUpperCase '\71895' = '\71863'+toSimpleUpperCase '\71896' = '\71864'+toSimpleUpperCase '\71897' = '\71865'+toSimpleUpperCase '\71898' = '\71866'+toSimpleUpperCase '\71899' = '\71867'+toSimpleUpperCase '\71900' = '\71868'+toSimpleUpperCase '\71901' = '\71869'+toSimpleUpperCase '\71902' = '\71870'+toSimpleUpperCase '\71903' = '\71871'+toSimpleUpperCase '\93792' = '\93760'+toSimpleUpperCase '\93793' = '\93761'+toSimpleUpperCase '\93794' = '\93762'+toSimpleUpperCase '\93795' = '\93763'+toSimpleUpperCase '\93796' = '\93764'+toSimpleUpperCase '\93797' = '\93765'+toSimpleUpperCase '\93798' = '\93766'+toSimpleUpperCase '\93799' = '\93767'+toSimpleUpperCase '\93800' = '\93768'+toSimpleUpperCase '\93801' = '\93769'+toSimpleUpperCase '\93802' = '\93770'+toSimpleUpperCase '\93803' = '\93771'+toSimpleUpperCase '\93804' = '\93772'+toSimpleUpperCase '\93805' = '\93773'+toSimpleUpperCase '\93806' = '\93774'+toSimpleUpperCase '\93807' = '\93775'+toSimpleUpperCase '\93808' = '\93776'+toSimpleUpperCase '\93809' = '\93777'+toSimpleUpperCase '\93810' = '\93778'+toSimpleUpperCase '\93811' = '\93779'+toSimpleUpperCase '\93812' = '\93780'+toSimpleUpperCase '\93813' = '\93781'+toSimpleUpperCase '\93814' = '\93782'+toSimpleUpperCase '\93815' = '\93783'+toSimpleUpperCase '\93816' = '\93784'+toSimpleUpperCase '\93817' = '\93785'+toSimpleUpperCase '\93818' = '\93786'+toSimpleUpperCase '\93819' = '\93787'+toSimpleUpperCase '\93820' = '\93788'+toSimpleUpperCase '\93821' = '\93789'+toSimpleUpperCase '\93822' = '\93790'+toSimpleUpperCase '\93823' = '\93791'+toSimpleUpperCase '\125218' = '\125184'+toSimpleUpperCase '\125219' = '\125185'+toSimpleUpperCase '\125220' = '\125186'+toSimpleUpperCase '\125221' = '\125187'+toSimpleUpperCase '\125222' = '\125188'+toSimpleUpperCase '\125223' = '\125189'+toSimpleUpperCase '\125224' = '\125190'+toSimpleUpperCase '\125225' = '\125191'+toSimpleUpperCase '\125226' = '\125192'+toSimpleUpperCase '\125227' = '\125193'+toSimpleUpperCase '\125228' = '\125194'+toSimpleUpperCase '\125229' = '\125195'+toSimpleUpperCase '\125230' = '\125196'+toSimpleUpperCase '\125231' = '\125197'+toSimpleUpperCase '\125232' = '\125198'+toSimpleUpperCase '\125233' = '\125199'+toSimpleUpperCase '\125234' = '\125200'+toSimpleUpperCase '\125235' = '\125201'+toSimpleUpperCase '\125236' = '\125202'+toSimpleUpperCase '\125237' = '\125203'+toSimpleUpperCase '\125238' = '\125204'+toSimpleUpperCase '\125239' = '\125205'+toSimpleUpperCase '\125240' = '\125206'+toSimpleUpperCase '\125241' = '\125207'+toSimpleUpperCase '\125242' = '\125208'+toSimpleUpperCase '\125243' = '\125209'+toSimpleUpperCase '\125244' = '\125210'+toSimpleUpperCase '\125245' = '\125211'+toSimpleUpperCase '\125246' = '\125212'+toSimpleUpperCase '\125247' = '\125213'+toSimpleUpperCase '\125248' = '\125214'+toSimpleUpperCase '\125249' = '\125215'+toSimpleUpperCase '\125250' = '\125216'+toSimpleUpperCase '\125251' = '\125217'+toSimpleUpperCase c = c
+ test/Main.hs view
@@ -0,0 +1,1 @@+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
+ test/Unicode/CharSpec.hs view
@@ -0,0 +1,88 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE CPP #-}++module Unicode.CharSpec+ ( spec+ ) where++import qualified Data.Char as Char+import qualified Unicode.Char as UChar+-- [TODO] Remove the following qualified imports once isLetter and isSpace+-- are removed from Unicode.Char.General+import qualified Unicode.Char.General.Compat as UCharCompat+-- [TODO] Remove the following qualified imports once isUpper and isLower+-- are removed from Unicode.Char.Case+import qualified Unicode.Char.Case.Compat as UCharCompat+import Data.Foldable (traverse_)+import Test.Hspec++{- [NOTE]+These tests may fail if the compiler’s Unicode version+does not match the version of this package.+++-------------+----------------+-----------------++| GHC version | @base@ version | Unicode version |++=============+================+=================++| 8.8 | 4.13 | 12.0 |+| 8.10.[1-4] | 4.14.{0,1} | 12.0 |+| 8.10.5+ | 4.14.2+ | 13.0 |+| 9.0.1 | 4.15.0 | 12.1 |+| 9.2.1 | 4.16.0 | 14.0 |++-------------+----------------+-----------------++-}++spec :: Spec+spec = do+#ifdef COMPATIBLE_GHC_UNICODE+ let describe' = describe+#else+ let describe' t = before_ (pendingWith "Incompatible GHC Unicode version")+ . describe t+#endif+ describe' "Unicode general categories" do+ it "generalCategory" do+ -- Note: we cannot compare the categories directly, so use 'show'.+ (show . UChar.generalCategory) `shouldBeEqualTo` (show . Char.generalCategory)+ describe' "Character classification" do+ it "isAlpha" do+ UChar.isAlpha `shouldBeEqualTo` Char.isAlpha+ it "isAlphaNum" do+ UChar.isAlphaNum `shouldBeEqualTo` Char.isAlphaNum+ it "isControl" do+ UChar.isControl `shouldBeEqualTo` Char.isControl+ it "isLetter" do+ UCharCompat.isLetter `shouldBeEqualTo` Char.isLetter+ it "isMark" do+ UChar.isMark `shouldBeEqualTo` Char.isMark+ it "isNumber" do+ UChar.isNumber `shouldBeEqualTo` Char.isNumber+ it "isPrint" do+ UChar.isPrint `shouldBeEqualTo` Char.isPrint+ it "isPunctuation" do+ UChar.isPunctuation `shouldBeEqualTo` Char.isPunctuation+ it "isSeparator" do+ UChar.isSeparator `shouldBeEqualTo` Char.isSeparator+ it "isSpace" do+ UCharCompat.isSpace `shouldBeEqualTo` Char.isSpace+ it "isSymbol" do+ UChar.isSymbol `shouldBeEqualTo` Char.isSymbol+ describe' "Case" do+ it "isLower" do+ UCharCompat.isLower `shouldBeEqualTo` Char.isLower+ it "isUpper" do+ UCharCompat.isUpper `shouldBeEqualTo` Char.isUpper+ it "toLower" do+ UChar.toLower `shouldBeEqualTo` Char.toLower+ it "toUpper" do+ UChar.toUpper `shouldBeEqualTo` Char.toUpper+ it "toTitle" do+ UChar.toTitle `shouldBeEqualTo` Char.toTitle+ where+ shouldBeEqualTo+ :: forall a b. (Bounded a, Enum a, Show a, Eq b, Show b)+ => (a -> b)+ -> (a -> b)+ -> IO ()+ shouldBeEqualTo f g =+ let same x = f x == g x+ in traverse_ (`shouldSatisfy` same) [minBound..maxBound]
ucd.sh view
@@ -53,8 +53,9 @@ done } -# Compile and run ucd2haskell+# Generate the Haskell files. run_generator() {+ # Compile and run ucd2haskell cabal run --flag ucd2haskell ucd2haskell -- \ --input ./ucd/ \ --output ./lib/ \@@ -68,6 +69,9 @@ --core-prop XID_Continue \ --core-prop Pattern_Syntax \ --core-prop Pattern_White_Space+ # Update unicodeVersion in Unicode.Char+ VERSION_AS_LIST=$(echo "$VERSION" | sed "s/\./, /g")+ sed -ri "s/^(unicodeVersion = makeVersion \[)[^]]*\]/\1$VERSION_AS_LIST\]/" "lib/Unicode/Char.hs" } # Print help text
unicode-data.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.2 name: unicode-data-version: 0.2.0+version: 0.3.0 synopsis: Access Unicode character database description: @unicode-data@ provides Haskell APIs to efficiently access the Unicode@@ -20,8 +20,7 @@ category: Data,Text,Unicode stability: Experimental build-type: Simple-tested-with: GHC==7.10.3- , GHC==8.0.2+tested-with: GHC==8.0.2 , GHC==8.2.2 , GHC==8.4.4 , GHC==8.6.5@@ -66,6 +65,7 @@ -fwarn-incomplete-record-updates -fwarn-incomplete-uni-patterns -fwarn-tabs+ default-language: Haskell2010 library import: default-extensions, compile-options@@ -76,8 +76,11 @@ -- https://www.unicode.org/reports/tr44/#Property_Index_Table Unicode.Char.Normalization Unicode.Char.General+ Unicode.Char.General.Compat Unicode.Char.Case+ Unicode.Char.Case.Compat Unicode.Char.Identifiers+ Unicode.Char.Numeric -- Internal files Unicode.Internal.Bits@@ -95,6 +98,11 @@ Unicode.Internal.Char.UnicodeData.Decompositions Unicode.Internal.Char.UnicodeData.DecompositionsK Unicode.Internal.Char.UnicodeData.DecompositionsK2+ Unicode.Internal.Char.UnicodeData.GeneralCategory+ Unicode.Internal.Char.UnicodeData.SimpleLowerCaseMapping+ Unicode.Internal.Char.UnicodeData.SimpleTitleCaseMapping+ Unicode.Internal.Char.UnicodeData.SimpleUpperCaseMapping+ hs-source-dirs: lib ghc-options: -O2 build-depends:@@ -110,10 +118,43 @@ if flag(ucd2haskell) buildable: True build-depends:- base >= 4 && < 5+ base >= 4.7 && < 5 , streamly >= 0.8 && < 0.9 , getopt-generics >= 0.13 && < 0.14 , containers >= 0.5 && < 0.7 , directory >= 1.3.6 && < 1.3.7 else buildable: False++test-suite test+ import: default-extensions, compile-options+ type: exitcode-stdio-1.0+ main-is: Main.hs+ hs-source-dirs:+ test+ other-modules:+ Unicode.CharSpec+ build-depends:+ base >= 4.7 && < 5+ , hspec >= 2.0 && < 3+ , unicode-data+ build-tool-depends:+ hspec-discover:hspec-discover >= 2.0 && < 3+ -- We need to match a GHC version with the same Unicode version.+ -- See: test/Unicode/CharSpec.hs for compatibility table.+ if impl(ghc >= 9.2.1)+ cpp-options: -DCOMPATIBLE_GHC_UNICODE+ default-language: Haskell2010++benchmark bench+ import: default-extensions, compile-options+ type: exitcode-stdio-1.0+ hs-source-dirs: bench+ main-is: Main.hs+ build-depends:+ base >= 4.7 && < 5,+ deepseq >= 1.1 && < 1.5,+ tasty-bench >= 0.2.5 && < 0.3,+ tasty >= 1.4.1,+ unicode-data+ ghc-options: -O2 -fdicts-strict -rtsopts