]> granicus.if.org Git - graphviz/commitdiff
Hook for recursion in aginit.
authornorth <devnull@localhost>
Tue, 19 Jan 2010 02:22:54 +0000 (02:22 +0000)
committernorth <devnull@localhost>
Tue, 19 Jan 2010 02:22:54 +0000 (02:22 +0000)
lib/cgraph/cgraph.3
lib/cgraph/main.c
lib/cgraph/rec.c

index 8a2c8175463fed736b5f92b741755d99ba55c696..b903735d245dc6183b3685b71021719cb7ec3566 100644 (file)
@@ -324,6 +324,9 @@ Records are created and managed by Libcgraph. A programmer must
 explicitly attach them to the objects in a graph, either to
 individual objects one at a time via \fBagbindrec\fP, or to
 all the objects of the same class in a graph via \fBaginit\fP.
+(Note that for graphs, aginit is applied recursively to the
+graph and its subgraphs if rec_size is negative (of the
+actual rec_size.))
 The \fBname\fP argument a record distinguishes various types of records,
 and is programmer defined (Libcgraph reserves the prefix \fB_ag\fR).
 If size is 0, the call to \fBagbindrec\fP is simply a lookup.
index e684f7c13c3217d319bc8e1088e21236f554590e..aa979b6e53ca53bef19c51c0bd4d48825697e0c9 100644 (file)
@@ -15,7 +15,7 @@
 **********************************************************/
 
 #include <stdio.h>
-#include <cgraph.h>
+#include <graphviz/cgraph.h>
 
 static void prstats(Agraph_t * g, int verbose);
 static void do_it(Agraph_t * g, int dostat);
index ebbe4bcd5a0d9e38fe6100aab412c8fdff605871..00bf46a46c7cc5315c449d77181764cf4930e89d 100644 (file)
@@ -202,10 +202,17 @@ void aginit(Agraph_t * g, int kind, char *rec_name, int rec_size, int mtf)
 {
     Agnode_t *n;
     Agedge_t *e;
+    Agraph_t *s;
+       int              rec;
 
     switch (kind) {
     case AGRAPH:
+       rec = (rec_size < 0);
+       if (rec) rec_size = -rec_size;
        agbindrec(g, rec_name, rec_size, mtf);
+       if (rec)
+               for (s = agfstsubg(g); s; s = agnxtsubg(s))
+                       aginit(s,kind,rec_name,rec_size,mtf);
        break;
     case AGNODE:
     case AGOUTEDGE: