h*K$E      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij k l m n o p q r s t u v w x y z { | } ~                                                                                                                   0.3.0.2 (c) 2024 Pierre Le Marredev@wismill.eu experimental Safe-Inferred "%&(- unicode-data-parser*Numeric value of a code point, if relevantunicode-data-parserA Unicode code point rangeunicode-data-parser ;unicode-data-parser /unicode-data-parser .unicode-data-parser ,unicode-data-parser *unicode-data-parser #unicode-data-parser '\n'unicode-data-parser'Use the given parser to parse each lineunicode-data-parser+Parse a code point formatted as hexadecimalWarning:! raise an error on invalid input.parseCodePoint "0061"'a'unicode-data-parser7Parse a code point formatted as hexadecimal, or return  on an empty string.Warning:! raise an error on invalid input.parseCodePointM "0061"Just 'a'parseCodePointM ""Nothing See also: .unicode-data-parserParse  AAAA..BBBB range or single code pointunicode-data-parserParse  AAAA..BBBB rangeunicode-data-parserSee: 3https://www.unicode.org/reports/tr44/#Numeric_Valueunicode-data-parser!Parse boolean values @Y@ and @N@.unicode-data-parserThis should be used only for non-overlapping ranges and expect ranges to be well-formed, i.e.  < .)compare (SingleChar 'A') (SingleChar 'A')EQ)compare (SingleChar 'A') (SingleChar 'B')LT)compare (SingleChar 'B') (SingleChar 'A')GT,compare (SingleChar 'A') (CharRange 'A' 'B')LT,compare (SingleChar 'B') (CharRange 'A' 'B')GT,compare (SingleChar 'C') (CharRange 'A' 'B')GT,compare (SingleChar 'A') (CharRange 'A' 'A')EQ,compare (SingleChar 'A') (CharRange 'B' 'C')LT,compare (CharRange 'A' 'B') (SingleChar 'A')GT,compare (CharRange 'A' 'B') (SingleChar 'B')LT,compare (CharRange 'A' 'B') (SingleChar 'C')LT,compare (CharRange 'B' 'C') (SingleChar 'A')GT,compare (CharRange 'A' 'A') (SingleChar 'A')EQ/compare (CharRange 'A' 'B') (CharRange 'A' 'B')EQ/compare (CharRange 'A' 'B') (CharRange 'C' 'D')LT/compare (CharRange 'A' 'B') (CharRange 'B' 'C')LT/compare (CharRange 'A' 'C') (CharRange 'B' 'D')LT/compare (CharRange 'A' 'D') (CharRange 'B' 'C')LT/compare (CharRange 'C' 'D') (CharRange 'A' 'B')GT/compare (CharRange 'B' 'D') (CharRange 'A' 'B')GT/compare (CharRange 'B' 'C') (CharRange 'A' 'D')GT(c) 2024 Pierre Le Marredev@wismill.eu experimental Safe-Inferred "%&(- unicode-data-parser*Numeric value of a code point, if relevant unicode-data-parserAn entry from DerivedNumericValues.txt file7parse "0030 ; 0.0 ; ; 0 # Nd DIGIT ZERO"[Entry {range = SingleChar {start = '0'}, numericValue = Integer 0}]parse "0F33 ; -0.5 ; ; -1/2 # No TIBETAN DIGIT HALF ZERO"[Entry {range = SingleChar {start = '\3891'}, numericValue = Rational ((-1) % 2)}]parse "11FC0 ; 0.003125 ; ; 1/320 # No TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH"[Entry {range = SingleChar {start = '\73664'}, numericValue = Rational (1 % 320)}]parse "2159 ; 0.16666667 ; ; 1/6 # No VULGAR FRACTION ONE SIXTH"[Entry {range = SingleChar {start = '\8537'}, numericValue = Rational (1 % 6)}]unicode-data-parser A parser for DerivedNumericValues.txt    (c) 2024 Pierre Le Marredev@wismill.eu experimental Safe-Inferred "%&(-unicode-data-parserAn entry from DerivedName.txt fileunicode-data-parser A parser for DerivedName.txt fileparse "0020 ; SPACE")[SingleChar {char = ' ', name = "SPACE"}]/parse "3400..4DBF ; CJK UNIFIED IDEOGRAPH-*"[CharRange {start = '\13312', end = '\19903', prefix = "CJK UNIFIED IDEOGRAPH-"}]7parse "18B00..18CD5 ; KHITAN SMALL SCRIPT CHARACTER-*"[CharRange {start = '\101120', end = '\101589', prefix = "KHITAN SMALL SCRIPT CHARACTER-"}]  (c) 2024 Pierre Le Marredev@wismill.eu experimental Safe-Inferred "%&(- unicode-data-parser+Parse a code point formatted as hexadecimalWarning:! raise an error on invalid input.parseCodePoint "0061"'a'!unicode-data-parserParse a list of code points"unicode-data-parser'Parse space-separated list, similar to . !" !"(c) 2024 Pierre Le Marredev@wismill.eu experimental Safe-Inferred "%&(-Y#unicode-data-parserType of case folding$unicode-data-parserCommon case folding:, common mappings shared by both simple and full mappings.%unicode-data-parserFull case folding0, mappings that cause strings to grow in length.&unicode-data-parserSimple case folding5, mappings to single characters where different from %'unicode-data-parser Special case' for uppercase I and dotted uppercase I(unicode-data-parserAn entry from CaseFolding.txt file-unicode-data-parser A parser for CaseFolding.txt/parse "0041; C; 0061; # LATIN CAPITAL LETTER A"[Entry {char = 'A', caseFoldingType = CommonCaseFolding, caseFolding = "a"}]parse "0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE"[Entry {char = '\304', caseFoldingType = FullCaseFolding, caseFolding = "i\775"}]>parse "0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE"[Entry {char = '\304', caseFoldingType = SpecialCaseFolding, caseFolding = "i"}]unicode-data-parser File format:  code;  status;  mapping; # name -()*+,#$%&' -()*+,#$%&'(c) 2024 Pierre Le Marredev@wismill.eu experimental Safe-Inferred "%&(-T3unicode-data-parserAn entry from  Blocks.txt fileparse "0000..007F; Basic Latin"<[Entry {start = '\NUL', end = '\DEL', name = "Basic Latin"}]8parse "100000..10FFFF; Supplementary Private Use Area-B"[Entry {start = '\1048576', end = '\1114111', name = "Supplementary Private Use Area-B"}]8unicode-data-parser A parser for  Blocks.txt file834567834567(c) 2024 Pierre Le Marredev@wismill.eu experimental Safe-Inferred "%&(-`;unicode-data-parserType of name aliasparse "0000;NULL;control"[Entry {char = '\NUL', nameAliasType = Control, nameAlias = "NULL"}]parse "0000;NUL;abbreviation"[Entry {char = '\NUL', nameAliasType = Abbreviation, nameAlias = "NUL"}]&parse "0080;PADDING CHARACTER;figment"[Entry {char = '\128', nameAliasType = Figment, nameAlias = "PADDING CHARACTER"}]0parse "01A2;LATIN CAPITAL LETTER GHA;correction"[Entry {char = '\418', nameAliasType = Correction, nameAlias = "LATIN CAPITAL LETTER GHA"}]Aunicode-data-parserAn entry from NameAliases.txt fileFunicode-data-parser A parser for NameAliases.txt file FABCDE;=<>?@ FABCDE;=<>?@(c) 2024 Pierre Le Marredev@wismill.eu experimental Safe-Inferred "%&(-$iOunicode-data-parser 9https://www.unicode.org/reports/tr44/#Missing_ConventionsMissing conventionTunicode-data-parser 9https://www.unicode.org/reports/tr44/#Missing_ConventionsMissing conventionXunicode-data-parser Default ageYunicode-data-parserDefault general categoryZunicode-data-parser Default block[unicode-data-parserDefault script\unicode-data-parser Parser for @missing" conventions without property name>parseMissingConventionM "# @missing: 0000..10FFFF; Unassigned"Just (MissingConvention {range = CharRange {start = '\NUL', end = '\1114111'}, value = "Unassigned"})For further details, see: 9https://www.unicode.org/reports/tr44/#Missing_Conventions]unicode-data-parser Parser for @missing conventions with property nameparseMissingPropertyConventionM "# @missing: 0000..10FFFF; Decomposition_Mapping; "Just (MissingPropertyConvention {range = CharRange {start = '\NUL', end = '\1114111'}, property = "Decomposition_Mapping", value = ""})For further details, see: 9https://www.unicode.org/reports/tr44/#Missing_ConventionsXZY[TUVWOPQSR\]XZY[TUVWOPQSR\](c) 2024 Pierre Le Marredev@wismill.eu experimental Safe-Inferred "%&(-'bunicode-data-parser8An entry from a properties file with multiple propertiesparse "0009..000D ; White_Space # Cc [5] .."[Entry {range = CharRange {start = '\t', end = '\r'}, property = "White_Space", value = Nothing}]parse "061C ; Bidi_Control # Cf ARABIC LETTER MARK"[Entry {range = SingleChar {start = '\1564'}, property = "Bidi_Control", value = Nothing}]parse "037A ; FC_NFKC; 0020 03B9 # Lm GREEK YPOGEGRAMMENI"[Entry {range = SingleChar {start = '\890'}, property = "FC_NFKC", value = Just "0020 03B9"}]gunicode-data-parser6A parser for properties files with multiple propertiesgbcdfegbcdfe (c) 2024 Pierre Le Marredev@wismill.eu experimental Safe-Inferred "%&(-+junicode-data-parser>An entry from a properties file with multiple values per entrynunicode-data-parser8An entry from a properties file with one value per entryrunicode-data-parser6A parser for properties files with one value per entryparse "102E0 ; Arab Copt # Mn COPTIC EPACT THOUSANDS MARK"[Entry {range = SingleChar {start = '\66272'}, value = "Arab Copt"}];parse "1CF7 ; Beng # Mc VEDIC SIGN ATIKRAMA">[Entry {range = SingleChar {start = '\7415'}, value = "Beng"}]parse "1CDE..1CDF ; Deva # Mn [2] VEDIC TONE TWO DOTS BELOW..VEDIC TONE THREE DOTS BELOW"[Entry {range = CharRange {start = '\7390', end = '\7391'}, value = "Deva"}]parse "1CD0 ; Beng Deva Gran Knda # Mn VEDIC TONE KARSHANA"[Entry {range = SingleChar {start = '\7376'}, value = "Beng Deva Gran Knda"}]sunicode-data-parserparse "blk; Aegean_Numbers ; Aegean_Numbers"[Entry {property = "blk", value = PropertyValue {shortName = "Aegean_Numbers", longName = "Aegean_Numbers", numericValue = Nothing, aliases = []}}]unicode-data-parser An entry in UnicodeData.txt.unicode-data-parser,Core characteristics of a Unicode code pointunicode-data-parserIn case of a range, the range@s name. It is better to use the names from DerivedName.txt.unicode-data-parserValue in the range 0..254unicode-data-parser%Unicode decomposition of a code pointunicode-data-parserSee: https://www.unicode.org/reports/tr44/#Character_Decomposition_Mappingsunicode-data-parserSee: 6https://www.unicode.org/reports/tr44/#General_Categoryunicode-data-parserLetter, Uppercaseunicode-data-parserLetter, Lowercaseunicode-data-parserLetter, Titlecaseunicode-data-parserLetter, Modifierunicode-data-parser Letter, Otherunicode-data-parserMark, Non-Spacingunicode-data-parserMark, Spacing Combiningunicode-data-parserMark, Enclosingunicode-data-parserNumber, Decimalunicode-data-parserNumber, Letterunicode-data-parser Number, Otherunicode-data-parserPunctuation, Connectorunicode-data-parserPunctuation, Dashunicode-data-parserPunctuation, Openunicode-data-parserPunctuation, Closeunicode-data-parserPunctuation, Initial quoteunicode-data-parserPunctuation, Final quoteunicode-data-parserPunctuation, Otherunicode-data-parser Symbol, Mathunicode-data-parserSymbol, Currencyunicode-data-parserSymbol, Modifierunicode-data-parser Symbol, Otherunicode-data-parserSeparator, Spaceunicode-data-parserSeparator, Lineunicode-data-parserSeparator, Paragraphunicode-data-parserOther, Controlunicode-data-parser Other, Formatunicode-data-parserOther, Surrogateunicode-data-parserOther, Private Useunicode-data-parserOther, Not Assignedunicode-data-parser Parser for 5https://www.unicode.org/reports/tr44/#UnicodeData.txtUnicodeData.txt file:{ traverse_ print . parse $7 "0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;\n\ \00A8;DIAERESIS;Sk;0;ON; 0020 0308;;;;N;SPACING DIAERESIS;;;;\n\7 \17000;;Lo;0;L;;;;;N;;;;;\n\6 \187F7;;Lo;0;L;;;;;N;;;;;\n":}Entry {range = SingleChar {start = 'A'}, details = CharDetails {name = "LATIN CAPITAL LETTER A", generalCategory = Lu, combiningClass = 0, bidiClass = "L", bidiMirrored = False, decomposition = Self, numericValue = NotNumeric, simpleUpperCaseMapping = Nothing, simpleLowerCaseMapping = Just 'a', simpleTitleCaseMapping = Nothing}}Entry {range = SingleChar {start = '\168'}, details = CharDetails {name = "DIAERESIS", generalCategory = Sk, combiningClass = 0, bidiClass = "ON", bidiMirrored = False, decomposition = Decomposition {decompositionType = Compat, decompositionMapping = " \776"}, numericValue = NotNumeric, simpleUpperCaseMapping = Nothing, simpleLowerCaseMapping = Nothing, simpleTitleCaseMapping = Nothing}}Entry {range = CharRange {start = '\94208', end = '\100343'}, details = CharDetails {name = "Tangut Ideograph", generalCategory = Lo, combiningClass = 0, bidiClass = "L", bidiMirrored = False, decomposition = Self, numericValue = NotNumeric, simpleUpperCaseMapping = Nothing, simpleLowerCaseMapping = Nothing, simpleTitleCaseMapping = Nothing}}unicode-data-parserCombine with previous line See: *https://www.unicode.org/reports/tr44/#Nameunicode-data-parserParse a single entry of UnicodeData.txtunicode-data-parserSee: 8https://www.unicode.org/reports/tr44/#Decomposition_Type !"#$%&'()*+,-./0123456789+:;<=>?@ABBCDEFFGHIJKLMNOPQRST U U V W    T  X Y Z   [ [ \ ] ^ _   S T  ` a   b c d d e e f g h i   + j    k l m n    o p p q r s t u v w x y z { | { } ~                                                                #     2unicode-data-parser-0.3.0.2-Gug1pygI1gY4PAznon9qr5'Unicode.CharacterDatabase.Parser.Common?Unicode.CharacterDatabase.Parser.Extracted.DerivedNumericValues6Unicode.CharacterDatabase.Parser.Extracted.DerivedName,Unicode.CharacterDatabase.Parser.CaseFolding'Unicode.CharacterDatabase.Parser.Blocks,Unicode.CharacterDatabase.Parser.NameAliases4Unicode.CharacterDatabase.Parser.Properties.Defaults4Unicode.CharacterDatabase.Parser.Properties.Multiple2Unicode.CharacterDatabase.Parser.Properties.Single5Unicode.CharacterDatabase.Parser.PropertyValueAliases.Unicode.CharacterDatabase.Parser.SpecialCasing,Unicode.CharacterDatabase.Parser.UnicodeDataunicode-data-parser)Unicode.CharacterDatabase.Parser.Internal NumericValue NotNumericIntegerRationalCodePointRange SingleChar CharRange$sel:start:SingleChar$sel:end:SingleCharEntry$sel:range:Entry$sel:numericValue:Entryparse $fEqEntry $fShowEntry$fEqNumericValue$fShowNumericValue$sel:char:SingleChar$sel:name:SingleChar$sel:prefix:SingleCharparseCodePointparseCodePointList parseListCaseFoldingTypeCommonCaseFoldingFullCaseFoldingSimpleCaseFoldingSpecialCaseFolding$sel:char:Entry$sel:caseFoldingType:Entry$sel:caseFolding:Entry$fEqCaseFoldingType$fOrdCaseFoldingType$fShowCaseFoldingType$sel:start:Entry$sel:end:Entry$sel:name:Entry AliasType CorrectionControl AlternateFigment Abbreviation$sel:nameAliasType:Entry$sel:nameAlias:Entry$fEnumAliasType$fBoundedAliasType $fEqAliasType$fOrdAliasType$fReadAliasType$fShowAliasTypeMissingPropertyConvention$$sel:range:MissingPropertyConvention'$sel:property:MissingPropertyConvention$$sel:value:MissingPropertyConventionMissingConvention$sel:range:MissingConvention$sel:value:MissingConvention defaultAgedefaultGeneralCategory defaultBlock defaultScriptparseMissingConventionMparseMissingPropertyConventionM$fEqMissingPropertyConvention$fShowMissingPropertyConvention$fEqMissingConvention$fShowMissingConvention$sel:property:Entry$sel:value:EntryEntryMultipleValues$sel:range:EntryMultipleValues$sel:values:EntryMultipleValuesparseMultipleValues$fEqEntryMultipleValues$fShowEntryMultipleValues PropertyValue$sel:shortName:PropertyValue$sel:longName:PropertyValue$sel:numericValue:PropertyValue$sel:aliases:PropertyValue$fEqPropertyValueAlias$fShowPropertyValueAlias$fEqPropertyValue$fShowPropertyValueSpecialCasingCondition SpecialCasing$sel:lower:SpecialCasing$sel:title:SpecialCasing$sel:upper:SpecialCasing$sel:conditions:SpecialCasing$sel:specialCasing:Entry$fEqSpecialCasing$fShowSpecialCasing$fEqSpecialCasingCondition$fShowSpecialCasingCondition$sel:details:Entry CharDetails$sel:name:CharDetails $sel:generalCategory:CharDetails$sel:combiningClass:CharDetails$sel:bidiClass:CharDetails$sel:bidiMirrored:CharDetails$sel:decomposition:CharDetails$sel:numericValue:CharDetails'$sel:simpleUpperCaseMapping:CharDetails'$sel:simpleLowerCaseMapping:CharDetails'$sel:simpleTitleCaseMapping:CharDetails DecompositionSelf$sel:decompositionType:Self$sel:decompositionMapping:SelfDecompositionType CanonicalCompatFontNoBreakInitialMedialFinalIsolatedCircleSuperSubVerticalWideNarrowSmallSquareFractionGeneralCategoryLuLlLtLmLoMnMcMeNdNlNoPcPdPsPePiPfPoSmScSkSoZsZlZpCcCfCsCoCnDefaultGeneralCategory$fEqCharDetails$fShowCharDetails$fShowDecomposition$fEqDecomposition$fShowDecompositionType$fEqDecompositionType$fBoundedGeneralCategory$fEnumGeneralCategory$fEqGeneralCategory$fShowGeneralCategory$fReadGeneralCategory SemiColonSlashPeriodCommaAsteriskHashTagNewLine withParserparseCodePointMbase GHC.MaybeNothingparseCodePointRangeparseCodePointRange'parseNumericValueparseBoolValue$fOrdCodePointRange Data.OldListwordsparseSpecialCasingLine FirstCodecombineparseDetailedCharparseDecomposition