Added GTK support
[delight/dlt-lib.git] / gen / doenums.py
blob9aa7b083e232aa98604792008f1fe91a9347a39f
1 #!/usr/bin/env python
3 # Reads in the output from gengtk.dlt and fills in the filling values for the enums
5 import pygtk; pygtk.require('2.0')
6 import gtk
7 import pango
8 import atk
9 import string
10 import sys
12 def format_hex(x):
13 v = int(x)
14 if v == 0:
15 return "0"
16 elif v > 0:
17 return "0x%x" % v
18 else:
19 return "%d" % v
21 out = file(sys.argv[2], 'w')
23 print >>out, "# Auto-generated by doenums.py"
25 for line in file(sys.argv[1]):
26 if line.startswith('\tenum '):
27 values = line.strip().split(' ')
28 cname = values[1]
29 pyname = values[2]
30 items = values[3:]
32 values = []
33 for i in items:
34 dname, icname = i.split(':')
35 mod, pyname = icname.split('_', 1)
37 if pyname[0].isdigit():
38 pyname = '_' + pyname
40 if mod == 'GTK':
41 en = getattr(gtk, pyname, None)
42 elif mod == 'PANGO':
43 en = getattr(pango, pyname, None)
44 elif mod == 'ATK':
45 en = getattr(gtk.atk, pyname, None)
46 elif mod == 'GDK':
47 en = getattr(gtk.gdk, pyname, None)
48 elif mod == 'PRIVATE':
49 continue
51 if en is None:
52 print "Skipping unknown enum value %s" % icname
53 continue
55 dname = string.capwords(dname.replace('_', ' ')).replace(' ', '')
56 if dname[0].isdigit():
57 dname = '_' + dname
59 values.append((dname, format_hex(en)))
60 print >>out, "\tenum %s:" % cname
61 if values:
62 for v in values:
63 print >>out, "\t\t%s = %s" % v
64 else:
65 print >>out, "\t\tUNKNOWN"
66 else:
67 print >>out, line,
69 print >>out, "\ninterface Gtk:"
71 ext = iter(file('../_externals/dlt/gtk.dlt'))
72 for line in ext:
73 if line.startswith('class HostGtk '):
74 break
75 else:
76 assert 0
78 for line in ext:
79 if not line.strip(): continue
80 if not line.startswith('\t'): break
81 if line.startswith('\tpublic '):
82 print >>out, '\t' + line.split(' ', 1)[1].strip(':\n')