Reorder codepoints in some entries of CaseUnfold_11_Table

* enc/unicode/case-folding.rb: Reorder codepoints so that the upper-case
  mapping comes first.
* enc/unicode/9.0.0/casefold.h: Codepoints reordered, upper-case mapping
  flag added.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56975 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
duerst 2016-12-04 01:17:34 +00:00
parent 1fa8bd75a3
commit 31fb4e3ec3
2 changed files with 17 additions and 8 deletions

View file

@ -16,15 +16,20 @@ class CaseFolding
module_function
def hex_seq(v)
v.map {|i| "0x%04x" % i}.join(", ")
v.map { |i| "0x%04x" % i }.join(", ")
end
def print_table_1(dest, type, mapping_data, data)
for k, v in data = data.sort
sk = (Array === k and k.length > 1) ? "{#{hex_seq(k)}}" : ("0x%04x" % k)
ck = cv = ''
ck = ' /* ' + Array(k).pack("U*") + ' */' if @debug
cv = ' /* ' + Array(v).map{|c|[c].pack("U*")}.join(", ") + ' */' if @debug
if type=='CaseUnfold_11' and v.length>1
# reorder CaseUnfold_11 entries to avoid special treatment for U+03B9/U+03BC/U+A64B
item = mapping_data.map("%04X" % k[0])
upper = item.upper if item
v = v.sort_by { |i| ("%04X"%i) == upper ? 0 : 1 }
end
ck = @debug ? ' /* ' + Array(k).pack("U*") + ' */' : ''
cv = @debug ? ' /* ' + Array(v).map{|c|[c].pack("U*")}.join(", ") + ' */' : ''
dest.print(" {#{sk}#{ck}, {#{v.length}#{mapping_data.flags(k, type, v)}, {#{hex_seq(v)}#{cv}}}},\n")
end
data
@ -249,12 +254,16 @@ class CaseMapping
end
end
def map (from)
@mappings[from]
end
def flags(from, type, to)
# types: CaseFold_11, CaseUnfold_11, CaseUnfold_12, CaseUnfold_13
flags = ""
from = Array(from).map {|i| "%04X" % i}.join(" ")
to = Array(to).map {|i| "%04X" % i}.join(" ")
item = @mappings[from]
item = map(from)
specials_index = nil
specials = []
case type