[dia] [dox] The Big Doxgen-ification



commit 5794ee63cbbb72cde9d0f0389e96f8446bf32df6
Author: Hans Breuer <hans breuer org>
Date:   Sat Sep 8 15:44:55 2012 +0200

    [dox] The Big Doxgen-ification
    
    - structuring existing source code documentation into 'modules' by
      \defgroup and \ingroup usage
    - showing inheritance with \extends and \memberof
    - some reformatting to always have a brief description for documented 'classes'
    - removing warning by correcting parameters to @param
    - replacing \bugs and \bug statements with explanations

 lib/arrows.c          |    2 +-
 lib/arrows.h          |   62 +++++++++++++++++++++----------
 lib/bezier_conn.c     |   22 +++++-------
 lib/bezier_conn.h     |    7 +++-
 lib/beziershape.h     |   12 +++++--
 lib/boundingbox.c     |    6 ---
 lib/boundingbox.h     |   18 +++++++++-
 lib/color.h           |   14 +++++---
 lib/connection.c      |   14 ++++----
 lib/connection.h      |    4 ++-
 lib/connectionpoint.h |   47 ++++++++++++++++--------
 lib/create.h          |   82 +++++++++++++++++++++++++++---------------
 lib/dia_svg.c         |    5 +--
 lib/dia_xml.c         |   39 ++++++++++++--------
 lib/diagdkrenderer.h  |   24 +++++++++----
 lib/diagramdata.c     |   12 +++---
 lib/diagramdata.h     |    7 +++-
 lib/diarenderer.h     |   50 +++++++++++++++++++------
 lib/diasvgrenderer.h  |   11 +++++-
 lib/element.h         |   16 +++++----
 lib/font.c            |    4 ++
 lib/font.h            |   81 +++++++++++++++++++++++++++++++----------
 lib/group.c           |   18 ++++++---
 lib/handle.h          |   26 +++++++++++---
 lib/layer.c           |   17 ++++-----
 lib/objchange.h       |   26 ++++++++++++--
 lib/object.c          |   14 +++----
 lib/object.h          |   70 +++++++++++++++++++++++------------
 lib/object_defaults.c |    2 +
 lib/orth_conn.h       |    7 +++-
 lib/persistence.c     |   81 +++++++++++++++++++++++++++++-------------
 lib/poly_conn.h       |    7 +++-
 lib/polyshape.h       |    7 +++-
 lib/prop_attr.h       |   16 ++++++++
 lib/prop_dict.h       |    6 +++-
 lib/prop_geomtypes.h  |   36 ++++++++++++++++++
 lib/prop_matrix.h     |    4 ++
 lib/prop_pixbuf.h     |    4 ++
 lib/prop_sdarray.h    |   10 ++++--
 lib/prop_text.h       |    4 ++
 lib/properties.h      |   95 +++++++++++++++++++++++++++++++++++--------------
 lib/textline.c        |   44 +++++++++++++++++-----
 lib/textline.h        |   14 ++++---
 43 files changed, 739 insertions(+), 308 deletions(-)
---
diff --git a/lib/arrows.c b/lib/arrows.c
index 241122f..26d2c2b 100644
--- a/lib/arrows.c
+++ b/lib/arrows.c
@@ -1927,7 +1927,7 @@ struct ArrowDesc {
 /** following the signature pattern of lib/boundingbox.h 
  * the arrow bounding box is added to the given rect 
  * @param arrow the arrow
- * @param linewidth arrows use the same line width
+ * @param line_width arrows use the same line width
  * @param to The point that the arrow points to.
  * @param from Where the arrow points from (e.g. end of stem)
  * @param rect the preintialized bounding box
diff --git a/lib/arrows.h b/lib/arrows.h
index f23f935..e54be4b 100644
--- a/lib/arrows.h
+++ b/lib/arrows.h
@@ -27,26 +27,33 @@
 
 /* NOTE: Add new arrow types at the end, or the enums
    will change order leading to file incompatibilities. */
+/*!
+ * \defgroup ObjectArrows All objects derived from _Connection can end in Arrow
+ * \ingroup ObjectParts
+ */
 
-/* Comments in curly braces mention ISO 10303-AP201 names */
-
+/*!
+ * \brief Enumeration of arrow kinds
+ * \ingroup ObjectArrows
+ * Comments in curly braces mention ISO 10303-AP201 names 
+ */
 typedef enum {
-  ARROW_NONE = 0,
-  ARROW_LINES,             /* {open arrow} */
-  ARROW_HOLLOW_TRIANGLE,   /* {blanked arrow} */
-  ARROW_FILLED_TRIANGLE,   /* {filled arrow} */
-  ARROW_HOLLOW_DIAMOND,    
-  ARROW_FILLED_DIAMOND,
+  ARROW_NONE = 0,          /*!< No arrow */
+  ARROW_LINES,             /*!< {open arrow} */
+  ARROW_HOLLOW_TRIANGLE,   /*!< {blanked arrow} */
+  ARROW_FILLED_TRIANGLE,   /*!< {filled arrow} */
+  ARROW_HOLLOW_DIAMOND,    /*!< outline of a diamond */
+  ARROW_FILLED_DIAMOND,    /*!< filled diamond, no outline */
   ARROW_HALF_HEAD,
-  ARROW_SLASHED_CROSS,     /* Vertical + diagonal line */
+  ARROW_SLASHED_CROSS,     /*!< Vertical + diagonal line */
   ARROW_FILLED_ELLIPSE,
   ARROW_HOLLOW_ELLIPSE,
   ARROW_DOUBLE_HOLLOW_TRIANGLE,
   ARROW_DOUBLE_FILLED_TRIANGLE,
-  ARROW_UNFILLED_TRIANGLE,       /* {unfilled arrow} */
-  ARROW_FILLED_DOT,              /* {filled dot} Ellipse + vertical line */ 
-  ARROW_DIMENSION_ORIGIN,        /* {dimension origin} Ellipse + vert line */ 
-  ARROW_BLANKED_DOT,             /* {blanked dot} Empty ellipse + vert line */
+  ARROW_UNFILLED_TRIANGLE,       /*!< {unfilled arrow} */
+  ARROW_FILLED_DOT,              /*!< {filled dot} Ellipse + vertical line */ 
+  ARROW_DIMENSION_ORIGIN,        /*!< {dimension origin} Ellipse + vert line */ 
+  ARROW_BLANKED_DOT,             /*!< {blanked dot} Empty ellipse + vert line */
   ARROW_FILLED_BOX,              /* {filled box} Box + vertical line */
   ARROW_BLANKED_BOX,             /* {blanked box} Box + vertical line */
   ARROW_SLASH_ARROW,             /* {slash arrow} Vertical + diagonal line*/
@@ -82,10 +89,14 @@ typedef enum {
  */
 #define MIN_ARROW_DIMENSION 0.001
 
+/*!
+ * \brief Definition of line ends
+ * \ingroup ObjectArrows
+ */
 struct _Arrow {
-  ArrowType type;
-  real length;
-  real width;
+  ArrowType type; /*!< arrow kind */
+  real length;    /*!< arrow length */
+  real width;     /*!< arrow width */
 };
 
 
@@ -95,10 +106,14 @@ void arrow_draw(DiaRenderer *renderer, ArrowType type,
 		Color *fg_color, Color *bg_color);
 
 /** following the signature pattern of lib/boundingbox.h 
- * the arrow bounding box is returned in rect */
+ * the arrow bounding box is returned in rect
+ * \ingroup ObjectArrows
+ */
 void arrow_bbox (const Arrow *arrow, real line_width, const Point *to, const Point *from, 
                  Rectangle *rect);
-
+/*! Calculate the new line end point in case of an Arrow 
+ * \ingroup ObjectArrows
+ */
 void
 calculate_arrow_point(const Arrow *arrow, const Point *to, const Point *from,
 		      Point *move_arrow, Point *move_line,
@@ -109,10 +124,17 @@ void save_arrow(ObjectNode obj_node, Arrow *arrow, gchar *type_attribute,
 void load_arrow(ObjectNode obj_node, Arrow *arrow, gchar *type_attribute, 
 		gchar *length_attribute, gchar *width_attribute, DiaContext *ctx);
 
-/** Returns the ArrowType for a given name of an arrow, or 0 if not found. */
+/*! Returns the ArrowType for a given name of an arrow, or 0 if not found.
+ * \ingroup ObjectArrows
+ */
 ArrowType arrow_type_from_name(const gchar *name);
-/** Returns the index in arrow_types of the given arrow type. */
+/*! Returns the index in arrow_types of the given arrow type.
+ * \ingroup ObjectArrows
+ */
 gint arrow_index_from_type(ArrowType type);
+/*! Convert an arrow index back to the ArrowType
+ * \ingroup ObjectArrows
+ */
 ArrowType arrow_type_from_index(gint index);
 const gchar *arrow_get_name_from_type(ArrowType type);
 GList *get_arrow_names(void);
diff --git a/lib/bezier_conn.c b/lib/bezier_conn.c
index 26aad04..ee31e4d 100644
--- a/lib/bezier_conn.c
+++ b/lib/bezier_conn.c
@@ -117,9 +117,9 @@ void new_handles(BezierConn *bez, int num_points);
 
 /** Function called to move one of the handles associated with the
  *  bezierconn. 
- * @param obj The object whose handle is being moved.
+ * @param bez The object whose handle is being moved.
  * @param handle The handle being moved.
- * @param pos The position it has been moved to (corrected for
+ * @param to The position it has been moved to (corrected for
  *   vertical/horizontal only movement).
  * @param cp If non-NULL, the connectionpoint found at this position.
  *   If @a cp is NULL, there may or may not be a connectionpoint.
@@ -228,10 +228,11 @@ bezierconn_move_handle(BezierConn *bez, Handle *handle,
 
 
 /** Function called to move the entire object.
- * @param obj The object being moved.
- * @param pos Where the object is being moved to.  This is the first point
+ * @param bez The object being moved.
+ * @param to Where the object is being moved to.  This is the first point
  * of the points array.
  * @return NULL
+ * \memberof _BezierConn
  */
 ObjectChange*
 bezierconn_move(BezierConn *bez, Point *to)
@@ -285,7 +286,8 @@ bezierconn_closest_segment(BezierConn *bez, Point *point, real line_width)
  * @param bez A bezierconn object
  * @param point A point to find distances from
  * @return The handle on `bez' closest to `point'.
- * @bug Why isn't this just a function on object that scans the handles?
+ *
+ * \memberof _BezierConn Conceptually this is a member function 
  */
 Handle *
 bezierconn_closest_handle(BezierConn *bez, Point *point)
@@ -322,7 +324,7 @@ bezierconn_closest_handle(BezierConn *bez, Point *point)
   return closest;
 }
 
-/** Retrun the major handle for the control point with the handle closest to
+/** Return the major handle for the control point with the handle closest to
  * a given point.
  * @param bez A bezier connection
  * @param point A point
@@ -363,7 +365,6 @@ bezierconn_distance_from(BezierConn *bez, Point *point, real line_width)
  * @param handle1 The handle that will be put on the bezier line.
  * @param handle2 The handle that will be put before handle1
  * @param handle3 The handle that will be put after handle1
- * @bug check that the handle ordering is correctly described.
  */
 static void
 add_handles(BezierConn *bez, int pos, BezPoint *point,
@@ -545,7 +546,6 @@ bezierconn_remove_segment(BezierConn *bez, int pos)
  * @param bez A bezierconn to straighten a corner of
  * @param comp_nr The index into the corner_types array of the corner to
  *                straighten.
- * @bug what happens if we're going from symmetric to smooth?
  */
 static void
 bezierconn_straighten_corner(BezierConn *bez, int comp_nr)
@@ -901,7 +901,6 @@ bezierconn_destroy(BezierConn *bez)
 /** Save the data defined by a bezierconn object to XML.
  * @param bez The object to save.
  * @param obj_node The XML node to save it into
- * @bug shouldn't this have version?
  */
 void
 bezierconn_save(BezierConn *bez, ObjectNode obj_node)
@@ -931,8 +930,7 @@ bezierconn_save(BezierConn *bez, ObjectNode obj_node)
  * Does object_init() on the bezierconn object.
  * @param bez A newly allocated bezierconn object to load into.
  * @param obj_node The XML node to load from.
- * @bug shouldn't this have version?
- * @bug Couldn't this use the setup_handles function defined above?
+ * @param ctx The context in which this function is called
  */
 void
 bezierconn_load(BezierConn *bez, ObjectNode obj_node, DiaContext *ctx)
@@ -1094,8 +1092,6 @@ bezierconn_point_change_revert(struct PointChange *change, DiaObject *obj)
  * @param handle3 The third (right-hand) handle.
  * @param connected_to3 What the third handle is connected to.
  * @return Newly created undo information.
- * @bug Describe what the state of the point and handles should be at start.
- * @bug Can these handles be connected to anything at all?
  */
 static ObjectChange *
 bezierconn_create_point_change(BezierConn *bez, enum change_type type,
diff --git a/lib/bezier_conn.h b/lib/bezier_conn.h
index 07ea9aa..a089185 100644
--- a/lib/bezier_conn.h
+++ b/lib/bezier_conn.h
@@ -33,8 +33,13 @@ typedef enum {
   BEZ_CORNER_CUSP
 } BezCornerType;
 
-/** This is a subclass of DiaObject used to help implementing objects
+/*!
+ * \brief Helper class to implement bezier connections
+ *
+ * This is a subclass of DiaObject used to help implementing objects
  * that connect points with polygonal line-segments.
+ *
+ * \extends _DiaObject
  */
 struct _BezierConn {
   DiaObject object; /**< inheritance */
diff --git a/lib/beziershape.h b/lib/beziershape.h
index b159c9f..6e96cec 100644
--- a/lib/beziershape.h
+++ b/lib/beziershape.h
@@ -31,14 +31,20 @@
 
 #define HANDLE_CORNER (HANDLE_CUSTOM1)
 
-/* This is a subclass of DiaObject used to help implementing objects
+/*!
+ * \brief Base class for bezier shaped elements
+ *
+ * This is a subclass of DiaObject used to help implementing objects
  * that form a polygon-like shape of line-segments.
+ *
+ * \extends _DiaObject
  */
 struct _BezierShape {
-  /* DiaObject must be first because this is a 'subclass' of it. */
+  /*! \protected DiaObject must be first because this is a 'subclass' of it. */
   DiaObject object;
-
+  /*! \protected Number of points in points array */
   int numpoints; /* >= 2 */
+  /*! \protected Array of points describing the object */
   BezPoint *points;
   BezCornerType *corner_types;
   ElementBBExtras extra_spacing;
diff --git a/lib/boundingbox.c b/lib/boundingbox.c
index 4832eec..4308b02 100644
--- a/lib/boundingbox.c
+++ b/lib/boundingbox.c
@@ -112,7 +112,6 @@ bicubicbezier_extrema(const real p[4],real u[2])
  * direction the arrow points from.
  * @param extra_long ???
  * @param extra_trans ???
- * @bug I don't know what the last two arguments do.
  */
 static void
 add_arrow_rectangle(Rectangle *rect,
@@ -225,7 +224,6 @@ line_bbox(const Point *p1, const Point *p2,
  * @param height The height of the ellipse.
  * @param extra Extra information required.
  * @param rect The bounding box that the ellipse fits inside.
- * @bug describe what the extra information is.
  */
 void
 ellipse_bbox(const Point *centre, real width, real height,
@@ -264,7 +262,6 @@ alloc_polybezier_space(int numpoints)
 /** Free the scratch space allocated above.
  * @param points Previously allocated list of points.
  * @note Doesn't actually free it, as alloc_polybezier_space does that.
- * @bug Should explain the strange freeing model, or fix it.
  */
 static void
 free_polybezier_space(BezPoint *points)
@@ -277,7 +274,6 @@ free_polybezier_space(BezPoint *points)
  * @param closed Whether the polyline is closed or not.
  * @param rect Return value: The bounding box that includes the points and
  * extra spacing.
- * @bug Surely doesn't need to use bezier code, but remember extra stuff.
  */
 void
 polyline_bbox(const Point *pts, int numpoints, 
@@ -309,7 +305,6 @@ polyline_bbox(const Point *pts, int numpoints,
  * @param extra Extra spacing information.
  * @param closed True if the bezier points form a closed line.
  * @param rect Return value: The enclosing rectangle will be stored here.
- * @bug This function is way too long (214 lines) and should be split.
  */
 void 
 polybezier_bbox(const BezPoint *pts, int numpoints,
@@ -544,7 +539,6 @@ polybezier_bbox(const BezPoint *pts, int numpoints,
  * @param rin A rectangle to find bbox for.
  * @param extra Extra information required to find bbox.
  * @param rout Return value: The enclosing bounding box.
- * @bug Describe extra info better.
  */
 void 
 rectangle_bbox(const Rectangle *rin,
diff --git a/lib/boundingbox.h b/lib/boundingbox.h
index d42e759..eff37a0 100644
--- a/lib/boundingbox.h
+++ b/lib/boundingbox.h
@@ -17,7 +17,11 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-/** \file boundingbox.h Boundingbox calculation (helpers) */
+/*! 
+ * \file boundingbox.h Boundingbox calculation (helpers) 
+ * \defgroup bbox Bounding box calculation
+ * \ingroup Objects
+ */
 
 #ifndef BOUNDINGBOX_H
 #define BOUNDINGBOX_H
@@ -25,17 +29,29 @@
 #include "diatypes.h"
 #include "geometry.h"
 
+/*!
+ * \brief Polygon/Polyline bounding box extras
+ * \ingroup bbox
+ */
 struct _PolyBBExtras {
   real start_long, start_trans;
   real middle_trans;
   real end_long, end_trans;
 };
 
+/*!
+ * \brief Line bounding box extras
+ * \ingroup bbox
+ */
 struct _LineBBExtras {
   real start_long, start_trans;
   real end_long, end_trans;
 };
 
+/*!
+ * \brief Element bounding box extras
+ * \ingroup bbox
+ */
 struct _ElementBBExtras {
   real border_trans;
 };
diff --git a/lib/color.h b/lib/color.h
index 35979f4..d76fcc7 100644
--- a/lib/color.h
+++ b/lib/color.h
@@ -16,7 +16,10 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-/** \file color.h Diagram and object tinting */
+/*!
+ * \file color.h Diagram and object tinting
+ * \ingroup ObjectParts
+ */
 
 #ifndef COLOR_H
 #define COLOR_H
@@ -25,11 +28,12 @@
 #include <gdk/gdk.h>
 #include "diavar.h"
 
+/*! \brief Dia's internal color representation */
 struct _Color {
-  float red;
-  float green;
-  float blue;
-  float alpha;
+  float red;   /*!< 0..1 */
+  float green; /*!< 0..1 */
+  float blue;  /*!< 0..1 */
+  float alpha; /*!< 0..1 */
 };
 
 void color_init(void);
diff --git a/lib/connection.c b/lib/connection.c
index d135383..f6266b8 100644
--- a/lib/connection.c
+++ b/lib/connection.c
@@ -60,16 +60,14 @@ connection_adjust_for_autogap(Connection *connection)
   }
 }
 
-/** Function called to move one of the handles associated with the
- *  object. 
- *  This is an object_ops function.
- * @param obj The object whose handle is being moved.
- * @param handle The handle being moved.
- * @param pos The position it has been moved to (corrected for
+/** Function called to move one of the handles associated with the object. 
+ * @param conn The object whose handle is being moved.
+ * @param id The handle being moved.
+ * @param to The position it has been moved to (corrected for
  *   vertical/horizontal only movement).
  * @param cp If non-NULL, the connectionpoint found at this position.
  *   If @a cp is NULL, there may or may not be a connectionpoint.
- * @param The reason the handle was moved.
+ * @param reason The reason the handle was moved.
  *     - HANDLE_MOVE_USER means the user is dragging the point.
  *     - HANDLE_MOVE_USER_FINAL means the user let go of the point.
  *     - HANDLE_MOVE_CONNECTED means it was moved because something
@@ -82,6 +80,7 @@ connection_adjust_for_autogap(Connection *connection)
  * @return An @a ObjectChange* with additional undo information, or
  *  (in most cases) NULL.  Undo for moving the handle itself is handled
  *  elsewhere.
+ * \memberof _Connection
  */
 ObjectChange*
 connection_move_handle(Connection *conn, HandleId id,
@@ -218,6 +217,7 @@ connection_save(Connection *conn, ObjectNode obj_node)
 /** Load a connections data from XML.
  * @param conn A fresh connection object to load into.
  * @param obj_node The XML node to load from.
+ * @param ctx The context in which this function is called
  */
 void
 connection_load(Connection *conn, ObjectNode obj_node, DiaContext *ctx)
diff --git a/lib/connection.h b/lib/connection.h
index 0aad5fb..f320308 100644
--- a/lib/connection.h
+++ b/lib/connection.h
@@ -28,7 +28,9 @@
  * \brief Base class for simple (straight) lines connecting object
  *
  * This is a subclass of DiaObject used to help implementing objects
- * of a line-like type. 
+ * of a line-like type.
+ *
+ * \extends _DiaObject
  */
 struct _Connection {
   DiaObject object; /*!< inheritance */
diff --git a/lib/connectionpoint.h b/lib/connectionpoint.h
index eb4c2a5..e4155c2 100644
--- a/lib/connectionpoint.h
+++ b/lib/connectionpoint.h
@@ -15,7 +15,10 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
-/*! \file connectionpoint.h -- Connection Points together with Handles allow to connect objects */
+/*!
+ * \file connectionpoint.h -- Connection Points together with Handles allow to connect objects
+ * \ingroup ObjectConnects
+ */
 #ifndef CONNECTIONPOINT_H
 #define CONNECTIONPOINT_H
 
@@ -28,7 +31,9 @@
 
 /*! \brief Connections directions, used as hints to e.g. zigzaglines 
  * Ordered this way to let *2 be rotate clockwise, /2 rotate counterclockwise.
- * Used as bits */
+ * Used as bits
+ * \ingroup ObjectConnects
+ */
 typedef enum {
   DIR_NONE  = 0,
   DIR_NORTH = (1<<0),
@@ -43,22 +48,26 @@ typedef enum {
   DIR_ALL       = (DIR_NORTH|DIR_SOUTH|DIR_EAST|DIR_WEST)
 } ConnectionPointDirection;
 
-/*! \brief Additional behaviour flags for connection points */
+/*!
+ * \brief Additional behaviour flags for connection points
+ * \ingroup ObjectConnects
+ */
 typedef enum {
   CP_FLAG_ANYPLACE = (1<<0), /*!< Set if this connpoint is the one that
-			                 is connected to when a connection is
-			                 dropped on an object. */
+			          is connected to when a connection is
+			          dropped on an object. */
   CP_FLAG_AUTOGAP =  (1<<1), /*!< Set if this connpoint is internal
-			                and so should force a gap on the lines. */
+			          and so should force a gap on the lines. */
 
-/*! Most non-connection objects want exactly one CP with this, in the middle. */
+  /*! Most non-connection objects want exactly one CP with this, in the middle. */
   CP_FLAGS_MAIN	=   (CP_FLAG_ANYPLACE|CP_FLAG_AUTOGAP) /*!< Use this for the central CP that
-			              takes connections from all over the
-			              object and has autogap. */
+							    takes connections from all over the
+							    object and has autogap. */
 } ConnectionPointFlags;
 
 /*!
  * \brief To connect object with other objects handles
+ * \ingroup ObjectConnects
  */
 struct _ConnectionPoint {
   Point pos;         /*!< position of this connection point */
@@ -70,19 +79,25 @@ struct _ConnectionPoint {
 };
 
 /** 
- * Returns the available directions on a slope.
+ * \brief Returns the available directions on a slope.
  * The right-hand side of the line is assumed to be within the object,
  * and thus not available. 
+ * \ingroup ObjectConnects
  */
 gint find_slope_directions(Point from, Point to);
-/** Update the object-settable parts of a connectionpoints.
- * p: A ConnectionPoint pointer (non-NULL).
- * x: The x coordinate of the connectionpoint.
- * y: The y coordinate of the connectionpoint.
- * dirs: The directions that are open for connections on this point.
+/*!
+ * \brief Update the object-settable parts of a connectionpoints.
+ * @param p A ConnectionPoint pointer (non-NULL).
+ * @param x The x coordinate of the connectionpoint.
+ * @param y The y coordinate of the connectionpoint.
+ * @param dirs The directions that are open for connections on this point.
+ * \ingroup ObjectConnects
  */
 void connpoint_update(ConnectionPoint *p, real x, real y, gint dirs);
-
+/*!
+ * \brief Adaptive rendering to the boundary of the connected object
+ * \ingroup ObjectConnects
+ */
 gboolean connpoint_is_autogap(ConnectionPoint *cp);
 
 
diff --git a/lib/create.h b/lib/create.h
index 31fede4..a3e5d3c 100644
--- a/lib/create.h
+++ b/lib/create.h
@@ -16,9 +16,15 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-/** This file contains user_data structures for creating the non-trivial 
-    standard objects (polylines & polygons).
-*/
+/*! \file create.h contains user_data structures for creating the non-trivial 
+ *   standard objects (polylines & polygons).
+ * \defgroup ObjectCreate Creation of standard objects
+ * \ingroup StandardObjects
+ *
+ * Typical import plugins translate some vector representation of the import format
+ * into _DiaObject representations. This set of functions and structures simplifies 
+ * the creation of standard objects.
+ */
 
 #ifndef STANDARD_OBJECT_CREATE_H
 #define STANDARD_OBJECT_CREATE_H
@@ -37,34 +43,50 @@ struct _BezierCreateData {
   BezPoint *points; /**< data */
 };
 
-/** Create a text object for the diagram.
+/*! Create a text object for the diagram.
  * @param xpos X position (in cm from the origo) of the object.
  * @param ypos Y position (in cm from the origo) of the object.
- * @param 
+ * \ingroup ObjectCreate
+ */
+DiaObject *create_standard_text(real xpos, real ypos);
+/*! Create an ellipse object for the diagram
+ * @param xpos top-left corner
+ * @param ypos top-lef corner
+ * @param width the horizontal diameter
+ * @param height the vertical diameter
+ * \ingroup ObjectCreate
+ */
+DiaObject *create_standard_ellipse(real xpos, real ypos, real width, real height);
+/*! Create a rectangular box */
+DiaObject *create_standard_box(real xpos, real ypos, real width, real height);
+/*! Create a _Polyline with arrows */
+DiaObject *create_standard_polyline(int num_points,  Point *points,
+				    Arrow *end_arrow, Arrow *start_arrow);
+DiaObject *create_standard_polygon(int num_points, Point *points);
+/*! Create a _Bezierline with arrows */
+DiaObject *create_standard_bezierline(int num_points, BezPoint *points,
+				      Arrow *end_arrow, Arrow *start_arrow);
+DiaObject *create_standard_beziergon(int num_points, BezPoint *points);
+/*! Create an _Arc with arrows 
+ * @param x1 arc start position
+ * @param y1 arc start position
+ * @param x2 arc end position
+ * @param y2 arc end position
+ * @param curve_distance perpendicular distance from the center of the chord to the circumference
+ * @param end_arrow end _Arrow
+ * @param start_arrow start _Arrow
+ * \ingroup ObjectCreate
+ */
+DiaObject *create_standard_arc(real x1, real y1, real x2, real y2,
+			       real curve_distance, 
+			       Arrow *end_arrow, Arrow *start_arrow);
+/*! Create an image object from file with the given size and position 
+ * \ingroup ObjectCreate
+ */
+DiaObject *create_standard_image(real xpos, real ypos, real width, real height, char *file);
+/*! Create a _Group of objects given by list.
+ * The objects in list must not be added to the diagra at the same time.
+ * \ingroup ObjectCreate
  */
-DiaObject *
-create_standard_text(real xpos, real ypos);
-DiaObject *
-create_standard_ellipse(real xpos, real ypos, real width, real height);
-DiaObject *
-create_standard_box(real xpos, real ypos, real width, real height);
-DiaObject *
-create_standard_polyline(int num_points,  Point *points,
-			 Arrow *end_arrow, Arrow *start_arrow);
-DiaObject *
-create_standard_polygon(int num_points, Point *points);
-DiaObject *
-create_standard_bezierline(int num_points, BezPoint *points,
-			   Arrow *end_arrow, Arrow *start_arrow);
-DiaObject *
-create_standard_beziergon(int num_points, BezPoint *points);
-DiaObject *
-create_standard_arc(real x1, real y1, real x2, real y2,
-		    real curve_distance, 
-		    Arrow *end_arrow, Arrow *start_arrow);
-DiaObject *
-create_standard_image(real xpos, real ypos, real width, real height,
-		      char *file);
-DiaObject *
-create_standard_group(GList *items);
+DiaObject *create_standard_group(GList *items);
 #endif
diff --git a/lib/dia_svg.c b/lib/dia_svg.c
index 0e9ebb2..ba9d503 100644
--- a/lib/dia_svg.c
+++ b/lib/dia_svg.c
@@ -164,7 +164,6 @@ enum
  * @param s The SVG style object to fill out.  This should previously be
  *          initialized to some default values.
  * @param user_scale, if >0 scalable values (font-size, stroke-width, ...) are divided by this, otherwise ignored
- * @bug This function is way too long (213 lines). So dont touch it :)
  */
 void
 dia_svg_parse_style(xmlNodePtr node, DiaSvgStyle *s, real user_scale)
@@ -491,7 +490,6 @@ _path_arc_segment(GArray* points,
  * @param x
  * @param y
  * @param last_p2
- * @bug Also here don't know what the parameters mean.
  */
 static void
 _path_arc(GArray *points, double cpx, double cpy,
@@ -598,7 +596,8 @@ _path_arc(GArray *points, double cpx, double cpy,
  * zigzaglines into their appropriate objects?  Could either be done by
  * returning an object or by having functions that try parsing as
  * specific simple paths.
- * NOPE: Dia is capable to handle beziers and the file has given us some so WHY should be break it in to pieces ???
+ * NOPE: Dia is capable to handle beziers and the file has given us some so 
+ * WHY should be break it in to pieces ???
  */
 GArray*
 dia_svg_parse_path(const gchar *path_str, gchar **unparsed, gboolean *closed, Point *current_point)
diff --git a/lib/dia_xml.c b/lib/dia_xml.c
index c584d2f..ac200a7 100644
--- a/lib/dia_xml.c
+++ b/lib/dia_xml.c
@@ -93,6 +93,7 @@ static inline int isinf_ld (long double x) { return isnan (x - x); }
  *  it untouched to libxml2.
  * @param filename The name of the file to check.
  * @param default_enc The default encoding to use if none is given.
+ * @param ctx The context in which this function is called
  * @return The filename given if it seems ok, or the name of a new file
  *          with fixed contents, or NULL if we couldn't read the file.  The
  *          caller should free this string and unlink the file if it is not
@@ -237,6 +238,7 @@ xml_file_check_encoding(const gchar *filename, const gchar *default_enc, DiaCont
  * @param filename The name of the file to read.
  * @returns An XML document parsed from the file.
  * @see xmlParseFile() in the XML2 library for details on the return value.
+ * @param ctx The context in which this function is called
  */
 static xmlDocPtr
 xmlDiaParseFile(const char *filename, DiaContext *ctx)
@@ -284,6 +286,7 @@ xmlDoParseFile(const char *filename)
 /** Parse an xml file from a filename given in Dia's/GLib's filename encoding 
  * @param filename A file to parse. On win32 the filename encoding is utf-8 since GLib 2.6
  * @param ctx If something goes wrong during parsing ctx will include according messages
+ * @param try_harder If set an additional attempt is done with guessed encoding
  * @return An XML document.
  */
 xmlDocPtr 
@@ -344,8 +347,6 @@ object_find_attribute(ObjectNode obj_node,
  * @param composite_node The composite node to search.
  * @param attrname The name of the attribute node to find.
  * @return The desired node, or NULL if none exists in `composite_node'.
- * @bug Describe in more detail how a composite node differs from an
- *   object node.
  */
 AttributeNode
 composite_find_attribute(DataNode composite_node,
@@ -428,12 +429,11 @@ data_next(DataNode data)
 
 /** Get the type of a data node.
  * @param data The data node.
+ * @param ctx The context in which this function is called
  * @return The type that the data node defines, or 0 on error.  In case of 
  *  error, an error message is displayed.
  * @note This function does a number of strcmp calls, which may not be the
  *  fastest way to check if a node is of the expected type.
- * @bug Make functions that check quickly if a node is of a specific type
- *  (but profile first).
  */
 DataType
 data_type(DataNode data, DiaContext *ctx)
@@ -477,6 +477,7 @@ data_type(DataNode data, DiaContext *ctx)
  * @param data The data node to read from.
  * @returns The integer value found in the node.  If the node is not an
  *  integer node, an error message is displayed and 0 is returned.
+ * @param ctx The context in which this function is called
  */
 int
 data_int(DataNode data, DiaContext *ctx)
@@ -500,6 +501,7 @@ data_int(DataNode data, DiaContext *ctx)
  * @param data The data node to read from.
  * @returns The enum value found in the node.  If the node is not an
  *  enum node, an error message is displayed and 0 is returned.
+ * @param ctx The context in which this function is called
  */
 int
 data_enum(DataNode data, DiaContext *ctx)
@@ -523,6 +525,7 @@ data_enum(DataNode data, DiaContext *ctx)
  * @param data The data node to read from.
  * @returns The real value found in the node.  If the node is not a
  *  real-type node, an error message is displayed and 0.0 is returned.
+ * @param ctx The context in which this function is called
  */
 real
 data_real(DataNode data, DiaContext *ctx)
@@ -546,6 +549,7 @@ data_real(DataNode data, DiaContext *ctx)
  * @param data The data node to read from.
  * @returns The boolean value found in the node.  If the node is not a
  *  boolean node, an error message is displayed and FALSE is returned.
+ * @param ctx The context in which this function is called
  */
 int
 data_boolean(DataNode data, DiaContext *ctx)
@@ -573,7 +577,8 @@ data_boolean(DataNode data, DiaContext *ctx)
 /** Return the integer value of a hex digit.
  * @param c A hex digit, one of 0-9, a-f or A-F.
  * @returns The value of the digit, i.e. 0-15.  If a non-gex digit is given
- *  an error message is displayed to the user, and 0 is returned.
+ *  an error is registered in ctx, and 0 is returned.
+ * @param ctx The context in which this function is called
  */
 static int
 hex_digit(char c, DiaContext *ctx)
@@ -591,9 +596,10 @@ hex_digit(char c, DiaContext *ctx)
 /** Return the value of a color-type data node.
  * @param data The XML node to read from
  * @param col A place to store the resulting RGB values.  If the node does
- *  not contain a valid color value, an error message is displayed to the
- *  user, and `col' is unchanged.
+ *  not contain a valid color value, an error message is registered in ctx
+ *  and `col' is unchanged.
  * @note Could be cool to use RGBA data here, even if we can't display it yet.
+ * @param ctx The context in which this function is called
  */
 void
 data_color(DataNode data, Color *col, DiaContext *ctx)
@@ -633,8 +639,9 @@ data_color(DataNode data, Color *col, DiaContext *ctx)
 /** Return the value of a point-type data node.
  * @param data The XML node to read from
  * @param point A place to store the resulting x, y values.  If the node does
- *  not contain a valid point value, an error message is displayed to the
- *  user, and `point' is unchanged.
+ *  not contain a valid point value, an error message is registered in ctx
+ *  and `point' is unchanged.
+ * @param ctx The context in which this function is called
  */
 void
 data_point(DataNode data, Point *point, DiaContext *ctx)
@@ -680,6 +687,7 @@ data_point(DataNode data, Point *point, DiaContext *ctx)
  * @param data The XML node to read from
  * @param point A place to store the resulting values.  If the node does
  *  not contain a valid bezpoint zero initialization is performed.
+ * @param ctx The context in which this function is called
  */
 void 
 data_bezpoint(DataNode data, BezPoint *point, DiaContext *ctx)
@@ -749,6 +757,7 @@ data_bezpoint(DataNode data, BezPoint *point, DiaContext *ctx)
  * @param rect A place to store the resulting values.  If the node does
  *  not contain a valid rectangle value, an error message is displayed to the
  *  user, and `rect' is unchanged.
+ * @param ctx The context in which this function is called
  */
 void
 data_rectangle(DataNode data, Rectangle *rect, DiaContext *ctx)
@@ -807,6 +816,7 @@ data_rectangle(DataNode data, Rectangle *rect, DiaContext *ctx)
  *  string node, an error message is displayed and NULL is returned.  The
  *  returned valuee should be freed after use.
  * @note For historical reasons, strings in Dia XML are surrounded by ##.
+ * @param ctx The context in which this function is called
  */
 gchar *
 data_string(DataNode data, DiaContext *ctx)
@@ -879,6 +889,7 @@ data_string(DataNode data, DiaContext *ctx)
 
 /** Return the value of a filename-type data node.
  * @param data The data node to read from.
+ * @param ctx The context in which this function is called
  * @return The filename value found in the node.  If the node is not a
  *  filename node, an error message is displayed and NULL is returned.
  *  The resulting string is in the local filesystem's encoding rather than
@@ -897,6 +908,7 @@ data_filename(DataNode data, DiaContext *ctx)
 /** Return the value of a font-type data node.  This handles both the current
  * format (family and style) and the old format (name).
  * @param data The data node to read from.
+ * @param ctx The context in which this function is called
  * @return The font value found in the node.  If the node is not a
  *  font node, an error message is displayed and NULL is returned.  The
  *  resulting value should be freed after use.
@@ -937,8 +949,6 @@ data_font(DataNode data, DiaContext *ctx)
  * @param obj_node The object node to create the attribute node under.
  * @param attrname The name of the attribute node.
  * @return A new attribute node.
- * @bug Should have utility functions that creates the node and sets
- *  the value based on type.
  */
 AttributeNode
 new_attribute(ObjectNode obj_node,
@@ -955,7 +965,6 @@ new_attribute(ObjectNode obj_node,
  * @param composite_node The composite node.
  * @param attrname The name of the new attribute node.
  * @return The attribute node added.
- * @bug This does exactly the same as new_attribute.
  */
 AttributeNode
 composite_add_attribute(DataNode composite_node,
@@ -1194,8 +1203,8 @@ data_add_string(AttributeNode attr, const char *str)
 }
 
 /** Add filename data to an attribute node.
- * @param attr The attribute node.
- * @param filename The value to set.  This should be n the local filesystem
+ * @param data The data node.
+ * @param str The filename value to set. This should be n the local filesystem
  *  encoding, not utf-8.
  */
 void
@@ -1255,7 +1264,7 @@ int pretty_formated_xml = TRUE;
  * @param filename The file to save to.
  * @param cur The XML document structure.
  * @return The return value of xmlSaveFormatFileEnc.
- * @bug Get the proper defn of the return value from libxml2.
+ * @todo Get the proper defn of the return value from libxml2.
  */
 int
 xmlDiaSaveFile(const char *filename,
diff --git a/lib/diagdkrenderer.h b/lib/diagdkrenderer.h
index 6a853a5..8d2768c 100644
--- a/lib/diagdkrenderer.h
+++ b/lib/diagdkrenderer.h
@@ -17,17 +17,27 @@ G_BEGIN_DECLS
 GType dia_gdk_renderer_get_type (void) G_GNUC_CONST;
 void dia_gdk_renderer_set_dashes(DiaGdkRenderer *renderer, int offset);
 
+/*!
+ * \brief Dia's first display renderer
+ *
+ * The GdkRenderer is using the native windowing system drawing functions provided by the
+ * respective GDK backend. With newer GTK+ versions it is deprecated, with GTK+3.0 it is gone.
+ *
+ * \extends _DiaRenderer
+ *
+ * \todo move the GdkRenderer out of the code into a plug-in (as done with LibartRenderer
+ */
 struct _DiaGdkRenderer
 {
   DiaRenderer parent_instance;
 
   /*< private >*/
-  DiaTransform *transform;        /* Our link to the display settings */
-  GdkPixmap *pixmap;              /* The pixmap shown in this display  */
-  guint32 width;                  /* The width of the pixmap in pixels */
-  guint32 height;                 /* The height of the pixmap in pixels */
-  GdkGC *gc;
-  GdkRegion *clip_region;
+  DiaTransform *transform;        /*!< Our link to the display settings */
+  GdkPixmap *pixmap;              /*!< The pixmap shown in this display  */
+  guint32 width;                  /*!< The width of the pixmap in pixels */
+  guint32 height;                 /*!< The height of the pixmap in pixels */
+  GdkGC *gc;                      /*!< The Gdk graphics context used */
+  GdkRegion *clip_region;         /*!< Clipping region in effect when interactive */
 
   /* line attributes: */
   int line_width;
@@ -41,7 +51,7 @@ struct _DiaGdkRenderer
 
   /** If non-NULL, this rendering is a highlighting with the given color. */
   Color *highlight_color;
-  
+
   real   current_alpha;
 };
 
diff --git a/lib/diagramdata.c b/lib/diagramdata.c
index f9341ec..c6ca0f4 100644
--- a/lib/diagramdata.c
+++ b/lib/diagramdata.c
@@ -550,8 +550,6 @@ data_get_layers_extents_union(DiagramData *data)
 
 /** Change diagram scaling so that the extents are exactly visible.
  * @param data The diagram to adjust.
- * @bug Consider making it a teeny bit larger, or check that *all* objects
- *  calculate their extents correctly.
  */
 static void
 data_adapt_scaling_to_extents(DiagramData *data)
@@ -600,9 +598,11 @@ data_compute_extents(DiagramData *data)
   return (!rectangle_equals(&data->extents,&old_extents));
 }
 
-/** Update the extents of a diagram and adjust scaling if needed.
+/*!
+ * \brief Update the extents of a diagram and adjust scaling if needed.
  * @param data Diagram to update.
  * @return TRUE if the diagram extents changed.
+ * \memberof _DiagramData
  */
 gboolean
 data_update_extents(DiagramData *data)
@@ -616,11 +616,12 @@ data_update_extents(DiagramData *data)
   return changed;
 }
 
-/** Get a list of selected objects in layer ordering.
+/*!
+ * \brief Get a list of selected objects in layer ordering.
  * @param data The diagram to get objects from.
  * @return A list of all currently selected objects.  These all reside in
  *  the currently active layer.  This list should be freed after use.
- * @bug Does selection update correctly when the layer changes?
+ * \memberof _DiagramData
  */
 GList *
 data_get_sorted_selected(DiagramData *data)
@@ -714,7 +715,6 @@ data_emit(DiagramData *data, Layer *layer, DiaObject* obj,
  * @param update The area that needs updating.
  * @param obj_renderer If non-NULL, an alternative renderer of objects.
  * @param gdata User data passed on to inner calls.
- * @bug Describe obj_renderer better.
  */
 void
 data_render(DiagramData *data, DiaRenderer *renderer, Rectangle *update,
diff --git a/lib/diagramdata.h b/lib/diagramdata.h
index 97e8b93..d00a756 100644
--- a/lib/diagramdata.h
+++ b/lib/diagramdata.h
@@ -53,8 +53,11 @@ GType diagram_data_get_type (void) G_GNUC_CONST;
 #define DIA_IS_DIAGRAM_DATA(obj)        (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DIA_TYPE_DIAGRAM_DATA))
 #define DIA_DIAGRAM_DATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DIA_TYPE_DIAGRAM_DATA, DiagramDataClass))
 
-/*
- * \brief Base class for diagrams. This is the only stuff plug-ins should see about diagrams.
+/*!
+ * \brief Base class for diagrams. This gets passed to plug-ins to work on diagrams.
+ *
+ * Dia's diagram object is the container of _Layer, the managment object of _DiaObject selections
+ * and text foci (_Focus) as well a highlithing state resulting from selections.
  */
 struct _DiagramData {
   GObject parent_instance; /*!< inheritance in C */
diff --git a/lib/diarenderer.h b/lib/diarenderer.h
index dd7aef0..d9f3ae0 100644
--- a/lib/diarenderer.h
+++ b/lib/diarenderer.h
@@ -50,7 +50,16 @@ typedef enum {
 
 GType dia_renderer_get_type (void) G_GNUC_CONST;
 
-/*! \brief The member variables part of _DiaRenderer */
+/*!
+ * \brief The member variables part of _DiaRenderer
+ *
+ * The Dia renderers are already realized with the GObject type system.
+ * Most of the renderers are only used for export, but there are also
+ * some renderers cabable of interaction (i.e. display). These are
+ * extended versions providing the _DiaInteractiveRendererInterface
+ *
+ * \ingroup Renderers
+ */
 struct _DiaRenderer
 {
   GObject parent_instance; /*!< inheritance in object oriented C */
@@ -65,8 +74,6 @@ struct _DiaRenderer
 };
 
 /*!
- * \class _DiaRendererClass
- *
  * \brief Base class for all of Dia's render facilities
  *
  * Renderers work in close cooperation with DiaObject. They provide the way to
@@ -272,45 +279,64 @@ struct _DiaRendererClass
 #define DIA_TYPE_INTERACTIVE_RENDERER_INTERFACE     (dia_interactive_renderer_interface_get_type ())
 #define DIA_GET_INTERACTIVE_RENDERER_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), DIA_TYPE_INTERACTIVE_RENDERER_INTERFACE, DiaInteractiveRendererInterface))
 
+/*!
+ * \brief Interface to be provide by interactive renderers
+ *
+ * The interactive renderer interface extends a renderer with clipping
+ * and drawing with pixel coordinates.
+ *
+ * \ingroup Renderers
+ */
 struct _DiaInteractiveRendererInterface
 {
   GTypeInterface base_iface;
 
-  /* Clear the current clipping region. */
+  /*! Clear the current clipping region. */
   void (*set_size)            (DiaRenderer *renderer, gpointer, int, int);
 
-  /* Clear the current clipping region. */
+  /*! Clear the current clipping region. */
   void (*clip_region_clear)    (DiaRenderer *renderer);
 
-  /* Add a rectangle to the current clipping region. */
+  /*! Add a rectangle to the current clipping region. */
   void (*clip_region_add_rect) (DiaRenderer *renderer, Rectangle *rect);
 
-  /* Draw a line from start to end, using color and the current line style */
+  /*! Draw a line from start to end, using color and the current line style */
   void (*draw_pixel_line)      (DiaRenderer *renderer,
                                 int x1, int y1, int x2, int y2,
                                 Color *color);
-  /* Draw a rectangle, given its upper-left and lower-right corners in pixels. */
+  /*! Draw a rectangle, given its upper-left and lower-right corners in pixels. */
   void (*draw_pixel_rect)      (DiaRenderer *renderer,
                                 int x, int y, int width, int height,
                                 Color *color);
-  /* Fill a rectangle, given its upper-left and lower-right corners in pixels. */
+  /*! Fill a rectangle, given its upper-left and lower-right corners in pixels. */
   void (*fill_pixel_rect)      (DiaRenderer *renderer,
                                 int x, int y, int width, int height,
                                 Color *color);
-
+  /*! Copy already rendered content to the given window */
   void (*copy_to_window)      (DiaRenderer *renderer,
                                gpointer     window, 
                                int x, int y, int width, int height);
-
+  /*! Support for drawing selected objects highlighted */
   void (*draw_object_highlighted) (DiaRenderer *renderer,
 				   DiaObject *object,
 				   DiaHighlightType type);
 };
 
 GType dia_interactive_renderer_interface_get_type (void) G_GNUC_CONST;
-
+/*!
+ * \brief Size adjustment to the given window
+ * \memberof DiaInteractiveRendererInterface
+ */
 void dia_renderer_set_size          (DiaRenderer*, gpointer window, int, int);
+/*!
+ * \brief Get the width in pixels
+ * \memberof DiaInteractiveRendererInterface
+ */
 int  dia_renderer_get_width_pixels  (DiaRenderer*);
+/*!
+ * \brief Get the height in pixels
+ * \memberof DiaInteractiveRendererInterface
+ */
 int  dia_renderer_get_height_pixels (DiaRenderer*);
 
 G_END_DECLS
diff --git a/lib/diasvgrenderer.h b/lib/diasvgrenderer.h
index 8dcb168..cc85958 100644
--- a/lib/diasvgrenderer.h
+++ b/lib/diasvgrenderer.h
@@ -14,11 +14,18 @@ G_BEGIN_DECLS
 
 GType dia_svg_renderer_get_type (void) G_GNUC_CONST;
 
+/*!
+ * \brief Base class for SVG generation
+ *
+ * Used for Shape cration and one of the SVG exporters
+ *
+ * \extends _DiaRenderer
+ */
 struct _DiaSvgRenderer
 {
   DiaRenderer parent_instance;
 
-  /*< protected >*/
+  /*! \protected filename used for saving */
   char *filename;
 
   xmlDocPtr doc;
@@ -33,7 +40,7 @@ struct _DiaSvgRenderer
   const char *linecap;
   const char *linejoin;
   char *linestyle; /* not const -- must free */
-  real scale;  /* 1.0 for shape output, more for svg output,  */
+  real scale;  /*!< scale=1.0 for shape output, more for svg output,  */
 };
 
 struct _DiaSvgRendererClass
diff --git a/lib/element.h b/lib/element.h
index 3a9eda7..b527272 100644
--- a/lib/element.h
+++ b/lib/element.h
@@ -28,24 +28,26 @@
 #include "properties.h" /* win32: PropNumData */
 
 /*!
- * \class _Element
  * \brief Beside OrthCon one of the most use object classes
  *
  * This is a subclass of DiaObject used to help implementing objects
  * of a type with 8 handles. 
+ *
+ * \extends _DiaObject
  */
 struct _Element {
-  DiaObject object; /*!< inheritance */
+  DiaObject object; /* inheritance */
   
   Handle resize_handles[8]; /*!< not only for resizing but may also be used for connections */
 
-  Point corner;
-  real width;
-  real height;
-
-  ElementBBExtras extra_spacing;
+  Point corner; /*!< upper-left corner of the Element */
+  real width;   /*!< width of the object (with 0 line width) */
+  real height;  /*!< height of the object (with 0 line width) */
+  /*! extra data used for bounding box calculation */
+  ElementBBExtras extra_spacing; /*!< filled from line width */
 };
 
+/*! \protected Update internal state after property change */
 void element_update_handles(Element *elem);
 void element_update_connections_rectangle(Element *elem,
 					  ConnectionPoint *cps);
diff --git a/lib/font.c b/lib/font.c
index 5115ceb..25be02c 100644
--- a/lib/font.c
+++ b/lib/font.c
@@ -48,6 +48,10 @@
 
 static PangoContext* pango_context = NULL;
 
+/*!
+ * \brief Opaque type to represent a font
+ * \ingroup ObjectParts
+ */
 struct _DiaFont 
 {
   GObject parent_instance;
diff --git a/lib/font.h b/lib/font.h
index caf8259..0253fcf 100644
--- a/lib/font.h
+++ b/lib/font.h
@@ -25,6 +25,12 @@
 #include "dia-enums.h"
 #include "geometry.h"
 
+/*! 
+ \file font.h -- services based on font definitions 
+ \defgroup FontServices Dia's font definiton based on Pango model
+ \ingroup ObjectParts
+ */
+
 G_BEGIN_DECLS
 
 /* Do NOT put these strings through the .po mechanism. If you need to add
@@ -34,7 +40,7 @@ G_BEGIN_DECLS
 #define BASIC_MONOSPACE_FONT "courier new, courier, monospace, fixed"
 
 
-/** 
+/*
  * In a goodly selection of fonts, 500 is very common, yet Pango doesn't name it.
  * I am calling 500 'medium' and 600 'demibold'.
  * We should really have a more flexible system where 300 or 400 is normal, 
@@ -100,7 +106,8 @@ struct _DiaFontClass {
     GObjectClass parent_class;
 };
 
-/* Set the PangoContext used to render text.
+/*! Set the PangoContext used to render text.
+ * \ingroup FontServices
  */
 void dia_font_init(PangoContext* pcontext);
 /* Start using a new context (for AA rendering) */
@@ -109,21 +116,36 @@ void dia_font_push_context(PangoContext *pcontext);
 void dia_font_pop_context(void);
 /* Retrieve the current context (used for the font widget) */
 PangoContext *dia_font_get_context(void);
-                             
-    /* Get a font matching family,style,height. MUST be freed with
-       dia_font_unref(). */
+
+/*!
+ * \brief Font creation for object implementation
+ * \ingroup FontServices
+ * Get a font matching family,style,height. MUST be freed with dia_font_unref().
+ */
 DiaFont* dia_font_new(const char *family, DiaFontStyle style,
                       real height);
 
-    /* Get a font matching style. This is the preferred method to
-     * create default fonts within objects. */
+/*!
+ * \brief Font creation for object implementation
+ * Get a font matching style. This is the preferred method to
+ * create default fonts within objects.
+ * \ingroup FontServices
+ */
 DiaFont* dia_font_new_from_style(DiaFontStyle style, real height);
 
-    /* Get a font from a legacy font name */ 
+/*!
+ * \brief Font creation for object implementation
+ * Get a font from a legacy font name 
+ * \ingroup FontServices
+ */ 
 DiaFont* dia_font_new_from_legacy_name(const char *name);
 
-    /* Get a simple font name from a font.
-       Name will be valid for the duration of the DiaFont* lifetime. */ 
+/*!
+ * \brief Font creation for object implementation
+ * Get a simple font name from a font.
+ * Name will be valid for the duration of the DiaFont* lifetime. 
+ * \ingroup FontServices
+ */ 
 const char* dia_font_get_legacy_name(const DiaFont* font);
 
     /* Same attributes */
@@ -140,22 +162,41 @@ const char* dia_font_get_family(const DiaFont* font);
 /* Acessor for the PangoFontDescription */
 const PangoFontDescription *dia_font_get_description (const DiaFont* font);
 
-    /* Retrieves the height of the font */
+/*! 
+ * \brief Retrieves the height of the font
+ * \memberof DiaFont
+ */
 real dia_font_get_height(const DiaFont* font);
-    /* Change the height inside a font record. */
+/*! 
+ * \brief Change the height inside a font record.
+ * \memberof DiaFont
+ */
 void dia_font_set_height(DiaFont* font, real height);
-    /* Delivers the size of the font */                         
+/*! 
+ * \brief Delivers the size of the font
+ * \memberof DiaFont
+ */
 real dia_font_get_size(const DiaFont* font);
-
-    /* Changes the slant of an existing font */
+/*! 
+ * \brief Changes the slant of an existing font
+ * \memberof DiaFont
+ */
 void dia_font_set_slant(DiaFont* font, DiaFontSlant slant);
-    /* Changes the weight of an existing font */
+/*! 
+ * \brief Changes the weight of an existing font
+ * \memberof DiaFont
+ */
 void dia_font_set_weight(DiaFont* font, DiaFontWeight weight);
-    /* Changes the family of an existing font to one of the three standard
-       families */
+/*! 
+ * \brief Changes the family of an existing font to one of the three standard families
+ * \memberof DiaFont
+ */
 void dia_font_set_family(DiaFont* font, DiaFontFamily family);
-    /* Changes the family of an existing font to any family, but the name could
-       be system-dependent. */
+/*! 
+ * \brief Changes the family of an existing font to any family
+ * The name is system configuration dependent, but font files are portable nowadays.
+ * \memberof DiaFont
+ */
 void dia_font_set_any_family(DiaFont* font, const char* family);
 
     /* FIXME: what do we do with this, actually ?
diff --git a/lib/group.c b/lib/group.c
index 89a8050..7bf9cf5 100644
--- a/lib/group.c
+++ b/lib/group.c
@@ -26,16 +26,19 @@
 #include "properties.h"
 #include "diarenderer.h"
 
+/*!
+ * \brief Allow grouping other objects and hiding them from the diagram
+ */
 struct _Group {
- /* DiaObject must be first because this is a 'subclass' of it. */
+  /*! \protected DiaObject must be first because this is a 'subclass' of it. */
   DiaObject object;
-  
+  /*! \protected To move handles use Group::move_handle() */
   Handle resize_handles[8];
-
+  /*! \protected To group objects use group_create() */
   GList *objects;
-
+  /*! \protected Description of the contained properties */
   const PropDescription *pdesc;
-  
+  /*! Optional transformation matrix */
   DiaMatrix *matrix;
 };
 
@@ -510,7 +513,10 @@ group_create_with_matrix(GList *objects, DiaMatrix *matrix)
   group_update_data(group);
   return &group->object;
 }
-/* Make sure there are no connections from objects to objects
+/*!
+ * \brief Grouping of objects
+ *
+ * Make sure there are no connections from objects to objects
  * outside of the created group.
  */
 DiaObject *
diff --git a/lib/handle.h b/lib/handle.h
index e42860a..f6d73fa 100644
--- a/lib/handle.h
+++ b/lib/handle.h
@@ -16,14 +16,20 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-/*! \file handle.h - describing the different behavious of handles, used e.g. to resize objects */
+/*! 
+ * \file handle.h - describing the different behavious of handles, used e.g. to resize objects
+ * \ingroup ObjectConnects
+ */
 #ifndef HANDLE_H
 #define HANDLE_H
 
 #include "diatypes.h"
 #include "geometry.h"
 
-/*! Some object resizing depends on the placement of the handle */
+/*!
+ * \brief Some object resizing depends on the placement of the handle
+ * \ingroup ObjectConnects
+ */
 typedef enum {
   HANDLE_RESIZE_NW, /*!< north/west or top/left */
   HANDLE_RESIZE_N,  /*!< north or top */
@@ -48,7 +54,10 @@ typedef enum {
   HANDLE_CUSTOM9
 } HandleId;
 
-/*! HandleType is used for color coding the different handles */
+/*!
+ * \brief HandleType is used for color coding the different handles
+ * \ingroup ObjectConnects
+ */
 typedef enum {
   HANDLE_NON_MOVABLE,
   HANDLE_MAJOR_CONTROL,
@@ -57,7 +66,10 @@ typedef enum {
   NUM_HANDLE_TYPES /* Must be last */
 }  HandleType;
 
-/*! When an objects move_handle() function is called this is passed in */
+/*! 
+ * \brief When an objects move_handle() function is called this is passed in
+ * \ingroup ObjectConnects
+ */
 typedef enum {
   HANDLE_MOVE_USER,
   HANDLE_MOVE_USER_FINAL,
@@ -66,7 +78,10 @@ typedef enum {
   HANDLE_MOVE_CREATE_FINAL  /*!< finish of initial drag */
 } HandleMoveReason;
 
-/*! If the handle is connectable or not */
+/*!
+ * \brief If the handle is connectable or not
+ * \ingroup ObjectConnects
+ */
 typedef enum {
   HANDLE_NONCONNECTABLE,     /*!< not connectable */
   HANDLE_CONNECTABLE,        /*!< connectable */
@@ -75,6 +90,7 @@ typedef enum {
 
 /*!
  * \brief A handle is used to resize objects or to connet to them.
+ * \ingroup ObjectConnects
  */
 struct _Handle {
   HandleId id; /*!< gives (mostly) the placement relative to the object */
diff --git a/lib/layer.c b/lib/layer.c
index 05ff0bd..64cdcd7 100644
--- a/lib/layer.c
+++ b/lib/layer.c
@@ -32,7 +32,6 @@ static const Rectangle invalid_extents = { -1.0,-1.0,-1.0,-1.0 };
  * @param renderer The renderer to render on.
  * @param active_layer The layer containing the object.
  * @param data The diagram containing the layer.
- * @bug The active_layer and data variables can be inferred from the object.
  */
 static void
 normal_render(DiaObject *obj, DiaRenderer *renderer,
@@ -99,9 +98,6 @@ layer_render(Layer *layer, DiaRenderer *renderer, Rectangle *update,
  * @param name Name of the new layer.
  * @param parent The DiagramData that the layer will belong to,.
  * @return A new Layer object.
- * @bug Must determine if a NULL name is ok.
- * @bug Even though this sets parent diagram, it doesn't call the
- * update_extents functions that add_layer does.
  */
 Layer *
 new_layer(gchar *name, DiagramData *parent)
@@ -190,7 +186,7 @@ layer_get_name (Layer *layer)
 /** Add an object to the top of a layer.
  * @param layer The layer to add the object to.
  * @param obj The object to add.  This must not already be part of another layer.
- * @bug This should just call layer_add_object_at().
+ * \memberof _Layer
  */
 void
 layer_add_object(Layer *layer, DiaObject *obj)
@@ -206,6 +202,7 @@ layer_add_object(Layer *layer, DiaObject *obj)
  * @param layer The layer to add the object to.
  * @param obj The object to add.  This must not be part of another layer.
  * @param pos The top-to-bottom position this object should be inserted at.
+ * \memberof _Layer
  */
 void
 layer_add_object_at(Layer *layer, DiaObject *obj, int pos)
@@ -221,7 +218,7 @@ layer_add_object_at(Layer *layer, DiaObject *obj, int pos)
  * @param layer The layer to add objects to.
  * @param obj_list The list of objects to add.  These must not already
  *  be part of another layer.
- * @bug Determine if the list is kept by g_list_concat.
+ * \memberof _Layer
  */
 void
 layer_add_objects(Layer *layer, GList *obj_list)
@@ -245,7 +242,7 @@ layer_add_objects(Layer *layer, GList *obj_list)
  * @param layer The layer to add objects to.
  * @param obj_list The list of objects to add.  These must not already
  *  be part of another layer.
- * @bug Determine if the list is kept by g_list_concat.
+ * \memberof _Layer
  */
 void
 layer_add_objects_first(Layer *layer, GList *obj_list)
@@ -270,7 +267,7 @@ layer_add_objects_first(Layer *layer, GList *obj_list)
 /** Remove an object from a layer.
  * @param layer The layer to remove the object from.
  * @param obj The object to remove.
- * @bug Why don't the layer_add functions deal with dynobj?
+ * \memberof _Layer
  */
 void
 layer_remove_object(Layer *layer, DiaObject *obj)
@@ -285,7 +282,8 @@ layer_remove_object(Layer *layer, DiaObject *obj)
 
 /** Remove a list of objects from a layer.
  * @param layer The layer to remove the objects from.
- * @param obj The objects to remove.
+ * @param obj_list The objects to remove.
+ * \memberof _Layer
  */
 void
 layer_remove_objects(Layer *layer, GList *obj_list)
@@ -305,6 +303,7 @@ layer_remove_objects(Layer *layer, GList *obj_list)
  * @param rect The rectangle to intersect with.
  * @return List of objects whose bounding box intersect the rectangle.  The
  *  list should be freed by the caller.
+ * \memberof _Layer
  */
 GList *
 layer_find_objects_intersecting_rectangle(Layer *layer, Rectangle *rect)
diff --git a/lib/objchange.h b/lib/objchange.h
index 1ee10af..db368d3 100644
--- a/lib/objchange.h
+++ b/lib/objchange.h
@@ -16,7 +16,11 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-/*! \file objchange.h -- Forming the basic of undo support to be implemented in objects */
+/*! 
+ * \file objchange.h -- Forming the basic of undo support to be implemented in objects 
+ * \defgroup ObjChange Objects support for undo/redo
+ * \ingroup Objects
+ */
 #ifndef OBJCHANGE_H
 #define OBJCHANGE_H
 
@@ -28,11 +32,15 @@ typedef void (*ObjectChangeApplyFunc)(ObjectChange *change, DiaObject *obj);
 typedef void (*ObjectChangeRevertFunc)(ObjectChange *change, DiaObject *obj);
 typedef void (*ObjectChangeFreeFunc)(ObjectChange *change);
 
-/*
+/*!
+   \brief Return value of object changing functions and methods of DiaObject
+
    FIXME: ObjectChange functions should not require the changed object
    as an argument. Every change object should keep track of the
    relevant object instead. The second argument in the above typedefs
    is deprecated and should not be relied on.
+
+   \ingroup ObjChange
  */
 struct _ObjectChange {
   /*! If apply == transaction_point_pointer then this is a transaction
@@ -58,6 +66,8 @@ struct _ObjectState {
   the object and it's handles positions.
   
   The calling function owns the returned reference.
+
+  \ingroup ObjChange
 */
 typedef ObjectState * (*GetStateFunc) (DiaObject* obj);
 
@@ -68,16 +78,26 @@ typedef ObjectState * (*GetStateFunc) (DiaObject* obj);
 
   The called function owns the reference and is
   responsible for freeing it.
+
+  \ingroup ObjChange
 */
 typedef void (*SetStateFunc) (DiaObject* obj, ObjectState *state);
 
-
+/*! Create a single change from the ObjectState 
+ * \ingroup ObjChange
+ */
 ObjectChange *new_object_state_change(DiaObject *obj,
 				      ObjectState *old_state,
 				      GetStateFunc get_state,
 				      SetStateFunc set_state );
 
+/*! Create a list of ObjectChange for single step undo/redo 
+ * \ingroup ObjChange
+ */
 ObjectChange *change_list_create (void);
+/*! Add another ObjectChange to the list of changes
+ * \ingroup ObjChange
+ */
 void change_list_add (ObjectChange *change_list, ObjectChange *change);
 
 G_END_DECLS
diff --git a/lib/object.c b/lib/object.c
index b815ffe..b33b0c5 100644
--- a/lib/object.c
+++ b/lib/object.c
@@ -91,7 +91,7 @@ object_destroy(DiaObject *obj)
  * @param to The object being copied to.  This object does not need to
  *           have been object_init'ed, but if it is, its handles and
  *           connections arrays will be freed.
- * @bugs Any existing children list will not be freed and will leak.
+ * @bug Any existing children list will not be freed and will leak.
  */
 void
 object_copy(DiaObject *from, DiaObject *to)
@@ -138,7 +138,7 @@ pointer_hash(gpointer some_pointer)
  * @param list_orig The original list.  This list will not be changed,
  *                  nor will its objects.
  * @return A list with the list_orig copies copied.
- * @bugs Any children of an object in the list that are not themselves
+ * @bug Any children of an object in the list that are not themselves
  *       in the list will cause a NULL entry in the children list.
  */
 GList *
@@ -244,9 +244,7 @@ object_copy_list(GList *list_orig)
  * @param delta How far to move the objects.
  * @param affected Whether to check parent boundaries???
  * @return Undo information for the move, or NULL if no objects moved.
- * @bugs If a parent and is child are both in the list, is the child moved
- *       twice?
- * @bugs The return Change object only contains info for a single object.
+ * @bug The return Change object only contains info for a single object.
  */
 ObjectChange*
 object_list_move_delta_r(GList *objects, Point *delta, gboolean affected)
@@ -291,7 +289,6 @@ object_list_move_delta_r(GList *objects, Point *delta, gboolean affected)
 /** Move a set of objects a given amount.
  * @param objects The list ob objects to move.
  * @param delta The amount to move them.
- * @bugs Why does this work?  Seems like some objects are moved more than once.
  */
 extern ObjectChange*
 object_list_move_delta(GList *objects, Point *delta)
@@ -600,6 +597,7 @@ object_save(DiaObject *obj, ObjectNode obj_node)
  *  basic data (currently position and bounding box).
  * @param obj An object to load into.
  * @param obj_node An XML node to load the data from.
+ * @param ctx The context in which this function is called
  */
 void 
 object_load(DiaObject *obj, ObjectNode obj_node, DiaContext *ctx)
@@ -799,8 +797,7 @@ object_flags_set(DiaObject *obj, gint flags)
  * @param type The type of the object, used for creation.
  * @param obj_node The XML node defining the object.
  * @param version The version of the object found in the XML structure.
- * @param filename The name of the file that the XML came from, for error
- *                 messages.
+ * @param ctx The context in which this function is called
  * @return A newly created object with properties loaded.
  */
 DiaObject *
@@ -882,6 +879,7 @@ const Rectangle *dia_object_get_enclosing_box(const DiaObject *obj) {
 
 /** Check that a DiaObject maintains its invariants and constrains.
  * @param obj An object to check
+ * @param msg Comment on the sanity
  * @return TRUE if the object is OK. */
 gboolean  
 dia_object_sanity_check(const DiaObject *obj, const gchar *msg) {
diff --git a/lib/object.h b/lib/object.h
index d0b3509..d66ffe0 100644
--- a/lib/object.h
+++ b/lib/object.h
@@ -88,7 +88,9 @@ typedef enum {
  * @param handle2    : (return) Handle dragged on creation
  *  both handle1 and handle2 can be NULL
  * @return A newly created object.
-*/
+ *
+ * \public \memberof _DiaObjectType
+ */
 typedef DiaObject* (*CreateFunc) (Point *startpoint,
 			       void *user_data,
 			       Handle **handle1,
@@ -106,6 +108,8 @@ typedef DiaObject* (*CreateFunc) (Point *startpoint,
  * @param version The version of the object found in the XML file.
  * @param filename The name of the file we're loading from, for use in 
  *                 error messages.
+ *
+ * \public \memberof _DiaObjectType
  */
 typedef DiaObject* (*LoadFunc) (ObjectNode obj_node, int version,
 				DiaContext *ctx);
@@ -117,6 +121,8 @@ typedef DiaObject* (*LoadFunc) (ObjectNode obj_node, int version,
  * @param obj_node An XML node to save it in.
  * @param filename The name of the file we're saving to, for use in error
  *                 messages.
+ *
+ * \public \memberof _DiaObjectType
  */
 typedef void (*SaveFunc) (DiaObject* obj, ObjectNode obj_node,
 			  const char *filename);
@@ -128,45 +134,59 @@ typedef void (*SaveFunc) (DiaObject* obj, ObjectNode obj_node,
  *  This is one of the object class functions.
  * @return a dialog that the user can use to edit the defaults for new
  * objects of this type.
-*/
+ *
+ * \public \memberof _DiaObjectType
+ */
 typedef GtkWidget *(*GetDefaultsFunc) ();
 
 /** Function called when the user clicks Apply on an edit defaults dialog.
  * This is currently not used by any object.
  * This is one of the object class functions.
+ *
+ * \public \memberof _DiaObjectType
  */
 typedef void *(*ApplyDefaultsFunc) ();
 
 /*** Object operations ***/
 
-/** Function called before an object is deleted.
- *  This function must call the parent class's DestroyFunc, and then free
- *  the memory associated with the object, but not the object itself
- *  Must also unconnect itself from all other objects.
- *  (This is by calling object_destroy, or letting the super-class call it)
- *  This is one of the object_ops functions.
- * @param obj An object to destroy.
+/*!
+ * \brief DiaObject destructor
+ * This function must call the parent class's DestroyFunc, and then free
+ * the memory associated with the object, but not the object itself
+ * Must also unconnect itself from all other objects.
+ * (This is by calling object_destroy, or letting the super-class call it)
+ * This is one of the object_ops functions.
+ * @param obj Explicit this pointer
+ *
+ * \public \memberof _DiaObject
  */
 typedef void (*DestroyFunc) (DiaObject* obj);
 
 
-/** Function responsible for drawing the object.
- *  Every drawing must be done through the use of the Renderer, so that we
- *  can render the picture on screen, in an eps file, ...
- *  This is one of the object_ops functions.
+/*!
+ * \brief Function responsible for drawing the object.
+ *
+ * Every drawing must be done through the use of the Renderer, so that we
+ * can render the picture on screen, in an eps file, ...
+ *
  * @param The object to draw.
  * @param The renderer object to draw with.
+ *
+ * \public \memberof _DiaObject
  */
 typedef void (*DrawFunc) (DiaObject* obj, DiaRenderer* ddisp);
 
 
-/** This function must return the distance between the DiaObject and the Point.
- *  Several functions are provided in geometry.h to facilitate this calculus.
- *  This is one of the object_ops functions.
+/*! 
+ * \brief calculates the distance between the DiaObject and the Point.
+ *
+ * Several functions are provided in geometry.h to facilitate this calculus.
+ *
  * @param obj The object.
  * @param point A point to give the distance to.
  * @return The distance from the point to the nearest part of the object.
  *         If the point is inside a closed object, return 0.0.
+ * \public \memberof _DiaObject
  */
 typedef real (*DistanceFunc) (DiaObject* obj, Point* point);
 
@@ -434,8 +454,6 @@ struct _ObjectOps {
 };
 
 /*!
-  \class _DiaObject
- 
   \brief Base class for all of Dia's objects, i.e. diagram building blocks
 
   The base class in the DiaObject hierarchy.
@@ -456,18 +474,22 @@ struct _DiaObject {
    *  the objects without interactive bits and preferably no larger.
    *  The bounding_box will always contain this box.
    *  Do not access this field directly, but use dia_object_get_enclosing_box().
+   *
+   * \protected Use dia_object_get_bounding_box()
    */
   Rectangle         bounding_box;
-  
+  /*! Number of Handle(s) of this object */
   int               num_handles;
+  /*! Array of handles of this object with fixed index */
   Handle          **handles;
-  
+  /*! Number of ConnectionPoint this object has */
   int               num_connections;
+  /*! Array of ConnectionPoint* - indexing fixed by meaning */
   ConnectionPoint **connections;
-  
+
   ObjectOps *ops; /*!< pointer to the vtable */
 
-  Layer *parent_layer; /*< Back-pointer to the owning layer.
+  Layer *parent_layer; /*!< Back-pointer to the owning layer.
 			   This may only be set by functions internal to
 			   the layer, and accessed via 
 			   dia_object_get_parent_layer() */
@@ -486,7 +508,7 @@ struct _DiaObject {
    *  objects.
    */
   Rectangle         enclosing_box;
-  /** Metainfo of the object, should not be manipulated directy */
+  /*! Metainfo of the object, should not be manipulated directy. Use dia_object_set_meta() */
   GHashTable       *meta;
 };
 
@@ -516,7 +538,7 @@ struct _ObjectTypeOps {
  */
 struct _DiaObjectType {
 
-  char *name; /*!< The type name should follow a pattern of '<module> - <class>' like "UML - Class" */
+  char *name; /*!< The type name should follow a pattern of '\<module\> - \<class\>' like "UML - Class" */
   int version; /*!< DiaObjects must be backward compatible, i.e. support possibly older versions formats */ 
 
   char **pixmap; /* Also put a pixmap in the sheet_object.
diff --git a/lib/object_defaults.c b/lib/object_defaults.c
index b8d3e3e..8db83df 100644
--- a/lib/object_defaults.c
+++ b/lib/object_defaults.c
@@ -83,6 +83,7 @@ _obj_destroy (gpointer val)
  * @param create_lazy if FALSE creates default objects for
  *             every known type. Otherwise default objects
  *             are created on demand
+ * @param ctx The context in which this function is called
  * 
  * Create all the default objects.
  */
@@ -211,6 +212,7 @@ dia_object_defaults_load (const gchar *filename, gboolean create_lazy, DiaContex
 /**
  * dia_object_default_get :
  * @param type The type of the object for which you want the defaults object.
+ * @param user_data unused
  *
  * Allows to edit one defaults object properties
  */
diff --git a/lib/orth_conn.h b/lib/orth_conn.h
index 6bd42b8..50b1657 100644
--- a/lib/orth_conn.h
+++ b/lib/orth_conn.h
@@ -32,8 +32,13 @@ typedef enum {
 
 #define HANDLE_MIDPOINT (HANDLE_CUSTOM1)
 
-/* This is a subclass of DiaObject used to help implementing objects
+/*!
+ * \brief Helper for orthogonal connection implementations
+ *
+ * This is a subclass of DiaObject used to help implementing objects
  * that connect points with orthogonal line-segments.
+ *
+ * \extends _DiaObject
  */
 struct _OrthConn {
   /* DiaObject must be first because this is a 'subclass' of it. */
diff --git a/lib/persistence.c b/lib/persistence.c
index a946e35..97e1d5e 100644
--- a/lib/persistence.c
+++ b/lib/persistence.c
@@ -16,7 +16,8 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-/* persistence.c -- functions that handle persistent stores, such as 
+/*!
+ * \file persistence.c -- functions that handle persistent stores, such as 
  * window positions and sizes, font menu, document history etc.
  */
 
@@ -42,8 +43,10 @@
 #include <libxml/tree.h>
 
 /* private data structures */
-/** A persistently stored list of strings.
- * The list contains no duplicates.
+/*!
+ * \brief A persistently stored list of strings.
+ *
+ * The persitent list contains no duplicates.
  * If sorted is FALSE, any string added will be placed in front of the list
  * (possibly removing it from further down), thus making it an LRU list.
  * The list is not tied to any particular GTK widget, as it has uses
@@ -57,7 +60,7 @@ struct _PersistentList {
   GList *listeners;
 };
 
-/** Some storage windo information */
+/*! \brief Some storage window information */
 typedef struct {
   int x, y;
   int width, height;
@@ -512,7 +515,8 @@ persistence_store_window_info(GtkWindow *window, PersistentWindow *wininfo,
   }
 }
 
-/** Update the persistent information for a window.
+/*!
+ * \brief Update the persistent information for a window.
  * @param window The GTK window object being stored.
  * @param isclosed Whether the window should be stored as closed or not.
  * In some cases, the window's open/close state is not updated by the time
@@ -550,12 +554,15 @@ persistence_update_window(GtkWindow *window, gboolean isclosed)
   wininfo->isopen = !isclosed;
 }
 
-/** Handler for window-related events that should cause persistent storage
- * changes.
+/*!
+ * \brief Event handler for window persitence
+ *
+ * Handler for window-related events that should cause persistent storage changes.
  * @param window The GTK window to store for.
  * @param event the GDK event that caused us to be called.  Note that the 
  * window state hasn't been updated by the event yet.
  * @param data Userdata passed when adding signal handler.
+ * @return Always FALSE to continue processing of events
  */
 static gboolean
 persistence_window_event_handler(GtkWindow *window, GdkEvent *event, gpointer data)
@@ -583,8 +590,9 @@ persistence_window_event_handler(GtkWindow *window, GdkEvent *event, gpointer da
   return FALSE;
 }
 
-/** 
- * Handler for when a window has been opened or closed.
+/*!
+ * \brief Handler for when a window has been opened or closed.
+ *
  * @param window The GTK window to store for.
  * @param data Userdata passed when adding signal handler.
  */
@@ -599,7 +607,9 @@ persistence_hide_show_window(GtkWindow *window, gpointer data)
   return FALSE;
 }
 
-/**
+/*!
+ * \brief Check stored window information against screen size
+ *
  * If the screen size has changed some persistent info maybe out of the visible area.
  * This function checks that stored coordinates are at least paritally visible on some
  * monitor. In GDK parlance a screen can have multiple monitors.
@@ -625,7 +635,10 @@ wininfo_in_range (const PersistentWindow *wininfo)
   return (rres.width * rres.height > 0);
 }
 
-/* Call this function after the window has a role assigned to use any
+/*!
+ * \brief Register a window with a role for persitence
+ *
+ * Call this function after the window has a role assigned to use any
  * persistence information about the window.
  */
 void
@@ -680,12 +693,15 @@ persistence_register_window(GtkWindow *window)
 		   G_CALLBACK(persistence_hide_show_window), NULL);
 }
 
-/** Call this function at start-up to have a window creation function
+/*!
+ * \brief Restore a window position from it's stored information
+ *
+ * Call this function at start-up to have a window creation function
  * called if the window should be opened at startup.
  * If no persistence information is available for the given role,
  * nothing happens.
  * @arg role The role of the window, as will be set by gtk_window_set_role()
- * @arg createfunc A 0-argument function that creates the window.  This
+ * @arg func A 0-argument function that creates the window.  This
  * function will be called if the persistence information indicates that the
  * window should be open.  The function should create and show the window.
  */
@@ -722,7 +738,10 @@ persistence_update_string_entry(GtkWidget *widget, GdkEvent *event,
   return FALSE;
 }
 
-/** Change the contents of the persistently stored string entry.
+/*!
+ * \brief Cancel modification of a persistent string entry
+ *
+ * Change the contents of the persistently stored string entry.
  * If widget is non-null, it is updated to reflect the change.
  * This can be used e.g. for when a dialog is cancelled and the old
  * contents should be restored.
@@ -742,7 +761,9 @@ persistence_change_string_entry(gchar *role, gchar *string,
   return FALSE;
 }
 
-/** Register a string in a GtkEntry for persistence.
+/*!
+ * \brief Register a string in a GtkEntry for persistence.
+ *
  * This should include not only a unique name, but some way to update
  * whereever the string is used.
  */
@@ -828,10 +849,11 @@ persistent_list_cut_length(GList *list, guint length)
   return list;
 }
 
-/** Add a new entry to this persistent list.
+/*!
+ * \brief Add a new entry to this persistent list.
  * @param role The name of a persistent list.
  * @param item An entry to add.
- * @returns FALSE if the entry already existed in the list, TRUE otherwise.
+ * @return FALSE if the entry already existed in the list, TRUE otherwise.
  */
 gboolean
 persistent_list_add(const gchar *role, const gchar *item)
@@ -874,9 +896,10 @@ persistent_list_set_max_length(const gchar *role, gint max)
   plist->glist = persistent_list_cut_length(plist->glist, max);
 }
 
-/** Remove an item from the persistent list.
+/*!
+ * \brief Remove an item from the persistent list.
  * @param role The name of the persistent list.
- * @param role The entry to remove.
+ * @param item The entry to remove.
  * @returns TRUE if the item existed in the list, FALSE otherwise.
  */
 gboolean
@@ -906,11 +929,15 @@ typedef struct {
   gpointer userdata;
 } ListenerData;
 
-/** Add a listener to updates on the list, so that if another
+/*!
+ * \brief Add a listener to a persitence list
+ *
+ * Add a listener to updates on the list, so that if another
  * instance changes the list, menus and such can be updated.
  * @param role The name of the persistent list to watch.
  * @param func A function to call when the list is updated, takes
  * the given userdata.
+ * @param watch GObject to watch
  * @param userdata Data passed back into the callback function.
  */
 void
@@ -930,8 +957,8 @@ persistent_list_add_listener(const gchar *role, PersistenceCallback func,
   }
 }
 
-/**
- * Empty the list
+/*!
+ * \brief Empty the list
  */
 void
 persistent_list_clear(const gchar *role)
@@ -1039,7 +1066,7 @@ persistence_set_real(gchar *role, real newvalue)
 
 
 /* ********* BOOLEANS ********** */
-/** Returns true if the given role has been registered. */
+/*! \brief Returns true if the given role has been registered. */
 gboolean
 persistence_boolean_is_registered(const gchar *role)
 {
@@ -1099,7 +1126,8 @@ persistence_set_boolean(const gchar *role, gboolean newvalue)
 }
 
 /* ********* STRINGS ********** */
-/** Register a string in persistence.
+/*!
+ * \brief Register a string in persistence.
  * @param role The name used to refer to the string.  Must be unique within
  *             registered strings (and preferably with all registered items)
  * @param defaultvalue A value to use if the role does not exist yet.
@@ -1154,7 +1182,10 @@ persistence_set_string(gchar *role, const gchar *newvalue)
 }
 
 /* ********* COLORS ********** */
-/* Remember that colors returned are private, not to be deallocated.
+/*!
+ * \brief Register a _Color for persistence
+ *
+ * Remember that colors returned are private, not to be deallocated.
  * They will be smashed in some undefined way by persistence_set_color */
 Color *
 persistence_register_color(gchar *role, Color *defaultvalue)
diff --git a/lib/poly_conn.h b/lib/poly_conn.h
index d65fb83..f470021 100644
--- a/lib/poly_conn.h
+++ b/lib/poly_conn.h
@@ -24,8 +24,13 @@
 
 #define HANDLE_CORNER (HANDLE_CUSTOM1)
 
-/* This is a subclass of DiaObject used to help implementing objects
+/*!
+ * \brief helper for implementing polyline connections
+ * 
+ * This is a subclass of DiaObject used to help implementing objects
  * that connect points with polygonal line-segments.
+ *
+ * \extends _DiaObject
  */
 struct _PolyConn {
   /* DiaObject must be first because this is a 'subclass' of it. */
diff --git a/lib/polyshape.h b/lib/polyshape.h
index ea2a79b..9008022 100644
--- a/lib/polyshape.h
+++ b/lib/polyshape.h
@@ -24,8 +24,13 @@
 
 #define HANDLE_CORNER (HANDLE_CUSTOM1)
 
-/* This is a subclass of DiaObject used to help implementing objects
+/*!
+ * \brief Helper class for polygon shaped objects
+ *
+ * This is a subclass of DiaObject used to help implementing objects
  * that form a polygon-like shape of line-segments.
+ *
+ * \extends _DiaObject
  */
 struct _PolyShape {
   /* DiaObject must be first because this is a 'subclass' of it. */
diff --git a/lib/prop_attr.h b/lib/prop_attr.h
index b1f0eba..fb89f5d 100644
--- a/lib/prop_attr.h
+++ b/lib/prop_attr.h
@@ -28,22 +28,38 @@
 #include "properties.h"
 #include "dia_xml.h"
 
+/*!
+ * \brief Property for LineStyle
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   LineStyle style;
   real dash;
 } LinestyleProperty;
 
+/*!
+ * \brief Property for _Arrow
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   Arrow arrow_data;
 } ArrowProperty;
 
+/*!
+ * \brief Property for _Color
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   Color color_data;
 } ColorProperty;
 
+/*!
+ * \brief Property for _DiaFont
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   DiaFont *font_data;
diff --git a/lib/prop_dict.h b/lib/prop_dict.h
index 891c365..1f059d4 100644
--- a/lib/prop_dict.h
+++ b/lib/prop_dict.h
@@ -29,9 +29,13 @@
 #include "properties.h"
 #include "dia_xml.h"
 
+/*!
+ * \brief Property for key=value storage
+ * \extends _Property
+ */
 typedef struct {
   Property common;
-  GHashTable *dict; /* subprops[i] is a GPtrArray of (Property *) */  
+  GHashTable *dict; /*!< subprops[i] is a GPtrArray of (Property *) */  
 } DictProperty;
 
 void prop_dicttypes_register(void);
diff --git a/lib/prop_geomtypes.h b/lib/prop_geomtypes.h
index a119dda..7376474 100644
--- a/lib/prop_geomtypes.h
+++ b/lib/prop_geomtypes.h
@@ -28,46 +28,82 @@
 #include "properties.h"
 #include "geometry.h"
 
+/*!
+ * \brief Property for real
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   real real_data;
 } RealProperty;
 
+/*!
+ * \brief Property for length
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   real length_data;
 } LengthProperty;
 
+/*!
+ * \brief Property for fontsize \sa _DiaFont
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   real fontsize_data;
 } FontsizeProperty;
 
+/*!
+ * \brief Property for _Point
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   Point point_data;
 } PointProperty;
 
+/*!
+ * \brief Property for an array of _Point
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   GArray *pointarray_data;
 } PointarrayProperty;
 
+/*!
+ * \brief Property for _BezPoint
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   BezPoint bezpoint_data;
 } BezPointProperty;
 
+/*!
+ * \brief Property for an array of _BezPoint
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   GArray *bezpointarray_data;
 } BezPointarrayProperty;
 
+/*!
+ * \brief Property for _Rectangle
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   Rectangle rect_data;
 } RectProperty;
 
+/*!
+ * \brief Property for end points
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   Point endpoints_data[2];
diff --git a/lib/prop_matrix.h b/lib/prop_matrix.h
index de976bf..814e21d 100644
--- a/lib/prop_matrix.h
+++ b/lib/prop_matrix.h
@@ -29,6 +29,10 @@
 #include "properties.h"
 #include "dia_xml.h"
 
+/*!
+ * \brief Property for _DiaMatrix
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   DiaMatrix *matrix; /* just the reference */
diff --git a/lib/prop_pixbuf.h b/lib/prop_pixbuf.h
index 9750aa2..1c08cf6 100644
--- a/lib/prop_pixbuf.h
+++ b/lib/prop_pixbuf.h
@@ -31,6 +31,10 @@
 #include "properties.h"
 #include "dia_xml.h"
 
+/*!
+ * \brief Property for Pixbuf
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   GdkPixbuf *pixbuf; /* just the reference */
diff --git a/lib/prop_sdarray.h b/lib/prop_sdarray.h
index 2c92877..9adeb1b 100644
--- a/lib/prop_sdarray.h
+++ b/lib/prop_sdarray.h
@@ -30,10 +30,14 @@
 #include "properties.h"
 #include "dia_xml.h"
 
+/*!
+ * \brief Property for an Array of _Property
+ * \extends _Property
+ */
 typedef struct {
-  Property common;
-  GPtrArray *ex_props; /* "example" properties. */
-  GPtrArray *records; /* subprops[i] is a GPtrArray of (Property *) */  
+  Property common;     /*!< inheritance */
+  GPtrArray *ex_props; /*!< "example" properties. */
+  GPtrArray *records;  /*!< subprops[i] is a GPtrArray of (Property *) */  
 } ArrayProperty;
 
 void prop_sdarray_register(void);
diff --git a/lib/prop_text.h b/lib/prop_text.h
index 189b716..ec8ad11 100644
--- a/lib/prop_text.h
+++ b/lib/prop_text.h
@@ -41,6 +41,10 @@ typedef struct {
   GList *string_list;
 } StringListProperty;
 
+/*!
+ * \brief Property for _Text including attributes
+ * \extends _Property
+ */
 typedef struct {
   Property common;
   gchar *text_data;
diff --git a/lib/properties.h b/lib/properties.h
index 65b0697..7aa0048 100644
--- a/lib/properties.h
+++ b/lib/properties.h
@@ -58,7 +58,14 @@ struct _PropWidgetAssoc {
   WIDGET *widget;
 };
 
-struct _PropDialog { /* This is to be treated as opaque ! */
+/*!
+ * \brief User interface representation of a set of standard properties
+ *
+ * This is to be treated as opaque !
+ *
+ * \ingroup StdProps
+ */
+struct _PropDialog {
   WIDGET *widget; /* widget of self */
 
   GPtrArray *props; /* of Property * */
@@ -89,24 +96,25 @@ struct _PropEventHandlerChain {
 
 /* PropertyType operations : */
 
-/* allocate a new, empty property. */
+/*! allocate a new, empty property. */
 typedef Property * (*PropertyType_New) (const PropDescription *pdesc,
                                     PropDescToPropPredicate reason);
-/* free the property -- must skip NULL values. */
+/*! free the property -- must skip NULL values. */
 typedef void (* PropertyType_Free)(Property *prop);
-/* Copy the data member of the property. -- must skip NULL values. */
+/*! Copy the data member of the property. -- must skip NULL values. */
 typedef Property *(* PropertyType_Copy)(Property *src);
-/* Create a widget capable of editing the property. Add it to the last container (or
+/*! Create a widget capable of editing the property. Add it to the last container (or
    add/remove container levels). */
 typedef WIDGET *(* PropertyType_GetWidget)(Property *prop,
                                        PropDialog *dialog);
 
-/* Get the value of the property into the widget */
+/*! Get the value of the property into the widget */
 typedef void (* PropertyType_ResetWidget)(const Property *prop, WIDGET *widget);
-/* Set the value of the property from the current value of the widget */
+/*! Set the value of the property from the current value of the widget */
 typedef void (* PropertyType_SetFromWidget)(Property *prop, WIDGET *widget);
-/* load/save a property */
+/*! load a property from XML node */
 typedef void (*PropertyType_Load)(Property *prop, AttributeNode attr, DataNode data, DiaContext *ctx);
+/*! save a property to XML node */
 typedef void (*PropertyType_Save)(Property *prop, AttributeNode attr);
 
 /* If a property descriptor can be merged with another 
@@ -118,21 +126,35 @@ typedef void (*PropertyType_SetFromOffset)(Property *prop,
                                          void *base, guint offset, guint offset2);
 typedef int (*PropertyType_GetDataSize)(Property *prop);
 
-
+/*!
+ * \brief Virtual function table for Property objects
+ *
+ * \ingroup StdProps
+ */
 struct _PropertyOps {
+  /*! Creating a new property from scratch */
   PropertyType_New  new_prop;
+  /*! Destroying the property */
   PropertyType_Free free;
+  /*! Cloning the property - making a deep copy */
   PropertyType_Copy copy;
+  /*! Loading the property from storage */
   PropertyType_Load load;
+  /*! Saving the property to storage */
   PropertyType_Save save;
+  /*! Delivering an editor / a viewer widget for the property */
   PropertyType_GetWidget get_widget;
+  /*! Initializing the widget from the property */
   PropertyType_ResetWidget reset_widget;
+  /*! Setting the property from the widget */
   PropertyType_SetFromWidget set_from_widget;
-
+  /*! Return true if multiple properties of the same type should be edited/set at once */
   PropertyType_CanMerge can_merge;
-  
+  /*! \protected Transfering data from the object to the property */
   PropertyType_GetFromOffset get_from_offset;
+  /*! \protected Transfering data from the property to the object */
   PropertyType_SetFromOffset set_from_offset;
+  /*! \protected Calculating the raw size of the property */
   PropertyType_GetDataSize get_data_size;
 };
 
@@ -203,9 +225,21 @@ typedef const gchar *PropertyType;
 
 /* **************************************************************** */
 
+/*!
+ * \brief Description of the property type
+ *
+ * Every property has it's own static property description.
+ *
+ * \ingroup StdProps
+ */
 struct _PropDescription {
+  /*! The name of the specific property. */
   const gchar *name;
+  /*! The property type - properties with same type should have the same name to allow
+   * editing them as one in a multiple object selection.
+   */
   PropertyType type;
+  /*! Combination of values from */
   guint flags;
   const gchar *description;
   const gchar *tooltip;
@@ -231,16 +265,19 @@ struct _PropDescription {
   const PropertyOps *ops;      
 };
 
-#define PROP_FLAG_VISIBLE   0x0001
-#define PROP_FLAG_DONT_SAVE 0x0002
-#define PROP_FLAG_DONT_MERGE 0x0004 /* in case group properties are edited */
-#define PROP_FLAG_NO_DEFAULTS 0x0008 /* don't edit this in defaults dlg. */
-#define PROP_FLAG_LOAD_ONLY 0x0010 /* for loading old formats */
-#define PROP_FLAG_STANDARD 0x0020 /* One of the default toolbox props */
-#define PROP_FLAG_MULTIVALUE 0x0040 /* Multiple values for prop in group */
-#define PROP_FLAG_WIDGET_ONLY 0x0080 /* only cosmetic property, no data */
-#define PROP_FLAG_OPTIONAL 0x0100 /* don't complain if it does not exist */
-#define PROP_FLAG_SELF_ONLY 0x0200 /* do not apply to object lists */
+/*! PropFlags */
+/*! @{ */
+#define PROP_FLAG_VISIBLE   0x0001 /*!< should be visible in an editor */
+#define PROP_FLAG_DONT_SAVE 0x0002 /*!< not to be saved at all */
+#define PROP_FLAG_DONT_MERGE 0x0004 /*!< in case group properties are edited */
+#define PROP_FLAG_NO_DEFAULTS 0x0008 /*!< don't edit this in defaults dialog */
+#define PROP_FLAG_LOAD_ONLY 0x0010 /*!< for loading old formats */
+#define PROP_FLAG_STANDARD 0x0020 /*!< one of the default toolbox props */
+#define PROP_FLAG_MULTIVALUE 0x0040 /*!< multiple values for prop in group */
+#define PROP_FLAG_WIDGET_ONLY 0x0080 /*!< only cosmetic property, no data */
+#define PROP_FLAG_OPTIONAL 0x0100 /*!< don't complain if it does not exist */
+#define PROP_FLAG_SELF_ONLY 0x0200 /*!< do not apply to object lists */
+/*! @} */
 
 typedef enum {PROP_UNION, PROP_INTERSECTION} PropMergeOption;
 
@@ -277,18 +314,22 @@ struct  _PropDescSArrayExtra {
   guint array_len;
 };
 
-
-/* ******************* */
-/* The Property itself */
-/* ******************* */ 
+/*!
+ * \brief Base class for all DiaObject properties
+ * \ingroup StdProps
+ */
 struct _Property {
+  /*! Calculated unique key for the name of the property */
   GQuark name_quark; 
+  /*! Calculated unique key for the type of the property */
   GQuark type_quark;
+  /*! Description of the property - almost alway constant (exception is Group) */
   const PropDescription *descr;
   PropEventData self_event_data;
   PropEventHandler event_handler;
-  PropDescToPropPredicate reason; /* why has this property been created from
-                                     the pdesc ? */
+  /*! why has this property been created from the pdesc ? */
+  PropDescToPropPredicate reason;
+  /*! property experience, e.g. loaded, \sa PropExperience */
   guint experience;       /* flags PXP_.... */
  
   const PropertyOps *ops;       /* points to common_prop_ops */
diff --git a/lib/textline.c b/lib/textline.c
index 6a03a03..65eb9a0 100644
--- a/lib/textline.c
+++ b/lib/textline.c
@@ -32,9 +32,11 @@ static void text_line_dirty_cache(TextLine *text_line);
 static void text_line_cache_values(TextLine *text_line);
 static void clear_layout_offset (TextLine *text_line);
 
-/** Sets this object to display a particular string.
+/*!
+ * \brief Sets this object to display a particular string.
  * @param text_line The object to change.
  * @param string The string to display.  This string will be copied.
+ * \memberof TextLine
  */
 void
 text_line_set_string(TextLine *text_line, const gchar *string)
@@ -51,9 +53,11 @@ text_line_set_string(TextLine *text_line, const gchar *string)
   }
 }
 
-/** Sets the font used by this object.
+/*!
+ * \brief Sets the font used by this object.
  * @param text_line The object to change.
  * @param font The font to use for displaying this object.
+ * \memberof TextLine
  */
 void
 text_line_set_font(TextLine *text_line, DiaFont *font)
@@ -69,10 +73,12 @@ text_line_set_font(TextLine *text_line, DiaFont *font)
   }
 }
 
-/** Sets the font height used by this object.
+/*!
+ * \brief Sets the font height used by this object.
  * @param text_line The object to change.
  * @param height The font height to use for displaying this object 
  * (in cm, from baseline to baseline)
+ * \memberof TextLine
  */
 void
 text_line_set_height(TextLine *text_line, real height)
@@ -83,10 +89,12 @@ text_line_set_height(TextLine *text_line, real height)
   }
 }
 
-/** Creates a new TextLine object from its components.
+/*!
+ * \brief Creates a new TextLine object from its components.
  * @param string the string to display
  * @param font the font to display the string with.
  * @param height the height of the font, in cm from baseline to baseline.
+ * \memberof TextLine
  */
 TextLine *
 text_line_new(const gchar *string, DiaFont *font, real height)
@@ -100,15 +108,21 @@ text_line_new(const gchar *string, DiaFont *font, real height)
   return text_line;
 }
 
+/*!
+ * \brief Make a deep copy of the given TextLine
+ * \memberof TextLine
+ */
 TextLine *
 text_line_copy(const TextLine *text_line)
 {
   return text_line_new(text_line->chars, text_line->font, text_line->height);
 }
 
-/** Destroy a text_line object, deallocating all memory used and unreffing
- * reffed objects.
+/*!
+ * \brief Destroy a text_line object
+ * This is deallocating all memory used and unreffing reffed objects.
  * @param text_line the object to kill.
+ * \memberof TextLine
  */
 void
 text_line_destroy(TextLine *text_line)
@@ -124,10 +138,14 @@ text_line_destroy(TextLine *text_line)
   g_free(text_line);
 }
 
-/** Calculate the bounding box size of this object.  Since a text object has no
+/*!
+ * \brief TextLine bounding box caclulation
+ *
+ * Calculate the bounding box size of this object.  Since a text object has no
  * position or alignment, this collapses to just a size. 
  * @param text_line
  * @param size A place to store the width and height of the text.
+ * \memberof TextLine
  */
 void
 text_line_calc_boundingbox_size(TextLine *text_line, Point *size)
@@ -177,11 +195,14 @@ text_line_get_descent(const TextLine *text_line)
   return text_line->descent;
 }
 
-/** Return the amount this text line would need to be shifted in order to
+/*!
+ * \brief Calculate TextLine adjustment for Alignment
+ *
+ * Return the amount this text line would need to be shifted in order to
  * implement the given alignment.
  * @param text_line a line of text
  * @param alignment how to align it.
- * @returns The amount (in diagram lengths) to shift the x positiion of
+ * @return The amount (in diagram lengths) to shift the x positiion of
  * rendering this such that it looks aligned when printed with x at the left.
  * Always a positive number.
  */
@@ -268,7 +289,10 @@ text_line_cache_values(TextLine *text_line)
   }
 }
 
-/** Adjust a line of glyphs to match the sizes stored in the TextLine
+/*!
+ * \brief Move glyphs to approximate a desired total width
+ *
+ * Adjust a line of glyphs to match the sizes stored in the TextLine
  * @param line The TextLine object that corresponds to the glyphs.
  * @param glyphs The one set of glyphs contained in layout created for
  * this TextLine during rendering.  The values in here will be changed.
diff --git a/lib/textline.h b/lib/textline.h
index b7405f1..7cc938d 100644
--- a/lib/textline.h
+++ b/lib/textline.h
@@ -18,16 +18,18 @@
 #ifndef TEXTLINE_H
 #define TEXTLINE_H
 
-/** The TextLine object is a single line of text with related information,
- * such as font and font size.  It can edited directly in the diagram.
- * 
- * TODO: Actually make it editable:)
- */
-
 #include <glib.h>
 #include "diatypes.h"
 #include "properties.h"
 
+/*!
+ * \brief Helper class to cache text drawing and related calculations
+ *
+ * The TextLine object is a single line of text with related information,
+ * such as font and font size.  It can (not) be edited directly in the diagram.
+ *
+ * TODO: Actually make it editable:)
+ */
 struct _TextLine {
   /* don't change these values directly, use the text_line_set* functions */
   



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]