|
|
1.1 root 1: /* emit code like that of dave johnson's 'graphdraw' format.
2: * slightly incompatible but this format can easily by
3: * mangled for other purposes (UNIX TOOLS APPROACH)
4: * tabs used as delimiters; spaces can appear in node labels.
5: */
6:
7: #include "draw_dag.h"
8: #include "dag.h"
9: #include "parsedag.h"
10:
11: /* map tab to space */
12: static char* escape(char *s) {
13: char *rv = s;
14: do {
15: if (*s == '\t') *s = ' ';
16: } while (*s++);
17: return rv;
18: }
19:
20: void emit_graphdraw() {
21: int *Degree = new int[N];
22: for (int n_edges = 0, i = 0; i < N; i++)
23: for (DAG_edge_t *e= Edge[i]; e; e = e->nextof()) {
24: Degree[i]++;
25: n_edges++;
26: }
27: printf("%d\t%d\td\n",N,n_edges); // "d" for directed
28: for (i = 0; i < N; i++) {
29: char *printname;
30: if (Node[i]->label.type) printname = Node[i]->label.value;
31: else printname = Node[i]->name;
32:
33: printf("%d\t\"%s\"\t%d\t%d\tL\n",Degree[i],escape(printname),Node[i]->pos.x,Node[i]->pos.y);
34: for (e = Edge[i]; e; e = e->nextof()) {
35: if (e->label.type)
36: printf("%d\t\"%s\"\tL",e->node,escape(e->label.value));
37: else
38: printf("%d\tL",e->node);
39: for (int nsp = 0; e->splinept[nsp].x >= 0; nsp++);
40: printf("\t%d",nsp);
41: for (int sp = 0; sp < nsp; sp++)
42: printf("\t%d\t%d",e->splinept[sp].x,e->splinept[sp].y);
43: printf("\n");
44: }
45: }
46: delete Degree;
47: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.