+The attributes are really optional though you should at least set some
+of them.
+All property types have a \'nick\' and a \'blurb\' attribute and you should
+set those accordingly. This will make runtime querying the object
+nicer as things such as gui editors and class browsers can be more
+verbose about the class itself.
+.PP
+The \'name\' property is canonical name of property. It is useful when you try to
+implement properties with no C names like \'vertical-scroll\'. The \'name\'
+property can be omitted.
+.PP
+You can use the \'_("string")\' notation
+instead of just "string", and that will mark the string for translation.
+.PP
+Almost all types also have a \'default_value\' attribute which sets the initial
+value of this property (on object initialization, the set handler will be run
+automatically with this value). This value will be overridden if the user
+sets a value of this property on the call to g_object_new.
+.PP
+All the numeric types (including CHAR) have \'minimum\' and \'maximum\'
+attributes which can restrict the range. If you do not specify these
+the range will be the full range that the data type can handle.
+.PP
+Types such as UNICHAR and BOOLEAN only have the \'nick\', \'blurb\' and
+\'default_value\' attributes.
+.PP
+The ENUM type has an \'enum_type\' attribute which is the exact
+type of the enum. This is so that the property knows which exact
+type you can set, rather then just knowing it is an enum. You should
+always create an enum type specific for the enum itself (see section
+on the enum types)
+.PP
+Similarly FLAGS type has a \'flags_type\' which again you should set to
+the specific type of this flags data member.
+.PP
+There is a STRING type which has only the extra \'default_value\' attribute.
+.PP
+The OBJECT type is one of the types that doesn\'t have a \'default_value\' and it
+only has an \'object_type\' attribute (in addition to nick and blurb of course)
+that is the exact object type that this property accepts. The object_type
+should be as a type, that is for example \'Gtk:Button\'.
+.PP
+There is a BOXED type which is a pointer which has a boxed type defined
+(such that GObject knows how to copy and destroy this pointer). Here
+you will need to specify the \'boxed_type\' attribute with the specific
+type of the boxed pointer.
+.PP
+There is also a POINTER type, which has only the \'nick\' and \'blurb\'
+attributes. This is for storing arbitrary pointers. You should be
+careful with this one, as GObject knows nothing about the data
+stored at this pointer. It is somewhat like a \'void *\' type.
+.PP
+There is also the PARAM type for storing parameters with a \'param_type\'
+attribute.
+.PP
+You should notice that this list is pretty much like the list of g_param_spec_*
+functions from gobject/gparamspecs.h, and the attributes are like the
+arguments of those functions. Note however that value array is NOT supported
+yet.
+.PP
+You can also specify extra flags, such as CONSTRUCT or CONSTRUCT_ONLY using the
+\'flags\' attribute. You can specify multiple flags by oring them together with
+\'|\'. These flags correspond to the GParamFlags enumeration except do not
+include the G_PARAM_ prefix. So for example to define an enumeration property,
+which is a CONSTRUCT_ONLY property, we could do the following: