1
/* $Id: gv.cpp,v 1.44 2007/11/02 17:02:07 ellson Exp $ $Revision: 1.44 $ */
1
/* $Id: gv.cpp,v 1.46 2008/02/02 06:42:23 glenlow Exp $ $Revision: 1.46 $ */
2
2
/* vim:set shiftwidth=4 ts=8: */
4
4
/**********************************************************
17
17
#include <string.h>
20
extern void gv_binding_init(GVC_t *gvc);
24
static void gv_init(void) {
22
29
Agraph_t *graph(char *name)
26
32
return agopen(name, AGRAPH);
29
35
Agraph_t *digraph(char *name)
33
38
return agopen(name, AGDIGRAPH);
36
41
Agraph_t *strictgraph(char *name)
40
44
return agopen(name, AGRAPHSTRICT);
43
47
Agraph_t *strictdigraph(char *name)
47
50
return agopen(name, AGDIGRAPHSTRICT);
50
53
Agraph_t *readstring(char *string)
54
56
return agmemread(string);
57
59
Agraph_t *read(FILE *f)
803
801
agdelete(g->meta_node->graph, g->meta_node);
806
fprintf(stderr, "subgraph has no meta_node\n");
805
fprintf(stderr, "subgraph has no meta_node\n");
812
811
// removal of the protonode is not permitted
813
812
if (n->name[0] == '\001' && strcmp (n->name, "\001proto") ==0)
815
814
agdelete(n->graph, n);
820
820
// removal of the protoedge is not permitted
821
821
if ((e->head->name[0] == '\001' && strcmp (e->head->name, "\001proto") == 0)
822
822
|| (e->tail->name[0] == '\001' && strcmp (e->tail->name, "\001proto") == 0))
824
824
agdelete(e->head->graph->root, e);
827
void layout(Agraph_t *g, char *engine)
828
bool layout(Agraph_t *g, char *engine)
831
err = gvFreeLayout(gvc, g);
832
err = gvFreeLayout(gvc, g); /* ignore errors */
832
833
err = gvLayout(gvc, g, engine);
835
837
// annotate the graph with layout information
836
void render(Agraph_t *g)
838
bool render(Agraph_t *g)
841
844
// render to a filename
842
void render(Agraph_t *g, char *format, char *filename)
845
bool render(Agraph_t *g, char *format, char *filename)
846
849
err = gvRenderFilename(gvc, g, format, filename);
849
853
// render to stdout
850
void render(Agraph_t *g, char *format)
854
bool render(Agraph_t *g, char *format)
854
858
err = gvRender(gvc, g, format, stdout);
857
862
// render to a FILE
858
void render(Agraph_t *g, char *format, FILE *f)
863
bool render(Agraph_t *g, char *format, FILE *f)
862
867
err = gvRender(gvc, g, format, f);
865
871
// render to a data string
871
err = gvRenderData(gvc, g, format, &data);
878
err = gvRenderData(gvc, g, format, &data, &length);
879
if (err) return NULL;
880
data = (char*)realloc(data, length + 1);
881
if (data) data[length] = '\0';
875
void write(Agraph_t *g, FILE *f)
885
bool write(Agraph_t *g, FILE *f)
879
889
err = agwrite(g, f);
882
void write(Agraph_t *g, char *filename)
893
bool write(Agraph_t *g, char *filename)
887
898
f = fopen(filename, "w");
899
if (!f) return false;
890
900
err = agwrite(g, f);