diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-11-06 15:00:24 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-11-06 15:00:24 +0000 |
commit | d436c051630a4406971645c7b44d84f4f00a0ff8 (patch) | |
tree | 20d751f40c7f6b88cf09c974ce7edebe41405c50 | |
parent | 4fa166e301eb074fac378815d2641ef1dfcd5a18 (diff) | |
download | ruby-d436c051630a4406971645c7b44d84f4f00a0ff8.tar.gz |
unicode_norm_gen.tmpl: expand kompatible_table
* template/unicode_norm_gen.tmpl: expand kompatible_table so that
recursive expansion is not needed at runtime.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48311 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | lib/unicode_normalize/normalize.rb | 18 | ||||
-rw-r--r-- | template/unicode_norm_gen.tmpl | 6 |
3 files changed, 13 insertions, 16 deletions
@@ -1,3 +1,8 @@ +Fri Nov 7 00:00:12 2014 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * template/unicode_norm_gen.tmpl: expand kompatible_table so that + recursive expansion is not needed at runtime. + Thu Nov 6 23:58:40 2014 Nobuyoshi Nakada <nobu@ruby-lang.org> * pack.c (pack_pack): escape unprintable characters and preserve diff --git a/lib/unicode_normalize/normalize.rb b/lib/unicode_normalize/normalize.rb index bc8831c6b7..5fea8c5548 100644 --- a/lib/unicode_normalize/normalize.rb +++ b/lib/unicode_normalize/normalize.rb @@ -84,26 +84,12 @@ module UnicodeNormalize ## Normalization Forms for Patterns (not whole Strings) def self.nfd_one(string) - string = string.dup - (0...string.length).each do |position| - if decomposition = DECOMPOSITION_TABLE[string[position]] - string[position] = decomposition - end - end + string = string.chars.map! {|c| DECOMPOSITION_TABLE[c] || c}.join('') canonical_ordering_one(hangul_decomp_one(string)) end def self.nfkd_one(string) - string = string.dup - position = 0 - while position < string.length - if decomposition = KOMPATIBLE_TABLE[string[position]] - string[position] = decomposition - else - position += 1 - end - end - string + string.chars.map! {|c| KOMPATIBLE_TABLE[c] || c}.join('') end def self.nfc_one(string) diff --git a/template/unicode_norm_gen.tmpl b/template/unicode_norm_gen.tmpl index 82498d0b41..2123643018 100644 --- a/template/unicode_norm_gen.tmpl +++ b/template/unicode_norm_gen.tmpl @@ -138,6 +138,12 @@ decomposition_table.each do |key, value| kompatible_table[key] = value if expanded end +while kompatible_table.any? {|key, value| + expanded = value.map {|v| kompatible_table[v] || v}.flatten + kompatible_table[key] = expanded unless value == expanded + } +end + # generate normalization tables file %># coding: us-ascii %# > |