aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xext/ripper/tools/preproc.rb27
-rw-r--r--template/encdb.h.tmpl32
-rw-r--r--template/transdb.h.tmpl21
3 files changed, 48 insertions, 32 deletions
diff --git a/ext/ripper/tools/preproc.rb b/ext/ripper/tools/preproc.rb
index f5d0115184..7639a901df 100755
--- a/ext/ripper/tools/preproc.rb
+++ b/ext/ripper/tools/preproc.rb
@@ -41,6 +41,7 @@ end
def prelude(f, out)
@exprs = {}
+ lex_state_def = false
while line = f.gets
case line
when /\A%%/
@@ -50,19 +51,25 @@ def prelude(f, out)
out << line.sub(/<\w+>/, '<val>')
when /\A%type/
out << line.sub(/<\w+>/, '<val>')
+ when /^enum lex_state_(?:bits|e) \{/
+ lex_state_def = true
+ out << line
+ when /^\}/
+ lex_state_def = false
+ out << line
else
- if (/^enum lex_state_(?:bits|e) \{/ =~ line)..(/^\}/ =~ line)
- case line
- when /^\s*(EXPR_\w+),\s+\/\*(.+)\*\//
- @exprs[$1.chomp("_bit")] = $2.strip
- when /^\s*(EXPR_\w+)\s+=\s+(.+)$/
- name = $1
- val = $2.chomp(",")
- @exprs[name] = "equals to " + (val.start_with?("(") ? "<tt>#{val}</tt>" : "+#{val}+")
- end
- end
out << line
end
+ if lex_state_def
+ case line
+ when /^\s*(EXPR_\w+),\s+\/\*(.+)\*\//
+ @exprs[$1.chomp("_bit")] = $2.strip
+ when /^\s*(EXPR_\w+)\s+=\s+(.+)$/
+ name = $1
+ val = $2.chomp(",")
+ @exprs[name] = "equals to " + (val.start_with?("(") ? "<tt>#{val}</tt>" : "+#{val}+")
+ end
+ end
end
end
diff --git a/template/encdb.h.tmpl b/template/encdb.h.tmpl
index 9de29bebde..06afb5dbe1 100644
--- a/template/encdb.h.tmpl
+++ b/template/encdb.h.tmpl
@@ -40,20 +40,28 @@ encdirs.each do |encdir|
files[fn] = true
open(File.join(encdir,fn)) do |f|
name = nil
+ skip_ifndef_ruby = false
+ encoding_def = false
f.each_line do |line|
- if (/^#ifndef RUBY/ =~ line)..(/^#endif/ =~ line)
- elsif (/^OnigEncodingDefine/ =~ line)..(/"(.*?)"/ =~ line)
- if $1
- if name
- lines << %[ENC_SET_BASE("#$1", "#{name}");]
- else
- name = $1
- end
- check_duplication(defs, $1, fn, $.)
- next if BUILTIN_ENCODINGS[name]
- encodings << $1
- count += 1
+ case line
+ when /^#ifndef RUBY/
+ skip_ifndef_ruby = true
+ when /^#endif/
+ skip_ifndef_ruby = false
+ end
+ next if skip_ifndef_ruby
+ encoding_def = true if /^OnigEncodingDefine/ =~ line
+ if encoding_def && /"(.*?)"/ =~ line
+ encoding_def = false
+ if name
+ lines << %[ENC_SET_BASE("#$1", "#{name}");]
+ else
+ name = $1
end
+ check_duplication(defs, $1, fn, $.)
+ next if BUILTIN_ENCODINGS[name]
+ encodings << $1
+ count += 1
else
case line
when /^\s*rb_enc_register\(\s*"([^"]+)"/
diff --git a/template/transdb.h.tmpl b/template/transdb.h.tmpl
index d0cf101344..16565dd638 100644
--- a/template/transdb.h.tmpl
+++ b/template/transdb.h.tmpl
@@ -36,17 +36,18 @@ transdirs.each do |transdir|
files[fn] = true
path = File.join(transdir,fn)
open(path) do |f|
+ transcoder_def = false
f.each_line do |line|
- if (/^static const rb_transcoder/ =~ line)..(/"(.*?)"\s*,\s*"(.*?)"/ =~ line)
- if $1 && $2
- from_to = "%s to %s" % [$1, $2]
- if converters[from_to]
- raise ArgumentError, '%s:%d: transcode "%s" is already registered at %s:%d' %
- [path, $., from_to, *converters[from_to].values_at(3, 4)]
- else
- converters[from_to] = [$1, $2, fn[0..-3], path, $.]
- converter_list << from_to
- end
+ transcoder_def = true if /^static const rb_transcoder/ =~ line
+ if transcoder_def && /"(.*?)"\s*,\s*"(.*?)"/ =~ line
+ transcoder_def = false
+ from_to = "%s to %s" % [$1, $2]
+ if converters[from_to]
+ raise ArgumentError, '%s:%d: transcode "%s" is already registered at %s:%d' %
+ [path, $., from_to, *converters[from_to].values_at(3, 4)]
+ else
+ converters[from_to] = [$1, $2, fn[0..-3], path, $.]
+ converter_list << from_to
end
end
end