def py_enum(self, name): ''' Exported function that handles enum declarations. ''' if is_ignored(name): return cls = PyClass(strip_ns(name)) count = 0 for (enam, evalue) in self.values: cls.new_attribute(prefix_if_needed(enam), evalue if evalue != '' else count) count += 1 ALL[cls.name] = cls cls.is_enum = True
def py_event(self, name): setup_type(self, name, 'Event') entry = INTERFACE.get('Events', {}).get(strip_ns(name), {}) clsname = entry.get('classname', self.py_event_name) # Opcode define EVENTS[self.opcodes[name]] = clsname eventname = ('"%s"' % entry.get('eventname', 'on_%s' % pythonize_camelcase_name(strip_ns(name)))) struct = PyClass(clsname) struct.base = 'ooxcb.Event' struct.new_attribute('event_name', eventname) # each event class has an `opcode` attribute struct.new_attribute('opcode', self.opcodes[name]) if not entry: clsname, membername = ('ooxcb.Connection', 'conn') else: membername = entry['member'] # here we want to register the events to the original class. # TODO: The way I am doing that here is dirty. clsname = '"%s"' % entry.get('class', get_wrapped(get_field_by_name(self.fields, membername).py_type).replace('Mixin', '')) # the classnames are resolved later. see generate_all. struct.new_attribute('event_target_class', clsname) init = struct.new_method('__init__') init.arguments.extend(['conn']) init.code.append('ooxcb.Event.__init__(self, conn)') ALL[self.py_event_name] = WRAPPERS[self.py_event_name] = struct py_complex(self, name, struct) struct.get_member_by_name('read').code.append('self.event_target = self.%s' % membername)
print 'Refer to the README file in xcb/proto for more info.' print '' raise import xcbgen if len(sys.argv) > 1: # provided with a module name MODNAME = sys.argv[1] else: MODNAME = 'xproto' print >>sys.stderr, 'Wrapping %s ...' % MODNAME EXTCLS = PyClass('%sExtension' % MODNAME) EXTCLS.new_attribute('header', '"%s"' % MODNAME) EXTCLS.base = 'ooxcb.Extension' ALL['%sExtension' % MODNAME] = EXTCLS try: ifile = open('%s.i' % MODNAME, 'r') INTERFACE = yaml.load(ifile.read()) finally: ifile.close() module = Module('%s.xml' % MODNAME, output) module.register() module.resolve()