Clean up and refactor enum namespacing
authorJohan Dahlin <johan@src.gnome.org>
Fri, 9 May 2008 00:51:07 +0000 (00:51 +0000)
committerJohan Dahlin <johan@src.gnome.org>
Fri, 9 May 2008 00:51:07 +0000 (00:51 +0000)
svn path=/trunk/; revision=273

giscanner/ast.py
giscanner/girwriter.py
giscanner/glibast.py
giscanner/glibtransformer.py
giscanner/transformer.py

index c91b9a3..aa99db5 100644 (file)
@@ -125,10 +125,10 @@ class Parameter(Node):
 
 
 class Enum(Node):
-    def __init__(self, name, members):
+    def __init__(self, name, symbol, members):
         Node.__init__(self, name)
+        self.symbol = symbol
         self.members = members
-        self.ctype = name
 
     def __repr__(self):
         return 'Enum(%r, %r)' % (self.name, self.members)
index 16c9a11..162a089 100644 (file)
@@ -128,7 +128,7 @@ class GIRWriter(XMLWriter):
 
     def _write_enum(self, enum):
         attrs = [('name', enum.name),
-                 ('c:type', enum.ctype)]
+                 ('c:type', enum.symbol)]
         tag_name = 'enumeration'
         if isinstance(enum, GLibEnum):
             attrs.extend([('glib:type-name', enum.type_name),
index 585a3fd..d50c503 100644 (file)
@@ -23,7 +23,7 @@ from .ast import Class, Enum, Interface, Member, Node, Property, Struct
 
 class GLibEnum(Enum):
     def __init__(self, name, members, type_name, get_type):
-        Enum.__init__(self, name, members)
+        Enum.__init__(self, name, type_name, members)
         self.ctype = type_name
         self.type_name = type_name
         self.get_type = get_type
index 977a383..e4385e8 100644 (file)
@@ -104,14 +104,6 @@ class GLibTransformer(object):
     def _register_internal_type(self, type_name, node):
         self._type_names[type_name] = (None, node)
 
-    def _strip_namespace_object(self, name):
-        orig_name = name
-        prefix = self._namespace_name.lower()
-        name = name.lower()
-        if name.startswith(prefix):
-            name = orig_name[len(prefix):]
-        return name
-
     def _resolve_type_name(self, type_name):
         item = self._type_names.get(type_name)
         if item is not None:
@@ -139,7 +131,6 @@ class GLibTransformer(object):
             print 'GOBJECT BUILDER: Unhandled node:', node
 
     def _parse_enum(self, enum):
-        enum.name = self._strip_namespace_object(enum.name)
         self._add_attribute(enum)
 
     def _parse_function(self, func):
@@ -283,15 +274,15 @@ class GLibTransformer(object):
 
         klass = (GLibFlags if ftype_id == cgobject.TYPE_FLAGS else GLibEnum)
         type_name = cgobject.type_name(type_id)
-        node = klass(self._strip_namespace_object(type_name),
-                      members, type_name, symbol)
+        node = klass(self._transformer.strip_namespace_object(type_name),
+                     members, type_name, symbol)
         self._add_attribute(node, replace=True)
         self._register_internal_type(type_name, node)
 
     def _introspect_object(self, type_id, symbol):
         type_name = cgobject.type_name(type_id)
         parent_type_name = cgobject.type_name(cgobject.type_parent(type_id))
-        node = GLibObject(self._strip_namespace_object(type_name),
+        node = GLibObject(self._transformer.strip_namespace_object(type_name),
                           self._resolve_type_name(parent_type_name),
                           type_name, symbol)
         self._introspect_properties(node, type_id)
@@ -302,8 +293,9 @@ class GLibTransformer(object):
 
     def _introspect_interface(self, type_id, symbol):
         type_name = cgobject.type_name(type_id)
-        node = GLibInterface(self._strip_namespace_object(type_name),
-                             type_name, symbol)
+        node = GLibInterface(
+            self._transformer.strip_namespace_object(type_name),
+            type_name, symbol)
         self._introspect_properties(node, type_id)
         self._introspect_signals(node, type_id)
         self._add_attribute(node)
@@ -311,7 +303,7 @@ class GLibTransformer(object):
 
     def _introspect_boxed(self, type_id, symbol):
         type_name = cgobject.type_name(type_id)
-        node = GLibBoxed(self._strip_namespace_object(type_name),
+        node = GLibBoxed(self._transformer.strip_namespace_object(type_name),
                          type_name, symbol)
         self._add_attribute(node)
         self._remove_attribute(type_name)
index 21c55cc..6352686 100644 (file)
@@ -67,6 +67,16 @@ class Transformer(object):
         for node in parser.get_nodes():
             self._type_names[node.type_name] = (nsname, node)
 
+    def strip_namespace_object(self, name):
+        orig_name = name
+        prefix = self._namespace.name.lower()
+        name = name.lower()
+        if name.startswith(prefix):
+            name = orig_name[len(prefix):]
+        return name
+
+    # Private
+
     def _strip_namespace_func(self, name):
         orig_name = name
         prefix = self._namespace.name.lower() + '_'
@@ -126,7 +136,8 @@ class Transformer(object):
             members.append(Member(child.ident,
                                   child.const_int))
 
-        return Enum(symbol.ident, members)
+        name = self.strip_namespace_object(symbol.ident)
+        return Enum(name, symbol.ident, members)
 
     def _create_object(self, symbol):
         return Member(symbol.ident, symbol.base_type.name)