module

UnicodeNormalize

define UnicodeNormalize module here so that we don’t have to look it up


automatically generated by template/unicode_norm_gen.tmpl

Constants

ACCENTS = accents

CLASS_TABLE = class_table.freeze

COMPOSITION_TABLE = {\n"A\\u0300"=>"\\u00C0",\n"A\\u0301"=>"\\u00C1",\n"A\\u0302"=>"\\u00C2",\n"A\\u0303"=>"\\u00C3",\n"A\\u0308"=>"\\u00C4",\n"A\\u030A"=>"\\u00C5",\n"C\\u0327"=>"\\u00C7",\n"E\\u0300"=>"\\u00C8",\n"E\\u0301"=>"\\u00C9",\n"E\\u0302"=>"\\u00CA",\n"E\\u0308"=>"\\u00CB",\n"I\\u0300"=>"\\u00CC",\n"I\\u0301"=>"\\u00CD",\n"I\\u0302"=>"\\u00CE",\n"I\\u0308"=>"\\u00CF",\n"N\\u0303"=>"\\u00D1",\n"O\\u0300"=>"\\u00D2",\n"O\\u0301"=>"\\u00D3",\n"O\\u0302"=>"\\u00D4",\n"O\\u0303"=>"\\u00D5",\n"O\\u0308"=>"\\u00D6",\n"U\\u0300"=>"\\u00D9",\n"U\\u0301"=>"\\u00DA",\n"U\\u0302"=>"\\u00DB",\n"U\\u0308"=>"\\u00DC",\n"Y\\u0301"=>"\\u00DD",\n"a\\u0300"=>"\\u00E0",\n"a\\u0301"=>"\\u00E1",\n"a\\u0302"=>"\\u00E2",\n"a\\u0303"=>"\\u00E3",\n"a\\u0308"=>"\\u00E4",\n"a\\u030A"=>"\\u00E5",\n"c\\u0327"=>"\\u00E7",\n"e\\u0300"=>"\\u00E8",\n"e\\u0301"=>"\\u00E9",\n"e\\u0302"=>"\\u00EA",\n"e\\u0308"=>"\\u00EB",\n"i\\u0300"=>"\\u00EC",\n"i\\u0301"=>"\\u00ED",\n"i\\u0302"=>"\\u00EE",\n"i\\u0308"=>"\\u00EF",\n"n\\u0303"=>"\\u00F1",\n"o\\u0300"=>"\\u00F2",\n"o\\u0301"=>"\\u00F3",\n"o\\u0302"=>"\\u00F4",\n"o\\u0303"=>"\\u00F5",\n"o\\u0308"=>"\\u00F6",\n"u\\u0300"=>"\\u00F9",\n"u\\u0301"=>"\\u00FA",\n"u\\u0302"=>"\\u00FB",\n"u\\u0308"=>"\\u00FC",\n"y\\u0301"=>"\\u00FD",\n"y\\u0308"=>"\\u00FF",\n"A\\u0304"=>"\\u0100",\n"a\\u0304"=>"\\u0101",\n"A\\u0306"=>"\\u0102",\n"a\\u0306"=>"\\u0103",\n"A\\u0328"=>"\\u0104",\n"a\\u0328"=>"\\u0105",\n"C\\u0301"=>"\\u0106",\n"c\\u0301"=>"\\u0107",\n"C\\u0302"=>"\\u0108",\n"c\\u0302"=>"\\u0109",\n"C\\u0307"=>"\\u010A",\n"c\\u0307"=>"\\u010B",\n"C\\u030C"=>"\\u010C",\n"c\\u030C"=>"\\u010D",\n"D\\u030C"=>"\\u010E",\n"d\\u030C"=>"\\u010F",\n"E\\u0304"=>"\\u0112",\n"e\\u0304"=>"\\u0113",\n"E\\u0306"=>"\\u0114",\n"e\\u0306"=>"\\u0115",\n"E\\u0307"=>"\\u0116",\n"e\\u0307"=>"\\u0117",\n"E\\u0328"=>"\\u0118",\n"e\\u0328"=>"\\u0119",\n"E\\u030C"=>"\\u011A",\n"e\\u030C"=>"\\u011B",\n"G\\u0302"=>"\\u011C",\n"g\\u0302"=>"\\u011D",\n"G\\u0306"=>"\\u011E",\n"g\\u0306"=>"\\u011F",\n"G\\u0307"=>"\\u0120",\n"g\\u0307"=>"\\u0121",\n"G\\u0327"=>"\\u0122",\n"g\\u0327"=>"\\u0123",\n"H\\u0302"=>"\\u0124",\n"h\\u0302"=>"\\u0125",\n"I\\u0303"=>"\\u0128",\n"i\\u0303"=>"\\u0129",\n"I\\u0304"=>"\\u012A",\n"i\\u0304"=>"\\u012B",\n"I\\u0306"=>"\\u012C",\n"i\\u0306"=>"\\u012D",\n"I\\u0328"=>"\\u012E",\n"i\\u0328"=>"\\u012F",\n"I\\u0307"=>"\\u0130",\n"J\\u0302"=>"\\u0134",\n"j\\u0302"=>"\\u0135",\n"K\\u0327"=>"\\u0136",\n"k\\u0327"=>"\\u0137",\n"L\\u0301"=>"\\u0139",\n"l\\u0301"=>"\\u013A",\n"L\\u0327"=>"\\u013B",\n"l\\u0327"=>"\\u013C",\n"L\\u030C"=>"\\u013D",\n"l\\u030C"=>"\\u013E",\n"N\\u0301"=>"\\u0143",\n"n\\u0301"=>"\\u0144",\n"N\\u0327"=>"\\u0145",\n"n\\u0327"=>"\\u0146",\n"N\\u030C"=>"\\u0147",\n"n\\u030C"=>"\\u0148",\n"O\\u0304"=>"\\u014C",\n"o\\u0304"=>"\\u014D",\n"O\\u0306"=>"\\u014E",\n"o\\u0306"=>"\\u014F",\n"O\\u030B"=>"\\u0150",\n"o\\u030B"=>"\\u0151",\n"R\\u0301"=>"\\u0154",\n"r\\u0301"=>"\\u0155",\n"R\\u0327"=>"\\u0156",\n"r\\u0327"=>"\\u0157",\n"R\\u030C"=>"\\u0158",\n"r\\u030C"=>"\\u0159",\n"S\\u0301"=>"\\u015A",\n"s\\u0301"=>"\\u015B",\n"S\\u0302"=>"\\u015C",\n"s\\u0302"=>"\\u015D",\n"S\\u0327"=>"\\u015E",\n"s\\u0327"=>"\\u015F",\n"S\\u030C"=>"\\u0160",\n"s\\u030C"=>"\\u0161",\n"T\\u0327"=>"\\u0162",\n"t\\u0327"=>"\\u0163",\n"T\\u030C"=>"\\u0164",\n"t\\u030C"=>"\\u0165",\n"U\\u0303"=>"\\u0168",\n"u\\u0303"=>"\\u0169",\n"U\\u0304"=>"\\u016A",\n"u\\u0304"=>"\\u016B",\n"U\\u0306"=>"\\u016C",\n"u\\u0306"=>"\\u016D",\n"U\\u030A"=>"\\u016E",\n"u\\u030A"=>"\\u016F",\n"U\\u030B"=>"\\u0170",\n"u\\u030B"=>"\\u0171",\n"U\\u0328"=>"\\u0172",\n"u\\u0328"=>"\\u0173",\n"W\\u0302"=>"\\u0174",\n"w\\u0302"=>"\\u0175",\n"Y\\u0302"=>"\\u0176",\n"y\\u0302"=>"\\u0177",\n"Y\\u0308"=>"\\u0178",\n"Z\\u0301"=>"\\u0179",\n"z\\u0301"=>"\\u017A",\n"Z\\u0307"=>"\\u017B",\n"z\\u0307"=>"\\u017C",\n"Z\\u030C"=>"\\u017D",\n"z\\u030C"=>"\\u017E",\n"O\\u031B"=>"\\u01A0",\n"o\\u031B"=>"\\u01A1",\n"U\\u031B"=>"\\u01AF",\n"u\\u031B"=>"\\u01B0",\n"A\\u030C"=>"\\u01CD",\n"a\\u030C"=>"\\u01CE",\n"I\\u030C"=>"\\u01CF",\n"i\\u030C"=>"\\u01D0",\n"O\\u030C"=>"\\u01D1",\n"o\\u030C"=>"\\u01D2",\n"U\\u030C"=>"\\u01D3",\n"u\\u030C"=>"\\u01D4",\n"\\u00DC\\u0304"=>"\\u01D5",\n"\\u00FC\\u0304"=>"\\u01D6",\n"\\u00DC\\u0301"=>"\\u01D7",\n"\\u00FC\\u0301"=>"\\u01D8",\n"\\u00DC\\u030C"=>"\\u01D9",\n"\\u00FC\\u030C"=>"\\u01DA",\n"\\u00DC\\u0300"=>"\\u01DB",\n"\\u00FC\\u0300"=>"\\u01DC",\n"\\u00C4\\u0304"=>"\\u01DE",\n"\\u00E4\\u0304"=>"\\u01DF",\n"\\u0226\\u0304"=>"\\u01E0",\n"\\u0227\\u0304"=>"\\u01E1",\n"\\u00C6\\u0304"=>"\\u01E2",\n"\\u00E6\\u0304"=>"\\u01E3",\n"G\\u030C"=>"\\u01E6",\n"g\\u030C"=>"\\u01E7",\n"K\\u030C"=>"\\u01E8",\n"k\\u030C"=>"\\u01E9",\n"O\\u0328"=>"\\u01EA",\n"o\\u0328"=>"\\u01EB",\n"\\u01EA\\u0304"=>"\\u01EC",\n"\\u01EB\\u0304"=>"\\u01ED",\n"\\u01B7\\u030C"=>"\\u01EE",\n"\\u0292\\u030C"=>"\\u01EF",\n"j\\u030C"=>"\\u01F0",\n"G\\u0301"=>"\\u01F4",\n"g\\u0301"=>"\\u01F5",\n"N\\u0300"=>"\\u01F8",\n"n\\u0300"=>"\\u01F9",\n"\\u00C5\\u0301"=>"\\u01FA",\n"\\u00E5\\u0301"=>"\\u01FB",\n"\\u00C6\\u0301"=>"\\u01FC",\n"\\u00E6\\u0301"=>"\\u01FD",\n"\\u00D8\\u0301"=>"\\u01FE",\n"\\u00F8\\u0301"=>"\\u01FF",\n"A\\u030F"=>"\\u0200",\n"a\\u030F"=>"\\u0201",\n"A\\u0311"=>"\\u0202",\n"a\\u0311"=>"\\u0203",\n"E\\u030F"=>"\\u0204",\n"e\\u030F"=>"\\u0205",\n"E\\u0311"=>"\\u0206",\n"e\\u0311"=>"\\u0207",\n"I\\u030F"=>"\\u0208",\n"i\\u030F"=>"\\u0209",\n"I\\u0311"=>"\\u020A",\n"i\\u0311"=>"\\u020B",\n"O\\u030F"=>"\\u020C",\n"o\\u030F"=>"\\u020D",\n"O\\u0311"=>"\\u020E",\n"o\\u0311"=>"\\u020F",\n"R\\u030F"=>"\\u0210",\n"r\\u030F"=>"\\u0211",\n"R\\u0311"=>"\\u0212",\n"r\\u0311"=>"\\u0213",\n"U\\u030F"=>"\\u0214",\n"u\\u030F"=>"\\u0215",\n"U\\u0311"=>"\\u0216",\n"u\\u0311"=>"\\u0217",\n"S\\u03

DECOMPOSITION_TABLE = {\n"\\u00C0"=>"A\\u0300",\n"\\u00C1"=>"A\\u0301",\n"\\u00C2"=>"A\\u0302",\n"\\u00C3"=>"A\\u0303",\n"\\u00C4"=>"A\\u0308",\n"\\u00C5"=>"A\\u030A",\n"\\u00C7"=>"C\\u0327",\n"\\u00C8"=>"E\\u0300",\n"\\u00C9"=>"E\\u0301",\n"\\u00CA"=>"E\\u0302",\n"\\u00CB"=>"E\\u0308",\n"\\u00CC"=>"I\\u0300",\n"\\u00CD"=>"I\\u0301",\n"\\u00CE"=>"I\\u0302",\n"\\u00CF"=>"I\\u0308",\n"\\u00D1"=>"N\\u0303",\n"\\u00D2"=>"O\\u0300",\n"\\u00D3"=>"O\\u0301",\n"\\u00D4"=>"O\\u0302",\n"\\u00D5"=>"O\\u0303",\n"\\u00D6"=>"O\\u0308",\n"\\u00D9"=>"U\\u0300",\n"\\u00DA"=>"U\\u0301",\n"\\u00DB"=>"U\\u0302",\n"\\u00DC"=>"U\\u0308",\n"\\u00DD"=>"Y\\u0301",\n"\\u00E0"=>"a\\u0300",\n"\\u00E1"=>"a\\u0301",\n"\\u00E2"=>"a\\u0302",\n"\\u00E3"=>"a\\u0303",\n"\\u00E4"=>"a\\u0308",\n"\\u00E5"=>"a\\u030A",\n"\\u00E7"=>"c\\u0327",\n"\\u00E8"=>"e\\u0300",\n"\\u00E9"=>"e\\u0301",\n"\\u00EA"=>"e\\u0302",\n"\\u00EB"=>"e\\u0308",\n"\\u00EC"=>"i\\u0300",\n"\\u00ED"=>"i\\u0301",\n"\\u00EE"=>"i\\u0302",\n"\\u00EF"=>"i\\u0308",\n"\\u00F1"=>"n\\u0303",\n"\\u00F2"=>"o\\u0300",\n"\\u00F3"=>"o\\u0301",\n"\\u00F4"=>"o\\u0302",\n"\\u00F5"=>"o\\u0303",\n"\\u00F6"=>"o\\u0308",\n"\\u00F9"=>"u\\u0300",\n"\\u00FA"=>"u\\u0301",\n"\\u00FB"=>"u\\u0302",\n"\\u00FC"=>"u\\u0308",\n"\\u00FD"=>"y\\u0301",\n"\\u00FF"=>"y\\u0308",\n"\\u0100"=>"A\\u0304",\n"\\u0101"=>"a\\u0304",\n"\\u0102"=>"A\\u0306",\n"\\u0103"=>"a\\u0306",\n"\\u0104"=>"A\\u0328",\n"\\u0105"=>"a\\u0328",\n"\\u0106"=>"C\\u0301",\n"\\u0107"=>"c\\u0301",\n"\\u0108"=>"C\\u0302",\n"\\u0109"=>"c\\u0302",\n"\\u010A"=>"C\\u0307",\n"\\u010B"=>"c\\u0307",\n"\\u010C"=>"C\\u030C",\n"\\u010D"=>"c\\u030C",\n"\\u010E"=>"D\\u030C",\n"\\u010F"=>"d\\u030C",\n"\\u0112"=>"E\\u0304",\n"\\u0113"=>"e\\u0304",\n"\\u0114"=>"E\\u0306",\n"\\u0115"=>"e\\u0306",\n"\\u0116"=>"E\\u0307",\n"\\u0117"=>"e\\u0307",\n"\\u0118"=>"E\\u0328",\n"\\u0119"=>"e\\u0328",\n"\\u011A"=>"E\\u030C",\n"\\u011B"=>"e\\u030C",\n"\\u011C"=>"G\\u0302",\n"\\u011D"=>"g\\u0302",\n"\\u011E"=>"G\\u0306",\n"\\u011F"=>"g\\u0306",\n"\\u0120"=>"G\\u0307",\n"\\u0121"=>"g\\u0307",\n"\\u0122"=>"G\\u0327",\n"\\u0123"=>"g\\u0327",\n"\\u0124"=>"H\\u0302",\n"\\u0125"=>"h\\u0302",\n"\\u0128"=>"I\\u0303",\n"\\u0129"=>"i\\u0303",\n"\\u012A"=>"I\\u0304",\n"\\u012B"=>"i\\u0304",\n"\\u012C"=>"I\\u0306",\n"\\u012D"=>"i\\u0306",\n"\\u012E"=>"I\\u0328",\n"\\u012F"=>"i\\u0328",\n"\\u0130"=>"I\\u0307",\n"\\u0134"=>"J\\u0302",\n"\\u0135"=>"j\\u0302",\n"\\u0136"=>"K\\u0327",\n"\\u0137"=>"k\\u0327",\n"\\u0139"=>"L\\u0301",\n"\\u013A"=>"l\\u0301",\n"\\u013B"=>"L\\u0327",\n"\\u013C"=>"l\\u0327",\n"\\u013D"=>"L\\u030C",\n"\\u013E"=>"l\\u030C",\n"\\u0143"=>"N\\u0301",\n"\\u0144"=>"n\\u0301",\n"\\u0145"=>"N\\u0327",\n"\\u0146"=>"n\\u0327",\n"\\u0147"=>"N\\u030C",\n"\\u0148"=>"n\\u030C",\n"\\u014C"=>"O\\u0304",\n"\\u014D"=>"o\\u0304",\n"\\u014E"=>"O\\u0306",\n"\\u014F"=>"o\\u0306",\n"\\u0150"=>"O\\u030B",\n"\\u0151"=>"o\\u030B",\n"\\u0154"=>"R\\u0301",\n"\\u0155"=>"r\\u0301",\n"\\u0156"=>"R\\u0327",\n"\\u0157"=>"r\\u0327",\n"\\u0158"=>"R\\u030C",\n"\\u0159"=>"r\\u030C",\n"\\u015A"=>"S\\u0301",\n"\\u015B"=>"s\\u0301",\n"\\u015C"=>"S\\u0302",\n"\\u015D"=>"s\\u0302",\n"\\u015E"=>"S\\u0327",\n"\\u015F"=>"s\\u0327",\n"\\u0160"=>"S\\u030C",\n"\\u0161"=>"s\\u030C",\n"\\u0162"=>"T\\u0327",\n"\\u0163"=>"t\\u0327",\n"\\u0164"=>"T\\u030C",\n"\\u0165"=>"t\\u030C",\n"\\u0168"=>"U\\u0303",\n"\\u0169"=>"u\\u0303",\n"\\u016A"=>"U\\u0304",\n"\\u016B"=>"u\\u0304",\n"\\u016C"=>"U\\u0306",\n"\\u016D"=>"u\\u0306",\n"\\u016E"=>"U\\u030A",\n"\\u016F"=>"u\\u030A",\n"\\u0170"=>"U\\u030B",\n"\\u0171"=>"u\\u030B",\n"\\u0172"=>"U\\u0328",\n"\\u0173"=>"u\\u0328",\n"\\u0174"=>"W\\u0302",\n"\\u0175"=>"w\\u0302",\n"\\u0176"=>"Y\\u0302",\n"\\u0177"=>"y\\u0302",\n"\\u0178"=>"Y\\u0308",\n"\\u0179"=>"Z\\u0301",\n"\\u017A"=>"z\\u0301",\n"\\u017B"=>"Z\\u0307",\n"\\u017C"=>"z\\u0307",\n"\\u017D"=>"Z\\u030C",\n"\\u017E"=>"z\\u030C",\n"\\u01A0"=>"O\\u031B",\n"\\u01A1"=>"o\\u031B",\n"\\u01AF"=>"U\\u031B",\n"\\u01B0"=>"u\\u031B",\n"\\u01CD"=>"A\\u030C",\n"\\u01CE"=>"a\\u030C",\n"\\u01CF"=>"I\\u030C",\n"\\u01D0"=>"i\\u030C",\n"\\u01D1"=>"O\\u030C",\n"\\u01D2"=>"o\\u030C",\n"\\u01D3"=>"U\\u030C",\n"\\u01D4"=>"u\\u030C",\n"\\u01D5"=>"U\\u0308\\u0304",\n"\\u01D6"=>"u\\u0308\\u0304",\n"\\u01D7"=>"U\\u0308\\u0301",\n"\\u01D8"=>"u\\u0308\\u0301",\n"\\u01D9"=>"U\\u0308\\u030C",\n"\\u01DA"=>"u\\u0308\\u030C",\n"\\u01DB"=>"U\\u0308\\u0300",\n"\\u01DC"=>"u\\u0308\\u0300",\n"\\u01DE"=>"A\\u0308\\u0304",\n"\\u01DF"=>"a\\u0308\\u0304",\n"\\u01E0"=>"A\\u0307\\u0304",\n"\\u01E1"=>"a\\u0307\\u0304",\n"\\u01E2"=>"\\u00C6\\u0304",\n"\\u01E3"=>"\\u00E6\\u0304",\n"\\u01E6"=>"G\\u030C",\n"\\u01E7"=>"g\\u030C",\n"\\u01E8"=>"K\\u030C",\n"\\u01E9"=>"k\\u030C",\n"\\u01EA"=>"O\\u0328",\n"\\u01EB"=>"o\\u0328",\n"\\u01EC"=>"O\\u0328\\u0304",\n"\\u01ED"=>"o\\u0328\\u0304",\n"\\u01EE"=>"\\u01B7\\u030C",\n"\\u01EF"=>"\\u0292\\u030C",\n"\\u01F0"=>"j\\u030C",\n"\\u01F4"=>"G\\u0301",\n"\\u01F5"=>"g\\u0301",\n"\\u01F8"=>"N\\u0300",\n"\\u01F9"=>"n\\u0300",\n"\\u01FA"=>"A\\u030A\\u0301",\n"\\u01FB"=>"a\\u030A\\u0301",\n"\\u01FC"=>"\\u00C6\\u0301",\n"\\u01FD"=>"\\u00E6\\u0301",\n"\\u01FE"=>"\\u00D8\\u0301",\n"\\u01FF"=>"\\u00F8\\u0301",\n"\\u0200"=>"A\\u030F",\n"\\u0201"=>"a\\u030F",\n"\\u0202"=>"A\\u0311",\n"\\u0203"=>"a\\u0311",\n"\\u0204"=>"E\\u030F",\n"\\u0205"=>"e\\u030F",\n"\\u0206"=>"E\\u0311",\n"\\u0207"=>"e\\u0311",\n"\\u0208"=>"I\\u030F",\n"\\u0209"=>"i\\u030F",\n"\\u020A"=>"I\\u0311",\n"\\u020B"=>"i\\u0311",\n"\\u020C"=>"O\\u030F",\n"\\u020D"=>"o\\u030F",\n"\\u020E"=>"O\\u0311",\n"\\u020F"=>"o\\u0311",\n"\\u0210"=>"R\\u030F",\n"\\u0211"=>"r\\u030F",\n"\\u0212"=>"R\\u0311",\n"\\u0213"=>"r\\u0311",\n"\\u0214"=>"U\\u030F",\n"\\u0215"=>"u\\u030F",\n"\\u0216"=>"U\\u0311",\n"\\u0217"=>"

KOMPATIBLE_TABLE = {\n"\\u00A0"=>" ",\n"\\u00A8"=>" \\u0308",\n"\\u00AA"=>"a",\n"\\u00AF"=>" \\u0304",\n"\\u00B2"=>"2",\n"\\u00B3"=>"3",\n"\\u00B4"=>" \\u0301",\n"\\u00B5"=>"\\u03BC",\n"\\u00B8"=>" \\u0327",\n"\\u00B9"=>"1",\n"\\u00BA"=>"o",\n"\\u00BC"=>"1\\u20444",\n"\\u00BD"=>"1\\u20442",\n"\\u00BE"=>"3\\u20444",\n"\\u0132"=>"IJ",\n"\\u0133"=>"ij",\n"\\u013F"=>"L\\u00B7",\n"\\u0140"=>"l\\u00B7",\n"\\u0149"=>"\\u02BCn",\n"\\u017F"=>"s",\n"\\u01C4"=>"D\\u017D",\n"\\u01C5"=>"D\\u017E",\n"\\u01C6"=>"d\\u017E",\n"\\u01C7"=>"LJ",\n"\\u01C8"=>"Lj",\n"\\u01C9"=>"lj",\n"\\u01CA"=>"NJ",\n"\\u01CB"=>"Nj",\n"\\u01CC"=>"nj",\n"\\u01F1"=>"DZ",\n"\\u01F2"=>"Dz",\n"\\u01F3"=>"dz",\n"\\u02B0"=>"h",\n"\\u02B1"=>"\\u0266",\n"\\u02B2"=>"j",\n"\\u02B3"=>"r",\n"\\u02B4"=>"\\u0279",\n"\\u02B5"=>"\\u027B",\n"\\u02B6"=>"\\u0281",\n"\\u02B7"=>"w",\n"\\u02B8"=>"y",\n"\\u02D8"=>" \\u0306",\n"\\u02D9"=>" \\u0307",\n"\\u02DA"=>" \\u030A",\n"\\u02DB"=>" \\u0328",\n"\\u02DC"=>" \\u0303",\n"\\u02DD"=>" \\u030B",\n"\\u02E0"=>"\\u0263",\n"\\u02E1"=>"l",\n"\\u02E2"=>"s",\n"\\u02E3"=>"x",\n"\\u02E4"=>"\\u0295",\n"\\u037A"=>" \\u0345",\n"\\u0384"=>" \\u0301",\n"\\u03D0"=>"\\u03B2",\n"\\u03D1"=>"\\u03B8",\n"\\u03D2"=>"\\u03A5",\n"\\u03D5"=>"\\u03C6",\n"\\u03D6"=>"\\u03C0",\n"\\u03F0"=>"\\u03BA",\n"\\u03F1"=>"\\u03C1",\n"\\u03F2"=>"\\u03C2",\n"\\u03F4"=>"\\u0398",\n"\\u03F5"=>"\\u03B5",\n"\\u03F9"=>"\\u03A3",\n"\\u0587"=>"\\u0565\\u0582",\n"\\u0675"=>"\\u0627\\u0674",\n"\\u0676"=>"\\u0648\\u0674",\n"\\u0677"=>"\\u06C7\\u0674",\n"\\u0678"=>"\\u064A\\u0674",\n"\\u0E33"=>"\\u0E4D\\u0E32",\n"\\u0EB3"=>"\\u0ECD\\u0EB2",\n"\\u0EDC"=>"\\u0EAB\\u0E99",\n"\\u0EDD"=>"\\u0EAB\\u0EA1",\n"\\u0F0C"=>"\\u0F0B",\n"\\u0F77"=>"\\u0FB2\\u0F81",\n"\\u0F79"=>"\\u0FB3\\u0F81",\n"\\u10FC"=>"\\u10DC",\n"\\u1D2C"=>"A",\n"\\u1D2D"=>"\\u00C6",\n"\\u1D2E"=>"B",\n"\\u1D30"=>"D",\n"\\u1D31"=>"E",\n"\\u1D32"=>"\\u018E",\n"\\u1D33"=>"G",\n"\\u1D34"=>"H",\n"\\u1D35"=>"I",\n"\\u1D36"=>"J",\n"\\u1D37"=>"K",\n"\\u1D38"=>"L",\n"\\u1D39"=>"M",\n"\\u1D3A"=>"N",\n"\\u1D3C"=>"O",\n"\\u1D3D"=>"\\u0222",\n"\\u1D3E"=>"P",\n"\\u1D3F"=>"R",\n"\\u1D40"=>"T",\n"\\u1D41"=>"U",\n"\\u1D42"=>"W",\n"\\u1D43"=>"a",\n"\\u1D44"=>"\\u0250",\n"\\u1D45"=>"\\u0251",\n"\\u1D46"=>"\\u1D02",\n"\\u1D47"=>"b",\n"\\u1D48"=>"d",\n"\\u1D49"=>"e",\n"\\u1D4A"=>"\\u0259",\n"\\u1D4B"=>"\\u025B",\n"\\u1D4C"=>"\\u025C",\n"\\u1D4D"=>"g",\n"\\u1D4F"=>"k",\n"\\u1D50"=>"m",\n"\\u1D51"=>"\\u014B",\n"\\u1D52"=>"o",\n"\\u1D53"=>"\\u0254",\n"\\u1D54"=>"\\u1D16",\n"\\u1D55"=>"\\u1D17",\n"\\u1D56"=>"p",\n"\\u1D57"=>"t",\n"\\u1D58"=>"u",\n"\\u1D59"=>"\\u1D1D",\n"\\u1D5A"=>"\\u026F",\n"\\u1D5B"=>"v",\n"\\u1D5C"=>"\\u1D25",\n"\\u1D5D"=>"\\u03B2",\n"\\u1D5E"=>"\\u03B3",\n"\\u1D5F"=>"\\u03B4",\n"\\u1D60"=>"\\u03C6",\n"\\u1D61"=>"\\u03C7",\n"\\u1D62"=>"i",\n"\\u1D63"=>"r",\n"\\u1D64"=>"u",\n"\\u1D65"=>"v",\n"\\u1D66"=>"\\u03B2",\n"\\u1D67"=>"\\u03B3",\n"\\u1D68"=>"\\u03C1",\n"\\u1D69"=>"\\u03C6",\n"\\u1D6A"=>"\\u03C7",\n"\\u1D78"=>"\\u043D",\n"\\u1D9B"=>"\\u0252",\n"\\u1D9C"=>"c",\n"\\u1D9D"=>"\\u0255",\n"\\u1D9E"=>"\\u00F0",\n"\\u1D9F"=>"\\u025C",\n"\\u1DA0"=>"f",\n"\\u1DA1"=>"\\u025F",\n"\\u1DA2"=>"\\u0261",\n"\\u1DA3"=>"\\u0265",\n"\\u1DA4"=>"\\u0268",\n"\\u1DA5"=>"\\u0269",\n"\\u1DA6"=>"\\u026A",\n"\\u1DA7"=>"\\u1D7B",\n"\\u1DA8"=>"\\u029D",\n"\\u1DA9"=>"\\u026D",\n"\\u1DAA"=>"\\u1D85",\n"\\u1DAB"=>"\\u029F",\n"\\u1DAC"=>"\\u0271",\n"\\u1DAD"=>"\\u0270",\n"\\u1DAE"=>"\\u0272",\n"\\u1DAF"=>"\\u0273",\n"\\u1DB0"=>"\\u0274",\n"\\u1DB1"=>"\\u0275",\n"\\u1DB2"=>"\\u0278",\n"\\u1DB3"=>"\\u0282",\n"\\u1DB4"=>"\\u0283",\n"\\u1DB5"=>"\\u01AB",\n"\\u1DB6"=>"\\u0289",\n"\\u1DB7"=>"\\u028A",\n"\\u1DB8"=>"\\u1D1C",\n"\\u1DB9"=>"\\u028B",\n"\\u1DBA"=>"\\u028C",\n"\\u1DBB"=>"z",\n"\\u1DBC"=>"\\u0290",\n"\\u1DBD"=>"\\u0291",\n"\\u1DBE"=>"\\u0292",\n"\\u1DBF"=>"\\u03B8",\n"\\u1E9A"=>"a\\u02BE",\n"\\u1FBD"=>" \\u0313",\n"\\u1FBF"=>" \\u0313",\n"\\u1FC0"=>" \\u0342",\n"\\u1FFE"=>" \\u0314",\n"\\u2002"=>" ",\n"\\u2003"=>" ",\n"\\u2004"=>" ",\n"\\u2005"=>" ",\n"\\u2006"=>" ",\n"\\u2007"=>" ",\n"\\u2008"=>" ",\n"\\u2009"=>" ",\n"\\u200A"=>" ",\n"\\u2011"=>"\\u2010",\n"\\u2017"=>" \\u0333",\n"\\u2024"=>".",\n"\\u2025"=>"..",\n"\\u2026"=>"...",\n"\\u202F"=>" ",\n"\\u2033"=>"\\u2032\\u2032",\n"\\u2034"=>"\\u2032\\u2032\\u2032",\n"\\u2036"=>"\\u2035\\u2035",\n"\\u2037"=>"\\u2035\\u2035\\u2035",\n"\\u203C"=>"!!",\n"\\u203E"=>" \\u0305",\n"\\u2047"=>"??",\n"\\u2048"=>"?!",\n"\\u2049"=>"!?",\n"\\u2057"=>"\\u2032\\u2032\\u2032\\u2032",\n"\\u205F"=>" ",\n"\\u2070"=>"0",\n"\\u2071"=>"i",\n"\\u2074"=>"4",\n"\\u2075"=>"5",\n"\\u2076"=>"6",\n"\\u2077"=>"7",\n"\\u2078"=>"8",\n"\\u2079"=>"9",\n"\\u207A"=>"+",\n"\\u207B"=>"\\u2212",\n"\\u207C"=>"=",\n"\\u207D"=>"(",\n"\\u207E"=>")",\n"\\u207F"=>"n",\n"\\u2080"=>"0",\n"\\u2081"=>"1",\n"\\u2082"=>"2",\n"\\u2083"=>"3",\n"\\u2084"=>"4",\n"\\u2085"=>"5",\n"\\u2086"=>"6",\n"\\u2087"=>"7",\n"\\u2088"=>"8",\n"\\u2089"=>"9",\n"\\u208A"=>"+",\n"\\u208B"=>"\\u2212",\n"\\u208C"=>"=",\n"\\u208D"=>"(",\n"\\u208E"=>")",\n"\\u2090"=>"a",\n"\\u2091"=>"e",\n"\\u2092"=>"o",\n"\\u2093"=>"x",\n"\\u2094"=>"\\u0259",\n"\\u2095"=>"h",\n"\\u2096"=>"k",\n"\\u2097"=>"l",\n"\\u2098"=>"m",\n"\\u2099"=>"n",\n"\\u209A"=>"p",\n"\\u209B"=>"s",\n"\\u209C"=>"t",\n"\\u20A8"=>"Rs",\n"\\u2100"=>"a/c",\n"\\u2101"=>"a/s",\n"\\u2102"=>"C",\n"\\u2103"=>"\\u00B0C",\n"\\u2105"=>"c/o",\n"\\u2106"=>"c/u",\n"\\u2107"=>"\\u0190",\n"\\u2109"=>"\\u00B0F",\n"\\u210A"=>"g",\n"\\u210B"=>"H",\n"\\u210C"=>"H",\n"\\u210D"=>"H",\n"\\u210E"=>"h",\n"\\u210F"=>"\\u0127",\n"\\u2110"=>"I",\n"\\u2111"=>"I",\n"\\u2112"=>"L",\n"\\u2113"=>"l",\n"\\u2115"=>"N",\n"\\u2116"=>"No",\n"\\u2119"=>"P",\n"\\u211A"=>"Q",\n"\\u211B"=>"R",\n"\\u211C"=>"R",\n"\\u211D"=>"R",\n"\\u2120"=>"SM",\n"\\u2121"=>"

LBASE = 0x1100

LCOUNT = 19

MAX_HASH_LENGTH = 18000

NCOUNT = VCOUNT * TCOUNT

NF_HASH_C = Hash.new do |hash, key|\nhash.shift if hash.length>MAX_HASH_LENGTH # prevent DoS attack\nhash[key] = nfc_one(key)\nend

NF_HASH_D = Hash.new do |hash, key|\nhash.shift if hash.length>MAX_HASH_LENGTH # prevent DoS attack\nhash[key] = nfd_one(key)\nend

REGEXP_C = Regexp.compile(REGEXP_C_STRING, Regexp::EXTENDED)

REGEXP_C_STRING = "#{'' # composition exclusions\n}" \\\n"[\\u0340\\u0341" \\\n"\\u0343\\u0344" \\\n"\\u0374" \\\n"\\u037E" \\\n"\\u0387" \\\n"\\u0958-\\u095F" \\\n"\\u09DC\\u09DD" \\\n"\\u09DF" \\\n"\\u0A33" \\\n"\\u0A36" \\\n"\\u0A59-\\u0A5B" \\\n"\\u0A5E" \\\n"\\u0B5C\\u0B5D" \\\n"\\u0F43" \\\n"\\u0F4D" \\\n"\\u0F52" \\\n"\\u0F57" \\\n"\\u0F5C" \\\n"\\u0F69" \\\n"\\u0F73" \\\n"\\u0F75\\u0F76" \\\n"\\u0F78" \\\n"\\u0F81" \\\n"\\u0F93" \\\n"\\u0F9D" \\\n"\\u0FA2" \\\n"\\u0FA7" \\\n"\\u0FAC" \\\n"\\u0FB9" \\\n"\\u1F71" \\\n"\\u1F73" \\\n"\\u1F75" \\\n"\\u1F77" \\\n"\\u1F79" \\\n"\\u1F7B" \\\n"\\u1F7D" \\\n"\\u1FBB" \\\n"\\u1FBE" \\\n"\\u1FC9" \\\n"\\u1FCB" \\\n"\\u1FD3" \\\n"\\u1FDB" \\\n"\\u1FE3" \\\n"\\u1FEB" \\\n"\\u1FEE\\u1FEF" \\\n"\\u1FF9" \\\n"\\u1FFB" \\\n"\\u1FFD" \\\n"\\u2000\\u2001" \\\n"\\u2126" \\\n"\\u212A\\u212B" \\\n"\\u2329\\u232A" \\\n"\\u2ADC" \\\n"\\uF900-\\uFA0D" \\\n"\\uFA10" \\\n"\\uFA12" \\\n"\\uFA15-\\uFA1E" \\\n"\\uFA20" \\\n"\\uFA22" \\\n"\\uFA25\\uFA26" \\\n"\\uFA2A-\\uFA6D" \\\n"\\uFA70-\\uFAD9" \\\n"\\uFB1D" \\\n"\\uFB1F" \\\n"\\uFB2A-\\uFB36" \\\n"\\uFB38-\\uFB3C" \\\n"\\uFB3E" \\\n"\\uFB40\\uFB41" \\\n"\\uFB43\\uFB44" \\\n"\\uFB46-\\uFB4E" \\\n"\\u{1D15E}-\\u{1D164}" \\\n"\\u{1D1BB}-\\u{1D1C0}" \\\n"\\u{2F800}-\\u{2FA1D}" \\\n"]#{accents}*" \\\n"|#{'' # composition starters and characters that can be the result of a composition\n}" \\\n"[<->" \\\n"A-P" \\\n"R-Z" \\\n"a-p" \\\n"r-z" \\\n"\\u00A8" \\\n"\\u00C0-\\u00CF" \\\n"\\u00D1-\\u00D6" \\\n"\\u00D8-\\u00DD" \\\n"\\u00E0-\\u00EF" \\\n"\\u00F1-\\u00F6" \\\n"\\u00F8-\\u00FD" \\\n"\\u00FF-\\u010F" \\\n"\\u0112-\\u0125" \\\n"\\u0128-\\u0130" \\\n"\\u0134-\\u0137" \\\n"\\u0139-\\u013E" \\\n"\\u0143-\\u0148" \\\n"\\u014C-\\u0151" \\\n"\\u0154-\\u0165" \\\n"\\u0168-\\u017F" \\\n"\\u01A0\\u01A1" \\\n"\\u01AF\\u01B0" \\\n"\\u01B7" \\\n"\\u01CD-\\u01DC" \\\n"\\u01DE-\\u01E3" \\\n"\\u01E6-\\u01F0" \\\n"\\u01F4\\u01F5" \\\n"\\u01F8-\\u021B" \\\n"\\u021E\\u021F" \\\n"\\u0226-\\u0233" \\\n"\\u0292" \\\n"\\u0385\\u0386" \\\n"\\u0388-\\u038A" \\\n"\\u038C" \\\n"\\u038E-\\u0391" \\\n"\\u0395" \\\n"\\u0397" \\\n"\\u0399" \\\n"\\u039F" \\\n"\\u03A1" \\\n"\\u03A5" \\\n"\\u03A9-\\u03B1" \\\n"\\u03B5" \\\n"\\u03B7" \\\n"\\u03B9" \\\n"\\u03BF" \\\n"\\u03C1" \\\n"\\u03C5" \\\n"\\u03C9-\\u03CE" \\\n"\\u03D2-\\u03D4" \\\n"\\u0400\\u0401" \\\n"\\u0403" \\\n"\\u0406\\u0407" \\\n"\\u040C-\\u040E" \\\n"\\u0410" \\\n"\\u0413" \\\n"\\u0415-\\u041A" \\\n"\\u041E" \\\n"\\u0423" \\\n"\\u0427" \\\n"\\u042B" \\\n"\\u042D" \\\n"\\u0430" \\\n"\\u0433" \\\n"\\u0435-\\u043A" \\\n"\\u043E" \\\n"\\u0443" \\\n"\\u0447" \\\n"\\u044B" \\\n"\\u044D" \\\n"\\u0450\\u0451" \\\n"\\u0453" \\\n"\\u0456\\u0457" \\\n"\\u045C-\\u045E" \\\n"\\u0474-\\u0477" \\\n"\\u04C1\\u04C2" \\\n"\\u04D0-\\u04D3" \\\n"\\u04D6-\\u04DF" \\\n"\\u04E2-\\u04F5" \\\n"\\u04F8\\u04F9" \\\n"\\u0622-\\u0627" \\\n"\\u0648" \\\n"\\u064A" \\\n"\\u06C0-\\u06C2" \\\n"\\u06D2\\u06D3" \\\n"\\u06D5" \\\n"\\u0928\\u0929" \\\n"\\u0930\\u0931" \\\n"\\u0933\\u0934" \\\n"\\u09C7" \\\n"\\u09CB\\u09CC" \\\n"\\u0B47\\u0B48" \\\n"\\u0B4B\\u0B4C" \\\n"\\u0B92" \\\n"\\u0B94" \\\n"\\u0BC6\\u0BC7" \\\n"\\u0BCA-\\u0BCC" \\\n"\\u0C46" \\\n"\\u0C48" \\\n"\\u0CBF\\u0CC0" \\\n"\\u0CC6-\\u0CC8" \\\n"\\u0CCA\\u0CCB" \\\n"\\u0D46\\u0D47" \\\n"\\u0D4A-\\u0D4C" \\\n"\\u0DD9\\u0DDA" \\\n"\\u0DDC-\\u0DDE" \\\n"\\u1025\\u1026" \\\n"\\u1B05-\\u1B0E" \\\n"\\u1B11\\u1B12" \\\n"\\u1B3A-\\u1B43" \\\n"\\u1E00-\\u1E99" \\\n"\\u1E9B" \\\n"\\u1EA0-\\u1EF9" \\\n"\\u1F00-\\u1F15" \\\n"\\u1F18-\\u1F1D" \\\n"\\u1F20-\\u1F45" \\\n"\\u1F48-\\u1F4D" \\\n"\\u1F50-\\u1F57" \\\n"\\u1F59" \\\n"\\u1F5B" \\\n"\\u1F5D" \\\n"\\u1F5F-\\u1F70" \\\n"\\u1F72" \\\n"\\u1F74" \\\n"\\u1F76" \\\n"\\u1F78" \\\n"\\u1F7A" \\\n"\\u1F7C" \\\n"\\u1F80-\\u1FB4" \\\n"\\u1FB6-\\u1FBA" \\\n"\\u1FBC" \\\n"\\u1FBF" \\\n"\\u1FC1-\\u1FC4" \\\n"\\u1FC6-\\u1FC8" \\\n"\\u1FCA" \\\n"\\u1FCC-\\u1FD2" \\\n"\\u1FD6-\\u1FDA" \\\n"\\u1FDD-\\u1FE2" \\\n"\\u1FE4-\\u1FEA" \\\n"\\u1FEC\\u1FED" \\\n"\\u1FF2-\\u1FF4" \\\n"\\u1FF6-\\u1FF8" \\\n"\\u1FFA" \\\n"\\u1FFC" \\\n"\\u1FFE" \\\n"\\u2190" \\\n"\\u2192" \\\n"\\u2194" \\\n"\\u219A\\u219B" \\\n"\\u21AE" \\\n"\\u21CD-\\u21D0" \\\n"\\u21D2" \\\n"\\u21D4" \\\n"\\u2203\\u2204" \\\n"\\u2208\\u2209" \\\n"\\u220B\\u220C" \\\n"\\u2223-\\u2226" \\\n"\\u223C" \\\n"\\u2241" \\\n"\\u2243-\\u2245" \\\n"\\u2247-\\u2249" \\\n"\\u224D" \\\n"\\u2260-\\u2262" \\\n"\\u2264\\u2265" \\\n"\\u226D-\\u227D" \\\n"\\u2280-\\u2289" \\\n"\\u2291\\u2292" \\\n"\\u22A2" \\\n"\\u22A8\\u22A9" \\\n"\\u22AB-\\u22AF" \\\n"\\u22B2-\\u22B5" \\\n"\\u22E0-\\u22E3" \\\n"\\u22EA-\\u22ED" \\\n"\\u3046" \\\n"\\u304B-\\u3062" \\\n"\\u3064-\\u3069" \\\n"\\u306F-\\u307D" \\\n"\\u3094" \\\n"\\u309D\\u309E" \\\n"\\u30A6" \\\n"\\u30AB-\\u30C2" \\\n"\\u30C4-\\u30C9" \\\n"\\u30CF-\\u30DD" \\\n"\\u30EF-\\u30F2" \\\n"\\u30F4" \\\n"\\u30F7-\\u30FA" \\\n"\\u30FD\\u30FE" \\\n"\\u{11099}-\\u{1109C}" \\\n"\\u{110A5}" \\\n"\\u{110AB}" \\\n"\\u{1112E}\\u{1112F}" \\\n"\\u{11131}\\u{11132}" \\\n"\\u{11347}" \\\n"\\u{1134B}\\u{1134C}" \\\n"\\u{114B9}" \\\n"\\u{114BB}\\u{114BC}" \\\n"\\u{114BE}" \\\n"\\u{115B8}-\\u{115BB}" \\\n"]?#{accents}+" \\\n"|#{'' # Hangul syllables with separate trailer\n}" \\\n"[\\uAC00" \\\n"\\uAC1C" \\\n"\\uAC38" \\\n"\\uAC54" \\\n"\\uAC70" \\\n"\\uAC8C" \\\n"\\uACA8" \\\n"\\uACC4" \\\n"\\uACE0" \\\n"\\uACFC" \\\n"\\uAD18" \\\n"\\uAD34" \\\n"\\uAD50" \\\n"\\uAD6C" \\\n"\\uAD88" \\\n"\\uADA4" \\\n"\\uADC0" \\\n"\\uADDC" \\\n"\\uADF8" \\\n"\\uAE14" \\\n"\\uAE30" \\\n"\\uAE4C" \\\n"\\uAE68" \\\n"\\uAE84" \\\n"\\uAEA0" \\\n"\\uAEBC" \\\n"\\uAED8" \\\n"\\uAEF4" \\\n"\\uAF10" \\\n"\\uAF2C" \\\n"\\uAF48" \\\n"\\uAF64" \\\n"\\uAF80" \\\n"\\uAF9C" \\\n"\\uAFB8" \\\n"\\uAFD4" \\\n"\\uAFF0" \\\n"\\uB00C" \\\n"\\uB028" \\\n"\\uB044" \\\n"\\uB060" \\\n"\\uB07C" \\\n"\\uB098" \\\n"\\uB0B4" \\\n"\\uB0D0" \\\n"\\uB0EC" \\\n"\\uB108" \\\n"\\uB124" \\\n"\\uB140" \\\n"\\uB15C" \\\n"\\uB178" \\\n"\\uB194" \\\n"\\uB1B0" \\\n"\\uB1CC" \\\n"\\uB1E8" \\\n"\\uB204" \\\n"\\uB220" \\\n"\\uB23C" \\\n"\\uB258" \\\n"\\uB274" \\\n"\\uB290" \\\n"\\uB2AC" \\\n"\\uB2C8" \\\n"\\uB2E4" \\\n"\\uB300" \\\n"\\uB31C" \\\n"\\uB338" \\\n"\\uB354" \\\n"\\uB370" \\\n"\\uB38C" \\\n"\\uB3A8" \\\n"\\u

REGEXP_D = Regexp.compile(REGEXP_D_STRING, Regexp::EXTENDED)

REGEXP_D_STRING = "#{'' # composition starters and composition exclusions\n}" \\\n"[\\u00C0-\\u00C5" \\\n"\\u00C7-\\u00CF" \\\n"\\u00D1-\\u00D6" \\\n"\\u00D9-\\u00DD" \\\n"\\u00E0-\\u00E5" \\\n"\\u00E7-\\u00EF" \\\n"\\u00F1-\\u00F6" \\\n"\\u00F9-\\u00FD" \\\n"\\u00FF-\\u010F" \\\n"\\u0112-\\u0125" \\\n"\\u0128-\\u0130" \\\n"\\u0134-\\u0137" \\\n"\\u0139-\\u013E" \\\n"\\u0143-\\u0148" \\\n"\\u014C-\\u0151" \\\n"\\u0154-\\u0165" \\\n"\\u0168-\\u017E" \\\n"\\u01A0\\u01A1" \\\n"\\u01AF\\u01B0" \\\n"\\u01CD-\\u01DC" \\\n"\\u01DE-\\u01E3" \\\n"\\u01E6-\\u01F0" \\\n"\\u01F4\\u01F5" \\\n"\\u01F8-\\u021B" \\\n"\\u021E\\u021F" \\\n"\\u0226-\\u0233" \\\n"\\u0340\\u0341" \\\n"\\u0343\\u0344" \\\n"\\u0374" \\\n"\\u037E" \\\n"\\u0385-\\u038A" \\\n"\\u038C" \\\n"\\u038E-\\u0390" \\\n"\\u03AA-\\u03B0" \\\n"\\u03CA-\\u03CE" \\\n"\\u03D3\\u03D4" \\\n"\\u0400\\u0401" \\\n"\\u0403" \\\n"\\u0407" \\\n"\\u040C-\\u040E" \\\n"\\u0419" \\\n"\\u0439" \\\n"\\u0450\\u0451" \\\n"\\u0453" \\\n"\\u0457" \\\n"\\u045C-\\u045E" \\\n"\\u0476\\u0477" \\\n"\\u04C1\\u04C2" \\\n"\\u04D0-\\u04D3" \\\n"\\u04D6\\u04D7" \\\n"\\u04DA-\\u04DF" \\\n"\\u04E2-\\u04E7" \\\n"\\u04EA-\\u04F5" \\\n"\\u04F8\\u04F9" \\\n"\\u0622-\\u0626" \\\n"\\u06C0" \\\n"\\u06C2" \\\n"\\u06D3" \\\n"\\u0929" \\\n"\\u0931" \\\n"\\u0934" \\\n"\\u0958-\\u095F" \\\n"\\u09CB\\u09CC" \\\n"\\u09DC\\u09DD" \\\n"\\u09DF" \\\n"\\u0A33" \\\n"\\u0A36" \\\n"\\u0A59-\\u0A5B" \\\n"\\u0A5E" \\\n"\\u0B48" \\\n"\\u0B4B\\u0B4C" \\\n"\\u0B5C\\u0B5D" \\\n"\\u0B94" \\\n"\\u0BCA-\\u0BCC" \\\n"\\u0C48" \\\n"\\u0CC0" \\\n"\\u0CC7\\u0CC8" \\\n"\\u0CCA\\u0CCB" \\\n"\\u0D4A-\\u0D4C" \\\n"\\u0DDA" \\\n"\\u0DDC-\\u0DDE" \\\n"\\u0F43" \\\n"\\u0F4D" \\\n"\\u0F52" \\\n"\\u0F57" \\\n"\\u0F5C" \\\n"\\u0F69" \\\n"\\u0F73" \\\n"\\u0F75\\u0F76" \\\n"\\u0F78" \\\n"\\u0F81" \\\n"\\u0F93" \\\n"\\u0F9D" \\\n"\\u0FA2" \\\n"\\u0FA7" \\\n"\\u0FAC" \\\n"\\u0FB9" \\\n"\\u1026" \\\n"\\u1B06" \\\n"\\u1B08" \\\n"\\u1B0A" \\\n"\\u1B0C" \\\n"\\u1B0E" \\\n"\\u1B12" \\\n"\\u1B3B" \\\n"\\u1B3D" \\\n"\\u1B40\\u1B41" \\\n"\\u1B43" \\\n"\\u1E00-\\u1E99" \\\n"\\u1E9B" \\\n"\\u1EA0-\\u1EF9" \\\n"\\u1F00-\\u1F15" \\\n"\\u1F18-\\u1F1D" \\\n"\\u1F20-\\u1F45" \\\n"\\u1F48-\\u1F4D" \\\n"\\u1F50-\\u1F57" \\\n"\\u1F59" \\\n"\\u1F5B" \\\n"\\u1F5D" \\\n"\\u1F5F-\\u1F7D" \\\n"\\u1F80-\\u1FB4" \\\n"\\u1FB6-\\u1FBC" \\\n"\\u1FBE" \\\n"\\u1FC1-\\u1FC4" \\\n"\\u1FC6-\\u1FD3" \\\n"\\u1FD6-\\u1FDB" \\\n"\\u1FDD-\\u1FEF" \\\n"\\u1FF2-\\u1FF4" \\\n"\\u1FF6-\\u1FFD" \\\n"\\u2000\\u2001" \\\n"\\u2126" \\\n"\\u212A\\u212B" \\\n"\\u219A\\u219B" \\\n"\\u21AE" \\\n"\\u21CD-\\u21CF" \\\n"\\u2204" \\\n"\\u2209" \\\n"\\u220C" \\\n"\\u2224" \\\n"\\u2226" \\\n"\\u2241" \\\n"\\u2244" \\\n"\\u2247" \\\n"\\u2249" \\\n"\\u2260" \\\n"\\u2262" \\\n"\\u226D-\\u2271" \\\n"\\u2274\\u2275" \\\n"\\u2278\\u2279" \\\n"\\u2280\\u2281" \\\n"\\u2284\\u2285" \\\n"\\u2288\\u2289" \\\n"\\u22AC-\\u22AF" \\\n"\\u22E0-\\u22E3" \\\n"\\u22EA-\\u22ED" \\\n"\\u2329\\u232A" \\\n"\\u2ADC" \\\n"\\u304C" \\\n"\\u304E" \\\n"\\u3050" \\\n"\\u3052" \\\n"\\u3054" \\\n"\\u3056" \\\n"\\u3058" \\\n"\\u305A" \\\n"\\u305C" \\\n"\\u305E" \\\n"\\u3060" \\\n"\\u3062" \\\n"\\u3065" \\\n"\\u3067" \\\n"\\u3069" \\\n"\\u3070\\u3071" \\\n"\\u3073\\u3074" \\\n"\\u3076\\u3077" \\\n"\\u3079\\u307A" \\\n"\\u307C\\u307D" \\\n"\\u3094" \\\n"\\u309E" \\\n"\\u30AC" \\\n"\\u30AE" \\\n"\\u30B0" \\\n"\\u30B2" \\\n"\\u30B4" \\\n"\\u30B6" \\\n"\\u30B8" \\\n"\\u30BA" \\\n"\\u30BC" \\\n"\\u30BE" \\\n"\\u30C0" \\\n"\\u30C2" \\\n"\\u30C5" \\\n"\\u30C7" \\\n"\\u30C9" \\\n"\\u30D0\\u30D1" \\\n"\\u30D3\\u30D4" \\\n"\\u30D6\\u30D7" \\\n"\\u30D9\\u30DA" \\\n"\\u30DC\\u30DD" \\\n"\\u30F4" \\\n"\\u30F7-\\u30FA" \\\n"\\u30FE" \\\n"\\uF900-\\uFA0D" \\\n"\\uFA10" \\\n"\\uFA12" \\\n"\\uFA15-\\uFA1E" \\\n"\\uFA20" \\\n"\\uFA22" \\\n"\\uFA25\\uFA26" \\\n"\\uFA2A-\\uFA6D" \\\n"\\uFA70-\\uFAD9" \\\n"\\uFB1D" \\\n"\\uFB1F" \\\n"\\uFB2A-\\uFB36" \\\n"\\uFB38-\\uFB3C" \\\n"\\uFB3E" \\\n"\\uFB40\\uFB41" \\\n"\\uFB43\\uFB44" \\\n"\\uFB46-\\uFB4E" \\\n"\\u{1109A}" \\\n"\\u{1109C}" \\\n"\\u{110AB}" \\\n"\\u{1112E}\\u{1112F}" \\\n"\\u{1134B}\\u{1134C}" \\\n"\\u{114BB}\\u{114BC}" \\\n"\\u{114BE}" \\\n"\\u{115BA}\\u{115BB}" \\\n"\\u{1D15E}-\\u{1D164}" \\\n"\\u{1D1BB}-\\u{1D1C0}" \\\n"\\u{2F800}-\\u{2FA1D}" \\\n"]#{accents}*" \\\n"|#{'' # characters that can be the result of a composition, except composition starters\n}" \\\n"[<->" \\\n"A-P" \\\n"R-Z" \\\n"a-p" \\\n"r-z" \\\n"\\u00A8" \\\n"\\u00C6" \\\n"\\u00D8" \\\n"\\u00E6" \\\n"\\u00F8" \\\n"\\u017F" \\\n"\\u01B7" \\\n"\\u0292" \\\n"\\u0391" \\\n"\\u0395" \\\n"\\u0397" \\\n"\\u0399" \\\n"\\u039F" \\\n"\\u03A1" \\\n"\\u03A5" \\\n"\\u03A9" \\\n"\\u03B1" \\\n"\\u03B5" \\\n"\\u03B7" \\\n"\\u03B9" \\\n"\\u03BF" \\\n"\\u03C1" \\\n"\\u03C5" \\\n"\\u03C9" \\\n"\\u03D2" \\\n"\\u0406" \\\n"\\u0410" \\\n"\\u0413" \\\n"\\u0415-\\u0418" \\\n"\\u041A" \\\n"\\u041E" \\\n"\\u0423" \\\n"\\u0427" \\\n"\\u042B" \\\n"\\u042D" \\\n"\\u0430" \\\n"\\u0433" \\\n"\\u0435-\\u0438" \\\n"\\u043A" \\\n"\\u043E" \\\n"\\u0443" \\\n"\\u0447" \\\n"\\u044B" \\\n"\\u044D" \\\n"\\u0456" \\\n"\\u0474\\u0475" \\\n"\\u04D8\\u04D9" \\\n"\\u04E8\\u04E9" \\\n"\\u0627" \\\n"\\u0648" \\\n"\\u064A" \\\n"\\u06C1" \\\n"\\u06D2" \\\n"\\u06D5" \\\n"\\u0928" \\\n"\\u0930" \\\n"\\u0933" \\\n"\\u09C7" \\\n"\\u0B47" \\\n"\\u0B92" \\\n"\\u0BC6\\u0BC7" \\\n"\\u0C46" \\\n"\\u0CBF" \\\n"\\u0CC6" \\\n"\\u0D46\\u0D47" \\\n"\\u0DD9" \\\n"\\u1025" \\\n"\\u1B05" \\\n"\\u1B07" \\\n"\\u1B09" \\\n"\\u1B0B" \\\n"\\u1B0D" \\\n"\\u1B11" \\\n"\\u1B3A" \\\n"\\u1B3C" \\\n"\\u1B3E\\u1B3F" \\\n"\\u1B42" \\\n"\\u1FBF" \\\n"\\u1FFE" \\\n"\\u2190" \\\n"\\u2192" \\\n"\\u2194" \\\n"\\u21D0" \\\n"\\u21D2" \\\n"\\u21D4" \\\n"\\u2203" \\\n"\\u2208" \\\n"\\u220B" \\\n"\\u2223" \\\n"\\u2225" \\\n"\\u223C" \\\n"\\u2243" \\\n"\\u2245" \\\n"\\u2248" \\\n"\\u224D" \\\n"\\u2261" \\\n"\\u2264\\u2265" \\\n"\\u2272\\u2273" \\\n"\\u2276\\u2277" \\\n"\\u227A-\\u227D" \\\n"\\u2282\\u2283" \\\n"\\u2286\\u2287" \\\n"\\u2291\\u2292" \\\n"\\u22A2" \\\n"\\u22A8\\u22A9" \\\n"\\u22AB" \\\n"\\u22B2-\\u22B5" \\\n"\\u3046" \\\n"\\u304B" \\\n"\\u304D" \\\n"\\u304F" \\\n"\\u3051" \\\n"\\u3053" \\\n"\\u3055" \\\n"\\u3057" \\\n"\\u3059" \\\n"\\u305B" \\\n"\\u305D" \\\n"\\u305F" \\\n"\\u3061" \\\n"\\

REGEXP_K = Regexp.compile(REGEXP_K_STRING, Regexp::EXTENDED)

REGEXP_K_STRING = "" \\\n"[\\u00A0" \\\n"\\u00A8" \\\n"\\u00AA" \\\n"\\u00AF" \\\n"\\u00B2-\\u00B5" \\\n"\\u00B8-\\u00BA" \\\n"\\u00BC-\\u00BE" \\\n"\\u0132\\u0133" \\\n"\\u013F\\u0140" \\\n"\\u0149" \\\n"\\u017F" \\\n"\\u01C4-\\u01CC" \\\n"\\u01F1-\\u01F3" \\\n"\\u02B0-\\u02B8" \\\n"\\u02D8-\\u02DD" \\\n"\\u02E0-\\u02E4" \\\n"\\u037A" \\\n"\\u0384\\u0385" \\\n"\\u03D0-\\u03D6" \\\n"\\u03F0-\\u03F2" \\\n"\\u03F4\\u03F5" \\\n"\\u03F9" \\\n"\\u0587" \\\n"\\u0675-\\u0678" \\\n"\\u0E33" \\\n"\\u0EB3" \\\n"\\u0EDC\\u0EDD" \\\n"\\u0F0C" \\\n"\\u0F77" \\\n"\\u0F79" \\\n"\\u10FC" \\\n"\\u1D2C-\\u1D2E" \\\n"\\u1D30-\\u1D3A" \\\n"\\u1D3C-\\u1D4D" \\\n"\\u1D4F-\\u1D6A" \\\n"\\u1D78" \\\n"\\u1D9B-\\u1DBF" \\\n"\\u1E9A\\u1E9B" \\\n"\\u1FBD" \\\n"\\u1FBF-\\u1FC1" \\\n"\\u1FCD-\\u1FCF" \\\n"\\u1FDD-\\u1FDF" \\\n"\\u1FED\\u1FEE" \\\n"\\u1FFD\\u1FFE" \\\n"\\u2000-\\u200A" \\\n"\\u2011" \\\n"\\u2017" \\\n"\\u2024-\\u2026" \\\n"\\u202F" \\\n"\\u2033\\u2034" \\\n"\\u2036\\u2037" \\\n"\\u203C" \\\n"\\u203E" \\\n"\\u2047-\\u2049" \\\n"\\u2057" \\\n"\\u205F" \\\n"\\u2070\\u2071" \\\n"\\u2074-\\u208E" \\\n"\\u2090-\\u209C" \\\n"\\u20A8" \\\n"\\u2100-\\u2103" \\\n"\\u2105-\\u2107" \\\n"\\u2109-\\u2113" \\\n"\\u2115\\u2116" \\\n"\\u2119-\\u211D" \\\n"\\u2120-\\u2122" \\\n"\\u2124" \\\n"\\u2128" \\\n"\\u212C\\u212D" \\\n"\\u212F-\\u2131" \\\n"\\u2133-\\u2139" \\\n"\\u213B-\\u2140" \\\n"\\u2145-\\u2149" \\\n"\\u2150-\\u217F" \\\n"\\u2189" \\\n"\\u222C\\u222D" \\\n"\\u222F\\u2230" \\\n"\\u2460-\\u24EA" \\\n"\\u2A0C" \\\n"\\u2A74-\\u2A76" \\\n"\\u2C7C\\u2C7D" \\\n"\\u2D6F" \\\n"\\u2E9F" \\\n"\\u2EF3" \\\n"\\u2F00-\\u2FD5" \\\n"\\u3000" \\\n"\\u3036" \\\n"\\u3038-\\u303A" \\\n"\\u309B\\u309C" \\\n"\\u309F" \\\n"\\u30FF" \\\n"\\u3131-\\u318E" \\\n"\\u3192-\\u319F" \\\n"\\u3200-\\u321E" \\\n"\\u3220-\\u3247" \\\n"\\u3250-\\u327E" \\\n"\\u3280-\\u33FF" \\\n"\\uA69C\\uA69D" \\\n"\\uA770" \\\n"\\uA7F8\\uA7F9" \\\n"\\uAB5C-\\uAB5F" \\\n"\\uFB00-\\uFB06" \\\n"\\uFB13-\\uFB17" \\\n"\\uFB20-\\uFB29" \\\n"\\uFB4F-\\uFBB1" \\\n"\\uFBD3-\\uFD3D" \\\n"\\uFD50-\\uFD8F" \\\n"\\uFD92-\\uFDC7" \\\n"\\uFDF0-\\uFDFC" \\\n"\\uFE10-\\uFE19" \\\n"\\uFE30-\\uFE44" \\\n"\\uFE47-\\uFE52" \\\n"\\uFE54-\\uFE66" \\\n"\\uFE68-\\uFE6B" \\\n"\\uFE70-\\uFE72" \\\n"\\uFE74" \\\n"\\uFE76-\\uFEFC" \\\n"\\uFF01-\\uFFBE" \\\n"\\uFFC2-\\uFFC7" \\\n"\\uFFCA-\\uFFCF" \\\n"\\uFFD2-\\uFFD7" \\\n"\\uFFDA-\\uFFDC" \\\n"\\uFFE0-\\uFFE6" \\\n"\\uFFE8-\\uFFEE" \\\n"\\u{1D400}-\\u{1D454}" \\\n"\\u{1D456}-\\u{1D49C}" \\\n"\\u{1D49E}\\u{1D49F}" \\\n"\\u{1D4A2}" \\\n"\\u{1D4A5}\\u{1D4A6}" \\\n"\\u{1D4A9}-\\u{1D4AC}" \\\n"\\u{1D4AE}-\\u{1D4B9}" \\\n"\\u{1D4BB}" \\\n"\\u{1D4BD}-\\u{1D4C3}" \\\n"\\u{1D4C5}-\\u{1D505}" \\\n"\\u{1D507}-\\u{1D50A}" \\\n"\\u{1D50D}-\\u{1D514}" \\\n"\\u{1D516}-\\u{1D51C}" \\\n"\\u{1D51E}-\\u{1D539}" \\\n"\\u{1D53B}-\\u{1D53E}" \\\n"\\u{1D540}-\\u{1D544}" \\\n"\\u{1D546}" \\\n"\\u{1D54A}-\\u{1D550}" \\\n"\\u{1D552}-\\u{1D6A5}" \\\n"\\u{1D6A8}-\\u{1D7CB}" \\\n"\\u{1D7CE}-\\u{1D7FF}" \\\n"\\u{1EE00}-\\u{1EE03}" \\\n"\\u{1EE05}-\\u{1EE1F}" \\\n"\\u{1EE21}\\u{1EE22}" \\\n"\\u{1EE24}" \\\n"\\u{1EE27}" \\\n"\\u{1EE29}-\\u{1EE32}" \\\n"\\u{1EE34}-\\u{1EE37}" \\\n"\\u{1EE39}" \\\n"\\u{1EE3B}" \\\n"\\u{1EE42}" \\\n"\\u{1EE47}" \\\n"\\u{1EE49}" \\\n"\\u{1EE4B}" \\\n"\\u{1EE4D}-\\u{1EE4F}" \\\n"\\u{1EE51}\\u{1EE52}" \\\n"\\u{1EE54}" \\\n"\\u{1EE57}" \\\n"\\u{1EE59}" \\\n"\\u{1EE5B}" \\\n"\\u{1EE5D}" \\\n"\\u{1EE5F}" \\\n"\\u{1EE61}\\u{1EE62}" \\\n"\\u{1EE64}" \\\n"\\u{1EE67}-\\u{1EE6A}" \\\n"\\u{1EE6C}-\\u{1EE72}" \\\n"\\u{1EE74}-\\u{1EE77}" \\\n"\\u{1EE79}-\\u{1EE7C}" \\\n"\\u{1EE7E}" \\\n"\\u{1EE80}-\\u{1EE89}" \\\n"\\u{1EE8B}-\\u{1EE9B}" \\\n"\\u{1EEA1}-\\u{1EEA3}" \\\n"\\u{1EEA5}-\\u{1EEA9}" \\\n"\\u{1EEAB}-\\u{1EEBB}" \\\n"\\u{1F100}-\\u{1F10A}" \\\n"\\u{1F110}-\\u{1F12E}" \\\n"\\u{1F130}-\\u{1F14F}" \\\n"\\u{1F16A}-\\u{1F16C}" \\\n"\\u{1F190}" \\\n"\\u{1F200}-\\u{1F202}" \\\n"\\u{1F210}-\\u{1F23B}" \\\n"\\u{1F240}-\\u{1F248}" \\\n"\\u{1F250}\\u{1F251}" \\\n"]"

SBASE = 0xAC00

SCOUNT = LCOUNT * NCOUNT

TBASE = 0x11A7

TCOUNT = 28

UNICODE_ENCODINGS = [Encoding::UTF_16BE, Encoding::UTF_16LE, Encoding::UTF_32BE, Encoding::UTF_32LE,\nEncoding::GB18030, Encoding::UCS_2BE, Encoding::UCS_4BE]

VBASE = 0x1161

VCOUNT = 21

Files

  • lib/unicode_normalize/normalize.rb
  • lib/unicode_normalize/tables.rb
  • string.c