diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2011-04-28 15:13:37 +0200 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2011-04-28 15:13:37 +0200 |
commit | 1594f455162dbfb85e5716f0052454a3a1c15745 (patch) | |
tree | 231809fa4c6e5ef514f3a381bb404d6ca2225f2d /tools/genruby.rb | |
parent | 450deb0f86791b21936dbec5ed5b167f0b901044 (diff) | |
download | ffi-efl-1594f455162dbfb85e5716f0052454a3a1c15745.zip ffi-efl-1594f455162dbfb85e5716f0052454a3a1c15745.tar.gz |
update tools/genruby callback regexp
Diffstat (limited to 'tools/genruby.rb')
-rwxr-xr-x | tools/genruby.rb | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/tools/genruby.rb b/tools/genruby.rb index eb1c91d..4e74bf3 100755 --- a/tools/genruby.rb +++ b/tools/genruby.rb @@ -204,12 +204,12 @@ def gen_callbacks path, indent r = [] open(path+'-callbacks','r').readlines.each do |l| l.strip! - if not l=~/^\s*typedef\s+([a-zA-Z0-9_\* ]+?\s+\**)((?:\(\*)?\w+\)?)\s*\((.*)\);\s*$/ + if not l=~/^\s*typedef\s+(.*)((?:\(\*?\w+\)| \*?\w+))\s*\((.*)\);\s*$/ r << indent+"# #{l}\n#{indent}# FIXME" next end ret = $1 - name = $2 + name = $2.strip args = $3.split(',').collect { |arg| get_type_from_arg arg, l }.join ', ' k = name.sub(/\(/,'').sub(/\)/,'').sub(/\*/,'') t = name.downcase.sub(/\(/,'').sub(/\)/,'').sub(/\*/,'') @@ -245,25 +245,33 @@ libraries.collect do |header,module_name,fct_prefix,lib, output| base = File.join path, 'api', header output = File.join lib_path, output Dir.mkdir File.dirname output unless Dir.exists? File.dirname output - puts "parse #{base}-*" + printf "%-60s", "parse #{base}-*" r = [lib, output, module_name, fct_prefix ] + print "enums, " r << gen_enums(base, INDENT) + print "typedefs, " r << gen_typedefs(base, INDENT) + print "callbacks, " r << gen_callbacks(base, INDENT) + puts "functions." r << gen_functions(base, INDENT) r end.each do |lib, output, module_name, fct_prefix, enums, typedefs, callbacks, functions| - puts "generate #{output}" + printf "%-60s", "generate #{output}" open(output,'w:utf-8') do |f| f << HEADER.sub(/MNAME/,module_name).sub(/PREFIX/,fct_prefix) f << "#{INDENT}#\n#{INDENT}ffi_lib '#{lib}'" f << "\n#{INDENT}#\n#{INDENT}# ENUMS" + print "enums, " f << "\n"+enums.collect { |t| ( t.is_a?(Array) ? ( TYPES_USAGE[t[0]] ? t[1] : nil ) : t ) }.compact.join("\n") unless enums.empty? f << "\n#{INDENT}#\n#{INDENT}# TYPEDEFS" + print "typedefs, " f << "\n"+typedefs.collect { |t| ( t.is_a?(Array) ? ( TYPES_USAGE[t[0]] ? t[1] : nil ) : t ) }.compact.join("\n") unless typedefs.empty? f << "\n#{INDENT}#\n#{INDENT}# CALLBACKS" + print "callbacks, " f << "\n"+callbacks.join("\n") unless callbacks.empty? f << "\n#{INDENT}#\n#{INDENT}# FUNCTIONS" + puts "functions." f << "\n"+functions.join("\n") unless functions.empty? f << "\n#{INDENT}#\n#{INDENT}attach_fcts fcts\n" f << FOOTER |