• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

タグ
未設定

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

作図ソフト dia の改良版


コミットメタ情報

リビジョン98b5344f59b6a9467d94685a84fe4820b480e94d (tree)
日時2012-09-09 20:05:25
作者Hans Breuer <hans@breu...>
コミッターHans Breuer

ログメッセージ

[dox] Some documentation for plug-ins/(layout|python|shape|svg)

Using the same names e.g. \extends _DiaRenderer allows to couple
some PyDia 'inheritance' with the core objects.

変更サマリ

差分

--- a/plug-ins/layout/dia-graph.cpp
+++ b/plug-ins/layout/dia-graph.cpp
@@ -28,6 +28,10 @@
2828 #include <stdio.h>
2929 #include <vector>
3030
31+/*!
32+ * \brief A simple x,y coodinate
33+ * \ingroup LayoutPlugin
34+ */
3135 struct Point
3236 {
3337 double x;
@@ -35,6 +39,10 @@ struct Point
3539 Point (double _x, double _y) : x(_x), y(_y) {}
3640 };
3741
42+/*!
43+ * \brief Another node representation
44+ * \ingroup LayoutPlugin
45+ */
3846 struct Node
3947 {
4048 Point center;
@@ -44,9 +52,18 @@ struct Node
4452 };
4553
4654 typedef std::vector<Node> Nodes;
55+/*!
56+ * \brief The Edge object is just stroing bends here
57+ * \ingroup LayoutPlugin
58+ */
4759 typedef std::vector<Point> Edge;
4860 typedef std::vector<Edge> Edges;
4961
62+/*!
63+ * \brief Implementing the IGraph interface for simple layout algorithms
64+ *
65+ * \ingroup LayoutPlugin
66+ */
5067 class DiaGraph : public IGraph
5168 {
5269 public :
@@ -93,6 +110,11 @@ DiaGraph::AddEdge (int srcNode, int destNode, double* points, int len)
93110 return pos;
94111 }
95112
113+/*!
114+ * \brief Invoke the given layout algoritm
115+ *
116+ * \ingroup LayoutPlugin
117+ */
96118 IGraph::eResult
97119 DiaGraph::Layout (const char *module)
98120 {
--- a/plug-ins/layout/layout.cpp
+++ b/plug-ins/layout/layout.cpp
@@ -18,6 +18,14 @@
1818 * along with this program; if not, write to the Free Software
1919 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
2020 */
21+
22+/*!
23+ * \file layout.cpp - plugin for automatic diagram layout
24+ */
25+/*!
26+ * \defgroup LayoutPlugin
27+ * \ingroup Plugins
28+ */
2129 #include <config.h>
2230
2331 #include "intl.h"
@@ -188,6 +196,10 @@ _obj_set_bends (DiaObject *obj, std::vector<double>& coords)
188196
189197 typedef IGraph *(*GraphCreateFunc)();
190198
199+/*!
200+ * \brief Calback function invoking layout algorithms from Dia's menu
201+ * \ingroup LayoutPlugin
202+ */
191203 static ObjectChange *
192204 layout_callback (DiagramData *data,
193205 const gchar *filename,
--- a/plug-ins/layout/ogdf-simple.h
+++ b/plug-ins/layout/ogdf-simple.h
@@ -25,7 +25,7 @@
2525 * \brief Abstract graph interface to be fed by Dia
2626 *
2727 * This interface must not expose any allocation/deallocations and it shall
28- * not let pass any exceptions, because the consumer probaly can't catch them.
28+ * not let pass any exceptions, because the consumer probaly can't catch them.
2929 */
3030 class IGraph
3131 {
--- a/plug-ins/python/codegen.py
+++ b/plug-ins/python/codegen.py
@@ -41,6 +41,10 @@ class Klass :
4141 def SetInheritance_type(self, inheritance_type):
4242 self.inheritance_type = inheritance_type
4343
44+##
45+# \brief Base class of all the code generators
46+# \extends _DiaPyRenderer
47+# \ingroup PyDia
4448 class ObjRenderer :
4549 "Implements the Object Renderer Interface and transforms diagram into its internal representation"
4650 def __init__ (self) :
@@ -115,6 +119,8 @@ class ObjRenderer :
115119 self.attributes = []
116120 self.operations = []
117121
122+##
123+# \brief Generate a Python source file from an UML class diagram
118124 class PyRenderer(ObjRenderer) :
119125 def __init__(self) :
120126 ObjRenderer.__init__(self)
@@ -147,6 +153,8 @@ class PyRenderer(ObjRenderer) :
147153 f.close()
148154 ObjRenderer.end_render(self)
149155
156+##
157+# \brief Generate C++ source files from an UML class diagram
150158 class CxxRenderer(ObjRenderer) :
151159 def __init__(self) :
152160 ObjRenderer.__init__(self)
@@ -210,7 +218,7 @@ class CxxRenderer(ObjRenderer) :
210218 f.close()
211219 ObjRenderer.end_render(self)
212220
213-# #############################################################################
221+##
214222 # JsRenderer: export Dia UML diagram to Object style ECMA5 javascript code.
215223 #
216224 # Features:
@@ -279,7 +287,7 @@ class JsRenderer(ObjRenderer) :
279287 f.close()
280288 ObjRenderer.end_render(self)
281289
282-# #############################################################################
290+##
283291 # PascalRenderer: export Dia UML diagram to Object Pascal (Free Pascal, Delphi)
284292 #
285293 # Please follow some "drawing guidelines" and "naming conventions" so that the
@@ -337,7 +345,6 @@ class JsRenderer(ObjRenderer) :
337345 # - no "Attributes" for interface definitions, but properties are
338346 # allowed
339347 # - default values for method parameters must be the last parameters
340-
341348 class PascalRenderer(ObjRenderer) :
342349 def __init__(self) :
343350 ObjRenderer.__init__(self)
@@ -456,28 +463,28 @@ class PascalRenderer(ObjRenderer) :
456463 f.close()
457464 ObjRenderer.end_render(self)
458465
459-# ######################################################################
466+##
460467 # JavaRenderer: export Dia UML diagram to Java
468+#
461469 # improved by: Manuel Arguelles
462470 #
463471 # Features:
464472 # * Comments for classes, attributes, methods and methods parameters are
465473 # supported. Uses a comment style javaDoc-like. The comments are
466-# divided into lines if they exceed 79 characters.
474+# divided into lines if they exceed 79 characters.
467475 # * Splits the classes in separate files. Creates a file that contains
468476 # the dia/codegen.py firm :)
469477 #
470478 # Fixes:
471479 # * Visibilities "private" and "protected" were reversed.
472-# * Comments for classes, attributes, methods and methods parameters.
480+# * Comments for classes, attributes, methods and methods parameters.
473481 # * Comments are divided into lines if they exceed 79 characters.
474482 # * Splits the classes in separate files.
475483 # * Not write "NULL" in empty comments.
476484 # * Writes the default values of the arguments of the methods.
477485 # * Makes public all the classes and interfaces.
478486 # * Not write "static" in all the methods.
479-# ######################################################################
480-
487+#
481488 class JavaRenderer(ObjRenderer) :
482489 def __init__(self) :
483490 ObjRenderer.__init__(self)
@@ -487,7 +494,6 @@ class JavaRenderer(ObjRenderer) :
487494
488495 mainfile = open(self.filename, "w")
489496 mainfile.write("/* Generated by dia/codegen.py\n *\n * Generated files:\n")
490- #mainfile.close()
491497 for name, klass in self.klasses.iteritems() :
492498 # splits the classes in separate files
493499 classfile = self.filename[:self.filename.rfind("/")+1] + name.capitalize() + ".java"
@@ -585,8 +591,11 @@ class JavaRenderer(ObjRenderer) :
585591 mainfile.close()
586592 ObjRenderer.end_render(self)
587593
594+##
588595 # PhpRenderer: export Dia UML diagram to PHP
596+#
589597 # Added by: Steven Garcia
598+#
590599 # This is similar to the Java renderer except for PHP
591600 # Added class scope (static) support
592601 class PhpRenderer(ObjRenderer) :
--- a/plug-ins/python/diasvg.py
+++ b/plug-ins/python/diasvg.py
@@ -1,8 +1,6 @@
11 # PyDia SVG Renderer
22 # Copyright (c) 2003, 2004 Hans Breuer <hans@breuer.org>
33 #
4-# A full blown SVG(Z) renderer. As of this writing less bugs in the output
5-# than the Dia SVG renderer written in C
64
75 # This program is free software; you can redistribute it and/or modify
86 # it under the terms of the GNU General Public License as published by
@@ -20,6 +18,15 @@
2018
2119 import sys, string, dia
2220
21+##
22+# \brief The second SvgRenderer implemntation for Dia
23+#
24+# A full blown SVG(Z) renderer. As of the initial writing less bugs in the output
25+# than the Dia SVG renderer written in C. Nowadays the _SvgRenderer is on par,
26+# but this one is still easier to extend and experiment with.
27+#
28+# \extends _DiaPyRenderer
29+# \ingroup ExportFilters
2330 class SvgRenderer :
2431 def __init__ (self) :
2532 self.f = None
--- a/plug-ins/python/dot2dia.py
+++ b/plug-ins/python/dot2dia.py
@@ -15,7 +15,10 @@
1515 # along with this program; if not, write to the Free Software
1616 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
1717
18-# translate dot ( http://www.graphviz.org/ ) to Dia format
18+##
19+# \file dot2dia.py \brief translate dot ( http://www.graphviz.org/ ) to Dia format
20+# \ingroup ImportFilters
21+
1922 import re, string, sys
2023
2124 # FIXME: keywords are case indepentend
@@ -47,6 +50,8 @@ def DictFromString (s) :
4750 d[m.group ("key")] = StripQuotes(m.group ("val"))
4851 return d
4952
53+##
54+# \brief Accumulating information with _DiaObject
5055 class Object :
5156 """ will end as a Dia Object """
5257 def __init__ (self, typename, parms) :
@@ -57,7 +62,8 @@ class Object :
5762 return float(self.parms['fontsize']) * cmPoints
5863 except :
5964 return 0.6
60-
65+##
66+# \brief The nodes of the graph - finally represented as _Ellipse
6167 class Node(Object) :
6268 def __init__ (self, name, parms) :
6369 Object.__init__(self, "Standard - Ellipse", parms)
@@ -82,6 +88,8 @@ class Node(Object) :
8288 print "No size on '%s'" % (self.name,)
8389 return w,h
8490
91+##
92+# \brief The edges of the graph - finally represented as _Bezierline
8593 class Edge(Object) :
8694 def __init__ (self, src, dest, parms) :
8795 Object.__init__(self, "Standard - BezierLine", parms)
@@ -140,6 +148,8 @@ def MergeParms (d, extra) :
140148 if not d.has_key(k) :
141149 d[k] = extra[k]
142150
151+##
152+# \brief Parsing the given dot file
143153 def Parse(sFile) :
144154 f = open(sFile, 'r')
145155 s = f.read()
@@ -179,6 +189,13 @@ def Parse(sFile) :
179189 edges.append(Edge(StripQuotes(m.group("n1")), StripQuotes(m.group("n2")), DictFromString(m.group("dict"))))
180190 return [nodes, edges]
181191
192+##
193+# \brief Adding a label for the edges
194+#
195+# This function could be improved if Dia would allow to
196+# attach labels to arbitrary objects. For the time being
197+# only the initial postion does match, but relayouting the
198+# graph in Dia will loose the position
182199 def AddLabel (layer, pos, label, fontsize, center=0) :
183200 """ create a Text object an put it into the layer """
184201 textType = dia.get_object_type("Standard - Text")
@@ -191,6 +208,8 @@ def AddLabel (layer, pos, label, fontsize, center=0) :
191208 obj.properties["text_vert_alignment"] = 2
192209 layer.add_object(obj)
193210
211+##
212+# \brief Callback registered for the ImportFilter
194213 def ImportFile (sFile, diagramData) :
195214 """ read the dot file and create diagram objects """
196215 nodes, edges = Parse(sFile)
--- a/plug-ins/python/export-render.py
+++ b/plug-ins/python/export-render.py
@@ -2,9 +2,19 @@ import sys, dia
22
33 # sys.path.insert(0, 'd:/graph/dia/dia')
44
5+##
6+# \brief A simple example renderer implemented in Python
7+# \extends _DiaPyRenderer
8+# \ingroup PyDia
59 class DumpRenderer :
10+ ## \brief Constructor
611 def __init__ (self) :
712 pass
13+ ## \brief Start rendering
14+ # For non-interactive renderers it is guaranteed that this function is
15+ # called before every drawing function. It should be used to clear the
16+ # state from previous use, because the renderer class gets only created
17+ # once per Dia session
818 def begin_render (self, data, filename) :
919 # DiagramData
1020 self.f = open(filename, "w")
@@ -15,70 +25,104 @@ class DumpRenderer :
1525 #self.f.write("grid .width: " + str(data.grid.width) \
1626 # + " .height" + str(data.grid.height) \
1727 # + "visible: " + str(data.visible) + "\n")
28+ ## \brief End rendering
29+ # For non-interactive renderers it is guaranteed that all drawing
30+ # is finished with this call
1831 def end_render (self) :
1932 self.f.close()
33+ ## \brief Remember the line width
2034 def set_linewidth (self, width) :
2135 self.line_width = width
36+ ## \brief Remember the line caps
2237 def set_linecaps (self, mode) :
2338 self.line_caps = mode
39+ ## \brief Remember the line join
2440 def set_linejoin (self, mode) :
2541 self.line_join = mode
42+ ## \brief Remember the line style
2643 def set_linestyle (self, style) :
2744 self.line_style = style
45+ ## \brief Remember the dash length
2846 def set_dashlength (self, length) :
2947 self.dash_length = length
48+ ## \brief Remember the fill style
3049 def set_fillstyle (self, style) :
3150 self.fill_style = style
51+ ## \brief Remember the font
3252 def set_font (self, font, size) :
3353 self.font = font
54+ ## \brief Draw a straight line from start to end with color
55+ # @param start A point in diagram coordinate system
56+ # @param end A point in diagram coordinate system
57+ # @param color The color to use for the line
58+ # The addtional paramters needed for the drawing are given
59+ # by one of the set_*() function above
3460 def draw_line (self, start, end, color) :
3561 self.f.write("draw_line:" + str(start) + str(end) + str(color) + "\n")
62+ ## \brief Draw a polyline
63+ # @param points An array of points in the diagram coordinate system
64+ # @param color The color to use for the line
3665 def draw_polyline (self, points, color) :
3766 self.f.write("draw_polyline: " + str(color) + "\n")
3867 for pt in points :
3968 self.f.write ("\t" + str(pt) + "\n")
69+ ## \brief Draw a polygon
70+ # @param points An array of points in the diagram coordinate system
71+ # @param color The color to use for the line
4072 def draw_polygon (self, points, color) :
4173 self.f.write("draw_polygon: " + str(color) + "\n")
4274 for pt in points :
4375 self.f.write ("\t" + str(pt) + "\n")
76+ ## \brief Fill a polygon
4477 def fill_polygon (self, points, color) :
4578 self.f.write("fill_polygon: " + str(color) + "\n")
4679 for pt in points :
4780 self.f.write ("\t" + str(pt) + "\n")
81+ ## \brief Draw a rectangle
4882 def draw_rect (self, rect, color) :
4983 self.f.write("draw_rect: " + str(rect) + str(color) + "\n")
84+ ## \brief Fill a rectangle
5085 def fill_rect (self, rect, color) :
5186 self.f.write("fill_rect: " + str(rect) + str(color) + "\n")
87+ ## \brief Draw an arc
5288 def draw_arc (self, center, width, height, angle1, angle2, color) :
5389 self.f.write("draw_arc: " + str(center) + ";" \
5490 + str(width) + "x" + str(height) + ";" \
5591 + str(angle1) + "," + str(angle2) + ";" + str(color) + "\n")
92+ ## \brief Fill an arc
5693 def fill_arc (self, center, width, height, angle1, angle2, color) :
5794 self.f.write("fill_arc: " + str(center) + ";" \
5895 + str(width) + "x" + str(height) + ";" \
5996 + str(angle1) + "," + str(angle2) + ";" + str(color) + "\n")
97+ ## \brief Draw an ellipse
6098 def draw_ellipse (self, center, width, height, color) :
6199 self.f.write("draw_ellipse: " + str(center) \
62100 + str(width) + "x" +str(height) + ";" + str(color) + "\n")
101+ ## \brief Fill an ellipse
63102 def fill_ellipse (self, center, width, height, color) :
64103 self.f.write("fill_ellipse: " + str(center) \
65104 + str(width) + "x" +str(height) + ";" + str(color) + "\n")
105+ ## \brief Draw a bezier line
66106 def draw_bezier (self, bezpoints, color) :
67107 self.f.write("draw_bezier: " + str(color) + "\n")
68108 for pt in bezpoints :
69109 self.f.write ("\t" + str(pt) + "\n")
110+ ## \brief Fill a bezier shape
70111 def fill_bezier (self, bezpoints, color) :
71112 self.f.write("fill_bezier: " + str(color) + "\n")
72113 for pt in bezpoints :
73114 self.f.write ("\t" + str(pt) + "\n")
115+ ## \brief Draw a string
74116 def draw_string (self, text, pos, alignment, color) :
75117 self.f.write("draw_string: [" + text + "]; " + str(pos) \
76118 + str(alignment) + "; " +str(color))
119+ ## \brief Draw an image
77120 def draw_image (self, point, width, height, image) :
78121 self.f.write("draw_image: " + str(point) + str(width) + "x" +str(height) \
79122 + " " + image.filename + "\n")
80123 self.f.write("<rgb_data>" + image.rgb_data + "</rgb_data>")
81124 self.f.write("<mask_data>" + image.mask_data + "</mask_data>")
82125
126+## \brief Register the renderer with Dia's export system
83127 # dia-python keeps a reference to the renderer class and uses it on demand
84128 dia.register_export ("PyDia Render Export", "diapyr", DumpRenderer())
--- a/plug-ins/python/pydia-render.c
+++ b/plug-ins/python/pydia-render.c
@@ -17,6 +17,16 @@
1717 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
1818 */
1919
20+/*!
21+ * \file pydia-render.c Wrapper to implement _DiaRenderer in Python
22+ *
23+ * The PyDiaRenderer is currently defined in Python only. The
24+ * DiaPyRenderer is using it's interface to map the gobject
25+ * DiaRenderer to it. A next step could be to let Python code
26+ * directly inherit from DiaPyRenderer.
27+ * To do that probably some code from pygtk.gobject needs to
28+ * be borrowed/shared
29+ */
2030 #include <config.h>
2131
2232 #include <Python.h>
@@ -38,14 +48,6 @@
3848 #include "pydia-error.h"
3949 #include "pydia-render.h"
4050
41-/*
42- * The PyDiaRenderer is currently defined in Python only. The
43- * DiaPyRenderer is using it's interface to map the gobject
44- * DiaRenderer to it. A next step could be to let Python code
45- * directly inherit from DiaPyRenderer.
46- * To do that probably some code from pygtk.gobject needs to
47- * be borrowed/shared
48- */
4951 #include "diarenderer.h"
5052
5153 #define DIA_TYPE_PY_RENDERER (dia_py_renderer_get_type ())
@@ -54,11 +56,23 @@
5456 #define DIA_IS_PY_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DIA_TYPE_PY_RENDERER))
5557 #define DIA_PY_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DIA_TYPE_PY_RENDERER, DiaPyRendererClass))
5658
57-GType dia_py_renderer_get_type (void) G_GNUC_CONST;
58-
5959 typedef struct _DiaPyRenderer DiaPyRenderer;
6060 typedef struct _DiaPyRendererClass DiaPyRendererClass;
6161
62+/*!
63+ * \brief Wrapper class to allow renderer implementation in Python
64+ *
65+ * The DiaPyRenderer class serves basically two use cases.
66+ * - the assumed to be obvious one is to implement a drawing exporter
67+ * in Python. See diasvg.SvgRenderer for an example.
68+ * - the other use case is implemented with codegen.ObjRenderer
69+ * which does not deal with graphical information at all, but instead
70+ * takes the _DiagramData object given in begin_render() and iterates
71+ * over layers and objects to extract textual information.
72+ *
73+ * \extends _DiaRenderer
74+ * \ingroup PyDia
75+ */
6276 struct _DiaPyRenderer
6377 {
6478 DiaRenderer parent_instance;
@@ -77,8 +91,20 @@ struct _DiaPyRendererClass
7791 #define PYDIA_RENDERER(renderer) \
7892 (DIA_PY_RENDERER(renderer)->self)
7993
80-/*
81- * Members overwritable by Python scripts
94+/* Moved here to avoid Doxygen picking up the wrong definitions */
95+GType dia_py_renderer_get_type (void) G_GNUC_CONST;
96+
97+/*!
98+ * \brief Begin rendering with Python
99+ *
100+ * @param renderer Explicit this pointer
101+ * @param update The rectangle to update or NULL for everything
102+ *
103+ * The Python side of the begin_render() method has a different signature.
104+ * It gets passed in a PyDia wrapped _DiagramData object and a filename
105+ * to store to.
106+ *
107+ * \memberof _DiaPyRenderer
82108 */
83109 static void
84110 begin_render(DiaRenderer *renderer, const Rectangle *update)
@@ -104,6 +130,11 @@ begin_render(DiaRenderer *renderer, const Rectangle *update)
104130 }
105131 }
106132
133+/*!
134+ * \brief Finalize drawing/exporting
135+ *
136+ * \memberof _DiaPyRenderer
137+ */
107138 static void
108139 end_render(DiaRenderer *renderer)
109140 {
@@ -126,6 +157,13 @@ end_render(DiaRenderer *renderer)
126157 setlocale(LC_NUMERIC, DIA_PY_RENDERER(renderer)->old_locale);
127158 }
128159
160+/*!
161+ * \brief Set linewidth for later use
162+ *
163+ * Optional on the PyDia side.
164+ *
165+ * \memberof _DiaPyRenderer
166+ */
129167 static void
130168 set_linewidth(DiaRenderer *renderer, real linewidth)
131169 {
@@ -148,6 +186,13 @@ set_linewidth(DiaRenderer *renderer, real linewidth)
148186 PyErr_Clear();
149187 }
150188
189+/*!
190+ * \brief Set linecaps for later use
191+ *
192+ * Optional on the PyDia side.
193+ *
194+ * \memberof _DiaPyRenderer
195+ */
151196 static void
152197 set_linecaps(DiaRenderer *renderer, LineCaps mode)
153198 {
@@ -181,6 +226,13 @@ set_linecaps(DiaRenderer *renderer, LineCaps mode)
181226 PyErr_Clear();
182227 }
183228
229+/*!
230+ * \brief Set linejoin for later use
231+ *
232+ * Optional on the PyDia side.
233+ *
234+ * \memberof _DiaPyRenderer
235+ */
184236 static void
185237 set_linejoin(DiaRenderer *renderer, LineJoin mode)
186238 {
@@ -214,6 +266,13 @@ set_linejoin(DiaRenderer *renderer, LineJoin mode)
214266 PyErr_Clear();
215267 }
216268
269+/*!
270+ * \brief Set linestyle for later use
271+ *
272+ * Optional on the PyDia side.
273+ *
274+ * \memberof _DiaPyRenderer
275+ */
217276 static void
218277 set_linestyle(DiaRenderer *renderer, LineStyle mode)
219278 {
@@ -252,6 +311,13 @@ set_linestyle(DiaRenderer *renderer, LineStyle mode)
252311 PyErr_Clear();
253312 }
254313
314+/*!
315+ * \brief Set dash length for later use
316+ *
317+ * Optional on the PyDia side.
318+ *
319+ * \memberof _DiaPyRenderer
320+ */
255321 static void
256322 set_dashlength(DiaRenderer *renderer, real length)
257323 {
@@ -274,6 +340,13 @@ set_dashlength(DiaRenderer *renderer, real length)
274340 PyErr_Clear();
275341 }
276342
343+/*!
344+ * \brief Set fillstyle for later use
345+ *
346+ * Optional on the PyDia side.
347+ *
348+ * \memberof _DiaPyRenderer
349+ */
277350 static void
278351 set_fillstyle(DiaRenderer *renderer, FillStyle mode)
279352 {
@@ -303,6 +376,13 @@ set_fillstyle(DiaRenderer *renderer, FillStyle mode)
303376 PyErr_Clear();
304377 }
305378
379+/*!
380+ * \brief Set font for later use
381+ *
382+ * Optional on the PyDia side.
383+ *
384+ * \memberof _DiaPyRenderer
385+ */
306386 static void
307387 set_font(DiaRenderer *renderer, DiaFont *font, real height)
308388 {
@@ -330,6 +410,34 @@ set_font(DiaRenderer *renderer, DiaFont *font, real height)
330410
331411 static gpointer parent_class = NULL;
332412
413+/*!
414+ * \brief Draw object
415+ *
416+ * Optional on the PyDia side. If not implemented the base class method
417+ * will be called.
418+ *
419+ * Intercepting this method on the Python side allows to create per
420+ * object information in the drawing. It is also necessary if the PyDia
421+ * renderer should support transformations.
422+ *
423+ * If implementing a drawing exposrt filter and overwriting draw_object()
424+ * the following code shall be used. Otherwise no draw/fill method will
425+ * be called at all.
426+ *
427+ * \code
428+ # don't forget to render the object
429+ object.draw (self)
430+ * \endcode
431+ *
432+ * Not calling the object draw method is only usefull when a non-drawing
433+ * export - e.g. code generation \sa codegen.py - is implemented.
434+ *
435+ * @param renderer Self
436+ * @param object The object to draw
437+ * @param matrix The transformation matrix to use or NULL for no transformation
438+ *
439+ * \memberof _DiaPyRenderer
440+ */
333441 static void
334442 draw_object (DiaRenderer *renderer, DiaObject *object, DiaMatrix *matrix)
335443 {
@@ -365,6 +473,14 @@ draw_object (DiaRenderer *renderer, DiaObject *object, DiaMatrix *matrix)
365473 }
366474 }
367475
476+/*!
477+ * \brief Draw line
478+ *
479+ * Not optional on the PyDia side. If not implemented a runtime warning
480+ * will be generated when called.
481+ *
482+ * \memberof _DiaPyRenderer
483+ */
368484 static void
369485 draw_line(DiaRenderer *renderer,
370486 Point *start, Point *end,
@@ -401,6 +517,13 @@ draw_line(DiaRenderer *renderer,
401517 }
402518 }
403519
520+/*!
521+ * \brief Draw polyline
522+ *
523+ * Optional on the PyDia side. If not implemented fallback to base class member.
524+ *
525+ * \memberof _DiaPyRenderer
526+ */
404527 static void
405528 draw_polyline(DiaRenderer *renderer,
406529 Point *points, int num_points,
@@ -433,6 +556,13 @@ draw_polyline(DiaRenderer *renderer,
433556 }
434557 }
435558
559+/*!
560+ * \brief Draw polygon
561+ *
562+ * Optional on the PyDia side. If not implemented fallback to base class member.
563+ *
564+ * \memberof _DiaPyRenderer
565+ */
436566 static void
437567 draw_polygon(DiaRenderer *renderer,
438568 Point *points, int num_points,
@@ -465,6 +595,14 @@ draw_polygon(DiaRenderer *renderer,
465595 }
466596 }
467597
598+/*!
599+ * \brief Fill polygon
600+ *
601+ * Not optional on the PyDia side. If not implemented a runtime warning
602+ * will be generated when called.
603+ *
604+ * \memberof _DiaPyRenderer
605+ */
468606 static void
469607 fill_polygon(DiaRenderer *renderer,
470608 Point *points, int num_points,
@@ -563,6 +701,14 @@ draw_rounded_rect(DiaRenderer *renderer,
563701 }
564702
565703
704+/*!
705+ * \brief Fill rectangle
706+ *
707+ * Not optional on the PyDia side. If not implemented a runtime warning
708+ * will be generated when called.
709+ *
710+ * \memberof _DiaPyRenderer
711+ */
566712 static void
567713 fill_rect(DiaRenderer *renderer,
568714 Point *ul_corner, Point *lr_corner,
@@ -667,6 +813,14 @@ draw_arc(DiaRenderer *renderer,
667813 }
668814 }
669815
816+/*!
817+ * \brief Fill arc
818+ *
819+ * Not optional on the PyDia side. If not implemented a runtime warning
820+ * will be generated when called.
821+ *
822+ * \memberof _DiaPyRenderer
823+ */
670824 static void
671825 fill_arc(DiaRenderer *renderer,
672826 Point *center,
@@ -705,6 +859,14 @@ fill_arc(DiaRenderer *renderer,
705859 }
706860 }
707861
862+/*!
863+ * \brief Draw ellipse
864+ *
865+ * Not optional on the PyDia side. If not implemented a runtime warning
866+ * will be generated when called.
867+ *
868+ * \memberof _DiaPyRenderer
869+ */
708870 static void
709871 draw_ellipse(DiaRenderer *renderer,
710872 Point *center,
@@ -740,6 +902,14 @@ draw_ellipse(DiaRenderer *renderer,
740902 }
741903 }
742904
905+/*!
906+ * \brief Fill ellipse
907+ *
908+ * Not optional on the PyDia side. If not implemented a runtime warning
909+ * will be generated when called.
910+ *
911+ * \memberof _DiaPyRenderer
912+ */
743913 static void
744914 fill_ellipse(DiaRenderer *renderer,
745915 Point *center,
@@ -838,6 +1008,14 @@ fill_bezier(DiaRenderer *renderer,
8381008 }
8391009 }
8401010
1011+/*!
1012+ * \brief Draw string
1013+ *
1014+ * Not optional on the PyDia side. If not implemented a runtime warning
1015+ * will be generated when called.
1016+ *
1017+ * \memberof _DiaPyRenderer
1018+ */
8411019 static void
8421020 draw_string(DiaRenderer *renderer,
8431021 const char *text,
@@ -884,6 +1062,14 @@ draw_string(DiaRenderer *renderer,
8841062 }
8851063 }
8861064
1065+/*!
1066+ * \brief Draw image
1067+ *
1068+ * Not optional on the PyDia side. If not implemented a runtime warning
1069+ * will be generated when called.
1070+ *
1071+ * \memberof _DiaPyRenderer
1072+ */
8871073 static void
8881074 draw_image(DiaRenderer *renderer,
8891075 Point *point,
--- a/plug-ins/shape/shape-export.c
+++ b/plug-ins/shape/shape-export.c
@@ -71,11 +71,14 @@ G_BEGIN_DECLS
7171 #define SHAPE_IS_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHAPE_TYPE_RENDERER))
7272 #define SHAPE_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHAPE_TYPE_RENDERER, ShapeRendererClass))
7373
74-GType shape_renderer_get_type (void) G_GNUC_CONST;
75-
7674 typedef struct _ShapeRenderer ShapeRenderer;
7775 typedef struct _ShapeRendererClass ShapeRendererClass;
7876
77+/*!
78+ * \brief Shape export for use as \ref Shapes
79+ *
80+ * \extends _DiaSvgRenderer
81+ */
7982 struct _ShapeRenderer
8083 {
8184 DiaSvgRenderer parent_instance;
@@ -102,8 +105,8 @@ static void draw_line(DiaRenderer *self,
102105 Color *line_colour);
103106 static void
104107 draw_object(DiaRenderer *self,
105- DiaObject *object,
106- DiaMatrix *matrix);
108+ DiaObject *object,
109+ DiaMatrix *matrix);
107110 static void draw_polyline(DiaRenderer *self,
108111 Point *points, int num_points,
109112 Color *line_colour);
@@ -128,6 +131,9 @@ static void add_ellipse_connection_points(ShapeRenderer *renderer,
128131 Point *center,
129132 real width, real height);
130133
134+/* Moved to reduce confusion of Doxygen */
135+GType shape_renderer_get_type (void) G_GNUC_CONST;
136+
131137 static DiaSvgRenderer *
132138 new_shape_renderer(DiagramData *data, const char *filename)
133139 {
--- a/plug-ins/svg/render_svg.c
+++ b/plug-ins/svg/render_svg.c
@@ -55,16 +55,20 @@ G_BEGIN_DECLS
5555 #define SVG_IS_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SVG_TYPE_RENDERER))
5656 #define SVG_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SVG_TYPE_RENDERER, SvgRendererClass))
5757
58-GType svg_renderer_get_type (void) G_GNUC_CONST;
59-
6058 typedef struct _SvgRenderer SvgRenderer;
6159 typedef struct _SvgRendererClass SvgRendererClass;
6260
61+/*!
62+ * \brief Svg renderer written in C
63+ *
64+ * \extends _DiaSvgRenderer
65+ * \bug Doxygen chokes on this file and simply ignores dox after parents
66+ */
6367 struct _SvgRenderer
6468 {
6569 DiaSvgRenderer parent_instance;
6670
67- /* track the parents while grouping in draw_object() */
71+ /*! track the parents while grouping in draw_object() */
6872 GQueue *parents;
6973 };
7074
@@ -75,6 +79,9 @@ struct _SvgRendererClass
7579
7680 G_END_DECLS
7781
82+/* Moved because it disturbs Doxygen */
83+GType svg_renderer_get_type (void) G_GNUC_CONST;
84+
7885 static DiaSvgRenderer *new_svg_renderer(DiagramData *data, const char *filename);
7986
8087 static void draw_object (DiaRenderer *renderer,
@@ -182,7 +189,15 @@ svg_renderer_class_init (SvgRendererClass *klass)
182189 renderer_class->draw_text_line = draw_text_line;
183190 }
184191
185-
192+/*!
193+ * \brief Cration and intialization of the SvgRenderer
194+ *
195+ * Using the same base class as the Shape renderer, but with slightly
196+ * different parameters. Here we want to be as compatible as feasible
197+ * with the SVG specification to support proper diagram exchage.
198+ *
199+ * \memberof SvgRenderer
200+ */
186201 static DiaSvgRenderer *
187202 new_svg_renderer(DiagramData *data, const char *filename)
188203 {
@@ -234,15 +249,19 @@ new_svg_renderer(DiagramData *data, const char *filename)
234249 return renderer;
235250 }
236251
252+/*!
253+ * \brief Wrap every object in \<g\>\</g\> and apply transformation
254+ *
255+ * We could try to be smart and count the objects we using for the object.
256+ * If it is only one the grouping is superfluous and should be removed.
257+ *
258+ * \memberof ScgRenderer
259+ */
237260 static void
238261 draw_object(DiaRenderer *self,
239262 DiaObject *object,
240263 DiaMatrix *matrix)
241264 {
242- /* wrap in <g></g>
243- * We could try to be smart and count the objects we using for the object.
244- * If it is only one the grouping is superfluous and should be removed.
245- */
246265 DiaSvgRenderer *renderer = DIA_SVG_RENDERER (self);
247266 SvgRenderer *svg_renderer = SVG_RENDERER (self);
248267 int n_children = 0;
@@ -278,6 +297,10 @@ draw_object(DiaRenderer *self,
278297 }
279298 }
280299
300+/*!
301+ * \brief creation of rectangles with corner radius
302+ * \memberof SvgRenderer
303+ */
281304 static void
282305 draw_rounded_rect(DiaRenderer *self,
283306 Point *ul_corner, Point *lr_corner,
@@ -305,6 +328,10 @@ draw_rounded_rect(DiaRenderer *self,
305328 xmlSetProp(node, (const xmlChar *)"ry", (xmlChar *) buf);
306329 }
307330
331+/*!
332+ * \brief creation of filled rectangles with corner radius
333+ * \memberof SvgRenderer
334+ */
308335 static void
309336 fill_rounded_rect(DiaRenderer *self,
310337 Point *ul_corner, Point *lr_corner,
@@ -401,6 +428,14 @@ node_set_text_style (xmlNodePtr node,
401428 g_free(style);
402429 }
403430
431+/*!
432+ * \brief Support rendering of raw text
433+ *
434+ * This is the only function in the renderer interface using the
435+ * font passed in by set_font() method.
436+ *
437+ * \memberof SvgRenderer
438+ */
404439 static void
405440 draw_string(DiaRenderer *self,
406441 const char *text,
@@ -421,6 +456,10 @@ draw_string(DiaRenderer *self,
421456 xmlSetProp(node, (xmlChar *)"y", (xmlChar *)d_buf);
422457 }
423458
459+/*!
460+ * \brief Support rendering of the _TextLine object
461+ * \memberof SvgRenderer
462+ */
424463 static void
425464 draw_text_line(DiaRenderer *self, TextLine *text_line,
426465 Point *pos, Alignment alignment, Color *colour)
@@ -445,6 +484,15 @@ draw_text_line(DiaRenderer *self, TextLine *text_line,
445484 xmlSetProp(node, (const xmlChar*)"textLength", (xmlChar *) d_buf);
446485 }
447486
487+/*!
488+ * \brief multi-line text creation
489+ *
490+ * The most high-level member function for text support. Still the
491+ * others have to be implemented because some _DiaObject dimplementations
492+ * use the more low-level variants.
493+ *
494+ * \memberof SvgRenderer
495+ */
448496 static void
449497 draw_text (DiaRenderer *self, Text *text)
450498 {
@@ -477,6 +525,10 @@ draw_text (DiaRenderer *self, Text *text)
477525 }
478526 }
479527
528+/*!
529+ * \brief Callback function registered for export
530+ * \ingroup ExportFilters
531+ */
480532 static gboolean
481533 export_svg(DiagramData *data, DiaContext *ctx,
482534 const gchar *filename, const gchar *diafilename,