diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-03-13 17:54:43 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-03-13 17:54:43 +0000 |
commit | fa37ab769fa4adac50959b514793e8d1a39a09ce (patch) | |
tree | 112074cd69b0a4008f0521afbb537846e014f2aa /tool | |
parent | bce5056cab71b0df70393a5673627c7bd7c8b4e7 (diff) | |
download | ruby-fa37ab769fa4adac50959b514793e8d1a39a09ce.tar.gz |
* tool/transcode-tblgen.rb: reject ambiguous mapping.
* enc/trans/single_byte.trans: remove ambiguous maping such as
\xD6 -> U+05F2 and \xD6\xC7 -> U+FB1F in Windows-1255
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26912 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'tool')
-rwxr-xr-x | tool/transcode-tblgen.rb | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/tool/transcode-tblgen.rb b/tool/transcode-tblgen.rb index dbd03e3028..14a09dbadf 100755 --- a/tool/transcode-tblgen.rb +++ b/tool/transcode-tblgen.rb @@ -133,6 +133,12 @@ class StrSet } end + def has_nonempty? + @pat.any? {|seq| + !seq.empty? + } + end + def first_bytes result = {} @pat.each {|seq| @@ -228,6 +234,18 @@ class ActionMap @map.keys.map {|k| k.max_length }.max end + def check_conflict + has_empty = false + has_nonempty = false + @map.each {|ss, action| + has_empty = true if ss.emptyable? + has_nonempty = true if ss.has_nonempty? + } + if has_empty && has_nonempty + raise "conflict between empty and nonempty sequence" + end + end + def empty_action @map.each {|ss, action| return action if ss.emptyable? @@ -440,6 +458,7 @@ End table = Array.new(0x100, :invalid) each_firstbyte(valid_encoding) {|byte, rest, rest_valid_encoding| + rest.check_conflict if a = rest.empty_action table[byte] = a else |