+@menu
+* define-g-object-class::
+* define-g-interface::
+* define-g-enum::
+* define-g-flags::
+* get-g-flags-definition::
+* get-g-enum-definition::
+* get-g-interface-definition::
+* get-g-class-definition::
+* generate-types-hierarchy-to-file::
+@end menu
+
+CL-GTK2-GOBJECT includes facilities for automatically generating parts of bindings for libraries that use GObject type system.
+
+@node define-g-object-class
+@section define-g-object-class
+
+@example
+(define-g-object-class g-type-name name
+ (&key (superclass 'g-object) (export t) interfaces type-initializer)
+ (&rest properties))
+
+property ::= name accessor gname type readable writable
+property ::= :cffi name acessor type reader writer
+@end example
+
+Parameters of @code{define-g-object-class}
+@table @var
+@item @var{superclass}
+A symbol naming the superclass of this class
+@item @var{export}
+Whether to export the name of the class and names of autogenerated properties names from the current package.
+@item @var{interfaces}
+A list of interfaces the this class implements
+@item @var{type-initializer}
+A string naming the type initiliazer function. It is usually named @code{class_get_type}.
+@item @var{properties}
+A list of slots of a class
+@end table
+
+Parameters of @code{property}:
+@table @var
+@item @var{name}
+A symbol naming the slot
+@item @var{accessor}
+A symbol naming the accessor function for this slot
+@item @var{gname}
+A string naming the property of GObject
+@item @var{type}
+A string naming the type of property of GObject (for GObject properties); or a symbol naming CFFI foreign type (for slots mapped to foreign accessors)
+@item @var{readable}
+A boolean specifying whether the slot can be read
+@item @var{writable}
+A boolean specifying whether the slot can be assigned to
+@item @var{reader}
+A string or a symbol naming getter function. See description of @code{gobject-class} metaclass for information.
+@item @var{writter}
+A string or a symbol naming setter function. See description of @code{gobject-class} metaclass for information.
+@end table
+
+Macro that expand to @code{defclass} for specified class. Additionally, exports accessor names and name of a class.
+
+Example:
+@example
+(define-g-object-class "GtkContainer" container
+ (:superclass widget :export t :interfaces
+ ("AtkImplementorIface" "GtkBuildable")
+ :type-initializer "gtk_container_get_type")
+ ((border-width container-border-width "border-width" "guint" t t)
+ (resize-mode container-resize-mode "resize-mode" "GtkResizeMode" t t)
+ (child container-child "child" "GtkWidget" nil t)
+ (:cffi focus-child container-focus-child g-object "gtk_container_get_focus_child" "gtk_container_set_focus_child")
+ (:cffi focus-vadjustment container-focus-vadjustment (g-object adjustment) "gtk_container_get_focus_vadjustment" "gtk_container_set_focus_vadjustment")
+ (:cffi focus-hadjustment container-focus-hadjustment (g-object adjustment) "gtk_container_get_focus_hadjustment" "gtk_container_set_focus_hadjustment")))
+@end example
+
+@node define-g-interface
+@section define-g-interface
+
+@node define-g-enum
+@section define-g-enum
+
+@node define-g-flags
+@section define-g-flags
+
+@node get-g-flags-definition
+@section get-g-flags-definition
+
+@node get-g-enum-definition
+@section get-g-enum-definition
+
+@node get-g-interface-definition
+@section get-g-interface-definition
+
+@node get-g-class-definition
+@section get-g-class-definition