diff options
author | Olivier CrĂȘte <olivier.crete@collabora.com> | 2011-12-20 17:45:11 -0500 |
---|---|---|
committer | Olivier CrĂȘte <olivier.crete@collabora.com> | 2012-01-10 16:00:42 -0500 |
commit | bfe51fb9472df24ca21c16f5d2af64f8533807e1 (patch) | |
tree | 0baf11000c08d21df0cfeec8f4976aa2719007e8 | |
parent | 0a5c522a23057a96f5097815d2341c2befa8ab0f (diff) | |
download | gobject-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.py | 7 | ||||
-rw-r--r-- | tests/scanner/Regress-1.0-expected.gir | 13 | ||||
-rw-r--r-- | tests/scanner/regress.c | 40 |
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: |