Exemplo n.º 1
0
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
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
    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()