summaryrefslogtreecommitdiffstats
path: root/tools/genruby.rb
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2012-01-23 16:11:11 +0100
committerJérémy Zurcher <jeremy@asynk.ch>2012-01-23 16:11:11 +0100
commita6b423787b9d9df618d89468e2573b4d598f011e (patch)
tree2ccc594c7eb0374fd17bccc0cd0afc5d3baf11b1 /tools/genruby.rb
parent7d22f5782e018c9245828c11c8316315434ce23f (diff)
downloadffi-efl-a6b423787b9d9df618d89468e2573b4d598f011e.zip
ffi-efl-a6b423787b9d9df618d89468e2573b4d598f011e.tar.gz
tools/genruby: take care of enum backward references
Diffstat (limited to 'tools/genruby.rb')
-rwxr-xr-xtools/genruby.rb23
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