]> granicus.if.org Git - graphviz/commitdiff
-Ttk plugin fixes
authorellson <devnull@localhost>
Sun, 27 Apr 2008 21:48:34 +0000 (21:48 +0000)
committerellson <devnull@localhost>
Sun, 27 Apr 2008 21:48:34 +0000 (21:48 +0000)
gv_tcl binding fixes

tclpkg/gv/gv.i

index d4e68d4ac2eff8bd6a86a8d8b1517453a285f454..acecfe0fd6e4be34521436995d67d4d4fc6baf87 100644 (file)
 #undef PACKAGE_TARNAME
 #undef PACKAGE_VERSION
 #undef PACKAGE_NAME
-#undef TRUE
-#undef FALSE
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 #include "gvc.h"
+
+/** New graphs */
+/*** New empty graph */
+extern Agraph_t *graph(char *name);
+extern Agraph_t *digraph(char *name);
+extern Agraph_t *strictgraph(char *name);
+extern Agraph_t *strictdigraph(char *name);
+/*** New graph from a dot-syntax string or file */
+extern Agraph_t *readstring(char *string);
+extern Agraph_t *read(char *filename);
+extern Agraph_t *read(FILE *f);        
+/*** Add new subgraph to existing graph */
+extern Agraph_t *graph(Agraph_t *g, char *name);
+
+/** New nodes */
+/*** Add new node to existing graph */
+extern Agnode_t *node(Agraph_t *g, char *name);
+
+/** New edges */
+/*** Add new edge between existing nodes */
+extern Agedge_t *edge(Agnode_t *t, Agnode_t *h);
+/*** Add a new edge between an existing tail node, and a named head node which will be induced in the graph if it doesn't already exist */
+extern Agedge_t *edge(Agnode_t *t, char *hname);
+/*** Add a new edge between an existing head node, and a named tail node which will be induced in the graph if it doesn't already exist */
+extern Agedge_t *edge(char *tname, Agnode_t *h);
+/*** Add a new edge between named tail  and head nodes which will be induced in the graph if they don't already exist */
+extern Agedge_t *edge(Agraph_t *g, char *tname, char *hname);
+
+/** Setting attribute values */
+/*** Set value of named attribute of graph/node/edge - creating attribute if necessary */
+extern char *setv(Agraph_t *g, char *attr, char *val);
+extern char *setv(Agnode_t *n, char *attr, char *val);
+extern char *setv(Agedge_t *e, char *attr, char *val);
+
+/*** Set value of existing attribute of graph/node/edge (using attribute handle) */
+extern char *setv(Agraph_t *g, Agsym_t *a, char *val);
+extern char *setv(Agnode_t *n, Agsym_t *a, char *val);
+extern char *setv(Agedge_t *e, Agsym_t *a, char *val);
+
+/** Getting attribute values */
+/*** Get value of named attribute of graph/node/edge */
+extern char *getv(Agraph_t *g, char *attr);
+extern char *getv(Agnode_t *n, char *attr);
+extern char *getv(Agedge_t *e, char *attr);
+
+/*** Get value of attribute of graph/node/edge (using attribute handle) */
+extern char *getv(Agraph_t *g, Agsym_t *a);
+extern char *getv(Agnode_t *n, Agsym_t *a);
+extern char *getv(Agedge_t *e, Agsym_t *a);
+
+/** Obtain names from handles */
+extern char *nameof(Agraph_t *g);
+extern char *nameof(Agnode_t *n);
+//extern char *nameof(Agedge_t *e);
+extern char *nameof(Agsym_t *a);
+
+/** Find handles from names */
+extern Agraph_t *findsubg(Agraph_t *g, char *name);
+extern Agnode_t *findnode(Agraph_t *g, char *name);
+extern Agedge_t *findedge(Agnode_t *t, Agnode_t *h);
+
+/** */
+extern Agsym_t *findattr(Agraph_t *g, char *name);
+extern Agsym_t *findattr(Agnode_t *n, char *name);
+extern Agsym_t *findattr(Agedge_t *e, char *name);
+
+/** Misc graph navigators returning handles */
+extern Agnode_t *headof(Agedge_t *e);
+extern Agnode_t *tailof(Agedge_t *e);
+extern Agraph_t *graphof(Agraph_t *g);
+extern Agraph_t *graphof(Agedge_t *e);
+extern Agraph_t *graphof(Agnode_t *n);
+extern Agraph_t *rootof(Agraph_t *g);
+
+/** Obtain handles of proto node/edge for setting default attribute values */
+extern Agnode_t *protonode(Agraph_t *g);
+extern Agedge_t *protoedge(Agraph_t *g);
+
+/** Iterators */
+/*** Iteration termination tests */
+extern bool ok(Agraph_t *g);
+extern bool ok(Agnode_t *n);
+extern bool ok(Agedge_t *e);
+extern bool ok(Agsym_t *a);
+
+/*** Iterate over subgraphs of a graph */
+extern Agraph_t *firstsubg(Agraph_t *g);
+extern Agraph_t *nextsubg(Agraph_t *g, Agraph_t *sg);
+
+/*** Iterate over supergraphs of a graph (obscure and rarely useful) */
+extern Agraph_t *firstsupg(Agraph_t *g);
+extern Agraph_t *nextsupg(Agraph_t *g, Agraph_t *sg);
+
+/*** Iterate over edges of a graph */
+extern Agedge_t *firstedge(Agraph_t *g);
+extern Agedge_t *nextedge(Agraph_t *g, Agedge_t *e);
+
+/*** Iterate over outedges of a graph */
+extern Agedge_t *firstout(Agraph_t *g);
+extern Agedge_t *nextout(Agraph_t *g, Agedge_t *e);
+
+/*** Iterate over edges of a node */
+extern Agedge_t *firstedge(Agnode_t *n);
+extern Agedge_t *nextedge(Agnode_t *n, Agedge_t *e);
+
+/*** Iterate over out-edges of a node */
+extern Agedge_t *firstout(Agnode_t *n);
+extern Agedge_t *nextout(Agnode_t *n, Agedge_t *e);
+
+/*** Iterate over head nodes reachable from out-edges of a node */
+extern Agnode_t *firsthead(Agnode_t *n);
+extern Agnode_t *nexthead(Agnode_t *n, Agnode_t *h);
+
+/*** Iterate over in-edges of a graph */
+extern Agedge_t *firstin(Agraph_t *g);
+extern Agedge_t *nextin(Agnode_t *n, Agedge_t *e);
+
+/*** Iterate over in-edges of a node */
+extern Agedge_t *firstin(Agnode_t *n);
+extern Agedge_t *nextin(Agraph_t *g, Agedge_t *e);
+
+/*** Iterate over tail nodes reachable from in-edges of a node */
+extern Agnode_t *firsttail(Agnode_t *n);
+extern Agnode_t *nexttail(Agnode_t *n, Agnode_t *t);
+
+/*** Iterate over nodes of a graph */
+extern Agnode_t *firstnode(Agraph_t *g);
+extern Agnode_t *nextnode(Agraph_t *g, Agnode_t *n);
+
+/*** Iterate over nodes of an edge */
+extern Agnode_t *firstnode(Agedge_t *e);
+extern Agnode_t *nextnode(Agedge_t *e, Agnode_t *n);
+
+/*** Iterate over attributes of a graph */
+extern Agsym_t *firstattr(Agraph_t *g);
+extern Agsym_t *nextattr(Agraph_t *g, Agsym_t *a);
+
+/*** Iterate over attributes of an edge */
+extern Agsym_t *firstattr(Agedge_t *e);
+extern Agsym_t *nextattr(Agedge_t *e, Agsym_t *a);
+
+/*** Iterate over attributes of a node */
+extern Agsym_t *firstattr(Agnode_t *n);
+extern Agsym_t *nextattr(Agnode_t *n, Agsym_t *a);
+
+/** Remove graph objects */
+extern bool rm(Agraph_t *g);
+extern bool rm(Agnode_t *n);
+extern bool rm(Agedge_t *e);
+
+/** Layout */
+/*** Annotate a graph with layout attributes and values using a specific layout engine */
+extern bool layout(Agraph_t *g, char *engine);
+
+/** Render */
+/*** Render a layout into attributes of the graph */
+extern bool render(Agraph_t *g); 
+
+/*** Render a layout in a specific format */
+extern bool render(Agraph_t *g, char *format);
+extern bool render(Agraph_t *g, char *format, char *filename);
+extern bool render(Agraph_t *g, char *format, FILE *f);
+
+extern char* renderdata(Agraph_t *g, char *format);
+
+
+/*** Writing graph back to file */
+extern bool write(Agraph_t *g, char *filename);
+extern bool write(Agraph_t *g, FILE *f);
+
 %}
 
 %inline %{
+
 /** New graphs */
 /*** New empty graph */
 extern Agraph_t *graph(char *name);
@@ -193,10 +362,26 @@ extern bool render(Agraph_t *g);
 extern bool render(Agraph_t *g, char *format);
 extern bool render(Agraph_t *g, char *format, char *filename);
 extern bool render(Agraph_t *g, char *format, FILE *f);
+
 extern char* renderdata(Agraph_t *g, char *format);
 
+
 /*** Writing graph back to file */
-bool write(Agraph_t *g, FILE *f);
-bool write(Agraph_t *g, char *filename);
+extern bool write(Agraph_t *g, char *filename);
+extern bool write(Agraph_t *g, FILE *f);
+
+
+#ifdef SWIGTCL
+// A typemap telling SWIG to ignore an argument for input
+// However, we still need to pass a pointer to the C function
+%typemap(in,numinputs=0) char *outdata (char *temp) {
+     $1 = &temp;
+}
+// A typemap defining how to return an argument by appending it to the result
+%typemap(argout) char *outdata {
+     Tcl_Obj *o = Tcl_NewStringObj($1);
+     Tcl_ListObjAppendElement(interp,$result,o);
+}
+#endif
 
 %}