[gobject-introspection] Allow using GLib.List(Foo) instead of GLib.List<Foo>



commit bfe51fb9472df24ca21c16f5d2af64f8533807e1
Author: Olivier CrÃte <olivier crete collabora com>
Date:   Tue Dec 20 17:45:11 2011 -0500

    Allow using GLib.List(Foo) instead of GLib.List<Foo>
    
    Using < and > for delimiters is problematic because gtk-doc is Docbook
    which in turn is SGML, and those are reserved characters.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=663190

 giscanner/maintransformer.py           |    7 +++--
 tests/scanner/Regress-1.0-expected.gir |   13 ++++++++++
 tests/scanner/regress.c                |   40 ++++++++++++++++++++++++++++++-
 3 files changed, 55 insertions(+), 5 deletions(-)
---
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py
index 7358600..a9eea8a 100644
--- a/giscanner/maintransformer.py
+++ b/giscanner/maintransformer.py
@@ -260,11 +260,12 @@ usage is void (*_gtk_reserved1)(void);"""
             """Return a complete type, and the trailing string part after it.
             Use resolver() on each identifier, and combiner() on the parts of
             each complete type. (top_combiner is used on the top-most type.)"""
-            bits = re.split(r'([,<>])', type_str, 1)
+            bits = re.split(r'([,<>()])', type_str, 1)
             first, sep, rest = [bits[0], '', ''] if (len(bits)==1) else bits
             args = [resolver(first)]
-            if sep == '<':
-                while sep != '>':
+            if sep == '<' or sep == '(':
+                lastsep = '>' if (sep == '<') else ')'
+                while sep != lastsep:
                     next, rest = grab_one(rest, resolver, combiner, combiner)
                     args.append(next)
                     sep, rest = rest[0], rest[1:]
diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir
index e563372..7d01ef4 100644
--- a/tests/scanner/Regress-1.0-expected.gir
+++ b/tests/scanner/Regress-1.0-expected.gir
@@ -861,6 +861,14 @@ raise an error.</doc>
           <type name="gint8"/>
         </type>
       </property>
+      <property name="hash-table-old"
+                writable="1"
+                transfer-ownership="container">
+        <type name="GLib.HashTable">
+          <type name="utf8"/>
+          <type name="gint8"/>
+        </type>
+      </property>
       <property name="int" writable="1" transfer-ownership="none">
         <type name="gint"/>
       </property>
@@ -869,6 +877,11 @@ raise an error.</doc>
           <type name="utf8"/>
         </type>
       </property>
+      <property name="list-old" writable="1" transfer-ownership="none">
+        <type name="GLib.List">
+          <type name="utf8"/>
+        </type>
+      </property>
       <property name="string" writable="1" transfer-ownership="none">
         <type name="utf8"/>
       </property>
diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c
index dcd4976..4b35604 100644
--- a/tests/scanner/regress.c
+++ b/tests/scanner/regress.c
@@ -1664,6 +1664,8 @@ enum
   PROP_TEST_OBJ_BOXED,
   PROP_TEST_OBJ_HASH_TABLE,
   PROP_TEST_OBJ_LIST,
+  PROP_TEST_OBJ_HASH_TABLE_OLD,
+  PROP_TEST_OBJ_LIST_OLD,
   PROP_TEST_OBJ_INT,
   PROP_TEST_OBJ_FLOAT,
   PROP_TEST_OBJ_DOUBLE,
@@ -1692,12 +1694,14 @@ regress_test_obj_set_property (GObject      *object,
       break;
 
     case PROP_TEST_OBJ_HASH_TABLE:
+    case PROP_TEST_OBJ_HASH_TABLE_OLD:
       if (self->hash_table)
         g_hash_table_unref (self->hash_table);
       self->hash_table = g_hash_table_ref (g_value_get_boxed (value));
       break;
 
     case PROP_TEST_OBJ_LIST:
+    case PROP_TEST_OBJ_LIST_OLD:
       if (self->list != NULL)
         {
           for (list = self->list; list != NULL; list = g_list_next (list))
@@ -1751,12 +1755,14 @@ regress_test_obj_get_property (GObject    *object,
       break;
 
     case PROP_TEST_OBJ_HASH_TABLE:
+    case PROP_TEST_OBJ_HASH_TABLE_OLD:
       if (self->hash_table != NULL)
         g_hash_table_ref (self->hash_table);
       g_value_set_boxed (value, self->hash_table);
       break;
 
     case PROP_TEST_OBJ_LIST:
+    case PROP_TEST_OBJ_LIST_OLD:
       g_value_set_pointer (value, self->list);
       break;
 
@@ -1993,7 +1999,7 @@ regress_test_obj_class_init (RegressTestObjClass *klass)
   /**
    * RegressTestObj:hash-table:
    *
-   * Type: GLib.HashTable<utf8,gint8>
+   * Type: GLib.HashTable(utf8,gint8)
    * Transfer: container
    */
   pspec = g_param_spec_boxed ("hash-table",
@@ -2008,7 +2014,7 @@ regress_test_obj_class_init (RegressTestObjClass *klass)
   /**
    * RegressTestObj:list:
    *
-   * Type: GLib.List<utf8>
+   * Type: GLib.List(utf8)
    * Transfer: none
    */
   pspec = g_param_spec_pointer ("list",
@@ -2019,6 +2025,36 @@ regress_test_obj_class_init (RegressTestObjClass *klass)
                                    PROP_TEST_OBJ_LIST,
                                    pspec);
 
+  /**
+   * RegressTestObj:hash-table-old:
+   *
+   * Type: GLib.HashTable<utf8,gint8>
+   * Transfer: container
+   */
+  pspec = g_param_spec_boxed ("hash-table-old",
+                              "GHashTable property with <>",
+                              "A contained GHashTable with <>",
+                              G_TYPE_HASH_TABLE,
+                              G_PARAM_READWRITE);
+  g_object_class_install_property (gobject_class,
+                                   PROP_TEST_OBJ_HASH_TABLE_OLD,
+                                   pspec);
+
+  /**
+   * RegressTestObj:list-old:
+   *
+   * Type: GLib.List<utf8>
+   * Transfer: none
+   */
+  pspec = g_param_spec_pointer ("list-old",
+                                "GList property with ()",
+                                "A contained GList with <>",
+                                G_PARAM_READWRITE);
+  g_object_class_install_property (gobject_class,
+                                   PROP_TEST_OBJ_LIST_OLD,
+                                   pspec);
+
+
 
   /**
    * TestObj:int:



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]