unicode_case_converter 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 601343e002e6b81587a1097b46e58e337b4293c2
4
+ data.tar.gz: b49dcaddc3fbad11a86d3dafb872514d526c0992
5
+ SHA512:
6
+ metadata.gz: f4f3e37c38ca4c368f52c785b42d183819e991892e47d4e24739058c94b6d009600c0563a07bb7441d56f1ad2d215714048059d53cbe2144a8a7a36db149d9c6
7
+ data.tar.gz: 92480204f634e19d6dcff6209b269edf9fa029afb6cacee25e10d93d6040b1a49b1f98f6e35f5db8b35beb85f7c2d8bfc5f0069c3f099f1ac84675d49e2bf654
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.4
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in unicode_case_converter.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Kevin S. Dias
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,67 @@
1
+ # unicode_case_converter
2
+
3
+ A pure Ruby implementation to upcase and downcase unicode strings. The [unicode](https://github.com/blackwinter/unicode) gem works great but for a [Shoes app](http://shoesrb.com/) I am making I needed a pure Ruby solution to simplify things.
4
+
5
+ Resources:
6
+ * [Character Properties, Case Mappings & Names FAQ](http://unicode.org/faq/casemap_charprop.html)
7
+ * [UnicodeData.txt](ftp://ftp.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt)
8
+ * [SpecialCasing.txt](ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt)
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ **Ruby**
15
+ ```
16
+ gem install unicode_case_converter
17
+ ```
18
+
19
+ **Ruby on Rails**
20
+ Add this line to your application’s Gemfile:
21
+ ```ruby
22
+ gem 'unicode_case_converter'
23
+ ```
24
+
25
+ ## Usage
26
+
27
+ ```ruby
28
+ text = "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΆΈΉΊΌΎΏΪΫ"
29
+ UnicodeCaseConverter::Converter.new(text).downcase
30
+ # => "αβγδεζηθικλμνξοπρστυφχψωάέήίόύώϊϋ"
31
+
32
+ text = "αβγδεζηθικλμνξοπρστυφχψωάέήίόύώϊϋ"
33
+ UnicodeCaseConverter::Converter.new(text).upcase
34
+ # => "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΆΈΉΊΌΎΏΪΫ"
35
+ ```
36
+
37
+ ## Contributing
38
+
39
+ 1. Fork it ( https://github.com/[my-github-username]/unicode_case_converter/fork )
40
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
41
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
42
+ 4. Push to the branch (`git push origin my-new-feature`)
43
+ 5. Create a new Pull Request
44
+
45
+ ## License
46
+
47
+ The MIT License (MIT)
48
+
49
+ Copyright (c) 2016 Kevin S. Dias
50
+
51
+ Permission is hereby granted, free of charge, to any person obtaining a copy
52
+ of this software and associated documentation files (the "Software"), to deal
53
+ in the Software without restriction, including without limitation the rights
54
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
55
+ copies of the Software, and to permit persons to whom the Software is
56
+ furnished to do so, subject to the following conditions:
57
+
58
+ The above copyright notice and this permission notice shall be included in
59
+ all copies or substantial portions of the Software.
60
+
61
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
62
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
63
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
64
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
65
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
66
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
67
+ THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task default: :spec
@@ -0,0 +1,3 @@
1
+ module UnicodeCaseConverter
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,143 @@
1
+ require "unicode_case_converter/version"
2
+
3
+ module UnicodeCaseConverter
4
+ class Converter
5
+ attr_reader :text
6
+
7
+ UPCASE_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{00B5}\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{0131}\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{017F}\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{01C4}\u{01C5}\u{01C6}\u{01C7}\u{01C8}\u{01C9}\u{01CA}\u{01CB}\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{01F1}\u{01F2}\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{0345}\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{03C2}\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{03D0}\u{03D1}\u{03D5}\u{03D6}\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{03F0}\u{03F1}\u{03F2}\u{03F3}\u{03F5}\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{1E9B}\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{1FBE}\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{00DF}\u{01C4}\u{01C5}\u{01C6}\u{01C7}\u{01C8}\u{01C9}\u{01CA}\u{01CB}\u{01CC}\u{01F1}\u{01F2}\u{01F3}\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}"
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}"
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}"
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}"
11
+ def initialize(text)
12
+ @text = text
13
+ raise "In Unicode Case Converter text must be a String" unless text.class == String
14
+ end
15
+
16
+ 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}")
32
+ .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}")
122
+ end
123
+
124
+ 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}")
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,2 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'unicode_case_converter'
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+ require 'unicode'
3
+
4
+ describe UnicodeCaseConverter do
5
+ it 'has a version number' do
6
+ expect(UnicodeCaseConverter::VERSION).not_to be nil
7
+ end
8
+
9
+ describe '#initialize' do
10
+ it 'raises an error if the text argument is nil' do
11
+ -> { expect(UnicodeCaseConverter::Converter.new(nil).upcase).to raise_error }
12
+ end
13
+
14
+ it 'raises an error if the text is not a String' do
15
+ -> { expect(UnicodeCaseConverter::Converter.new(5).downcase).to raise_error }
16
+ end
17
+ end
18
+
19
+ it "upcases a string (example)" do
20
+ ucc = UnicodeCaseConverter::Converter.new("αβγδεζηθικλμνξοπρστυφχψωάέήίόύώϊϋ")
21
+ expect(ucc.upcase).to eq("ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΆΈΉΊΌΎΏΪΫ")
22
+ end
23
+
24
+ it "downcases a string (example)" do
25
+ ucc = UnicodeCaseConverter::Converter.new("ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΆΈΉΊΌΎΏΪΫ")
26
+ expect(ucc.downcase).to eq("αβγδεζηθικλμνξοπρστυφχψωάέήίόύώϊϋ")
27
+ end
28
+
29
+ (0..3).each do |first_digit|
30
+ [*'0'..'9', *'A'..'F'].sample(16).sort.each do |second_digit|
31
+ [*'0'..'9', *'A'..'F'].sample(16).sort.each do |third_digit|
32
+ [*'0'..'9', *'A'..'F'].sample(16).sort.each do |forth_digit|
33
+ string = "\\u" + first_digit.to_s + second_digit.to_s + third_digit.to_s + forth_digit.to_s
34
+ text = string.gsub(/\\u([\da-fA-F]{4})/) {|m| [$1].pack("H*").unpack("n*").pack("U*")}.freeze
35
+ it "upcases a string: #{text}" do
36
+ unicode_result = Unicode.upcase(text.dup)
37
+ ucc = UnicodeCaseConverter::Converter.new(text.dup)
38
+ expect(ucc.upcase).to eq(unicode_result)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ (0..3).each do |first_digit|
46
+ [*'0'..'9', *'A'..'F'].sample(16).sort.each do |second_digit|
47
+ [*'0'..'9', *'A'..'F'].sample(16).sort.each do |third_digit|
48
+ [*'0'..'9', *'A'..'F'].sample(16).sort.each do |forth_digit|
49
+ string = "\\u" + first_digit.to_s + second_digit.to_s + third_digit.to_s + forth_digit.to_s
50
+ text = string.gsub(/\\u([\da-fA-F]{4})/) {|m| [$1].pack("H*").unpack("n*").pack("U*")}
51
+ it "downcases a string: #{text}" do
52
+ unicode_result = Unicode.downcase(text)
53
+ ucc = UnicodeCaseConverter::Converter.new(text)
54
+ expect(ucc.downcase).to eq(unicode_result)
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'unicode_case_converter/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "unicode_case_converter"
8
+ spec.version = UnicodeCaseConverter::VERSION
9
+ spec.authors = ["Kevin S. Dias"]
10
+ spec.email = ["diasks2@gmail.com"]
11
+
12
+ spec.summary = %q{Upcase or downcase unicode strings}
13
+ spec.description = %q{A pure Ruby implementation to upcase and downcase unicode strings}
14
+ spec.homepage = "https://github.com/diasks2/unicode_case_converter"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "unicode"
22
+ spec.add_development_dependency "rspec"
23
+ spec.add_development_dependency "bundler", "~> 1.9"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+ end
@@ -0,0 +1,14 @@
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}"
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: unicode_case_converter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Kevin S. Dias
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: unicode
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
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'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.9'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.9'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ description: A pure Ruby implementation to upcase and downcase unicode strings
70
+ email:
71
+ - diasks2@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - ".rspec"
78
+ - ".travis.yml"
79
+ - Gemfile
80
+ - LICENSE.txt
81
+ - README.md
82
+ - Rakefile
83
+ - lib/unicode_case_converter.rb
84
+ - lib/unicode_case_converter/version.rb
85
+ - spec/spec_helper.rb
86
+ - spec/unicode_case_converter_spec.rb
87
+ - unicode_case_converter.gemspec
88
+ - unicode_data_importer.rb
89
+ homepage: https://github.com/diasks2/unicode_case_converter
90
+ licenses: []
91
+ metadata: {}
92
+ post_install_message:
93
+ rdoc_options: []
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ requirements: []
107
+ rubyforge_project:
108
+ rubygems_version: 2.4.1
109
+ signing_key:
110
+ specification_version: 4
111
+ summary: Upcase or downcase unicode strings
112
+ test_files:
113
+ - spec/spec_helper.rb
114
+ - spec/unicode_case_converter_spec.rb