diff options
| author | Jérémy Zurcher <jeremy@asynk.ch> | 2012-01-23 16:11:11 +0100 | 
|---|---|---|
| committer | Jérémy Zurcher <jeremy@asynk.ch> | 2012-01-23 16:11:11 +0100 | 
| commit | a6b423787b9d9df618d89468e2573b4d598f011e (patch) | |
| tree | 2ccc594c7eb0374fd17bccc0cd0afc5d3baf11b1 | |
| parent | 7d22f5782e018c9245828c11c8316315434ce23f (diff) | |
| download | ffi-efl-a6b423787b9d9df618d89468e2573b4d598f011e.zip ffi-efl-a6b423787b9d9df618d89468e2573b4d598f011e.tar.gz  | |
tools/genruby: take care of enum backward references
| -rwxr-xr-x | tools/genruby.rb | 23 | 
1 files changed, 22 insertions, 1 deletions
diff --git a/tools/genruby.rb b/tools/genruby.rb index 5508981..baca539 100755 --- a/tools/genruby.rb +++ b/tools/genruby.rb @@ -151,7 +151,28 @@ def gen_enums path, indent          values = $2.strip          typename = $3.strip          tsym = set_type typename, typename -        args = values.split(',').collect { |cst| ':'+cst.strip.downcase }.join(', ').gsub(/=/,',').gsub(/ ,/,',') +        syms, vals = [], [] +        values.split(',').each do |define| +            s,v = define.gsub(/ /,'').split(/=/) +            syms << s +            vals << v +        end +        if vals.count(nil) == vals.length +            args = syms.collect{ |sym| ':'+sym.strip.downcase }.join(', ') +        else +            i=0 +            h={} +            syms.zip(vals) do |s,v| +                sym=':'+s.downcase +                if h.has_key? v +                    h[s]=h[v] +                else +                    h[s]=i +                    i+=1 +                end +            end +            args = syms.inject(''){|r,s| r+=":#{s.strip.downcase}, #{h[s]}, " } +        end          r << indent+"# #{typedef} {...} #{typename};"          r << wrap_text( indent+"enum #{tsym}, [ #{args} ]", indent+' '*4 )      end  | 
