unicode_case_converter 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 844460e46e8f0bc6de1aa637cb43b912e0cf6653
4
- data.tar.gz: 7da928bdbcf271be0eb4503e6ce545c913980309
3
+ metadata.gz: 8147ac9237fe2a9342e9233920cd704de361b475
4
+ data.tar.gz: 653128b15114cb8c6d76f40b669275542f59b768
5
5
  SHA512:
6
- metadata.gz: 95b9a7b948e36fb4854d38b9f138e6da51be0f0e63acddad5b368c4290cb22779bfe6263b16b38648cf75297fe3d2829c36cf684ccd2fe469880d0bf1f96ffbb
7
- data.tar.gz: 1e794b7c010814358daffbcd6d0ed2b582455c79c65b2c101886d924145c3e9ded30453be89d5231d99eb22240e760d4cc8ba22239360606084d14973781601d
6
+ metadata.gz: 996aecfad4635f622695e573ca94e9c8813b185302e33032fa1ec238f94b15c25a24defad1d14a61313106fa439d778c5583d4fd5ec42216d7e393e85663b14e
7
+ data.tar.gz: 37aea4013ee039d5a7cd55153a1997c88e5c170ad289a6145c36193ab296eafd0257ab828a7ef2f2620fb997ecbd8d621d2376cdf530120aad9eb2d1952ac0d6
@@ -8,136 +8,152 @@ module UnicodeCaseConverter
8
8
  UPCASE_UPPERCASE_CHARACTERS = "\u{0041}\u{0042}\u{0043}\u{0044}\u{0045}\u{0046}\u{0047}\u{0048}\u{0049}\u{004A}\u{004B}\u{004C}\u{004D}\u{004E}\u{004F}\u{0050}\u{0051}\u{0052}\u{0053}\u{0054}\u{0055}\u{0056}\u{0057}\u{0058}\u{0059}\u{005A}\u{039C}\u{00C0}\u{00C1}\u{00C2}\u{00C3}\u{00C4}\u{00C5}\u{00C6}\u{00C7}\u{00C8}\u{00C9}\u{00CA}\u{00CB}\u{00CC}\u{00CD}\u{00CE}\u{00CF}\u{00D0}\u{00D1}\u{00D2}\u{00D3}\u{00D4}\u{00D5}\u{00D6}\u{00D8}\u{00D9}\u{00DA}\u{00DB}\u{00DC}\u{00DD}\u{00DE}\u{0178}\u{0100}\u{0102}\u{0104}\u{0106}\u{0108}\u{010A}\u{010C}\u{010E}\u{0110}\u{0112}\u{0114}\u{0116}\u{0118}\u{011A}\u{011C}\u{011E}\u{0120}\u{0122}\u{0124}\u{0126}\u{0128}\u{012A}\u{012C}\u{012E}\u{0049}\u{0132}\u{0134}\u{0136}\u{0139}\u{013B}\u{013D}\u{013F}\u{0141}\u{0143}\u{0145}\u{0147}\u{014A}\u{014C}\u{014E}\u{0150}\u{0152}\u{0154}\u{0156}\u{0158}\u{015A}\u{015C}\u{015E}\u{0160}\u{0162}\u{0164}\u{0166}\u{0168}\u{016A}\u{016C}\u{016E}\u{0170}\u{0172}\u{0174}\u{0176}\u{0179}\u{017B}\u{017D}\u{0053}\u{0243}\u{0182}\u{0184}\u{0187}\u{018B}\u{0191}\u{01F6}\u{0198}\u{023D}\u{0220}\u{01A0}\u{01A2}\u{01A4}\u{01A7}\u{01AC}\u{01AF}\u{01B3}\u{01B5}\u{01B8}\u{01BC}\u{01F7}\u{01C5}\u{01C5}\u{01C5}\u{01C8}\u{01C8}\u{01C8}\u{01CB}\u{01CB}\u{01CB}\u{01CD}\u{01CF}\u{01D1}\u{01D3}\u{01D5}\u{01D7}\u{01D9}\u{01DB}\u{018E}\u{01DE}\u{01E0}\u{01E2}\u{01E4}\u{01E6}\u{01E8}\u{01EA}\u{01EC}\u{01EE}\u{01F2}\u{01F2}\u{01F2}\u{01F4}\u{01F8}\u{01FA}\u{01FC}\u{01FE}\u{0200}\u{0202}\u{0204}\u{0206}\u{0208}\u{020A}\u{020C}\u{020E}\u{0210}\u{0212}\u{0214}\u{0216}\u{0218}\u{021A}\u{021C}\u{021E}\u{0222}\u{0224}\u{0226}\u{0228}\u{022A}\u{022C}\u{022E}\u{0230}\u{0232}\u{023B}\u{2C7E}\u{2C7F}\u{0241}\u{0246}\u{0248}\u{024A}\u{024C}\u{024E}\u{2C6F}\u{2C6D}\u{2C70}\u{0181}\u{0186}\u{0189}\u{018A}\u{018F}\u{0190}\u{A7AB}\u{0193}\u{A7AC}\u{0194}\u{A78D}\u{A7AA}\u{0197}\u{0196}\u{2C62}\u{A7AD}\u{019C}\u{2C6E}\u{019D}\u{019F}\u{2C64}\u{01A6}\u{01A9}\u{A7B1}\u{01AE}\u{0244}\u{01B1}\u{01B2}\u{0245}\u{01B7}\u{A7B2}\u{A7B0}\u{0399}\u{0370}\u{0372}\u{0376}\u{03FD}\u{03FE}\u{03FF}\u{0386}\u{0388}\u{0389}\u{038A}\u{0391}\u{0392}\u{0393}\u{0394}\u{0395}\u{0396}\u{0397}\u{0398}\u{0399}\u{039A}\u{039B}\u{039C}\u{039D}\u{039E}\u{039F}\u{03A0}\u{03A1}\u{03A3}\u{03A3}\u{03A4}\u{03A5}\u{03A6}\u{03A7}\u{03A8}\u{03A9}\u{03AA}\u{03AB}\u{038C}\u{038E}\u{038F}\u{0392}\u{0398}\u{03A6}\u{03A0}\u{03CF}\u{03D8}\u{03DA}\u{03DC}\u{03DE}\u{03E0}\u{03E2}\u{03E4}\u{03E6}\u{03E8}\u{03EA}\u{03EC}\u{03EE}\u{039A}\u{03A1}\u{03F9}\u{037F}\u{0395}\u{03F7}\u{03FA}\u{0410}\u{0411}\u{0412}\u{0413}\u{0414}\u{0415}\u{0416}\u{0417}\u{0418}\u{0419}\u{041A}\u{041B}\u{041C}\u{041D}\u{041E}\u{041F}\u{0420}\u{0421}\u{0422}\u{0423}\u{0424}\u{0425}\u{0426}\u{0427}\u{0428}\u{0429}\u{042A}\u{042B}\u{042C}\u{042D}\u{042E}\u{042F}\u{0400}\u{0401}\u{0402}\u{0403}\u{0404}\u{0405}\u{0406}\u{0407}\u{0408}\u{0409}\u{040A}\u{040B}\u{040C}\u{040D}\u{040E}\u{040F}\u{0460}\u{0462}\u{0464}\u{0466}\u{0468}\u{046A}\u{046C}\u{046E}\u{0470}\u{0472}\u{0474}\u{0476}\u{0478}\u{047A}\u{047C}\u{047E}\u{0480}\u{048A}\u{048C}\u{048E}\u{0490}\u{0492}\u{0494}\u{0496}\u{0498}\u{049A}\u{049C}\u{049E}\u{04A0}\u{04A2}\u{04A4}\u{04A6}\u{04A8}\u{04AA}\u{04AC}\u{04AE}\u{04B0}\u{04B2}\u{04B4}\u{04B6}\u{04B8}\u{04BA}\u{04BC}\u{04BE}\u{04C1}\u{04C3}\u{04C5}\u{04C7}\u{04C9}\u{04CB}\u{04CD}\u{04C0}\u{04D0}\u{04D2}\u{04D4}\u{04D6}\u{04D8}\u{04DA}\u{04DC}\u{04DE}\u{04E0}\u{04E2}\u{04E4}\u{04E6}\u{04E8}\u{04EA}\u{04EC}\u{04EE}\u{04F0}\u{04F2}\u{04F4}\u{04F6}\u{04F8}\u{04FA}\u{04FC}\u{04FE}\u{0500}\u{0502}\u{0504}\u{0506}\u{0508}\u{050A}\u{050C}\u{050E}\u{0510}\u{0512}\u{0514}\u{0516}\u{0518}\u{051A}\u{051C}\u{051E}\u{0520}\u{0522}\u{0524}\u{0526}\u{0528}\u{052A}\u{052C}\u{052E}\u{0531}\u{0532}\u{0533}\u{0534}\u{0535}\u{0536}\u{0537}\u{0538}\u{0539}\u{053A}\u{053B}\u{053C}\u{053D}\u{053E}\u{053F}\u{0540}\u{0541}\u{0542}\u{0543}\u{0544}\u{0545}\u{0546}\u{0547}\u{0548}\u{0549}\u{054A}\u{054B}\u{054C}\u{054D}\u{054E}\u{054F}\u{0550}\u{0551}\u{0552}\u{0553}\u{0554}\u{0555}\u{0556}\u{13F0}\u{13F1}\u{13F2}\u{13F3}\u{13F4}\u{13F5}\u{A77D}\u{2C63}\u{1E00}\u{1E02}\u{1E04}\u{1E06}\u{1E08}\u{1E0A}\u{1E0C}\u{1E0E}\u{1E10}\u{1E12}\u{1E14}\u{1E16}\u{1E18}\u{1E1A}\u{1E1C}\u{1E1E}\u{1E20}\u{1E22}\u{1E24}\u{1E26}\u{1E28}\u{1E2A}\u{1E2C}\u{1E2E}\u{1E30}\u{1E32}\u{1E34}\u{1E36}\u{1E38}\u{1E3A}\u{1E3C}\u{1E3E}\u{1E40}\u{1E42}\u{1E44}\u{1E46}\u{1E48}\u{1E4A}\u{1E4C}\u{1E4E}\u{1E50}\u{1E52}\u{1E54}\u{1E56}\u{1E58}\u{1E5A}\u{1E5C}\u{1E5E}\u{1E60}\u{1E62}\u{1E64}\u{1E66}\u{1E68}\u{1E6A}\u{1E6C}\u{1E6E}\u{1E70}\u{1E72}\u{1E74}\u{1E76}\u{1E78}\u{1E7A}\u{1E7C}\u{1E7E}\u{1E80}\u{1E82}\u{1E84}\u{1E86}\u{1E88}\u{1E8A}\u{1E8C}\u{1E8E}\u{1E90}\u{1E92}\u{1E94}\u{1E60}\u{1EA0}\u{1EA2}\u{1EA4}\u{1EA6}\u{1EA8}\u{1EAA}\u{1EAC}\u{1EAE}\u{1EB0}\u{1EB2}\u{1EB4}\u{1EB6}\u{1EB8}\u{1EBA}\u{1EBC}\u{1EBE}\u{1EC0}\u{1EC2}\u{1EC4}\u{1EC6}\u{1EC8}\u{1ECA}\u{1ECC}\u{1ECE}\u{1ED0}\u{1ED2}\u{1ED4}\u{1ED6}\u{1ED8}\u{1EDA}\u{1EDC}\u{1EDE}\u{1EE0}\u{1EE2}\u{1EE4}\u{1EE6}\u{1EE8}\u{1EEA}\u{1EEC}\u{1EEE}\u{1EF0}\u{1EF2}\u{1EF4}\u{1EF6}\u{1EF8}\u{1EFA}\u{1EFC}\u{1EFE}\u{1F08}\u{1F09}\u{1F0A}\u{1F0B}\u{1F0C}\u{1F0D}\u{1F0E}\u{1F0F}\u{1F18}\u{1F19}\u{1F1A}\u{1F1B}\u{1F1C}\u{1F1D}\u{1F28}\u{1F29}\u{1F2A}\u{1F2B}\u{1F2C}\u{1F2D}\u{1F2E}\u{1F2F}\u{1F38}\u{1F39}\u{1F3A}\u{1F3B}\u{1F3C}\u{1F3D}\u{1F3E}\u{1F3F}\u{1F48}\u{1F49}\u{1F4A}\u{1F4B}\u{1F4C}\u{1F4D}\u{1F59}\u{1F5B}\u{1F5D}\u{1F5F}\u{1F68}\u{1F69}\u{1F6A}\u{1F6B}\u{1F6C}\u{1F6D}\u{1F6E}\u{1F6F}\u{1FBA}\u{1FBB}\u{1FC8}\u{1FC9}\u{1FCA}\u{1FCB}\u{1FDA}\u{1FDB}\u{1FF8}\u{1FF9}\u{1FEA}\u{1FEB}\u{1FFA}\u{1FFB}\u{1F88}\u{1F89}\u{1F8A}\u{1F8B}\u{1F8C}\u{1F8D}\u{1F8E}\u{1F8F}\u{1F98}\u{1F99}\u{1F9A}\u{1F9B}\u{1F9C}\u{1F9D}\u{1F9E}\u{1F9F}\u{1FA8}\u{1FA9}\u{1FAA}\u{1FAB}\u{1FAC}\u{1FAD}\u{1FAE}\u{1FAF}\u{1FB8}\u{1FB9}\u{1FBC}\u{0399}\u{1FCC}\u{1FD8}\u{1FD9}\u{1FE8}\u{1FE9}\u{1FEC}\u{1FFC}\u{2132}\u{2160}\u{2161}\u{2162}\u{2163}\u{2164}\u{2165}\u{2166}\u{2167}\u{2168}\u{2169}\u{216A}\u{216B}\u{216C}\u{216D}\u{216E}\u{216F}\u{2183}\u{24B6}\u{24B7}\u{24B8}\u{24B9}\u{24BA}\u{24BB}\u{24BC}\u{24BD}\u{24BE}\u{24BF}\u{24C0}\u{24C1}\u{24C2}\u{24C3}\u{24C4}\u{24C5}\u{24C6}\u{24C7}\u{24C8}\u{24C9}\u{24CA}\u{24CB}\u{24CC}\u{24CD}\u{24CE}\u{24CF}\u{2C00}\u{2C01}\u{2C02}\u{2C03}\u{2C04}\u{2C05}\u{2C06}\u{2C07}\u{2C08}\u{2C09}\u{2C0A}\u{2C0B}\u{2C0C}\u{2C0D}\u{2C0E}\u{2C0F}\u{2C10}\u{2C11}\u{2C12}\u{2C13}\u{2C14}\u{2C15}\u{2C16}\u{2C17}\u{2C18}\u{2C19}\u{2C1A}\u{2C1B}\u{2C1C}\u{2C1D}\u{2C1E}\u{2C1F}\u{2C20}\u{2C21}\u{2C22}\u{2C23}\u{2C24}\u{2C25}\u{2C26}\u{2C27}\u{2C28}\u{2C29}\u{2C2A}\u{2C2B}\u{2C2C}\u{2C2D}\u{2C2E}\u{2C60}\u{023A}\u{023E}\u{2C67}\u{2C69}\u{2C6B}\u{2C72}\u{2C75}\u{2C80}\u{2C82}\u{2C84}\u{2C86}\u{2C88}\u{2C8A}\u{2C8C}\u{2C8E}\u{2C90}\u{2C92}\u{2C94}\u{2C96}\u{2C98}\u{2C9A}\u{2C9C}\u{2C9E}\u{2CA0}\u{2CA2}\u{2CA4}\u{2CA6}\u{2CA8}\u{2CAA}\u{2CAC}\u{2CAE}\u{2CB0}\u{2CB2}\u{2CB4}\u{2CB6}\u{2CB8}\u{2CBA}\u{2CBC}\u{2CBE}\u{2CC0}\u{2CC2}\u{2CC4}\u{2CC6}\u{2CC8}\u{2CCA}\u{2CCC}\u{2CCE}\u{2CD0}\u{2CD2}\u{2CD4}\u{2CD6}\u{2CD8}\u{2CDA}\u{2CDC}\u{2CDE}\u{2CE0}\u{2CE2}\u{2CEB}\u{2CED}\u{2CF2}\u{10A0}\u{10A1}\u{10A2}\u{10A3}\u{10A4}\u{10A5}\u{10A6}\u{10A7}\u{10A8}\u{10A9}\u{10AA}\u{10AB}\u{10AC}\u{10AD}\u{10AE}\u{10AF}\u{10B0}\u{10B1}\u{10B2}\u{10B3}\u{10B4}\u{10B5}\u{10B6}\u{10B7}\u{10B8}\u{10B9}\u{10BA}\u{10BB}\u{10BC}\u{10BD}\u{10BE}\u{10BF}\u{10C0}\u{10C1}\u{10C2}\u{10C3}\u{10C4}\u{10C5}\u{10C7}\u{10CD}\u{A640}\u{A642}\u{A644}\u{A646}\u{A648}\u{A64A}\u{A64C}\u{A64E}\u{A650}\u{A652}\u{A654}\u{A656}\u{A658}\u{A65A}\u{A65C}\u{A65E}\u{A660}\u{A662}\u{A664}\u{A666}\u{A668}\u{A66A}\u{A66C}\u{A680}\u{A682}\u{A684}\u{A686}\u{A688}\u{A68A}\u{A68C}\u{A68E}\u{A690}\u{A692}\u{A694}\u{A696}\u{A698}\u{A69A}\u{A722}\u{A724}\u{A726}\u{A728}\u{A72A}\u{A72C}\u{A72E}\u{A732}\u{A734}\u{A736}\u{A738}\u{A73A}\u{A73C}\u{A73E}\u{A740}\u{A742}\u{A744}\u{A746}\u{A748}\u{A74A}\u{A74C}\u{A74E}\u{A750}\u{A752}\u{A754}\u{A756}\u{A758}\u{A75A}\u{A75C}\u{A75E}\u{A760}\u{A762}\u{A764}\u{A766}\u{A768}\u{A76A}\u{A76C}\u{A76E}\u{A779}\u{A77B}\u{A77E}\u{A780}\u{A782}\u{A784}\u{A786}\u{A78B}\u{A790}\u{A792}\u{A796}\u{A798}\u{A79A}\u{A79C}\u{A79E}\u{A7A0}\u{A7A2}\u{A7A4}\u{A7A6}\u{A7A8}\u{A7B4}\u{A7B6}\u{A7B3}\u{13A0}\u{13A1}\u{13A2}\u{13A3}\u{13A4}\u{13A5}\u{13A6}\u{13A7}\u{13A8}\u{13A9}\u{13AA}\u{13AB}\u{13AC}\u{13AD}\u{13AE}\u{13AF}\u{13B0}\u{13B1}\u{13B2}\u{13B3}\u{13B4}\u{13B5}\u{13B6}\u{13B7}\u{13B8}\u{13B9}\u{13BA}\u{13BB}\u{13BC}\u{13BD}\u{13BE}\u{13BF}\u{13C0}\u{13C1}\u{13C2}\u{13C3}\u{13C4}\u{13C5}\u{13C6}\u{13C7}\u{13C8}\u{13C9}\u{13CA}\u{13CB}\u{13CC}\u{13CD}\u{13CE}\u{13CF}\u{13D0}\u{13D1}\u{13D2}\u{13D3}\u{13D4}\u{13D5}\u{13D6}\u{13D7}\u{13D8}\u{13D9}\u{13DA}\u{13DB}\u{13DC}\u{13DD}\u{13DE}\u{13DF}\u{13E0}\u{13E1}\u{13E2}\u{13E3}\u{13E4}\u{13E5}\u{13E6}\u{13E7}\u{13E8}\u{13E9}\u{13EA}\u{13EB}\u{13EC}\u{13ED}\u{13EE}\u{13EF}\u{FF21}\u{FF22}\u{FF23}\u{FF24}\u{FF25}\u{FF26}\u{FF27}\u{FF28}\u{FF29}\u{FF2A}\u{FF2B}\u{FF2C}\u{FF2D}\u{FF2E}\u{FF2F}\u{FF30}\u{FF31}\u{FF32}\u{FF33}\u{FF34}\u{FF35}\u{FF36}\u{FF37}\u{FF38}\u{FF39}\u{FF3A}\u{10400}\u{10401}\u{10402}\u{10403}\u{10404}\u{10405}\u{10406}\u{10407}\u{10408}\u{10409}\u{1040A}\u{1040B}\u{1040C}\u{1040D}\u{1040E}\u{1040F}\u{10410}\u{10411}\u{10412}\u{10413}\u{10414}\u{10415}\u{10416}\u{10417}\u{10418}\u{10419}\u{1041A}\u{1041B}\u{1041C}\u{1041D}\u{1041E}\u{1041F}\u{10420}\u{10421}\u{10422}\u{10423}\u{10424}\u{10425}\u{10426}\u{10427}\u{10C80}\u{10C81}\u{10C82}\u{10C83}\u{10C84}\u{10C85}\u{10C86}\u{10C87}\u{10C88}\u{10C89}\u{10C8A}\u{10C8B}\u{10C8C}\u{10C8D}\u{10C8E}\u{10C8F}\u{10C90}\u{10C91}\u{10C92}\u{10C93}\u{10C94}\u{10C95}\u{10C96}\u{10C97}\u{10C98}\u{10C99}\u{10C9A}\u{10C9B}\u{10C9C}\u{10C9D}\u{10C9E}\u{10C9F}\u{10CA0}\u{10CA1}\u{10CA2}\u{10CA3}\u{10CA4}\u{10CA5}\u{10CA6}\u{10CA7}\u{10CA8}\u{10CA9}\u{10CAA}\u{10CAB}\u{10CAC}\u{10CAD}\u{10CAE}\u{10CAF}\u{10CB0}\u{10CB1}\u{10CB2}\u{118A0}\u{118A1}\u{118A2}\u{118A3}\u{118A4}\u{118A5}\u{118A6}\u{118A7}\u{118A8}\u{118A9}\u{118AA}\u{118AB}\u{118AC}\u{118AD}\u{118AE}\u{118AF}\u{118B0}\u{118B1}\u{118B2}\u{118B3}\u{118B4}\u{118B5}\u{118B6}\u{118B7}\u{118B8}\u{118B9}\u{118BA}\u{118BB}\u{118BC}\u{118BD}\u{118BE}\u{118BF}\u{0053}\u{01C4}\u{01C4}\u{01C4}\u{01C7}\u{01C7}\u{01C7}\u{01CA}\u{01CA}\u{01CA}\u{01F1}\u{01F1}\u{01F1}\u{025C}\u{0261}\u{026C}\u{0287}\u{029D}\u{029E}\u{03F3}\u{0529}\u{052B}\u{052D}\u{052F}\u{13F8}\u{13F9}\u{13FA}\u{13FB}\u{13FC}\u{13FD}".freeze
9
9
  DOWNCASE_LOWERCASE_CHARACTERS = "\u{0061}\u{0062}\u{0063}\u{0064}\u{0065}\u{0066}\u{0067}\u{0068}\u{0069}\u{006A}\u{006B}\u{006C}\u{006D}\u{006E}\u{006F}\u{0070}\u{0071}\u{0072}\u{0073}\u{0074}\u{0075}\u{0076}\u{0077}\u{0078}\u{0079}\u{007A}\u{00E0}\u{00E1}\u{00E2}\u{00E3}\u{00E4}\u{00E5}\u{00E6}\u{00E7}\u{00E8}\u{00E9}\u{00EA}\u{00EB}\u{00EC}\u{00ED}\u{00EE}\u{00EF}\u{00F0}\u{00F1}\u{00F2}\u{00F3}\u{00F4}\u{00F5}\u{00F6}\u{00F8}\u{00F9}\u{00FA}\u{00FB}\u{00FC}\u{00FD}\u{00FE}\u{00FF}\u{0101}\u{0103}\u{0105}\u{0107}\u{0109}\u{010B}\u{010D}\u{010F}\u{0111}\u{0113}\u{0115}\u{0117}\u{0119}\u{011B}\u{011D}\u{011F}\u{0121}\u{0123}\u{0125}\u{0127}\u{0129}\u{012B}\u{012D}\u{012F}\u{0133}\u{0135}\u{0137}\u{013A}\u{013C}\u{013E}\u{0140}\u{0142}\u{0144}\u{0146}\u{0148}\u{014B}\u{014D}\u{014F}\u{0151}\u{0153}\u{0155}\u{0157}\u{0159}\u{015B}\u{015D}\u{015F}\u{0161}\u{0163}\u{0165}\u{0167}\u{0169}\u{016B}\u{016D}\u{016F}\u{0171}\u{0173}\u{0175}\u{0177}\u{017A}\u{017C}\u{017E}\u{0180}\u{0183}\u{0185}\u{0188}\u{018C}\u{0192}\u{0195}\u{0199}\u{019A}\u{019E}\u{01A1}\u{01A3}\u{01A5}\u{01A8}\u{01AD}\u{01B0}\u{01B4}\u{01B6}\u{01B9}\u{01BD}\u{01BF}\u{01C6}\u{01C9}\u{01CC}\u{01CE}\u{01D0}\u{01D2}\u{01D4}\u{01D6}\u{01D8}\u{01DA}\u{01DC}\u{01DD}\u{01DF}\u{01E1}\u{01E3}\u{01E5}\u{01E7}\u{01E9}\u{01EB}\u{01ED}\u{01EF}\u{01F3}\u{01F5}\u{01F9}\u{01FB}\u{01FD}\u{01FF}\u{0201}\u{0203}\u{0205}\u{0207}\u{0209}\u{020B}\u{020D}\u{020F}\u{0211}\u{0213}\u{0215}\u{0217}\u{0219}\u{021B}\u{021D}\u{021F}\u{0223}\u{0225}\u{0227}\u{0229}\u{022B}\u{022D}\u{022F}\u{0231}\u{0233}\u{023C}\u{023F}\u{0240}\u{0242}\u{0247}\u{0249}\u{024B}\u{024D}\u{024F}\u{0250}\u{0251}\u{0252}\u{0253}\u{0254}\u{0256}\u{0257}\u{0259}\u{025B}\u{025C}\u{0260}\u{0261}\u{0263}\u{0265}\u{0266}\u{0268}\u{0269}\u{026B}\u{026C}\u{026F}\u{0271}\u{0272}\u{0275}\u{027D}\u{0280}\u{0283}\u{0287}\u{0288}\u{0289}\u{028A}\u{028B}\u{028C}\u{0292}\u{029D}\u{029E}\u{0371}\u{0373}\u{0377}\u{037B}\u{037C}\u{037D}\u{03AC}\u{03AD}\u{03AE}\u{03AF}\u{03B1}\u{03B2}\u{03B3}\u{03B4}\u{03B5}\u{03B6}\u{03B7}\u{03B8}\u{03B9}\u{03BA}\u{03BB}\u{03BC}\u{03BD}\u{03BE}\u{03BF}\u{03C0}\u{03C1}\u{03C3}\u{03C4}\u{03C5}\u{03C6}\u{03C7}\u{03C8}\u{03C9}\u{03CA}\u{03CB}\u{03CC}\u{03CD}\u{03CE}\u{03D7}\u{03D9}\u{03DB}\u{03DD}\u{03DF}\u{03E1}\u{03E3}\u{03E5}\u{03E7}\u{03E9}\u{03EB}\u{03ED}\u{03EF}\u{03F2}\u{03F3}\u{03F8}\u{03FB}\u{0430}\u{0431}\u{0432}\u{0433}\u{0434}\u{0435}\u{0436}\u{0437}\u{0438}\u{0439}\u{043A}\u{043B}\u{043C}\u{043D}\u{043E}\u{043F}\u{0440}\u{0441}\u{0442}\u{0443}\u{0444}\u{0445}\u{0446}\u{0447}\u{0448}\u{0449}\u{044A}\u{044B}\u{044C}\u{044D}\u{044E}\u{044F}\u{0450}\u{0451}\u{0452}\u{0453}\u{0454}\u{0455}\u{0456}\u{0457}\u{0458}\u{0459}\u{045A}\u{045B}\u{045C}\u{045D}\u{045E}\u{045F}\u{0461}\u{0463}\u{0465}\u{0467}\u{0469}\u{046B}\u{046D}\u{046F}\u{0471}\u{0473}\u{0475}\u{0477}\u{0479}\u{047B}\u{047D}\u{047F}\u{0481}\u{048B}\u{048D}\u{048F}\u{0491}\u{0493}\u{0495}\u{0497}\u{0499}\u{049B}\u{049D}\u{049F}\u{04A1}\u{04A3}\u{04A5}\u{04A7}\u{04A9}\u{04AB}\u{04AD}\u{04AF}\u{04B1}\u{04B3}\u{04B5}\u{04B7}\u{04B9}\u{04BB}\u{04BD}\u{04BF}\u{04C2}\u{04C4}\u{04C6}\u{04C8}\u{04CA}\u{04CC}\u{04CE}\u{04CF}\u{04D1}\u{04D3}\u{04D5}\u{04D7}\u{04D9}\u{04DB}\u{04DD}\u{04DF}\u{04E1}\u{04E3}\u{04E5}\u{04E7}\u{04E9}\u{04EB}\u{04ED}\u{04EF}\u{04F1}\u{04F3}\u{04F5}\u{04F7}\u{04F9}\u{04FB}\u{04FD}\u{04FF}\u{0501}\u{0503}\u{0505}\u{0507}\u{0509}\u{050B}\u{050D}\u{050F}\u{0511}\u{0513}\u{0515}\u{0517}\u{0519}\u{051B}\u{051D}\u{051F}\u{0521}\u{0523}\u{0525}\u{0527}\u{0529}\u{052B}\u{052D}\u{052F}\u{0561}\u{0562}\u{0563}\u{0564}\u{0565}\u{0566}\u{0567}\u{0568}\u{0569}\u{056A}\u{056B}\u{056C}\u{056D}\u{056E}\u{056F}\u{0570}\u{0571}\u{0572}\u{0573}\u{0574}\u{0575}\u{0576}\u{0577}\u{0578}\u{0579}\u{057A}\u{057B}\u{057C}\u{057D}\u{057E}\u{057F}\u{0580}\u{0581}\u{0582}\u{0583}\u{0584}\u{0585}\u{0586}\u{13F8}\u{13F9}\u{13FA}\u{13FB}\u{13FC}\u{13FD}\u{1D79}\u{1D7D}\u{1E01}\u{1E03}\u{1E05}\u{1E07}\u{1E09}\u{1E0B}\u{1E0D}\u{1E0F}\u{1E11}\u{1E13}\u{1E15}\u{1E17}\u{1E19}\u{1E1B}\u{1E1D}\u{1E1F}\u{1E21}\u{1E23}\u{1E25}\u{1E27}\u{1E29}\u{1E2B}\u{1E2D}\u{1E2F}\u{1E31}\u{1E33}\u{1E35}\u{1E37}\u{1E39}\u{1E3B}\u{1E3D}\u{1E3F}\u{1E41}\u{1E43}\u{1E45}\u{1E47}\u{1E49}\u{1E4B}\u{1E4D}\u{1E4F}\u{1E51}\u{1E53}\u{1E55}\u{1E57}\u{1E59}\u{1E5B}\u{1E5D}\u{1E5F}\u{1E61}\u{1E63}\u{1E65}\u{1E67}\u{1E69}\u{1E6B}\u{1E6D}\u{1E6F}\u{1E71}\u{1E73}\u{1E75}\u{1E77}\u{1E79}\u{1E7B}\u{1E7D}\u{1E7F}\u{1E81}\u{1E83}\u{1E85}\u{1E87}\u{1E89}\u{1E8B}\u{1E8D}\u{1E8F}\u{1E91}\u{1E93}\u{1E95}\u{1EA1}\u{1EA3}\u{1EA5}\u{1EA7}\u{1EA9}\u{1EAB}\u{1EAD}\u{1EAF}\u{1EB1}\u{1EB3}\u{1EB5}\u{1EB7}\u{1EB9}\u{1EBB}\u{1EBD}\u{1EBF}\u{1EC1}\u{1EC3}\u{1EC5}\u{1EC7}\u{1EC9}\u{1ECB}\u{1ECD}\u{1ECF}\u{1ED1}\u{1ED3}\u{1ED5}\u{1ED7}\u{1ED9}\u{1EDB}\u{1EDD}\u{1EDF}\u{1EE1}\u{1EE3}\u{1EE5}\u{1EE7}\u{1EE9}\u{1EEB}\u{1EED}\u{1EEF}\u{1EF1}\u{1EF3}\u{1EF5}\u{1EF7}\u{1EF9}\u{1EFB}\u{1EFD}\u{1EFF}\u{1F00}\u{1F01}\u{1F02}\u{1F03}\u{1F04}\u{1F05}\u{1F06}\u{1F07}\u{1F10}\u{1F11}\u{1F12}\u{1F13}\u{1F14}\u{1F15}\u{1F20}\u{1F21}\u{1F22}\u{1F23}\u{1F24}\u{1F25}\u{1F26}\u{1F27}\u{1F30}\u{1F31}\u{1F32}\u{1F33}\u{1F34}\u{1F35}\u{1F36}\u{1F37}\u{1F40}\u{1F41}\u{1F42}\u{1F43}\u{1F44}\u{1F45}\u{1F51}\u{1F53}\u{1F55}\u{1F57}\u{1F60}\u{1F61}\u{1F62}\u{1F63}\u{1F64}\u{1F65}\u{1F66}\u{1F67}\u{1F70}\u{1F71}\u{1F72}\u{1F73}\u{1F74}\u{1F75}\u{1F76}\u{1F77}\u{1F78}\u{1F79}\u{1F7A}\u{1F7B}\u{1F7C}\u{1F7D}\u{1F80}\u{1F81}\u{1F82}\u{1F83}\u{1F84}\u{1F85}\u{1F86}\u{1F87}\u{1F90}\u{1F91}\u{1F92}\u{1F93}\u{1F94}\u{1F95}\u{1F96}\u{1F97}\u{1FA0}\u{1FA1}\u{1FA2}\u{1FA3}\u{1FA4}\u{1FA5}\u{1FA6}\u{1FA7}\u{1FB0}\u{1FB1}\u{1FB3}\u{1FC3}\u{1FD0}\u{1FD1}\u{1FE0}\u{1FE1}\u{1FE5}\u{1FF3}\u{214E}\u{2170}\u{2171}\u{2172}\u{2173}\u{2174}\u{2175}\u{2176}\u{2177}\u{2178}\u{2179}\u{217A}\u{217B}\u{217C}\u{217D}\u{217E}\u{217F}\u{2184}\u{24D0}\u{24D1}\u{24D2}\u{24D3}\u{24D4}\u{24D5}\u{24D6}\u{24D7}\u{24D8}\u{24D9}\u{24DA}\u{24DB}\u{24DC}\u{24DD}\u{24DE}\u{24DF}\u{24E0}\u{24E1}\u{24E2}\u{24E3}\u{24E4}\u{24E5}\u{24E6}\u{24E7}\u{24E8}\u{24E9}\u{2C30}\u{2C31}\u{2C32}\u{2C33}\u{2C34}\u{2C35}\u{2C36}\u{2C37}\u{2C38}\u{2C39}\u{2C3A}\u{2C3B}\u{2C3C}\u{2C3D}\u{2C3E}\u{2C3F}\u{2C40}\u{2C41}\u{2C42}\u{2C43}\u{2C44}\u{2C45}\u{2C46}\u{2C47}\u{2C48}\u{2C49}\u{2C4A}\u{2C4B}\u{2C4C}\u{2C4D}\u{2C4E}\u{2C4F}\u{2C50}\u{2C51}\u{2C52}\u{2C53}\u{2C54}\u{2C55}\u{2C56}\u{2C57}\u{2C58}\u{2C59}\u{2C5A}\u{2C5B}\u{2C5C}\u{2C5D}\u{2C5E}\u{2C61}\u{2C65}\u{2C66}\u{2C68}\u{2C6A}\u{2C6C}\u{2C73}\u{2C76}\u{2C81}\u{2C83}\u{2C85}\u{2C87}\u{2C89}\u{2C8B}\u{2C8D}\u{2C8F}\u{2C91}\u{2C93}\u{2C95}\u{2C97}\u{2C99}\u{2C9B}\u{2C9D}\u{2C9F}\u{2CA1}\u{2CA3}\u{2CA5}\u{2CA7}\u{2CA9}\u{2CAB}\u{2CAD}\u{2CAF}\u{2CB1}\u{2CB3}\u{2CB5}\u{2CB7}\u{2CB9}\u{2CBB}\u{2CBD}\u{2CBF}\u{2CC1}\u{2CC3}\u{2CC5}\u{2CC7}\u{2CC9}\u{2CCB}\u{2CCD}\u{2CCF}\u{2CD1}\u{2CD3}\u{2CD5}\u{2CD7}\u{2CD9}\u{2CDB}\u{2CDD}\u{2CDF}\u{2CE1}\u{2CE3}\u{2CEC}\u{2CEE}\u{2CF3}\u{2D00}\u{2D01}\u{2D02}\u{2D03}\u{2D04}\u{2D05}\u{2D06}\u{2D07}\u{2D08}\u{2D09}\u{2D0A}\u{2D0B}\u{2D0C}\u{2D0D}\u{2D0E}\u{2D0F}\u{2D10}\u{2D11}\u{2D12}\u{2D13}\u{2D14}\u{2D15}\u{2D16}\u{2D17}\u{2D18}\u{2D19}\u{2D1A}\u{2D1B}\u{2D1C}\u{2D1D}\u{2D1E}\u{2D1F}\u{2D20}\u{2D21}\u{2D22}\u{2D23}\u{2D24}\u{2D25}\u{2D27}\u{2D2D}\u{A641}\u{A643}\u{A645}\u{A647}\u{A649}\u{A64B}\u{A64D}\u{A64F}\u{A651}\u{A653}\u{A655}\u{A657}\u{A659}\u{A65B}\u{A65D}\u{A65F}\u{A661}\u{A663}\u{A665}\u{A667}\u{A669}\u{A66B}\u{A66D}\u{A681}\u{A683}\u{A685}\u{A687}\u{A689}\u{A68B}\u{A68D}\u{A68F}\u{A691}\u{A693}\u{A695}\u{A697}\u{A699}\u{A69B}\u{A723}\u{A725}\u{A727}\u{A729}\u{A72B}\u{A72D}\u{A72F}\u{A733}\u{A735}\u{A737}\u{A739}\u{A73B}\u{A73D}\u{A73F}\u{A741}\u{A743}\u{A745}\u{A747}\u{A749}\u{A74B}\u{A74D}\u{A74F}\u{A751}\u{A753}\u{A755}\u{A757}\u{A759}\u{A75B}\u{A75D}\u{A75F}\u{A761}\u{A763}\u{A765}\u{A767}\u{A769}\u{A76B}\u{A76D}\u{A76F}\u{A77A}\u{A77C}\u{A77F}\u{A781}\u{A783}\u{A785}\u{A787}\u{A78C}\u{A791}\u{A793}\u{A797}\u{A799}\u{A79B}\u{A79D}\u{A79F}\u{A7A1}\u{A7A3}\u{A7A5}\u{A7A7}\u{A7A9}\u{A7B5}\u{A7B7}\u{AB53}\u{AB70}\u{AB71}\u{AB72}\u{AB73}\u{AB74}\u{AB75}\u{AB76}\u{AB77}\u{AB78}\u{AB79}\u{AB7A}\u{AB7B}\u{AB7C}\u{AB7D}\u{AB7E}\u{AB7F}\u{AB80}\u{AB81}\u{AB82}\u{AB83}\u{AB84}\u{AB85}\u{AB86}\u{AB87}\u{AB88}\u{AB89}\u{AB8A}\u{AB8B}\u{AB8C}\u{AB8D}\u{AB8E}\u{AB8F}\u{AB90}\u{AB91}\u{AB92}\u{AB93}\u{AB94}\u{AB95}\u{AB96}\u{AB97}\u{AB98}\u{AB99}\u{AB9A}\u{AB9B}\u{AB9C}\u{AB9D}\u{AB9E}\u{AB9F}\u{ABA0}\u{ABA1}\u{ABA2}\u{ABA3}\u{ABA4}\u{ABA5}\u{ABA6}\u{ABA7}\u{ABA8}\u{ABA9}\u{ABAA}\u{ABAB}\u{ABAC}\u{ABAD}\u{ABAE}\u{ABAF}\u{ABB0}\u{ABB1}\u{ABB2}\u{ABB3}\u{ABB4}\u{ABB5}\u{ABB6}\u{ABB7}\u{ABB8}\u{ABB9}\u{ABBA}\u{ABBB}\u{ABBC}\u{ABBD}\u{ABBE}\u{ABBF}\u{FF41}\u{FF42}\u{FF43}\u{FF44}\u{FF45}\u{FF46}\u{FF47}\u{FF48}\u{FF49}\u{FF4A}\u{FF4B}\u{FF4C}\u{FF4D}\u{FF4E}\u{FF4F}\u{FF50}\u{FF51}\u{FF52}\u{FF53}\u{FF54}\u{FF55}\u{FF56}\u{FF57}\u{FF58}\u{FF59}\u{FF5A}\u{10428}\u{10429}\u{1042A}\u{1042B}\u{1042C}\u{1042D}\u{1042E}\u{1042F}\u{10430}\u{10431}\u{10432}\u{10433}\u{10434}\u{10435}\u{10436}\u{10437}\u{10438}\u{10439}\u{1043A}\u{1043B}\u{1043C}\u{1043D}\u{1043E}\u{1043F}\u{10440}\u{10441}\u{10442}\u{10443}\u{10444}\u{10445}\u{10446}\u{10447}\u{10448}\u{10449}\u{1044A}\u{1044B}\u{1044C}\u{1044D}\u{1044E}\u{1044F}\u{10CC0}\u{10CC1}\u{10CC2}\u{10CC3}\u{10CC4}\u{10CC5}\u{10CC6}\u{10CC7}\u{10CC8}\u{10CC9}\u{10CCA}\u{10CCB}\u{10CCC}\u{10CCD}\u{10CCE}\u{10CCF}\u{10CD0}\u{10CD1}\u{10CD2}\u{10CD3}\u{10CD4}\u{10CD5}\u{10CD6}\u{10CD7}\u{10CD8}\u{10CD9}\u{10CDA}\u{10CDB}\u{10CDC}\u{10CDD}\u{10CDE}\u{10CDF}\u{10CE0}\u{10CE1}\u{10CE2}\u{10CE3}\u{10CE4}\u{10CE5}\u{10CE6}\u{10CE7}\u{10CE8}\u{10CE9}\u{10CEA}\u{10CEB}\u{10CEC}\u{10CED}\u{10CEE}\u{10CEF}\u{10CF0}\u{10CF1}\u{10CF2}\u{118C0}\u{118C1}\u{118C2}\u{118C3}\u{118C4}\u{118C5}\u{118C6}\u{118C7}\u{118C8}\u{118C9}\u{118CA}\u{118CB}\u{118CC}\u{118CD}\u{118CE}\u{118CF}\u{118D0}\u{118D1}\u{118D2}\u{118D3}\u{118D4}\u{118D5}\u{118D6}\u{118D7}\u{118D8}\u{118D9}\u{118DA}\u{118DB}\u{118DC}\u{118DD}\u{118DE}\u{118DF}\u{01C7}\u{01CA}\u{01F1}\u{037F}\u{03F4}\u{0528}\u{052A}\u{052C}\u{052E}\u{13A0}\u{13A1}\u{13A2}\u{13A3}\u{13A4}\u{13A5}\u{13A6}\u{13A7}\u{13A8}\u{13A9}\u{13AA}\u{13AB}\u{13AC}\u{13AD}\u{13AE}\u{13AF}\u{13B0}\u{13B1}\u{13B2}\u{13B3}\u{13B4}\u{13B5}\u{13B6}\u{13B7}\u{13B8}\u{13B9}\u{13BA}\u{13BB}\u{13BC}\u{13BD}\u{13BE}\u{13BF}\u{13C0}\u{13C1}\u{13C2}\u{13C3}\u{13C4}\u{13C5}\u{13C6}\u{13C7}\u{13C8}\u{13C9}\u{13CA}\u{13CB}\u{13CC}\u{13CD}\u{13CE}\u{13CF}\u{13D0}\u{13D1}\u{13D2}\u{13D3}\u{13D4}\u{13D5}\u{13D6}\u{13D7}\u{13D8}\u{13D9}\u{13DA}\u{13DB}\u{13DC}\u{13DD}\u{13DE}\u{13DF}\u{13E0}\u{13E1}\u{13E2}\u{13E3}\u{13E4}\u{13E5}\u{13E6}\u{13E7}\u{13E8}\u{13E9}\u{13EA}\u{13EB}\u{13EC}\u{13ED}\u{13EE}\u{13EF}\u{13F0}\u{13F1}\u{13F2}\u{13F3}\u{13F4}\u{13F5}\u{2126}".freeze
10
10
  DOWNCASE_UPPERCASE_CHARACTERS = "\u{0041}\u{0042}\u{0043}\u{0044}\u{0045}\u{0046}\u{0047}\u{0048}\u{0049}\u{004A}\u{004B}\u{004C}\u{004D}\u{004E}\u{004F}\u{0050}\u{0051}\u{0052}\u{0053}\u{0054}\u{0055}\u{0056}\u{0057}\u{0058}\u{0059}\u{005A}\u{00C0}\u{00C1}\u{00C2}\u{00C3}\u{00C4}\u{00C5}\u{00C6}\u{00C7}\u{00C8}\u{00C9}\u{00CA}\u{00CB}\u{00CC}\u{00CD}\u{00CE}\u{00CF}\u{00D0}\u{00D1}\u{00D2}\u{00D3}\u{00D4}\u{00D5}\u{00D6}\u{00D8}\u{00D9}\u{00DA}\u{00DB}\u{00DC}\u{00DD}\u{00DE}\u{0178}\u{0100}\u{0102}\u{0104}\u{0106}\u{0108}\u{010A}\u{010C}\u{010E}\u{0110}\u{0112}\u{0114}\u{0116}\u{0118}\u{011A}\u{011C}\u{011E}\u{0120}\u{0122}\u{0124}\u{0126}\u{0128}\u{012A}\u{012C}\u{012E}\u{0132}\u{0134}\u{0136}\u{0139}\u{013B}\u{013D}\u{013F}\u{0141}\u{0143}\u{0145}\u{0147}\u{014A}\u{014C}\u{014E}\u{0150}\u{0152}\u{0154}\u{0156}\u{0158}\u{015A}\u{015C}\u{015E}\u{0160}\u{0162}\u{0164}\u{0166}\u{0168}\u{016A}\u{016C}\u{016E}\u{0170}\u{0172}\u{0174}\u{0176}\u{0179}\u{017B}\u{017D}\u{0243}\u{0182}\u{0184}\u{0187}\u{018B}\u{0191}\u{01F6}\u{0198}\u{023D}\u{0220}\u{01A0}\u{01A2}\u{01A4}\u{01A7}\u{01AC}\u{01AF}\u{01B3}\u{01B5}\u{01B8}\u{01BC}\u{01F7}\u{01C5}\u{01C8}\u{01CB}\u{01CD}\u{01CF}\u{01D1}\u{01D3}\u{01D5}\u{01D7}\u{01D9}\u{01DB}\u{018E}\u{01DE}\u{01E0}\u{01E2}\u{01E4}\u{01E6}\u{01E8}\u{01EA}\u{01EC}\u{01EE}\u{01F2}\u{01F4}\u{01F8}\u{01FA}\u{01FC}\u{01FE}\u{0200}\u{0202}\u{0204}\u{0206}\u{0208}\u{020A}\u{020C}\u{020E}\u{0210}\u{0212}\u{0214}\u{0216}\u{0218}\u{021A}\u{021C}\u{021E}\u{0222}\u{0224}\u{0226}\u{0228}\u{022A}\u{022C}\u{022E}\u{0230}\u{0232}\u{023B}\u{2C7E}\u{2C7F}\u{0241}\u{0246}\u{0248}\u{024A}\u{024C}\u{024E}\u{2C6F}\u{2C6D}\u{2C70}\u{0181}\u{0186}\u{0189}\u{018A}\u{018F}\u{0190}\u{A7AB}\u{0193}\u{A7AC}\u{0194}\u{A78D}\u{A7AA}\u{0197}\u{0196}\u{2C62}\u{A7AD}\u{019C}\u{2C6E}\u{019D}\u{019F}\u{2C64}\u{01A6}\u{01A9}\u{A7B1}\u{01AE}\u{0244}\u{01B1}\u{01B2}\u{0245}\u{01B7}\u{A7B2}\u{A7B0}\u{0370}\u{0372}\u{0376}\u{03FD}\u{03FE}\u{03FF}\u{0386}\u{0388}\u{0389}\u{038A}\u{0391}\u{0392}\u{0393}\u{0394}\u{0395}\u{0396}\u{0397}\u{0398}\u{0399}\u{039A}\u{039B}\u{039C}\u{039D}\u{039E}\u{039F}\u{03A0}\u{03A1}\u{03A3}\u{03A4}\u{03A5}\u{03A6}\u{03A7}\u{03A8}\u{03A9}\u{03AA}\u{03AB}\u{038C}\u{038E}\u{038F}\u{03CF}\u{03D8}\u{03DA}\u{03DC}\u{03DE}\u{03E0}\u{03E2}\u{03E4}\u{03E6}\u{03E8}\u{03EA}\u{03EC}\u{03EE}\u{03F9}\u{037F}\u{03F7}\u{03FA}\u{0410}\u{0411}\u{0412}\u{0413}\u{0414}\u{0415}\u{0416}\u{0417}\u{0418}\u{0419}\u{041A}\u{041B}\u{041C}\u{041D}\u{041E}\u{041F}\u{0420}\u{0421}\u{0422}\u{0423}\u{0424}\u{0425}\u{0426}\u{0427}\u{0428}\u{0429}\u{042A}\u{042B}\u{042C}\u{042D}\u{042E}\u{042F}\u{0400}\u{0401}\u{0402}\u{0403}\u{0404}\u{0405}\u{0406}\u{0407}\u{0408}\u{0409}\u{040A}\u{040B}\u{040C}\u{040D}\u{040E}\u{040F}\u{0460}\u{0462}\u{0464}\u{0466}\u{0468}\u{046A}\u{046C}\u{046E}\u{0470}\u{0472}\u{0474}\u{0476}\u{0478}\u{047A}\u{047C}\u{047E}\u{0480}\u{048A}\u{048C}\u{048E}\u{0490}\u{0492}\u{0494}\u{0496}\u{0498}\u{049A}\u{049C}\u{049E}\u{04A0}\u{04A2}\u{04A4}\u{04A6}\u{04A8}\u{04AA}\u{04AC}\u{04AE}\u{04B0}\u{04B2}\u{04B4}\u{04B6}\u{04B8}\u{04BA}\u{04BC}\u{04BE}\u{04C1}\u{04C3}\u{04C5}\u{04C7}\u{04C9}\u{04CB}\u{04CD}\u{04C0}\u{04D0}\u{04D2}\u{04D4}\u{04D6}\u{04D8}\u{04DA}\u{04DC}\u{04DE}\u{04E0}\u{04E2}\u{04E4}\u{04E6}\u{04E8}\u{04EA}\u{04EC}\u{04EE}\u{04F0}\u{04F2}\u{04F4}\u{04F6}\u{04F8}\u{04FA}\u{04FC}\u{04FE}\u{0500}\u{0502}\u{0504}\u{0506}\u{0508}\u{050A}\u{050C}\u{050E}\u{0510}\u{0512}\u{0514}\u{0516}\u{0518}\u{051A}\u{051C}\u{051E}\u{0520}\u{0522}\u{0524}\u{0526}\u{0528}\u{052A}\u{052C}\u{052E}\u{0531}\u{0532}\u{0533}\u{0534}\u{0535}\u{0536}\u{0537}\u{0538}\u{0539}\u{053A}\u{053B}\u{053C}\u{053D}\u{053E}\u{053F}\u{0540}\u{0541}\u{0542}\u{0543}\u{0544}\u{0545}\u{0546}\u{0547}\u{0548}\u{0549}\u{054A}\u{054B}\u{054C}\u{054D}\u{054E}\u{054F}\u{0550}\u{0551}\u{0552}\u{0553}\u{0554}\u{0555}\u{0556}\u{13F0}\u{13F1}\u{13F2}\u{13F3}\u{13F4}\u{13F5}\u{A77D}\u{2C63}\u{1E00}\u{1E02}\u{1E04}\u{1E06}\u{1E08}\u{1E0A}\u{1E0C}\u{1E0E}\u{1E10}\u{1E12}\u{1E14}\u{1E16}\u{1E18}\u{1E1A}\u{1E1C}\u{1E1E}\u{1E20}\u{1E22}\u{1E24}\u{1E26}\u{1E28}\u{1E2A}\u{1E2C}\u{1E2E}\u{1E30}\u{1E32}\u{1E34}\u{1E36}\u{1E38}\u{1E3A}\u{1E3C}\u{1E3E}\u{1E40}\u{1E42}\u{1E44}\u{1E46}\u{1E48}\u{1E4A}\u{1E4C}\u{1E4E}\u{1E50}\u{1E52}\u{1E54}\u{1E56}\u{1E58}\u{1E5A}\u{1E5C}\u{1E5E}\u{1E60}\u{1E62}\u{1E64}\u{1E66}\u{1E68}\u{1E6A}\u{1E6C}\u{1E6E}\u{1E70}\u{1E72}\u{1E74}\u{1E76}\u{1E78}\u{1E7A}\u{1E7C}\u{1E7E}\u{1E80}\u{1E82}\u{1E84}\u{1E86}\u{1E88}\u{1E8A}\u{1E8C}\u{1E8E}\u{1E90}\u{1E92}\u{1E94}\u{1EA0}\u{1EA2}\u{1EA4}\u{1EA6}\u{1EA8}\u{1EAA}\u{1EAC}\u{1EAE}\u{1EB0}\u{1EB2}\u{1EB4}\u{1EB6}\u{1EB8}\u{1EBA}\u{1EBC}\u{1EBE}\u{1EC0}\u{1EC2}\u{1EC4}\u{1EC6}\u{1EC8}\u{1ECA}\u{1ECC}\u{1ECE}\u{1ED0}\u{1ED2}\u{1ED4}\u{1ED6}\u{1ED8}\u{1EDA}\u{1EDC}\u{1EDE}\u{1EE0}\u{1EE2}\u{1EE4}\u{1EE6}\u{1EE8}\u{1EEA}\u{1EEC}\u{1EEE}\u{1EF0}\u{1EF2}\u{1EF4}\u{1EF6}\u{1EF8}\u{1EFA}\u{1EFC}\u{1EFE}\u{1F08}\u{1F09}\u{1F0A}\u{1F0B}\u{1F0C}\u{1F0D}\u{1F0E}\u{1F0F}\u{1F18}\u{1F19}\u{1F1A}\u{1F1B}\u{1F1C}\u{1F1D}\u{1F28}\u{1F29}\u{1F2A}\u{1F2B}\u{1F2C}\u{1F2D}\u{1F2E}\u{1F2F}\u{1F38}\u{1F39}\u{1F3A}\u{1F3B}\u{1F3C}\u{1F3D}\u{1F3E}\u{1F3F}\u{1F48}\u{1F49}\u{1F4A}\u{1F4B}\u{1F4C}\u{1F4D}\u{1F59}\u{1F5B}\u{1F5D}\u{1F5F}\u{1F68}\u{1F69}\u{1F6A}\u{1F6B}\u{1F6C}\u{1F6D}\u{1F6E}\u{1F6F}\u{1FBA}\u{1FBB}\u{1FC8}\u{1FC9}\u{1FCA}\u{1FCB}\u{1FDA}\u{1FDB}\u{1FF8}\u{1FF9}\u{1FEA}\u{1FEB}\u{1FFA}\u{1FFB}\u{1F88}\u{1F89}\u{1F8A}\u{1F8B}\u{1F8C}\u{1F8D}\u{1F8E}\u{1F8F}\u{1F98}\u{1F99}\u{1F9A}\u{1F9B}\u{1F9C}\u{1F9D}\u{1F9E}\u{1F9F}\u{1FA8}\u{1FA9}\u{1FAA}\u{1FAB}\u{1FAC}\u{1FAD}\u{1FAE}\u{1FAF}\u{1FB8}\u{1FB9}\u{1FBC}\u{1FCC}\u{1FD8}\u{1FD9}\u{1FE8}\u{1FE9}\u{1FEC}\u{1FFC}\u{2132}\u{2160}\u{2161}\u{2162}\u{2163}\u{2164}\u{2165}\u{2166}\u{2167}\u{2168}\u{2169}\u{216A}\u{216B}\u{216C}\u{216D}\u{216E}\u{216F}\u{2183}\u{24B6}\u{24B7}\u{24B8}\u{24B9}\u{24BA}\u{24BB}\u{24BC}\u{24BD}\u{24BE}\u{24BF}\u{24C0}\u{24C1}\u{24C2}\u{24C3}\u{24C4}\u{24C5}\u{24C6}\u{24C7}\u{24C8}\u{24C9}\u{24CA}\u{24CB}\u{24CC}\u{24CD}\u{24CE}\u{24CF}\u{2C00}\u{2C01}\u{2C02}\u{2C03}\u{2C04}\u{2C05}\u{2C06}\u{2C07}\u{2C08}\u{2C09}\u{2C0A}\u{2C0B}\u{2C0C}\u{2C0D}\u{2C0E}\u{2C0F}\u{2C10}\u{2C11}\u{2C12}\u{2C13}\u{2C14}\u{2C15}\u{2C16}\u{2C17}\u{2C18}\u{2C19}\u{2C1A}\u{2C1B}\u{2C1C}\u{2C1D}\u{2C1E}\u{2C1F}\u{2C20}\u{2C21}\u{2C22}\u{2C23}\u{2C24}\u{2C25}\u{2C26}\u{2C27}\u{2C28}\u{2C29}\u{2C2A}\u{2C2B}\u{2C2C}\u{2C2D}\u{2C2E}\u{2C60}\u{023A}\u{023E}\u{2C67}\u{2C69}\u{2C6B}\u{2C72}\u{2C75}\u{2C80}\u{2C82}\u{2C84}\u{2C86}\u{2C88}\u{2C8A}\u{2C8C}\u{2C8E}\u{2C90}\u{2C92}\u{2C94}\u{2C96}\u{2C98}\u{2C9A}\u{2C9C}\u{2C9E}\u{2CA0}\u{2CA2}\u{2CA4}\u{2CA6}\u{2CA8}\u{2CAA}\u{2CAC}\u{2CAE}\u{2CB0}\u{2CB2}\u{2CB4}\u{2CB6}\u{2CB8}\u{2CBA}\u{2CBC}\u{2CBE}\u{2CC0}\u{2CC2}\u{2CC4}\u{2CC6}\u{2CC8}\u{2CCA}\u{2CCC}\u{2CCE}\u{2CD0}\u{2CD2}\u{2CD4}\u{2CD6}\u{2CD8}\u{2CDA}\u{2CDC}\u{2CDE}\u{2CE0}\u{2CE2}\u{2CEB}\u{2CED}\u{2CF2}\u{10A0}\u{10A1}\u{10A2}\u{10A3}\u{10A4}\u{10A5}\u{10A6}\u{10A7}\u{10A8}\u{10A9}\u{10AA}\u{10AB}\u{10AC}\u{10AD}\u{10AE}\u{10AF}\u{10B0}\u{10B1}\u{10B2}\u{10B3}\u{10B4}\u{10B5}\u{10B6}\u{10B7}\u{10B8}\u{10B9}\u{10BA}\u{10BB}\u{10BC}\u{10BD}\u{10BE}\u{10BF}\u{10C0}\u{10C1}\u{10C2}\u{10C3}\u{10C4}\u{10C5}\u{10C7}\u{10CD}\u{A640}\u{A642}\u{A644}\u{A646}\u{A648}\u{A64A}\u{A64C}\u{A64E}\u{A650}\u{A652}\u{A654}\u{A656}\u{A658}\u{A65A}\u{A65C}\u{A65E}\u{A660}\u{A662}\u{A664}\u{A666}\u{A668}\u{A66A}\u{A66C}\u{A680}\u{A682}\u{A684}\u{A686}\u{A688}\u{A68A}\u{A68C}\u{A68E}\u{A690}\u{A692}\u{A694}\u{A696}\u{A698}\u{A69A}\u{A722}\u{A724}\u{A726}\u{A728}\u{A72A}\u{A72C}\u{A72E}\u{A732}\u{A734}\u{A736}\u{A738}\u{A73A}\u{A73C}\u{A73E}\u{A740}\u{A742}\u{A744}\u{A746}\u{A748}\u{A74A}\u{A74C}\u{A74E}\u{A750}\u{A752}\u{A754}\u{A756}\u{A758}\u{A75A}\u{A75C}\u{A75E}\u{A760}\u{A762}\u{A764}\u{A766}\u{A768}\u{A76A}\u{A76C}\u{A76E}\u{A779}\u{A77B}\u{A77E}\u{A780}\u{A782}\u{A784}\u{A786}\u{A78B}\u{A790}\u{A792}\u{A796}\u{A798}\u{A79A}\u{A79C}\u{A79E}\u{A7A0}\u{A7A2}\u{A7A4}\u{A7A6}\u{A7A8}\u{A7B4}\u{A7B6}\u{A7B3}\u{13A0}\u{13A1}\u{13A2}\u{13A3}\u{13A4}\u{13A5}\u{13A6}\u{13A7}\u{13A8}\u{13A9}\u{13AA}\u{13AB}\u{13AC}\u{13AD}\u{13AE}\u{13AF}\u{13B0}\u{13B1}\u{13B2}\u{13B3}\u{13B4}\u{13B5}\u{13B6}\u{13B7}\u{13B8}\u{13B9}\u{13BA}\u{13BB}\u{13BC}\u{13BD}\u{13BE}\u{13BF}\u{13C0}\u{13C1}\u{13C2}\u{13C3}\u{13C4}\u{13C5}\u{13C6}\u{13C7}\u{13C8}\u{13C9}\u{13CA}\u{13CB}\u{13CC}\u{13CD}\u{13CE}\u{13CF}\u{13D0}\u{13D1}\u{13D2}\u{13D3}\u{13D4}\u{13D5}\u{13D6}\u{13D7}\u{13D8}\u{13D9}\u{13DA}\u{13DB}\u{13DC}\u{13DD}\u{13DE}\u{13DF}\u{13E0}\u{13E1}\u{13E2}\u{13E3}\u{13E4}\u{13E5}\u{13E6}\u{13E7}\u{13E8}\u{13E9}\u{13EA}\u{13EB}\u{13EC}\u{13ED}\u{13EE}\u{13EF}\u{FF21}\u{FF22}\u{FF23}\u{FF24}\u{FF25}\u{FF26}\u{FF27}\u{FF28}\u{FF29}\u{FF2A}\u{FF2B}\u{FF2C}\u{FF2D}\u{FF2E}\u{FF2F}\u{FF30}\u{FF31}\u{FF32}\u{FF33}\u{FF34}\u{FF35}\u{FF36}\u{FF37}\u{FF38}\u{FF39}\u{FF3A}\u{10400}\u{10401}\u{10402}\u{10403}\u{10404}\u{10405}\u{10406}\u{10407}\u{10408}\u{10409}\u{1040A}\u{1040B}\u{1040C}\u{1040D}\u{1040E}\u{1040F}\u{10410}\u{10411}\u{10412}\u{10413}\u{10414}\u{10415}\u{10416}\u{10417}\u{10418}\u{10419}\u{1041A}\u{1041B}\u{1041C}\u{1041D}\u{1041E}\u{1041F}\u{10420}\u{10421}\u{10422}\u{10423}\u{10424}\u{10425}\u{10426}\u{10427}\u{10C80}\u{10C81}\u{10C82}\u{10C83}\u{10C84}\u{10C85}\u{10C86}\u{10C87}\u{10C88}\u{10C89}\u{10C8A}\u{10C8B}\u{10C8C}\u{10C8D}\u{10C8E}\u{10C8F}\u{10C90}\u{10C91}\u{10C92}\u{10C93}\u{10C94}\u{10C95}\u{10C96}\u{10C97}\u{10C98}\u{10C99}\u{10C9A}\u{10C9B}\u{10C9C}\u{10C9D}\u{10C9E}\u{10C9F}\u{10CA0}\u{10CA1}\u{10CA2}\u{10CA3}\u{10CA4}\u{10CA5}\u{10CA6}\u{10CA7}\u{10CA8}\u{10CA9}\u{10CAA}\u{10CAB}\u{10CAC}\u{10CAD}\u{10CAE}\u{10CAF}\u{10CB0}\u{10CB1}\u{10CB2}\u{118A0}\u{118A1}\u{118A2}\u{118A3}\u{118A4}\u{118A5}\u{118A6}\u{118A7}\u{118A8}\u{118A9}\u{118AA}\u{118AB}\u{118AC}\u{118AD}\u{118AE}\u{118AF}\u{118B0}\u{118B1}\u{118B2}\u{118B3}\u{118B4}\u{118B5}\u{118B6}\u{118B7}\u{118B8}\u{118B9}\u{118BA}\u{118BB}\u{118BC}\u{118BD}\u{118BE}\u{118BF}\u{01C9}\u{01CC}\u{01F3}\u{037F}\u{03B8}\u{0528}\u{052A}\u{052C}\u{052E}\u{13A0}\u{13A1}\u{13A2}\u{13A3}\u{13A4}\u{13A5}\u{13A6}\u{13A7}\u{13A8}\u{13A9}\u{13AA}\u{13AB}\u{13AC}\u{13AD}\u{13AE}\u{13AF}\u{13B0}\u{13B1}\u{13B2}\u{13B3}\u{13B4}\u{13B5}\u{13B6}\u{13B7}\u{13B8}\u{13B9}\u{13BA}\u{13BB}\u{13BC}\u{13BD}\u{13BE}\u{13BF}\u{13C0}\u{13C1}\u{13C2}\u{13C3}\u{13C4}\u{13C5}\u{13C6}\u{13C7}\u{13C8}\u{13C9}\u{13CA}\u{13CB}\u{13CC}\u{13CD}\u{13CE}\u{13CF}\u{13D0}\u{13D1}\u{13D2}\u{13D3}\u{13D4}\u{13D5}\u{13D6}\u{13D7}\u{13D8}\u{13D9}\u{13DA}\u{13DB}\u{13DC}\u{13DD}\u{13DE}\u{13DF}\u{13E0}\u{13E1}\u{13E2}\u{13E3}\u{13E4}\u{13E5}\u{13E6}\u{13E7}\u{13E8}\u{13E9}\u{13EA}\u{13EB}\u{13EC}\u{13ED}\u{13EE}\u{13EF}\u{13F0}\u{13F1}\u{13F2}\u{13F3}\u{13F4}\u{13F5}\u{03C9}".freeze
11
+ UPCASE_REPLACEMENTS_PRE = /[\u{00DF}\u{0390}\u{03B0}\u{1F52}\u{1F54}\u{1F56}\u{1FB7}\u{1FC7}\u{1FD2}\u{1FD3}\u{1FD7}\u{1FE2}\u{1FE3}\u{1FE7}\u{1FF7}]/.freeze
12
+ UPCASE_REPLACEMENT_HASH_PRE = {
13
+ "\u{00DF}" => "\u{0053}\u{0053}",
14
+ "\u{0390}" => "\u{0399}\u{0308}\u{0301}",
15
+ "\u{03B0}" => "\u{03A5}\u{0308}\u{0301}",
16
+ "\u{1F52}" => "\u{03A5}\u{0313}\u{0300}",
17
+ "\u{1F54}" => "\u{03A5}\u{0313}\u{0301}",
18
+ "\u{1F56}" => "\u{03A5}\u{0313}\u{0342}",
19
+ "\u{1FB7}" => "\u{0391}\u{0342}\u{0399}",
20
+ "\u{1FC7}" => "\u{0397}\u{0342}\u{0399}",
21
+ "\u{1FD2}" => "\u{0399}\u{0308}\u{0300}",
22
+ "\u{1FD3}" => "\u{0399}\u{0308}\u{0301}",
23
+ "\u{1FD7}" => "\u{0399}\u{0308}\u{0342}",
24
+ "\u{1FE2}" => "\u{03A5}\u{0308}\u{0300}",
25
+ "\u{1FE3}" => "\u{03A5}\u{0308}\u{0301}",
26
+ "\u{1FE7}" => "\u{03A5}\u{0308}\u{0342}",
27
+ "\u{1FF7}" => "\u{03A9}\u{0342}\u{0399}"
28
+ }.freeze
29
+ UPCASE_REPLACEMENTS_POST = /[\u{0149}\u{01F0}\u{0390}\u{03B0}\u{0587}\u{1E96}\u{1E97}\u{1E98}\u{1E99}\u{1E9A}\u{1F50}\u{1F52}\u{1F54}\u{1F56}\u{1F80}\u{1F81}\u{1F82}\u{1F83}\u{1F84}\u{1F85}\u{1F86}\u{1F87}\u{1F88}\u{1F89}\u{1F8A}\u{1F8B}\u{1F8C}\u{1F8D}\u{1F8E}\u{1F8F}\u{1F90}\u{1F91}\u{1F92}\u{1F93}\u{1F94}\u{1F95}\u{1F96}\u{1F97}\u{1F98}\u{1F99}\u{1F9A}\u{1F9B}\u{1F9C}\u{1F9D}\u{1F9E}\u{1F9F}\u{1FA0}\u{1FA1}\u{1FA2}\u{1FA3}\u{1FA4}\u{1FA5}\u{1FA6}\u{1FA7}\u{1FA8}\u{1FA9}\u{1FAA}\u{1FAB}\u{1FAC}\u{1FAD}\u{1FAE}\u{1FAF}\u{1FB2}\u{1FB3}\u{1FB4}\u{1FB6}\u{1FB7}\u{1FBC}\u{1FC2}\u{1FC3}\u{1FC4}\u{1FC6}\u{1FC7}\u{1FCC}\u{1FD2}\u{1FD3}\u{1FD6}\u{1FD7}\u{1FE2}\u{1FE3}\u{1FE4}\u{1FE6}\u{1FE7}\u{1FF2}\u{1FF3}\u{1FF4}\u{1FF6}\u{1FF7}\u{1FFC}]/.freeze
30
+ UPCASE_REPLACEMENT_HASH_POST = {
31
+ "\u{0149}" => "\u{02BC}\u{004E}",
32
+ "\u{01F0}" => "\u{004A}\u{030C}",
33
+ "\u{0390}" => "\u{0399}\u{0308}",
34
+ "\u{03B0}" => "\u{03A5}\u{0308}",
35
+ "\u{0587}" => "\u{0535}\u{0552}",
36
+ "\u{1E96}" => "\u{0048}\u{0331}",
37
+ "\u{1E97}" => "\u{0054}\u{0308}",
38
+ "\u{1E98}" => "\u{0057}\u{030A}",
39
+ "\u{1E99}" => "\u{0059}\u{030A}",
40
+ "\u{1E9A}" => "\u{0041}\u{02BE}",
41
+ "\u{1F50}" => "\u{03A5}\u{0313}",
42
+ "\u{1F52}" => "\u{03A5}\u{0313}",
43
+ "\u{1F54}" => "\u{03A5}\u{0313}",
44
+ "\u{1F56}" => "\u{03A5}\u{0313}",
45
+ "\u{1F80}" => "\u{1F08}\u{0399}",
46
+ "\u{1F81}" => "\u{1F09}\u{0399}",
47
+ "\u{1F82}" => "\u{1F0A}\u{0399}",
48
+ "\u{1F83}" => "\u{1F0B}\u{0399}",
49
+ "\u{1F84}" => "\u{1F0C}\u{0399}",
50
+ "\u{1F85}" => "\u{1F0D}\u{0399}",
51
+ "\u{1F86}" => "\u{1F0E}\u{0399}",
52
+ "\u{1F87}" => "\u{1F0F}\u{0399}",
53
+ "\u{1F88}" => "\u{1F08}\u{0399}",
54
+ "\u{1F89}" => "\u{1F09}\u{0399}",
55
+ "\u{1F8A}" => "\u{1F0A}\u{0399}",
56
+ "\u{1F8B}" => "\u{1F0B}\u{0399}",
57
+ "\u{1F8C}" => "\u{1F0C}\u{0399}",
58
+ "\u{1F8D}" => "\u{1F0D}\u{0399}",
59
+ "\u{1F8E}" => "\u{1F0E}\u{0399}",
60
+ "\u{1F8F}" => "\u{1F0F}\u{0399}",
61
+ "\u{1F90}" => "\u{1F28}\u{0399}",
62
+ "\u{1F91}" => "\u{1F29}\u{0399}",
63
+ "\u{1F92}" => "\u{1F2A}\u{0399}",
64
+ "\u{1F93}" => "\u{1F2B}\u{0399}",
65
+ "\u{1F94}" => "\u{1F2C}\u{0399}",
66
+ "\u{1F95}" => "\u{1F2D}\u{0399}",
67
+ "\u{1F96}" => "\u{1F2E}\u{0399}",
68
+ "\u{1F97}" => "\u{1F2F}\u{0399}",
69
+ "\u{1F98}" => "\u{1F28}\u{0399}",
70
+ "\u{1F99}" => "\u{1F29}\u{0399}",
71
+ "\u{1F9A}" => "\u{1F2A}\u{0399}",
72
+ "\u{1F9B}" => "\u{1F2B}\u{0399}",
73
+ "\u{1F9C}" => "\u{1F2C}\u{0399}",
74
+ "\u{1F9D}" => "\u{1F2D}\u{0399}",
75
+ "\u{1F9E}" => "\u{1F2E}\u{0399}",
76
+ "\u{1F9F}" => "\u{1F2F}\u{0399}",
77
+ "\u{1FA0}" => "\u{1F68}\u{0399}",
78
+ "\u{1FA1}" => "\u{1F69}\u{0399}",
79
+ "\u{1FA2}" => "\u{1F6A}\u{0399}",
80
+ "\u{1FA3}" => "\u{1F6B}\u{0399}",
81
+ "\u{1FA4}" => "\u{1F6C}\u{0399}",
82
+ "\u{1FA5}" => "\u{1F6D}\u{0399}",
83
+ "\u{1FA6}" => "\u{1F6E}\u{0399}",
84
+ "\u{1FA7}" => "\u{1F6F}\u{0399}",
85
+ "\u{1FA8}" => "\u{1F68}\u{0399}",
86
+ "\u{1FA9}" => "\u{1F69}\u{0399}",
87
+ "\u{1FAA}" => "\u{1F6A}\u{0399}",
88
+ "\u{1FAB}" => "\u{1F6B}\u{0399}",
89
+ "\u{1FAC}" => "\u{1F6C}\u{0399}",
90
+ "\u{1FAD}" => "\u{1F6D}\u{0399}",
91
+ "\u{1FAE}" => "\u{1F6E}\u{0399}",
92
+ "\u{1FAF}" => "\u{1F6F}\u{0399}",
93
+ "\u{1FB2}" => "\u{1FBA}\u{0399}",
94
+ "\u{1FB3}" => "\u{0391}\u{0399}",
95
+ "\u{1FB4}" => "\u{0386}\u{0399}",
96
+ "\u{1FB6}" => "\u{0391}\u{0342}",
97
+ "\u{1FB7}" => "\u{0391}\u{0342}",
98
+ "\u{1FBC}" => "\u{0391}\u{0399}",
99
+ "\u{1FC2}" => "\u{1FCA}\u{0399}",
100
+ "\u{1FC3}" => "\u{0397}\u{0399}",
101
+ "\u{1FC4}" => "\u{0389}\u{0399}",
102
+ "\u{1FC6}" => "\u{0397}\u{0342}",
103
+ "\u{1FC7}" => "\u{0397}\u{0342}",
104
+ "\u{1FCC}" => "\u{0397}\u{0399}",
105
+ "\u{1FD2}" => "\u{0399}\u{0308}",
106
+ "\u{1FD3}" => "\u{0399}\u{0308}",
107
+ "\u{1FD6}" => "\u{0399}\u{0342}",
108
+ "\u{1FD7}" => "\u{0399}\u{0308}",
109
+ "\u{1FE2}" => "\u{03A5}\u{0308}",
110
+ "\u{1FE3}" => "\u{03A5}\u{0308}",
111
+ "\u{1FE4}" => "\u{03A1}\u{0313}",
112
+ "\u{1FE6}" => "\u{03A5}\u{0342}",
113
+ "\u{1FE7}" => "\u{03A5}\u{0308}",
114
+ "\u{1FF2}" => "\u{1FFA}\u{0399}",
115
+ "\u{1FF3}" => "\u{03A9}\u{0399}",
116
+ "\u{1FF4}" => "\u{038F}\u{0399}",
117
+ "\u{1FF6}" => "\u{03A9}\u{0342}",
118
+ "\u{1FF7}" => "\u{03A9}\u{0342}",
119
+ "\u{1FFC}" => "\u{03A9}\u{0399}"
120
+ }.freeze
121
+ DOWNCASE_REPLACEMENT_PRE_A = /\u{0130}/.freeze
122
+ DOWNCASE_REPLACEMENT_PRE_B = "\u{0069}\u{0307}".freeze
123
+ DOWNCASE_REPLACEMENTS_POST = /[\u{212B}\u{0130}\u{01C4}\u{01C7}\u{01C9}\u{01CA}\u{01CC}\u{01F1}\u{01F3}\u{03B8}\u{03C9}\u{03F4}\u{1E9E}\u{2126}\u{212A}]/.freeze
124
+ DOWNCASE_REPLACEMENT_HASH_POST = {
125
+ "\u{212B}" => "\u{00E5}",
126
+ "\u{0130}" => "\u{0069}",
127
+ "\u{01C4}" => "\u{01C6}",
128
+ "\u{01C7}" => "\u{01C9}",
129
+ "\u{01C9}" => "\u{01C9}",
130
+ "\u{01CA}" => "\u{01CC}",
131
+ "\u{01CC}" => "\u{01CC}",
132
+ "\u{01F1}" => "\u{01F3}",
133
+ "\u{01F3}" => "\u{01F3}",
134
+ "\u{03B8}" => "\u{03B8}",
135
+ "\u{03C9}" => "\u{03C9}",
136
+ "\u{03F4}" => "\u{03B8}",
137
+ "\u{1E9E}" => "\u{00DF}",
138
+ "\u{2126}" => "\u{03C9}",
139
+ "\u{212A}" => "\u{006B}"
140
+ }.freeze
141
+
11
142
  def initialize(text)
12
143
  @text = text
13
144
  raise "In Unicode Case Converter text must be a String" unless text.class == String
14
145
  end
15
146
 
16
147
  def upcase
17
- text.gsub(/\u{00DF}/, "\u{0053}\u{0053}")
18
- .gsub(/\u{0390}/, "\u{0399}\u{0308}\u{0301}")
19
- .gsub(/\u{03B0}/, "\u{03A5}\u{0308}\u{0301}")
20
- .gsub(/\u{1F52}/, "\u{03A5}\u{0313}\u{0300}")
21
- .gsub(/\u{1F54}/, "\u{03A5}\u{0313}\u{0301}")
22
- .gsub(/\u{1F56}/, "\u{03A5}\u{0313}\u{0342}")
23
- .gsub(/\u{1FB7}/, "\u{0391}\u{0342}\u{0399}")
24
- .gsub(/\u{1FC7}/, "\u{0397}\u{0342}\u{0399}")
25
- .gsub(/\u{1FD2}/, "\u{0399}\u{0308}\u{0300}")
26
- .gsub(/\u{1FD3}/, "\u{0399}\u{0308}\u{0301}")
27
- .gsub(/\u{1FD7}/, "\u{0399}\u{0308}\u{0342}")
28
- .gsub(/\u{1FE2}/, "\u{03A5}\u{0308}\u{0300}")
29
- .gsub(/\u{1FE3}/, "\u{03A5}\u{0308}\u{0301}")
30
- .gsub(/\u{1FE7}/, "\u{03A5}\u{0308}\u{0342}")
31
- .gsub(/\u{1FF7}/, "\u{03A9}\u{0342}\u{0399}")
148
+ text.gsub(UPCASE_REPLACEMENTS_PRE, UPCASE_REPLACEMENT_HASH_PRE)
32
149
  .tr(UPCASE_LOWERCASE_CHARACTERS, UPCASE_UPPERCASE_CHARACTERS)
33
- .gsub(/\u{0149}/, "\u{02BC}\u{004E}")
34
- .gsub(/\u{01F0}/, "\u{004A}\u{030C}")
35
- .gsub(/\u{0390}/, "\u{0399}\u{0308}")
36
- .gsub(/\u{03B0}/, "\u{03A5}\u{0308}")
37
- .gsub(/\u{0587}/, "\u{0535}\u{0552}")
38
- .gsub(/\u{1E96}/, "\u{0048}\u{0331}")
39
- .gsub(/\u{1E97}/, "\u{0054}\u{0308}")
40
- .gsub(/\u{1E98}/, "\u{0057}\u{030A}")
41
- .gsub(/\u{1E99}/, "\u{0059}\u{030A}")
42
- .gsub(/\u{1E9A}/, "\u{0041}\u{02BE}")
43
- .gsub(/\u{1F50}/, "\u{03A5}\u{0313}")
44
- .gsub(/\u{1F52}/, "\u{03A5}\u{0313}")
45
- .gsub(/\u{1F54}/, "\u{03A5}\u{0313}")
46
- .gsub(/\u{1F56}/, "\u{03A5}\u{0313}")
47
- .gsub(/\u{1F80}/, "\u{1F08}\u{0399}")
48
- .gsub(/\u{1F81}/, "\u{1F09}\u{0399}")
49
- .gsub(/\u{1F82}/, "\u{1F0A}\u{0399}")
50
- .gsub(/\u{1F83}/, "\u{1F0B}\u{0399}")
51
- .gsub(/\u{1F84}/, "\u{1F0C}\u{0399}")
52
- .gsub(/\u{1F85}/, "\u{1F0D}\u{0399}")
53
- .gsub(/\u{1F86}/, "\u{1F0E}\u{0399}")
54
- .gsub(/\u{1F87}/, "\u{1F0F}\u{0399}")
55
- .gsub(/\u{1F88}/, "\u{1F08}\u{0399}")
56
- .gsub(/\u{1F89}/, "\u{1F09}\u{0399}")
57
- .gsub(/\u{1F8A}/, "\u{1F0A}\u{0399}")
58
- .gsub(/\u{1F8B}/, "\u{1F0B}\u{0399}")
59
- .gsub(/\u{1F8C}/, "\u{1F0C}\u{0399}")
60
- .gsub(/\u{1F8D}/, "\u{1F0D}\u{0399}")
61
- .gsub(/\u{1F8E}/, "\u{1F0E}\u{0399}")
62
- .gsub(/\u{1F8F}/, "\u{1F0F}\u{0399}")
63
- .gsub(/\u{1F90}/, "\u{1F28}\u{0399}")
64
- .gsub(/\u{1F91}/, "\u{1F29}\u{0399}")
65
- .gsub(/\u{1F92}/, "\u{1F2A}\u{0399}")
66
- .gsub(/\u{1F93}/, "\u{1F2B}\u{0399}")
67
- .gsub(/\u{1F94}/, "\u{1F2C}\u{0399}")
68
- .gsub(/\u{1F95}/, "\u{1F2D}\u{0399}")
69
- .gsub(/\u{1F96}/, "\u{1F2E}\u{0399}")
70
- .gsub(/\u{1F97}/, "\u{1F2F}\u{0399}")
71
- .gsub(/\u{1F98}/, "\u{1F28}\u{0399}")
72
- .gsub(/\u{1F99}/, "\u{1F29}\u{0399}")
73
- .gsub(/\u{1F9A}/, "\u{1F2A}\u{0399}")
74
- .gsub(/\u{1F9B}/, "\u{1F2B}\u{0399}")
75
- .gsub(/\u{1F9C}/, "\u{1F2C}\u{0399}")
76
- .gsub(/\u{1F9D}/, "\u{1F2D}\u{0399}")
77
- .gsub(/\u{1F9E}/, "\u{1F2E}\u{0399}")
78
- .gsub(/\u{1F9F}/, "\u{1F2F}\u{0399}")
79
- .gsub(/\u{1FA0}/, "\u{1F68}\u{0399}")
80
- .gsub(/\u{1FA1}/, "\u{1F69}\u{0399}")
81
- .gsub(/\u{1FA2}/, "\u{1F6A}\u{0399}")
82
- .gsub(/\u{1FA3}/, "\u{1F6B}\u{0399}")
83
- .gsub(/\u{1FA4}/, "\u{1F6C}\u{0399}")
84
- .gsub(/\u{1FA5}/, "\u{1F6D}\u{0399}")
85
- .gsub(/\u{1FA6}/, "\u{1F6E}\u{0399}")
86
- .gsub(/\u{1FA7}/, "\u{1F6F}\u{0399}")
87
- .gsub(/\u{1FA8}/, "\u{1F68}\u{0399}")
88
- .gsub(/\u{1FA9}/, "\u{1F69}\u{0399}")
89
- .gsub(/\u{1FAA}/, "\u{1F6A}\u{0399}")
90
- .gsub(/\u{1FAB}/, "\u{1F6B}\u{0399}")
91
- .gsub(/\u{1FAC}/, "\u{1F6C}\u{0399}")
92
- .gsub(/\u{1FAD}/, "\u{1F6D}\u{0399}")
93
- .gsub(/\u{1FAE}/, "\u{1F6E}\u{0399}")
94
- .gsub(/\u{1FAF}/, "\u{1F6F}\u{0399}")
95
- .gsub(/\u{1FB2}/, "\u{1FBA}\u{0399}")
96
- .gsub(/\u{1FB3}/, "\u{0391}\u{0399}")
97
- .gsub(/\u{1FB4}/, "\u{0386}\u{0399}")
98
- .gsub(/\u{1FB6}/, "\u{0391}\u{0342}")
99
- .gsub(/\u{1FB7}/, "\u{0391}\u{0342}")
100
- .gsub(/\u{1FBC}/, "\u{0391}\u{0399}")
101
- .gsub(/\u{1FC2}/, "\u{1FCA}\u{0399}")
102
- .gsub(/\u{1FC3}/, "\u{0397}\u{0399}")
103
- .gsub(/\u{1FC4}/, "\u{0389}\u{0399}")
104
- .gsub(/\u{1FC6}/, "\u{0397}\u{0342}")
105
- .gsub(/\u{1FC7}/, "\u{0397}\u{0342}")
106
- .gsub(/\u{1FCC}/, "\u{0397}\u{0399}")
107
- .gsub(/\u{1FD2}/, "\u{0399}\u{0308}")
108
- .gsub(/\u{1FD3}/, "\u{0399}\u{0308}")
109
- .gsub(/\u{1FD6}/, "\u{0399}\u{0342}")
110
- .gsub(/\u{1FD7}/, "\u{0399}\u{0308}")
111
- .gsub(/\u{1FE2}/, "\u{03A5}\u{0308}")
112
- .gsub(/\u{1FE3}/, "\u{03A5}\u{0308}")
113
- .gsub(/\u{1FE4}/, "\u{03A1}\u{0313}")
114
- .gsub(/\u{1FE6}/, "\u{03A5}\u{0342}")
115
- .gsub(/\u{1FE7}/, "\u{03A5}\u{0308}")
116
- .gsub(/\u{1FF2}/, "\u{1FFA}\u{0399}")
117
- .gsub(/\u{1FF3}/, "\u{03A9}\u{0399}")
118
- .gsub(/\u{1FF4}/, "\u{038F}\u{0399}")
119
- .gsub(/\u{1FF6}/, "\u{03A9}\u{0342}")
120
- .gsub(/\u{1FF7}/, "\u{03A9}\u{0342}")
121
- .gsub(/\u{1FFC}/, "\u{03A9}\u{0399}")
150
+ .gsub(UPCASE_REPLACEMENTS_POST, UPCASE_REPLACEMENT_HASH_POST)
122
151
  end
123
152
 
124
153
  def downcase
125
- text.gsub(/\u{0130}/, "\u{0069}\u{0307}").tr(DOWNCASE_UPPERCASE_CHARACTERS, DOWNCASE_LOWERCASE_CHARACTERS)
126
- .gsub(/\u{212B}/, "\u{00E5}")
127
- .gsub(/\u{0130}/, "\u{0069}")
128
- .gsub(/\u{01C4}/, "\u{01C6}")
129
- .gsub(/\u{01C7}/, "\u{01C9}")
130
- .gsub(/\u{01C9}/, "\u{01C9}")
131
- .gsub(/\u{01CA}/, "\u{01CC}")
132
- .gsub(/\u{01CC}/, "\u{01CC}")
133
- .gsub(/\u{01F1}/, "\u{01F3}")
134
- .gsub(/\u{01F3}/, "\u{01F3}")
135
- .gsub(/\u{03B8}/, "\u{03B8}")
136
- .gsub(/\u{03C9}/, "\u{03C9}")
137
- .gsub(/\u{03F4}/, "\u{03B8}")
138
- .gsub(/\u{1E9E}/, "\u{00DF}")
139
- .gsub(/\u{2126}/, "\u{03C9}")
140
- .gsub(/\u{212A}/, "\u{006B}")
154
+ text.gsub(DOWNCASE_REPLACEMENT_PRE_A, DOWNCASE_REPLACEMENT_PRE_B)
155
+ .tr(DOWNCASE_UPPERCASE_CHARACTERS, DOWNCASE_LOWERCASE_CHARACTERS)
156
+ .gsub(DOWNCASE_REPLACEMENTS_POST, DOWNCASE_REPLACEMENT_HASH_POST)
141
157
  end
142
158
 
143
159
  def capitalize
@@ -1,3 +1,3 @@
1
1
  module UnicodeCaseConverter
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -1,6 +1,8 @@
1
1
  require 'spec_helper'
2
2
  require 'unicode'
3
3
  require 'benchmark'
4
+ require 'stackprof'
5
+ require 'active_support/all'
4
6
 
5
7
  describe UnicodeCaseConverter do
6
8
  it 'has a version number' do
@@ -41,6 +43,38 @@ describe UnicodeCaseConverter do
41
43
  expect(ucc.capitalize).to eq(unicode_result)
42
44
  end
43
45
 
46
+ # (0..3).each do |first_digit|
47
+ # [*'0'..'9', *'A'..'F'].sample(16).sort.each do |second_digit|
48
+ # [*'0'..'9', *'A'..'F'].sample(16).sort.each do |third_digit|
49
+ # [*'0'..'9', *'A'..'F'].sample(16).sort.each do |forth_digit|
50
+ # string = "\\u" + first_digit.to_s + second_digit.to_s + third_digit.to_s + forth_digit.to_s
51
+ # text = string.gsub(/\\u([\da-fA-F]{4})/) {|m| [$1].pack("H*").unpack("n*").pack("U*")}.freeze
52
+ # it "upcases a string: #{text}" do
53
+ # unicode_result = Unicode.upcase(text.dup)
54
+ # ucc = text.dup.mb_chars.upcase.to_s
55
+ # expect(ucc).to eq(unicode_result)
56
+ # end
57
+ # end
58
+ # end
59
+ # end
60
+ # end
61
+
62
+ # (0..3).each do |first_digit|
63
+ # [*'0'..'9', *'A'..'F'].sample(16).sort.each do |second_digit|
64
+ # [*'0'..'9', *'A'..'F'].sample(16).sort.each do |third_digit|
65
+ # [*'0'..'9', *'A'..'F'].sample(16).sort.each do |forth_digit|
66
+ # string = "\\u" + first_digit.to_s + second_digit.to_s + third_digit.to_s + forth_digit.to_s
67
+ # text = string.gsub(/\\u([\da-fA-F]{4})/) {|m| [$1].pack("H*").unpack("n*").pack("U*")}
68
+ # it "downcases a string: #{text}" do
69
+ # unicode_result = Unicode.downcase(text)
70
+ # ucc = text.dup.mb_chars.downcase.to_s
71
+ # expect(ucc).to eq(unicode_result)
72
+ # end
73
+ # end
74
+ # end
75
+ # end
76
+ # end
77
+
44
78
  (0..3).each do |first_digit|
45
79
  [*'0'..'9', *'A'..'F'].sample(16).sort.each do |second_digit|
46
80
  [*'0'..'9', *'A'..'F'].sample(16).sort.each do |third_digit|
@@ -49,8 +83,8 @@ describe UnicodeCaseConverter do
49
83
  text = string.gsub(/\\u([\da-fA-F]{4})/) {|m| [$1].pack("H*").unpack("n*").pack("U*")}.freeze
50
84
  it "upcases a string: #{text}" do
51
85
  unicode_result = Unicode.upcase(text.dup)
52
- ucc = UnicodeCaseConverter::Converter.new(text.dup)
53
- expect(ucc.upcase).to eq(unicode_result)
86
+ ucc = UnicodeCaseConverter::Converter.new(text.dup).upcase
87
+ expect(ucc).to eq(unicode_result)
54
88
  end
55
89
  end
56
90
  end
@@ -65,25 +99,64 @@ describe UnicodeCaseConverter do
65
99
  text = string.gsub(/\\u([\da-fA-F]{4})/) {|m| [$1].pack("H*").unpack("n*").pack("U*")}
66
100
  it "downcases a string: #{text}" do
67
101
  unicode_result = Unicode.downcase(text)
68
- ucc = UnicodeCaseConverter::Converter.new(text)
69
- expect(ucc.downcase).to eq(unicode_result)
102
+ ucc = UnicodeCaseConverter::Converter.new(text).downcase
103
+ expect(ucc).to eq(unicode_result)
70
104
  end
71
105
  end
72
106
  end
73
107
  end
74
108
  end
75
109
 
76
- # it 'is fast' do
77
- # string = "Hello World. My name is Jonas. What is your name? My name is Jonas. There it is! I found it. My name is Jonas E. Smith. Please turn to p. 55. Were Jane and co. at the party? They closed the deal with Pitt, Briggs & Co. at noon. Let's ask Jane and co. They should know. They closed the deal with Pitt, Briggs & Co. It closed yesterday. I can see Mt. Fuji from here. St. Michael's Church is on 5th st. near the light. That is JFK Jr.'s book. I visited the U.S.A. last year. I live in the E.U. How about you? I live in the U.S. How about you? I work for the U.S. Government in Virginia. I have lived in the U.S. for 20 years. She has $100.00 in her bag. She has $100.00. It is in her bag. He teaches science (He previously worked for 5 years as an engineer.) at the local University. Her email is Jane.Doe@example.com. I sent her an email. The site is: https://www.example.50.com/new-site/awesome_content.html. Please check it out. She turned to him, 'This is great.' she said. She turned to him, \"This is great.\" she said. She turned to him, \"This is great.\" She held the book out to show him. Hello!! Long time no see. Hello?? Who is there? Hello!? Is that you? Hello?! Is that you? 1.) The first item 2.) The second item 1.) The first item. 2.) The second item. 1) The first item 2) The second item 1) The first item. 2) The second item. 1. The first item 2. The second item 1. The first item. 2. The second item. • 9. The first item • 10. The second item ⁃9. The first item ⁃10. The second item a. The first item b. The second item c. The third list item This is a sentence\ncut off in the middle because pdf. It was a cold \nnight in the city. features\ncontact manager\nevents, activities\n You can find it at N°. 1026.253.553. That is where the treasure is. She works at Yahoo! in the accounting department. We make a good team, you and I. Did you see Albert I. Jones yesterday? Thoreau argues that by simplifying one’s life, “the laws of the universe will appear less complex. . . .” \"Bohr [...] used the analogy of parallel stairways [...]\" (Smith 55). If words are left off at the end of a sentence, and that is all that is omitted, indicate the omission with ellipsis marks (preceded and followed by a space) and then indicate the end of the sentence with a period . . . . Next sentence. I never meant that.... She left the store. I wasn’t really ... well, what I mean...see . . . what I'm saying, the thing is . . . I didn’t mean it. One further habit which was somewhat weakened . . . was that of combining words into self-interpreting compounds. . . . The practice was not abandoned. . . .ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΆΈΉΊΌΎΏΪΫαβγδεζηθικλμνξοπρστυφχψωάέήίόύώϊϋ" * 10000
110
+ # it 'is fast?' do
111
+ # string = "Hello World. My name is Jonas. What is your name? My name is Jonas. There it is! I found it. My name is Jonas E. Smith. Please turn to p. 55. Were Jane and co. at the party? They closed the deal with Pitt, Briggs & Co. at noon. Let's ask Jane and co. They should know. They closed the deal with Pitt, Briggs & Co. It closed yesterday. I can't see Mt. Fuji from here. St. Michael's Church is on 5th st. near the light. That is JFK Jr.'s book. I visited the U.S.A. last year. I live in the E.U. How about you? I live in the U.S. How about you? I work for the U.S. Government in Virginia. I have lived in the U.S. for 20 years. She has $100.00 in her bag. She has $100.00. It is in her bag. He teaches science (He previously worked for 5 years as an engineer.) at the local University. Her email is Jane.Doe@example.com. I sent her an email. The site is: https://www.example.50.com/new-site/awesome_content.html. Please check it out. She turned to him, 'This is great.' she said. She turned to him, \"This is great.\" she said. She turned to him, \"This is great.\" She held the book out to show him. Hello!! Long time no see. Hello?? Who is there? Hello!? Is that you? Hello?! Is that you? 1.) The first item 2.) The second item 1.) The first item. 2.) The second item. 1) The first item 2) The second item 1) The first item. 2) The second item. 1. The first item 2. The second item 1. The first item. 2. The second item. • 9. The first item • 10. The second item ⁃9. The first item ⁃10. The second item a. The first item b. The second item c. The third list item This is a sentence\ncut off in the middle because pdf. It was a cold \nnight in the city. features\ncontact manager\nevents, activities\n You can find it at N°. 1026.253.553. That is where the treasure is. She works at Yahoo! in the accounting department. We make a good team, you and I. Did you see Albert I. Jones yesterday? Thoreau argues that by simplifying one’s life, “the laws of the universe will appear less complex. . . .” \"Bohr [...] used the analogy of parallel stairways [...]\" (Smith 55). If words are left off at the end of a sentence, and that is all that is omitted, indicate the omission with ellipsis marks (preceded and followed by a space) and then indicate the end of the sentence with a period . . . . Next sentence. I never meant that.... She left the store. I wasn’t really ... well, what I mean...see . . . what I'm saying, the thing is . . . I didn’t mean it. One further habit which was somewhat weakened . . . was that of combining words into self-interpreting compounds. . . . The practice was not abandoned. . . ."
78
112
  # benchmark do
79
- # 5.times do
80
- # UnicodeCaseConverter::Converter.new(string).downcase
81
- # end
82
- # 5.times do
83
- # UnicodeCaseConverter::Converter.new(string).upcase
113
+ # 10.times do
114
+ # data = StackProf.run(mode: :cpu, interval: 1000) do
115
+ # UnicodeCaseConverter::Converter.new(string * 100).downcase
116
+ # end
117
+ # puts StackProf::Report.new(data).print_text
84
118
  # end
85
119
  # end
86
120
  # end
121
+
122
+ # it 'is fast' do
123
+ # puts 'activesupport'
124
+ # string = "Hello World. My name is Jonas. What is your name? My name is Jonas. There it is! I found it. My name is Jonas E. Smith. Please turn to p. 55. Were Jane and co. at the party? They closed the deal with Pitt, Briggs & Co. at noon. Let's ask Jane and co. They should know. They closed the deal with Pitt, Briggs & Co. It closed yesterday. I can see Mt. Fuji from here. St. Michael's Church is on 5th st. near the light. That is JFK Jr.'s book. I visited the U.S.A. last year. I live in the E.U. How about you? I live in the U.S. How about you? I work for the U.S. Government in Virginia. I have lived in the U.S. for 20 years. She has $100.00 in her bag. She has $100.00. It is in her bag. He teaches science (He previously worked for 5 years as an engineer.) at the local University. Her email is Jane.Doe@example.com. I sent her an email. The site is: https://www.example.50.com/new-site/awesome_content.html. Please check it out. She turned to him, 'This is great.' she said. She turned to him, \"This is great.\" she said. She turned to him, \"This is great.\" She held the book out to show him. Hello!! Long time no see. Hello?? Who is there? Hello!? Is that you? Hello?! Is that you? 1.) The first item 2.) The second item 1.) The first item. 2.) The second item. 1) The first item 2) The second item 1) The first item. 2) The second item. 1. The first item 2. The second item 1. The first item. 2. The second item. • 9. The first item • 10. The second item ⁃9. The first item ⁃10. The second item a. The first item b. The second item c. The third list item This is a sentence\ncut off in the middle because pdf. It was a cold \nnight in the city. features\ncontact manager\nevents, activities\n You can find it at N°. 1026.253.553. That is where the treasure is. She works at Yahoo! in the accounting department. We make a good team, you and I. Did you see Albert I. Jones yesterday? Thoreau argues that by simplifying one’s life, “the laws of the universe will appear less complex. . . .” \"Bohr [...] used the analogy of parallel stairways [...]\" (Smith 55). If words are left off at the end of a sentence, and that is all that is omitted, indicate the omission with ellipsis marks (preceded and followed by a space) and then indicate the end of the sentence with a period . . . . Next sentence. I never meant that.... She left the store. I wasn’t really ... well, what I mean...see . . . what I'm saying, the thing is . . . I didn’t mean it. One further habit which was somewhat weakened . . . was that of combining words into self-interpreting compounds. . . . The practice was not abandoned. . . .ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΆΈΉΊΌΎΏΪΫαβγδεζηθικλμνξοπρστυφχψωάέήίόύώϊϋ" * 10000
125
+ # benchmark do
126
+ # 5.times do
127
+ # string.dup.mb_chars.downcase.to_s
128
+ # end
129
+ # 5.times do
130
+ # string.dup.mb_chars.upcase.to_s
131
+ # end
132
+ # end
133
+ # end
134
+
135
+ it 'is fast' do
136
+ puts 'this gem'
137
+ string = "Hello World. My name is Jonas. What is your name? My name is Jonas. There it is! I found it. My name is Jonas E. Smith. Please turn to p. 55. Were Jane and co. at the party? They closed the deal with Pitt, Briggs & Co. at noon. Let's ask Jane and co. They should know. They closed the deal with Pitt, Briggs & Co. It closed yesterday. I can see Mt. Fuji from here. St. Michael's Church is on 5th st. near the light. That is JFK Jr.'s book. I visited the U.S.A. last year. I live in the E.U. How about you? I live in the U.S. How about you? I work for the U.S. Government in Virginia. I have lived in the U.S. for 20 years. She has $100.00 in her bag. She has $100.00. It is in her bag. He teaches science (He previously worked for 5 years as an engineer.) at the local University. Her email is Jane.Doe@example.com. I sent her an email. The site is: https://www.example.50.com/new-site/awesome_content.html. Please check it out. She turned to him, 'This is great.' she said. She turned to him, \"This is great.\" she said. She turned to him, \"This is great.\" She held the book out to show him. Hello!! Long time no see. Hello?? Who is there? Hello!? Is that you? Hello?! Is that you? 1.) The first item 2.) The second item 1.) The first item. 2.) The second item. 1) The first item 2) The second item 1) The first item. 2) The second item. 1. The first item 2. The second item 1. The first item. 2. The second item. • 9. The first item • 10. The second item ⁃9. The first item ⁃10. The second item a. The first item b. The second item c. The third list item This is a sentence\ncut off in the middle because pdf. It was a cold \nnight in the city. features\ncontact manager\nevents, activities\n You can find it at N°. 1026.253.553. That is where the treasure is. She works at Yahoo! in the accounting department. We make a good team, you and I. Did you see Albert I. Jones yesterday? Thoreau argues that by simplifying one’s life, “the laws of the universe will appear less complex. . . .” \"Bohr [...] used the analogy of parallel stairways [...]\" (Smith 55). If words are left off at the end of a sentence, and that is all that is omitted, indicate the omission with ellipsis marks (preceded and followed by a space) and then indicate the end of the sentence with a period . . . . Next sentence. I never meant that.... She left the store. I wasn’t really ... well, what I mean...see . . . what I'm saying, the thing is . . . I didn’t mean it. One further habit which was somewhat weakened . . . was that of combining words into self-interpreting compounds. . . . The practice was not abandoned. . . .ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΆΈΉΊΌΎΏΪΫαβγδεζηθικλμνξοπρστυφχψωάέήίόύώϊϋ" * 10000
138
+ benchmark do
139
+ 5.times do
140
+ UnicodeCaseConverter::Converter.new(string).downcase
141
+ end
142
+ 5.times do
143
+ UnicodeCaseConverter::Converter.new(string).upcase
144
+ end
145
+ end
146
+ end
147
+
148
+ it 'is fast' do
149
+ puts 'unicode'
150
+ string = "Hello World. My name is Jonas. What is your name? My name is Jonas. There it is! I found it. My name is Jonas E. Smith. Please turn to p. 55. Were Jane and co. at the party? They closed the deal with Pitt, Briggs & Co. at noon. Let's ask Jane and co. They should know. They closed the deal with Pitt, Briggs & Co. It closed yesterday. I can see Mt. Fuji from here. St. Michael's Church is on 5th st. near the light. That is JFK Jr.'s book. I visited the U.S.A. last year. I live in the E.U. How about you? I live in the U.S. How about you? I work for the U.S. Government in Virginia. I have lived in the U.S. for 20 years. She has $100.00 in her bag. She has $100.00. It is in her bag. He teaches science (He previously worked for 5 years as an engineer.) at the local University. Her email is Jane.Doe@example.com. I sent her an email. The site is: https://www.example.50.com/new-site/awesome_content.html. Please check it out. She turned to him, 'This is great.' she said. She turned to him, \"This is great.\" she said. She turned to him, \"This is great.\" She held the book out to show him. Hello!! Long time no see. Hello?? Who is there? Hello!? Is that you? Hello?! Is that you? 1.) The first item 2.) The second item 1.) The first item. 2.) The second item. 1) The first item 2) The second item 1) The first item. 2) The second item. 1. The first item 2. The second item 1. The first item. 2. The second item. • 9. The first item • 10. The second item ⁃9. The first item ⁃10. The second item a. The first item b. The second item c. The third list item This is a sentence\ncut off in the middle because pdf. It was a cold \nnight in the city. features\ncontact manager\nevents, activities\n You can find it at N°. 1026.253.553. That is where the treasure is. She works at Yahoo! in the accounting department. We make a good team, you and I. Did you see Albert I. Jones yesterday? Thoreau argues that by simplifying one’s life, “the laws of the universe will appear less complex. . . .” \"Bohr [...] used the analogy of parallel stairways [...]\" (Smith 55). If words are left off at the end of a sentence, and that is all that is omitted, indicate the omission with ellipsis marks (preceded and followed by a space) and then indicate the end of the sentence with a period . . . . Next sentence. I never meant that.... She left the store. I wasn’t really ... well, what I mean...see . . . what I'm saying, the thing is . . . I didn’t mean it. One further habit which was somewhat weakened . . . was that of combining words into self-interpreting compounds. . . . The practice was not abandoned. . . .ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΆΈΉΊΌΎΏΪΫαβγδεζηθικλμνξοπρστυφχψωάέήίόύώϊϋ" * 10000
151
+ benchmark do
152
+ 5.times do
153
+ Unicode::downcase(string)
154
+ end
155
+ 5.times do
156
+ Unicode::upcase(string)
157
+ end
158
+ end
159
+ end
87
160
  end
88
161
 
89
162
  def benchmark(&block)
@@ -19,7 +19,9 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "unicode"
22
+ spec.add_development_dependency "activesupport"
22
23
  spec.add_development_dependency "rspec"
23
24
  spec.add_development_dependency "bundler", "~> 1.9"
24
25
  spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "stackprof"
25
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unicode_case_converter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin S. Dias
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-24 00:00:00.000000000 Z
11
+ date: 2016-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: unicode
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rspec
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +80,20 @@ dependencies:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
82
  version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: stackprof
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
69
97
  description: A pure Ruby implementation to upcase and downcase unicode strings
70
98
  email:
71
99
  - diasks2@gmail.com
@@ -85,7 +113,6 @@ files:
85
113
  - spec/spec_helper.rb
86
114
  - spec/unicode_case_converter_spec.rb
87
115
  - unicode_case_converter.gemspec
88
- - unicode_data_importer.rb
89
116
  homepage: https://github.com/diasks2/unicode_case_converter
90
117
  licenses: []
91
118
  metadata: {}
@@ -1,14 +0,0 @@
1
- require 'csv'
2
-
3
- file_location = '/Users/diasks2/Desktop/UnicodeData.txt'
4
- csv_text = File.read(file_location)
5
- csv = CSV.parse(csv_text, col_sep: ";")
6
- uppercase = ''
7
- lowercase = ''
8
- csv.each_with_index do |row, index|
9
- next if row[-1].nil?
10
- lowercase = lowercase + "u{" + row[0] + "}"
11
- uppercase = uppercase + "u{" + row[-1] + "}"
12
- end
13
- puts "Lowercase: #{lowercase}"
14
- puts "Uppercase: #{uppercase}"