diff options
author | John Finlay <finlay@src.gnome.org> | 2008-10-31 09:41:51 +0000 |
---|---|---|
committer | John Finlay <finlay@src.gnome.org> | 2008-10-31 09:41:51 +0000 |
commit | 0c7e6367356e47a82844a375581f2fa296bdefcb (patch) | |
tree | 3abe7bd2793e5837007b72dc61285019939c30fd /codegen/defsgen.py | |
parent | 73b03de5d0c24e556e485c4cd370d5815f82e311 (diff) | |
download | pygobject-0c7e6367356e47a82844a375581f2fa296bdefcb.tar.gz pygobject-0c7e6367356e47a82844a375581f2fa296bdefcb.tar.xz pygobject-0c7e6367356e47a82844a375581f2fa296bdefcb.zip |
Use the passed in prefix as a hint when creating a typecode.
* codegen/defsgen.py (typecode): Use the passed in prefix as a
hint when creating a typecode.
(split_prefix,write_enum_defs,_write_obj_helper): Add function to
use passed in prefix as a hint when splitting an object name into
module and name.
* codegen/h2def.py (DefsWriter.write_enum_defs): Make sure the
prefix ends with a _ i.e. really handle the GDK_FONT_FONT,
GDK_FONT_FONTSET case.
svn path=/trunk/; revision=972
Diffstat (limited to 'codegen/defsgen.py')
-rw-r--r-- | codegen/defsgen.py | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/codegen/defsgen.py b/codegen/defsgen.py index 5bff32e..902a5ba 100644 --- a/codegen/defsgen.py +++ b/codegen/defsgen.py @@ -100,9 +100,15 @@ def to_upper_str(name): name = _upperstr_pat3.sub(r'\1_\2', name, count=1) return name.upper() -def typecode(typename): +def typecode(typename, prefix=''): """create a typecode (eg. GTK_TYPE_WIDGET) from a typename""" - return to_upper_str(typename).replace('_', '_TYPE_', 1) + tcode = to_upper_str(typename) + if prefix and tcode.lower() != prefix and tcode.lower().startswith(prefix): + l = len(prefix) + tcode = tcode[:l] + '_TYPE' + tcode[l:] + else: + tcode = tcode.replace('_', '_TYPE_', 1) + return tcode _class_iface_pat = re.compile(r'\w+(Class|Iface)') @@ -284,6 +290,20 @@ pointer_pat = re.compile('(.*)\*$') func_new_pat = re.compile('(\w+)_new$') getset_pat = re.compile(r'^(?:get|set)_(.*)$') +def split_prefix(cname, prefix): + # use the module prefix to split the cname + pre = prefix.replace('_', '') + if cname.lower().startswith(pre): + l = len(pre) + module = cname[:l] + name = cname[l:] + else: + m = split_prefix_pat.match(cname) + if m: + module = m.group(1) + name = m.group(2) + return module, name + class DefsWriter: def __init__(self, defs, fp=None, prefix=None, verbose=False, defsfiles=None, defines={}, genpropgetsets=False): @@ -340,15 +360,12 @@ class DefsWriter: klassptr = klassptrs[parent_name] typename = parent_name.lower()[1:] module = None - m = split_prefix_pat.match(cname) - if m: - module = m.group(1) - name = m.group(2) + module, name = split_prefix(cname, self.prefix) fp.write('(define-' + typename + ' ' + name + '\n') if module: fp.write(' (in-module "' + module + '")\n') fp.write(' (c-name "' + cname + '")\n') - fp.write(' (gtype-id "' + typecode(cname) + '")\n') + fp.write(' (gtype-id "' + typecode(cname, self.prefix) + '")\n') fp.write(' (values\n') classref = self.gobj.g_type_class_ref(obj.type) itemclass = ctypes.cast(classref, klassptr).contents @@ -366,17 +383,14 @@ class DefsWriter: cname = name = obj.name type_id = obj.type parent_name = obj.parent_name - m = split_prefix_pat.match(cname) - if m: - cmodule = m.group(1) - name = m.group(2) + cmodule, name = split_prefix(cname, self.prefix) fp.write('(define-' + base_name + ' ' + name + '\n') if cmodule: fp.write(' (in-module "' + cmodule + '")\n') if base_name == 'object': fp.write(' (parent "' + parent_name + '")\n') fp.write(' (c-name "' + cname + '")\n') - fp.write(' (gtype-id "' + typecode(cname) + '")\n') + fp.write(' (gtype-id "' + typecode(cname, self.prefix) + '")\n') n = ctypes.c_uint() ifaces = self.gobj.g_type_interfaces(type_id, ctypes.byref(n)) for i in range(n.value): @@ -489,7 +503,7 @@ class DefsWriter: # ---------- ctypes support classes for gobject library functions ---------- -GType = ctypes.c_ulong +GType = ctypes.c_uint class GTypeClass(ctypes.Structure): _fields_ = [('g_type', GType)] |