summaryrefslogtreecommitdiff
path: root/template/encdb.h.tmpl
diff options
context:
space:
mode:
Diffstat (limited to 'template/encdb.h.tmpl')
-rw-r--r--template/encdb.h.tmpl36
1 files changed, 14 insertions, 22 deletions
diff --git a/template/encdb.h.tmpl b/template/encdb.h.tmpl
index 8e658f7985..fe6af95747 100644
--- a/template/encdb.h.tmpl
+++ b/template/encdb.h.tmpl
@@ -33,35 +33,27 @@ encdirs << 'enc' if encdirs.empty?
files = {}
encdirs.each do |encdir|
next unless File.directory?(encdir)
- Dir.open(encdir) {|d| d.grep(/.+\.[ch]\z/)}.sort_by {|e|
+ Dir.glob("*.[ch]", base: encdir).sort_by {|e|
e.scan(/(\d+)|(\D+)/).map {|n,a| a||[n.size,n.to_i]}.flatten
}.each do |fn|
next if files[fn]
files[fn] = true
- open(File.join(encdir,fn)) do |f|
+ File.open(File.join(encdir, fn)) do |f|
name = nil
- skip_ifndef_ruby = false
- encoding_def = false
f.each_line do |line|
- 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
+ if (/^#ifndef RUBY/ =~ line)..(/^#endif/ =~ line)
+ elsif /^OnigEncodingDefine/.match?(line)
+ if (n = f.gets("\n\};")[/"(.*?)"/, 1]) # swallow the initializer block
+ if name
+ lines << %[ENC_SET_BASE("#{n}", "#{name}");]
+ else
+ name = n
+ end
+ check_duplication(defs, n, fn, f.lineno)
+ next if BUILTIN_ENCODINGS[name]
+ encodings << n
+ count += 1
end
- check_duplication(defs, $1, fn, f.lineno)
- next if BUILTIN_ENCODINGS[name]
- encodings << $1
- count += 1
else
case line
when /^\s*rb_enc_register\(\s*"([^"]+)"/