diff options
Diffstat (limited to 'template/encdb.h.tmpl')
-rw-r--r-- | template/encdb.h.tmpl | 36 |
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*"([^"]+)"/ |