diff options
author | duerst <duerst@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-03-29 07:53:43 +0000 |
---|---|---|
committer | duerst <duerst@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-03-29 07:53:43 +0000 |
commit | 76c3098a5a06a9549815fe01d419db61c85c01a4 (patch) | |
tree | 9b1e1d75453aa54f7cde6ec5a31b51c4eec56460 /enc/unicode/case-folding.rb | |
parent | 1b572ba5d61f84079196e83861d050dcd53bc345 (diff) | |
download | ruby-76c3098a5a06a9549815fe01d419db61c85c01a4.tar.gz |
* enc/unicode/case-folding.rb, casefold.h: Tweaked handling of 6
special cases in CaseUnfold_11_Table.
* enc/unicode.c: Adjustments for above.
* test/ruby/enc/test_case_mapping.rb: Tests for the above: Some tests in
test_titlecase activated; test_greek added. A test in test_cherokee fixed.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54383 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'enc/unicode/case-folding.rb')
-rwxr-xr-x | enc/unicode/case-folding.rb | 73 |
1 files changed, 48 insertions, 25 deletions
diff --git a/enc/unicode/case-folding.rb b/enc/unicode/case-folding.rb index d3738be4e8..2df430185f 100755 --- a/enc/unicode/case-folding.rb +++ b/enc/unicode/case-folding.rb @@ -230,38 +230,61 @@ class CaseMapping def flags(from, type, to) # types: CaseFold_11, CaseUnfold_11, CaseUnfold_12, CaseUnfold_13 flags = "" - flags += '|F' if type=='CaseFold_11' from = Array(from).map {|i| "%04X" % i}.join(" ") to = Array(to).map {|i| "%04X" % i}.join(" ") - to = to.split(/ /).first if type=='CaseUnfold_11' item = @mappings[from] - if item - flags += '|U' if to==item.upper - flags += '|D' if to==item.lower - specials_index = nil - specials = [] - unless item.upper == item.title - if item.code == item.title - flags += '|IT' - else - flags += '|ST' - specials << item.title + specials_index = nil + specials = [] + case type + when 'CaseFold_11' + flags += '|F' + if item + flags += '|U' if to==item.upper + flags += '|D' if to==item.lower + unless item.upper == item.title + if item.code == item.title + flags += '|IT' + else + flags += '|ST' + specials << item.title + end + end + unless item.lower.nil? or item.lower==from or item.lower==to + specials << item.lower + flags += '|SL' + end + unless item.upper.nil? or item.upper==from or item.upper==to + specials << item.upper + flags += '|SU' end end - unless item.lower.nil? or item.lower==from or item.lower==to - specials << item.lower - flags += '|SL' - end - unless item.upper.nil? or item.upper==from or item.upper==to - specials << item.upper - flags += '|SU' - end - if specials.first - flags += "|I(#{@specials_length})" - @specials_length += specials.map { |s| s.split(/ /).length }.reduce(:+) - @specials << specials + when 'CaseUnfold_11' + to = to.split(/ /) + if item + case to.first + when item.upper then flags += '|U' + when item.lower then flags += '|D' + else + unless from=='03B9' or from=='03BC' + warn 'Unpredicted case 0; check data or adjust program (enc/unicode/case_folding.rb).' + end + end + unless item.upper == item.title + if item.code == item.title + warn 'Unpredicted case 1; check data or adjust program (enc/unicode/case_folding.rb).' + elsif item.title==to[1] + flags += '|ST' + else + warn 'Unpredicted case 2; check data or adjust program (enc/unicode/case_folding.rb).' + end + end end end + unless specials.empty? + flags += "|I(#{@specials_length})" + @specials_length += specials.map { |s| s.split(/ /).length }.reduce(:+) + @specials << specials + end flags end |