diff options
-rw-r--r-- | docs/gir-1.2.rnc | 2 | ||||
-rw-r--r-- | giscanner/ast.py | 1 | ||||
-rw-r--r-- | giscanner/gdumpparser.py | 7 | ||||
-rw-r--r-- | giscanner/girparser.py | 1 | ||||
-rw-r--r-- | giscanner/girwriter.py | 2 | ||||
-rw-r--r-- | tests/scanner/Regress-1.0-expected.gir | 87 |
6 files changed, 75 insertions, 25 deletions
diff --git a/docs/gir-1.2.rnc b/docs/gir-1.2.rnc index 7c398be0..5182f7cb 100644 --- a/docs/gir-1.2.rnc +++ b/docs/gir-1.2.rnc @@ -350,6 +350,8 @@ grammar { attribute setter { xsd:string }?, ## The getter function for this property attribute getter { xsd:string }?, + ## The default value of the property, as a string; if missing, the default value is zero for integer types, and null for pointer types + attribute default-value { xsd:string }?, # Define the transfer of ownership of the property element TransferOwnership?, diff --git a/giscanner/ast.py b/giscanner/ast.py index 2cfd81fc..dac326cb 100644 --- a/giscanner/ast.py +++ b/giscanner/ast.py @@ -1304,6 +1304,7 @@ class Property(Node): self.transfer = transfer self.setter = None self.getter = None + self.default_value = None self.parent = None # A Class or Interface diff --git a/giscanner/gdumpparser.py b/giscanner/gdumpparser.py index 1a0794d4..21fbadf4 100644 --- a/giscanner/gdumpparser.py +++ b/giscanner/gdumpparser.py @@ -414,10 +414,13 @@ different --identifier-prefix.""" % (xmlnode.attrib['name'], self._namespace.ide writable = (flags & G_PARAM_WRITABLE) != 0 construct = (flags & G_PARAM_CONSTRUCT) != 0 construct_only = (flags & G_PARAM_CONSTRUCT_ONLY) != 0 - node.properties.append(ast.Property( + default_value = pspec.attrib['default-value'] + prop = ast.Property( pspec.attrib['name'], ast.Type.create_from_gtype_name(ctype), - readable, writable, construct, construct_only)) + readable, writable, construct, construct_only) + prop.default_value = default_value + node.properties.append(prop) node.properties = node.properties def _introspect_signals(self, node, xmlnode): diff --git a/giscanner/girparser.py b/giscanner/girparser.py index edaaa992..5fc22899 100644 --- a/giscanner/girparser.py +++ b/giscanner/girparser.py @@ -609,6 +609,7 @@ class GIRParser(object): node.attrib.get('transfer-ownership')) prop.setter = node.attrib.get('setter') prop.getter = node.attrib.get('getter') + prop.default_value = node.attrib.get('default-value') prop.parent = parent self._parse_generic_attribs(node, prop) return prop diff --git a/giscanner/girwriter.py b/giscanner/girwriter.py index 9ff10d31..a3b3bc3e 100644 --- a/giscanner/girwriter.py +++ b/giscanner/girwriter.py @@ -560,6 +560,8 @@ class GIRWriter(XMLWriter): attrs.append(('setter', prop.setter)) if prop.getter: attrs.append(('getter', prop.getter)) + if prop.default_value: + attrs.append(('default-value', prop.default_value)) with self.tagcontext('property', attrs): self._write_generic(prop) self._write_type(prop.type) diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir index 079405d2..42db6105 100644 --- a/tests/scanner/Regress-1.0-expected.gir +++ b/tests/scanner/Regress-1.0-expected.gir @@ -1088,7 +1088,8 @@ regress_annotation_object_watch_full().</doc> <property name="function-property" writable="1" construct="1" - transfer-ownership="none"> + transfer-ownership="none" + default-value="NULL"> <type name="AnnotationCallback" c:type="gpointer"/> </property> <property name="string-property" @@ -1097,7 +1098,8 @@ regress_annotation_object_watch_full().</doc> deprecated-version="1.2" writable="1" construct="1" - transfer-ownership="none"> + transfer-ownership="none" + default-value="NULL"> <doc xml:space="preserve" filename="annotation.c" line="156">This is a property which is a string</doc> @@ -1108,7 +1110,8 @@ regress_annotation_object_watch_full().</doc> version="1.2" writable="1" construct="1" - transfer-ownership="none"> + transfer-ownership="none" + default-value="NULL"> <doc xml:space="preserve" filename="annotation.c" line="181">This is a property annotation intentionally indented with a mix @@ -2144,13 +2147,15 @@ uses a C sugar return type.</doc> introspectable="0" writable="1" construct-only="1" - transfer-ownership="none"> + transfer-ownership="none" + default-value="NULL"> <type/> </property> <property name="string" writable="1" construct="1" - transfer-ownership="none"> + transfer-ownership="none" + default-value="NULL"> <type name="utf8" c:type="gchar*"/> </property> <field name="parent_instance"> @@ -3918,7 +3923,8 @@ use it should be.</doc> <property name="number" writable="1" construct="1" - transfer-ownership="none"> + transfer-ownership="none" + default-value="0"> <type name="gint" c:type="gint"/> </property> <glib:signal name="interface-signal" when="last"> @@ -4840,30 +4846,47 @@ raise an error.</doc> <property name="bare" writable="1" transfer-ownership="none" - setter="set_bare"> + setter="set_bare" + default-value="NULL"> <type name="GObject.Object"/> </property> - <property name="boxed" writable="1" transfer-ownership="none"> + <property name="boxed" + writable="1" + transfer-ownership="none" + default-value="NULL"> <type name="TestBoxed"/> </property> <property name="byte-array" writable="1" construct="1" - transfer-ownership="none"> + transfer-ownership="none" + default-value="NULL"> <array name="GLib.ByteArray"> <type name="guint8" c:type="guint8"/> </array> </property> - <property name="double" writable="1" transfer-ownership="none"> + <property name="double" + writable="1" + transfer-ownership="none" + default-value="1.000000"> <type name="gdouble" c:type="gdouble"/> </property> - <property name="float" writable="1" transfer-ownership="none"> + <property name="float" + writable="1" + transfer-ownership="none" + default-value="1.000000"> <type name="gfloat" c:type="gfloat"/> </property> - <property name="gtype" writable="1" transfer-ownership="none"> + <property name="gtype" + writable="1" + transfer-ownership="none" + default-value="NULL"> <type name="GType" c:type="GType"/> </property> - <property name="hash-table" writable="1" transfer-ownership="container"> + <property name="hash-table" + writable="1" + transfer-ownership="container" + default-value="NULL"> <type name="GLib.HashTable"> <type name="utf8"/> <type name="gint8"/> @@ -4871,21 +4894,31 @@ raise an error.</doc> </property> <property name="hash-table-old" writable="1" - transfer-ownership="container"> + transfer-ownership="container" + default-value="NULL"> <type name="GLib.HashTable"> <type name="utf8"/> <type name="gint8"/> </type> </property> - <property name="int" writable="1" transfer-ownership="none"> + <property name="int" + writable="1" + transfer-ownership="none" + default-value="0"> <type name="gint" c:type="gint"/> </property> - <property name="list" writable="1" transfer-ownership="none"> + <property name="list" + writable="1" + transfer-ownership="none" + default-value="NULL"> <type name="GLib.List" c:type="gpointer"> <type name="utf8"/> </type> </property> - <property name="list-old" writable="1" transfer-ownership="none"> + <property name="list-old" + writable="1" + transfer-ownership="none" + default-value="NULL"> <type name="GLib.List" c:type="gpointer"> <type name="utf8"/> </type> @@ -4893,10 +4926,14 @@ raise an error.</doc> <property name="name-conflict" writable="1" construct="1" - transfer-ownership="none"> + transfer-ownership="none" + default-value="42"> <type name="gint" c:type="gint"/> </property> - <property name="pptrarray" writable="1" transfer-ownership="none"> + <property name="pptrarray" + writable="1" + transfer-ownership="none" + default-value="NULL"> <array name="GLib.PtrArray" c:type="gpointer"> <type name="utf8"/> </array> @@ -4905,13 +4942,15 @@ raise an error.</doc> writable="1" transfer-ownership="none" setter="set_string" - getter="get_string"> + getter="get_string" + default-value="NULL"> <type name="utf8" c:type="gchar*"/> </property> <property name="write-only" readable="0" writable="1" - transfer-ownership="none"> + transfer-ownership="none" + default-value="FALSE"> <type name="gboolean" c:type="gboolean"/> </property> <field name="parent_instance"> @@ -5715,7 +5754,8 @@ the introspection client langage.</doc> <property name="boolean" writable="1" construct="1" - transfer-ownership="none"> + transfer-ownership="none" + default-value="TRUE"> <type name="gboolean" c:type="gboolean"/> </property> <field name="parent_instance"> @@ -5795,7 +5835,8 @@ the introspection client langage.</doc> writable="1" transfer-ownership="none" setter="set_testbool" - getter="get_testbool"> + getter="get_testbool" + default-value="TRUE"> <type name="gboolean" c:type="gboolean"/> </property> <field name="parent_instance"> |