From: "NARUSE, Yui" Date: 2016-05-31T16:18:03+09:00 Subject: [ruby-dev:49638] Re: 重要: 非互換性の可能性 Fwd: [ruby-cvs:62388] duerst:r55225 (trunk): * string.c: Activate full Unicode case mapping for UTF-8 r55225はtest-allがこけていたので一旦revertしました。 再度コミットする場合は以下の潜在的に不具合を引き起こす可能性のあるコードも修正して頂けると助かります。 basictest/test.rb:test_ok("a".upcase![0] == ?A) benchmark/bm_so_k_nucleotide.rb: puts "%s %.3f" % [v[0].upcase,((v[1]*100).to_f/n)] benchmark/bm_so_k_nucleotide.rb: puts "#{table[s].to_s}\t#{s.upcase}" defs/id.def: token = token.sub(/\?/, 'P').sub(/\A[a-z]/) {$&.upcase} ext/date/date_core.c: * ^ upcase the result string. ext/date/date_core.c: * ^ upcase the result string. ext/date/date_strftime.c:upcase(char *s, size_t i) ext/date/date_strftime.c: upcase(s, i); \ ext/date/date_strftime.c: upcase(s, i); ext/digest/digest_conf.rb: $defs << "-D#{name.upcase}_USE_COMMONDIGEST" ext/digest/digest_conf.rb: funcs ||= name.upcase ext/digest/digest_conf.rb: $defs << "-D#{name.upcase}_USE_OPENSSL" ext/etc/mkconstants.rb:# if defined(HAVE_CONST_<%=name.upcase%>) ext/openssl/deprecation.rb: have_macro(func, header) && $defs.push("-DHAVE_#{func.upcase}") ext/socket/extconf.rb: have_const(name, headers) unless $defs.include?("-DHAVE_CONST_#{name.upcase}") ext/socket/mkconstants.rb:# if defined(HAVE_CONST_<%=name.upcase%>) ext/syslog/lib/syslog/logger.rb: level = ::Logger.const_get(meth.upcase) ext/tk/extconf.rb: exts.map!{|ext| [ext.downcase, ext.upcase]}.flatten! ext/tk/lib/tk/canvas.rb: (itemclass = typename.dup)[0,1] = typename[0,1].upcase ext/tk/sample/demos-en/entry3.rb: $phoneNumberMap[c.upcase] = n ext/tk/sample/demos-jp/entry3.rb: $phoneNumberMap[c.upcase] = n ext/tk/sample/tkextlib/treectrl/explorer.rb: type = ext.upcase ext/tk/sample/tkextlib/treectrl/explorer.rb: type = ext.upcase ext/tk/sample/tkextlib/treectrl/explorer.rb: type = ext.upcase ext/win32/lib/win32/registry.rb: (e = ENV[v] || ENV[v.upcase]; e.encode(str.encoding) if e) || ext/win32ole/sample/olegen.rb: io.print v.name.sub(/^./){$&.upcase} ext/zlib/extconf.rb: os_code = 'OS_' + os_code.upcase hash.c: * h["c"].upcase! #=> "GO FISH" hash.c: * h["c"].upcase! #=> "GO FISH: C" hash.c: * h.fetch_values("cow", "bird") { |k| k.upcase } #=> ["bovine", "BIRD"] include/ruby/oniguruma.h:#define ONIGENC_CASE_UP_SPECIAL (1<<16) /* has special upcase mapping */ lib/cgi/html.rb: s << "" lib/cgi/html.rb: s = "<#{element.upcase}" lib/cgi/html.rb: s << "" lib/cgi/util.rb: '%' + m.unpack('H2' * m.bytesize).join('%').upcase lib/irb/init.rb: prompt_mode = opt.upcase.tr("-", "_").intern lib/mkmf.rb: strip.upcase.tr_s("^A-Z0-9_*", "_").tr_s("*", "P") lib/mkmf.rb: conv = (compat == "long long" ? "LL" : compat.upcase) lib/net/imap.rb: auth_type = auth_type.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: return lang.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: key = token.value.upcase lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: data.push(atom.upcase) lib/net/imap.rb: name = token.value.upcase lib/net/imap.rb: return token.value.upcase lib/open-uri.rb: ftp.voidcmd("TYPE #{typecode.upcase}") lib/optparse.rb: env = ENV[env] || ENV[env.upcase] or return lib/rexml/encoding.rb: @encoding = encoding.upcase lib/rss/parser.rb: tag_name = tag_name.gsub(/[_\-]([a-z]?)/) {$1.upcase} lib/rss/parser.rb: tag_name[0, 1].upcase + tag_name[1..-1] lib/rss/utils.rb: "#{part[0, 1].upcase}#{part[1..-1]}" lib/rubygems.rb: req = ENV["GEM_REQUIREMENT_#{gem_name.upcase}"] || '>= 0'.freeze lib/rubygems/command_manager.rb: const_name = command_name.capitalize.gsub(/_(.)/) { $1.upcase } << "Command" lib/rubygems/request.rb: _SCHEME = scheme.upcase lib/rubygems/request_set/gem_dependency_api.rb: my_engine_version = Object.const_get "#{Gem.ruby_engine.upcase}_VERSION" lib/rubygems/resolver.rb: $stderr.printf "%10s %s\n", stage.to_s.upcase, d lib/rubygems/resolver.rb: $stderr.printf "%10s (%d entries)\n", stage.to_s.upcase, data.size lib/rubygems/test_utilities.rb: if URI === path and "URI::#{path.scheme.upcase}" != path.class.name then lib/scanf.rb:# str.scanf("%d%s") { |num,str| [ num * 2, str.upcase ] } lib/time.rb: zone = zone.upcase lib/time.rb: elsif ((t = self.local(year, 1, 1)).zone.upcase == zone rescue false) lib/time.rb: elsif ((t = self.local(year, 7, 1)).zone.upcase == zone rescue false) lib/time.rb: mon = MonthValue[$2.upcase] lib/time.rb: self.utc($6.to_i, MonthValue[$1.upcase], $2.to_i, lib/uri/generic.rb: if k == 'http_proxy' && ENV[k.upcase] == nil lib/uri/generic.rb: proxy_uri = ENV["CGI_#{name.upcase}"] lib/uri/generic.rb: if proxy_uri = ENV[name.upcase] lib/uri/generic.rb: proxy_uri = ENV[name] || ENV[name.upcase] lib/uri/generic.rb: if no_proxy = ENV[name] || ENV[name.upcase] lib/uri/rfc2396_parser.rb: if scheme && URI.scheme_list.include?(scheme.upcase) lib/uri/rfc2396_parser.rb: URI.scheme_list[scheme.upcase].new(scheme, userinfo, host, port, lib/uri/rfc3986_parser.rb: if scheme && scheme_list.include?(uc = scheme.upcase) lib/webrick/httpauth/digestauth.rb: if auth_req['algorithm'].upcase != @algorithm.upcase lib/webrick/httprequest.rb: name.upcase! lib/webrick/httpresponse.rb: tmp = key.gsub(/\bwww|^te$|\b\w/){ $&.upcase } lib/webrick/httpstatus.rb: var_name = message.gsub(/[ \-]/,'_').upcase man/ruby.1:% ruby -p -i.bak -e '$_.upcase!' /tmp/junk nacl/nacl-config.rb: if NaClConfig::const_defined?(name.upcase) nacl/nacl-config.rb: NaClConfig::const_get(name.upcase) sample/openssl/c_rehash.rb: Digest::MD5.hexdigest(der).upcase sample/openssl/cipher.rb: if i.upcase != i && ciphers.include?(i.upcase) sample/trick2013/yhara/entry.rb:def _(&b)$><<->(x){x ? (String===x ?x.upcase: string.c: * str.upcase! -> str or nil string.c:rb_str_upcase_bang(int argc, VALUE *argv, VALUE str) string.c: * str.upcase -> new_str string.c: * "hEllO".upcase #=> "HELLO" string.c:rb_str_upcase(int argc, VALUE *argv, VALUE str) string.c: rb_str_upcase_bang(argc, argv, str); string.c: * sym.upcase [options] -> symbol string.c: * Same as sym.to_s.upcase.intern. string.c:sym_upcase(int argc, VALUE *argv, VALUE sym) string.c: return rb_str_intern(rb_str_upcase(argc, argv, rb_sym2str(sym))); string.c: rb_define_method(rb_cString, "upcase", rb_str_upcase, -1); string.c: rb_define_method(rb_cString, "upcase!", rb_str_upcase_bang, -1); string.c: rb_define_method(rb_cSymbol, "upcase", sym_upcase, -1); template/encdb.h.tmpl: defs[name.upcase] = [fn,line] template/encdb.h.tmpl: [fn, $., $2, $1] unless defs[$2.upcase] template/encdb.h.tmpl: [fn, $., $2, $1] unless defs[$2.upcase] template/sizes.c.tmpl: strip.upcase.tr_s("^A-Z0-9_*", "_").tr_s("*", "P") template/unicode_norm_gen.tmpl: "\\u{#{to_s(16).upcase}}" template/unicode_norm_gen.tmpl: "\\u#{to_s(16).upcase.rjust(4, '0')}" test/-ext-/num2int/test_num2int.rb: func = "NUM2#{type}".upcase test/-ext-/num2int/test_num2int.rb: func = "NUM2#{type}".upcase test/-ext-/num2int/test_num2int.rb: func = "FIX2#{type}".upcase test/-ext-/num2int/test_num2int.rb: func = "FIX2#{type}".upcase test/cgi/test_cgi_cookie.rb: assert_equal(['A', 'B', 'C'], cookie.collect{|e| e.upcase}) test/dbm/test_dbm.rb: assert_equal(k.upcase, v) test/erb/test_erb.rb: <%- up = w.upcase -%> test/erb/test_erb.rb: <%- up = w.upcase -%> test/gdbm/test_gdbm.rb: assert_equal(k.upcase, v) test/lib/memory_status.rb: Header = members.map {|k| k.to_s.upcase.rjust(6)}.join('') test/mkmf/test_convertible.rb: (u = signed[/^u/]) and u.upcase! test/mkmf/test_convertible.rb: assert_include($defs, "-DPRI_TEST1T_PREFIX=PRI_#{type.upcase}_PREFIX") test/mkmf/test_convertible.rb: assert_include($defs, "-DTEST1T2NUM=#{u}#{type.upcase}2NUM") test/mkmf/test_convertible.rb: assert_include($defs, "-DNUM2TEST1T=NUM2#{u}#{type.upcase}") test/openssl/utils.rb: OpenSSL::Digest::SHA1.hexdigest(pkvalue).scan(/../).join(":").upcase test/rdoc/test_rdoc_method_attr.rb: m.block_params = '.to_s + ""' test/rdoc/test_rdoc_parser_ruby.rb: klass = RDoc::RubyToken.const_get "Tk#{klass.to_s.upcase}" test/ruby/enc/test_case_comprehensive.rb: upcase = Hash.new { |h, c| c } test/ruby/enc/test_case_comprehensive.rb: turkic_upcase = Hash.new { |h, c| upcase[c] } test/ruby/enc/test_case_comprehensive.rb: ascii_upcase = Hash.new { |h, c| c =~ /^[a-zA-Z]$/ ? upcase[c] : c } test/ruby/enc/test_case_comprehensive.rb: upcase[code] = hex2utf8 data[12] unless data[12].empty? test/ruby/enc/test_case_comprehensive.rb: upcase[code] = hex2utf8 data[3] test/ruby/enc/test_case_comprehensive.rb: turkic_upcase[code] = hex2utf8 data[3] test/ruby/enc/test_case_comprehensive.rb: CaseTest.new(:upcase, [:lithuanian], upcase), test/ruby/enc/test_case_comprehensive.rb: CaseTest.new(:upcase, [:turkic], turkic_upcase), test/ruby/enc/test_case_comprehensive.rb: CaseTest.new(:upcase, [:ascii], ascii_upcase), test/ruby/enc/test_case_mapping.rb: def check_upcase_properties(expected, start, *flags) test/ruby/enc/test_case_mapping.rb: assert_equal expected, start.upcase(*flags) test/ruby/enc/test_case_mapping.rb: assert_equal expected, temp.upcase!(*flags) unless expected==temp test/ruby/enc/test_case_mapping.rb: assert_equal nil, temp.upcase!(*flags) if expected==temp test/ruby/enc/test_case_mapping.rb: assert_equal expected, expected.upcase(*flags) test/ruby/enc/test_case_mapping.rb: assert_nil temp.upcase!(*flags) test/ruby/enc/test_case_mapping.rb: check_upcase_properties 'YUKIHIRO MATSUMOTO (MATZ)', 'yukihiro matsumoto (matz)', :lithuanian test/ruby/enc/test_case_mapping.rb: check_upcase_properties 'RÉSUMÉ DÜRST ĬÑŦĖŘŊÃŢIJŇŐŃÆŁĨŻÀŤÏŌŅ', 'résumé dürst ĭñŧėřŋãţijňőńæłĩżàťïōņ', :lithuanian test/ruby/enc/test_case_mapping.rb: def test_one_way_upcase test/ruby/enc/test_case_mapping.rb: check_upcase_properties 'ΜΜΜΜΜ', 'µµµµµ', :lithuanian # MICRO SIGN -> Greek Mu test/ruby/enc/test_case_mapping.rb: check_upcase_properties 'Μ', 'µ', :lithuanian # MICRO SIGN -> Greek Mu test/ruby/enc/test_case_mapping.rb: check_upcase_properties 'SS', 'ß', :lithuanian test/ruby/enc/test_case_mapping.rb: check_upcase_properties 'ᎠᎡᎢᎣᎤᎥᎦᎧᎨᎩ', "\uab70\uab71\uab72\uab73\uab74\uab75\uab76\uab77\uab78\uab79", :lithuanian test/ruby/enc/test_case_mapping.rb: check_upcase_properties 'DZ DŽ LJ NJ', 'Dz Dž Lj Nj', :lithuanian test/ruby/enc/test_case_mapping.rb: check_upcase_properties 'DZ DŽ LJ NJ', 'dz dž lj nj', :lithuanian test/ruby/enc/test_case_mapping.rb: check_upcase_properties 'YUKIHIRO MATSUMOTO (MATZ)', 'yukihiro matsumoto (matz)', :ascii test/ruby/enc/test_case_mapping.rb: check_upcase_properties 'YUKİHİRO MATSUMOTO (MATZ)', 'Yukihiro Matsumoto (matz)', :turkic test/ruby/enc/test_case_mapping.rb: check_upcase_properties 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ', 'αβγδεζηθικλμνξοπρστυφχψω', :lithuanian test/ruby/enc/test_case_options.rb: assert_raise(ArgumentError) { arg.upcase(*options) } test/ruby/enc/test_case_options.rb: assert_raise(ArgumentError) { arg.upcase!(*options) } test/ruby/enc/test_case_options.rb: assert_nothing_raised { arg.upcase(*options) } test/ruby/enc/test_case_options.rb: assert_nothing_raised { arg.upcase!(*options) } test/ruby/enc/test_case_options.rb: assert_raise(ArgumentError) { 'a'.upcase :fold } test/ruby/enc/test_case_options.rb: assert_raise(ArgumentError) { 'a'.upcase! :fold } test/ruby/enc/test_case_options.rb: assert_raise(ArgumentError) { :a.upcase :fold } test/ruby/enc/test_regex_casefold.rb: string.codepoints.collect { |cp| cp.to_s(16).upcase.rjust(4, '0') } test/ruby/test_alias.rb: assert_equal("ABC", x.try(:upcase), '[ruby-dev:38824]') test/ruby/test_call.rb: assert_equal("X", o.x&.upcase) test/ruby/test_call.rb: assert_nil(o.y&.upcase) test/ruby/test_encoding.rb: assert_equal(e, Encoding.find(e.name.upcase)) test/ruby/test_enum.rb: assert_equal(['A', 'B', 'C', 'D', 'E'], @obj.map {|x| x.upcase }) test/ruby/test_enum.rb: proc = Proc.new {|x| x.upcase } test/ruby/test_enum.rb: lambda = ->(x) { x.upcase } test/ruby/test_enum.rb: @obj.each_with_index.map {|x, i| [x.upcase, i] }) test/ruby/test_enum.rb: proc2 = Proc.new {|x, i| [x.upcase, i] } test/ruby/test_enum.rb: lambda2 = ->(x, i) { [x.upcase, i] } test/ruby/test_env.rb: val.succ! while ENV.has_value?(val) || ENV.has_value?(val.upcase) test/ruby/test_env.rb: assert_equal(false, ENV.has_value?(val.upcase)) test/ruby/test_env.rb: assert_equal(false, ENV.has_value?(val.upcase)) test/ruby/test_env.rb: ENV['test'] = val.upcase test/ruby/test_env.rb: assert_equal(true, ENV.has_value?(val.upcase)) test/ruby/test_env.rb: val.succ! while ENV.has_value?(val) || ENV.has_value?(val.upcase) test/ruby/test_env.rb: assert_nil(ENV.key(val.upcase)) test/ruby/test_env.rb: assert_equal('TEST', ENV.key(val).upcase) test/ruby/test_env.rb: assert_nil(ENV.key(val.upcase)) test/ruby/test_env.rb: ENV['test'] = val.upcase test/ruby/test_env.rb: assert_equal('TEST', ENV.key(val.upcase).upcase) test/ruby/test_env.rb: assert_equal('test', ENV.key(val.upcase)) test/ruby/test_env.rb: ENV.reject! {|k, v| IGNORE_CASE ? k.upcase == "TEST" : k == "test" } test/ruby/test_env.rb: assert_nil(ENV.reject! {|k, v| IGNORE_CASE ? k.upcase == "TEST" : k == "test" }) test/ruby/test_env.rb: ENV.delete_if {|k, v| IGNORE_CASE ? k.upcase == "TEST" : k == "test" } test/ruby/test_env.rb: assert_equal(ENV, ENV.delete_if {|k, v| IGNORE_CASE ? k.upcase == "TEST" : k == "test" }) test/ruby/test_env.rb: ENV.select! {|k, v| IGNORE_CASE ? k.upcase != "TEST" : k != "test" } test/ruby/test_env.rb: assert_nil(ENV.select! {|k, v| IGNORE_CASE ? k.upcase != "TEST" : k != "test" }) test/ruby/test_env.rb: ENV.keep_if {|k, v| IGNORE_CASE ? k.upcase != "TEST" : k != "test" } test/ruby/test_env.rb: assert_equal(ENV, ENV.keep_if {|k, v| IGNORE_CASE ? k.upcase != "TEST" : k != "test" }) test/ruby/test_env.rb: h = ENV.select {|k| IGNORE_CASE ? k.upcase == "TEST" : k == "test" } test/ruby/test_env.rb: assert_equal("TEST", k.upcase) test/ruby/test_env.rb: assert_equal("FOO", v.upcase) test/ruby/test_env.rb: s = s.upcase test/ruby/test_env.rb: a = a.map {|x| x.map {|y| y.upcase } } test/ruby/test_env.rb: assert_equal("TEST", k.upcase) test/ruby/test_env.rb: assert_equal("FOO", v.upcase) test/ruby/test_env.rb: assert_equal("TEST", k.upcase) test/ruby/test_env.rb: assert_equal("FOO", v.upcase) test/ruby/test_env.rb: h2 = ENV.reject {|k, v| IGNORE_CASE ? k.upcase == "TEST" : k == "test" } test/ruby/test_env.rb: as = as.map {|xs| xs.map {|x| x.upcase } } test/ruby/test_env.rb: bs = bs.map {|xs| xs.map {|x| x.upcase } } test/ruby/test_hash.rb: res = @h.fetch_values(3, 'invalid') { |k| k.upcase } test/ruby/test_hash.rb: super.upcase test/ruby/test_lazy_enumerator.rb: assert_equal('C', a.grep(/c/) {|i| i.upcase}.first) test/ruby/test_lazy_enumerator.rb: assert_equal('C', a.lazy.grep(/c/) {|i| i.upcase}.first) test/ruby/test_lazy_enumerator.rb: assert_equal('B', a.grep_v(/a/) {|i| i.upcase}.first) test/ruby/test_lazy_enumerator.rb: assert_equal('B', a.lazy.grep_v(/a/) {|i| i.upcase}.first) test/ruby/test_m17n_comb.rb: r = enccall(r, :sub, /\A[a-z]/) {|ch| b(ch).upcase } test/ruby/test_m17n_comb.rb: assert_equal(s1.upcase <=> s2.upcase, r) test/ruby/test_m17n_comb.rb: def test_str_upcase test/ruby/test_m17n_comb.rb: desc = "#{encdump s}.upcase" test/ruby/test_m17n_comb.rb: assert_raise(ArgumentError, desc) { s.upcase } test/ruby/test_m17n_comb.rb: t1 = s.upcase test/ruby/test_m17n_comb.rb: t2.upcase! test/ruby/test_marshal.rb: assert_equal(['X', 'X'], Marshal.load(Marshal.dump(obj), ->(v) { v == str ? v.upcase : v })) test/ruby/test_method.rb: assert_nothing_raised { RubyVM::InstructionSequence.disasm("x".method(:upcase)) } test/ruby/test_process.rb: cmd << '-e' << 'puts ENV.keys.map{|e|e.upcase}' test/ruby/test_refinement.rb: def upcase test/ruby/test_refinement.rb: puts "hello world".upcase test/ruby/test_refinement.rb: puts eval(%{using M; "hello world".upcase}) test/ruby/test_refinement.rb: puts "hello world".upcase test/ruby/test_refinement.rb: def upcase test/ruby/test_refinement.rb: puts "hello world".upcase test/ruby/test_refinement.rb: puts eval(%{using M; "hello world".upcase}, b) test/ruby/test_refinement.rb: puts eval(%{"hello world".upcase}, b) test/ruby/test_sprintf_comb.rb: 16.times {|i| digitmap[i] = i.to_s(16).upcase } test/ruby/test_string.rb: S("hello").gsub(/(hell)(.)/) { |s| $1.upcase + S('-') + $2 }) test/ruby/test_string.rb: a.gsub!(/(hell)(.)/) { |s| $1.upcase + S('-') + $2 } test/ruby/test_string.rb: assert_equal('aBc', 'abc'.sub(/b/, Hash.new {|h, k| k.upcase })) test/ruby/test_string.rb: assert_equal('aBcabc', 'abcabc'.sub(/b/, Hash.new {|h, k| h[k] = k.upcase })) test/ruby/test_string.rb: assert_equal('aBc', 'abc'.gsub(/b/, Hash.new {|h, k| k.upcase })) test/ruby/test_string.rb: assert_equal('aBcaBc', 'abcabc'.gsub(/b/, Hash.new {|h, k| h[k] = k.upcase })) test/ruby/test_string.rb: |s| $1.upcase + S('-') + $2 test/ruby/test_string.rb: a.sub!(/(hell)(.)/) { |s| $1.upcase + S('-') + $2 } test/ruby/test_string.rb: def test_upcase test/ruby/test_string.rb: assert_equal(S("HELLO"), S("hello").upcase) test/ruby/test_string.rb: assert_equal(S("HELLO"), S("hello").upcase) test/ruby/test_string.rb: assert_equal(S("HELLO"), S("HELLO").upcase) test/ruby/test_string.rb: assert_equal(S("ABC HELLO 123"), S("abc HELLO 123").upcase) test/ruby/test_string.rb: def test_upcase! test/ruby/test_string.rb: assert_equal(S("HELLO"), a.upcase!) test/ruby/test_string.rb: assert_nil(a.upcase!) test/ruby/test_string.rb: def test_upcase2 test/ruby/test_string.rb: assert_equal("\u3042AB", "\u3042aB".upcase) test/ruby/test_stringchar.rb: assert_equal(?A, "a".upcase![0]) test/ruby/test_stringchar.rb: s.upcase test/ruby/test_stringchar.rb: s.upcase! test/ruby/test_symbol.rb: assert_equal(:FOO, :FoO.upcase) test/rubygems/test_gem_installer.rb: bin_dir = Gem.win_platform? ? File.expand_path(ENV["WINDIR"]).upcase : test/rubygems/test_gem_request_set_gem_dependency_api.rb: engine_version_const = "#{Gem.ruby_engine.upcase}_VERSION" test/rubygems/test_gem_request_set_gem_dependency_api.rb: new_engine_version_const = "#{name.upcase}_VERSION" test/rubygems/test_gem_request_set_gem_dependency_api.rb: engine_version_const = "#{Gem.ruby_engine.upcase}_VERSION" test/scanf/test_scanfblocks.rb: names = @str.scanf("%s%d") { |name, year| name.upcase } test/sdbm/test_sdbm.rb: assert_equal(k.upcase, v) test/test_delegate.rb: m = s.method("upcase") test/test_set.rb: i.upcase test/test_set.rb: i.upcase test/test_unicode_normalize.rb: string.codepoints.collect { |cp| cp.to_s(16).upcase.rjust(4, '0') } test/uri/test_generic.rb: h["CGI_#{name.upcase}"] ||= nil time.c: * ^ upcase the result string tool/extlibs.rb: hd = Digest(name.upcase).file(cache).hexdigest tool/gen_dummy_probes.rb: name.upcase! tool/instruction.rb: " SCS_#{InstructionsLoader.complement_name(insn.nextsc).upcase}" + tool/transcode-tblgen.rb: hex = $1.upcase tool/transcode-tblgen.rb: pat = pat.upcase tool/transcode-tblgen.rb: gen_str(info.upcase) tool/transcode-tblgen.rb: k = [k].pack("U").unpack("H*")[0].upcase if Integer === k tool/transcode-tblgen.rb: v = [v].pack("U").unpack("H*")[0].upcase if Integer === v 2016年5月31日 10:37 Martin J. Dürst : > 下記の通り、大文字小文字変換を UTF-8 において ASCII だけからユニコード全体に変換しました。これにより、一部非互換性が出る可能性があります。 > > 一例で見せますと、r55224 までは次の通り: > > 'résumé ĭñŧėřŋãţijňőńæłĩżàťïōņ'.upcase > # -> 'RéSUMé ĭñŧėřŋãţijňőńæłĩżàťïōņ' > > それに対して、 r55225 以降は次の通り: > > 'résumé ĭñŧėřŋãţijňőńæłĩżàťïōņ'.upcase > # -> 'RÉSUMÉ ĬÑŦĖŘŊÃŢIJŇŐŃÆŁĨŻÀŤÏŌŅ' > > 一般の場合、後者が好ましいので、まつもとさんがわざわざそのように提案しました(https://bugs.ruby-lang.org/issues/10085#note-5 > 参照). > > しかし、例外があります。例えば DNS のサーバの場合です。その場合、今まで通り ASCII のみ変換を行いたいでしょう > (https://bugs.ruby-lang.org/issues/10085#note-9 参照). これは次のようにできます: > > 'résumé ĭñŧėřŋãţijňőńæłĩżàťïōņ'.upcase(:ascii) > # -> 'RéSUMé ĭñŧėřŋãţijňőńæłĩżàťïōņ' > > 必ず ASCII のみの変換が必要な場合、上記のように :ascii オプションを使ってください。 (扱うデータが既に全て ASCII > の場合、オプションを付ける必要はありません。) > > オプションについての詳しい説明は String#downcase の説明にありますが、全ての大文字小文字変換のメソッド > (upcase/downcase/capitalize/swapcase) に共通です。 > > UTF-8 以外の文字コードのための実装はこれから追加されます。 > > よろしくお願いします。 Martin. > > > -------- Forwarded Message -------- > Subject: [ruby-cvs:62388] duerst:r55225 (trunk): * string.c: Activate full > Unicode case mapping for UTF-8 by removing > Date: Tue, 31 May 2016 01:10:07 +0000 > From: duerst@ruby-lang.org > To: ruby-cvs@ruby-lang.org > > duerst 2016-05-31 10:10:06 +0900 (Tue, 31 May 2016) > > New Revision: 55225 > > https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=55225 > > Log: > * string.c: Activate full Unicode case mapping for UTF-8 by removing > the protective check for the presence of an option. > Update documentation. > * test/ruby/enc/test_case_comprehensive.rb: Adjust tests for above > change. > > Modified files: > trunk/ChangeLog > trunk/string.c > trunk/test/ruby/enc/test_case_comprehensive.rb > . > -- NARUSE, Yui