aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--lib/unicode_normalize/normalize.rb18
-rw-r--r--template/unicode_norm_gen.tmpl6
3 files changed, 13 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index df021606a7..8d946cc9a5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
%# >