summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.com>2011-12-20 17:45:11 -0500
committerOlivier CrĂȘte <olivier.crete@collabora.com>2012-01-10 16:00:42 -0500
commitbfe51fb9472df24ca21c16f5d2af64f8533807e1 (patch)
tree0baf11000c08d21df0cfeec8f4976aa2719007e8
parent0a5c522a23057a96f5097815d2341c2befa8ab0f (diff)
downloadgobject-introspection-bfe51fb9472df24ca21c16f5d2af64f8533807e1.tar.gz
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
-rw-r--r--giscanner/maintransformer.py7
-rw-r--r--tests/scanner/Regress-1.0-expected.gir13
-rw-r--r--tests/scanner/regress.c40
3 files changed, 55 insertions, 5 deletions
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py
index 73586004..a9eea8a1 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 e5633729..7d01ef4e 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 dcd4976e..4b35604f 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: