static void xdot_end_node(GVJ_t* job) { Agnode_t* n = job->obj->u.n; if (agxblen(xbufs[EMIT_NDRAW])) agxset(n, xd->n_draw, agxbuse(xbufs[EMIT_NDRAW])); if (agxblen(xbufs[EMIT_NLABEL])) agxset(n, xd->n_l_draw, agxbuse(xbufs[EMIT_NLABEL])); penwidth[EMIT_NDRAW] = 1; penwidth[EMIT_NLABEL] = 1; textflags[EMIT_NDRAW] = 0; textflags[EMIT_NLABEL] = 0; }
int htmllex() { #ifdef HAVE_EXPAT static char *begin_html = "<HTML>"; static char *end_html = "</HTML>"; char *s; char *endp = 0; int len, llen; int rv; state.tok = 0; do { if (state.mode == 2) return EOF; if (state.mode == 0) { state.mode = 1; s = begin_html; len = strlen(s); endp = 0; } else { s = state.ptr; if (*s == '\0') { state.mode = 2; s = end_html; len = strlen(s); } else { endp = findNext(s,&state.lb); len = endp - s; } } state.prevtok = state.currtok; state.prevtoklen = state.currtoklen; state.currtok = s; state.currtoklen = len; if ((llen = agxblen(&state.lb))) rv = XML_Parse(state.parser, agxbuse(&state.lb),llen, 0); else rv = XML_Parse(state.parser, s, len, (len ? 0 : 1)); if (rv == XML_STATUS_ERROR) { if (!state.error) { agerr(AGERR, "%s in line %d \n", XML_ErrorString(XML_GetErrorCode(state.parser)), htmllineno()); error_context(); state.error = 1; state.tok = T_error; } } if (endp) state.ptr = endp; } while (state.tok == 0); #if DEBUG printTok (state.tok); #endif return state.tok; #else return EOF; #endif }
static void xdot_end_node(GVJ_t* job) { Agnode_t* n = job->obj->u.n; if (agxblen(xbufs[EMIT_NDRAW])) #ifndef WITH_CGRAPH agxset(n, xd->n_draw->index, agxbuse(xbufs[EMIT_NDRAW])); #else /* WITH_CGRAPH */ agxset(n, xd->n_draw, agxbuse(xbufs[EMIT_NDRAW])); #endif /* WITH_CGRAPH */ if (agxblen(xbufs[EMIT_NLABEL])) #ifndef WITH_CGRAPH agxset(n, xd->n_l_draw->index, agxbuse(xbufs[EMIT_NLABEL])); #else /* WITH_CGRAPH */ agxset(n, xd->n_l_draw, agxbuse(xbufs[EMIT_NLABEL])); #endif /* WITH_CGRAPH */ penwidth[EMIT_NDRAW] = 1; penwidth[EMIT_NLABEL] = 1; }
static void xdot_end_edge(GVJ_t* job) { Agedge_t* e = job->obj->u.e; if (agxblen(xbufs[EMIT_EDRAW])) agxset(e, xd->e_draw, agxbuse(xbufs[EMIT_EDRAW])); if (agxblen(xbufs[EMIT_TDRAW])) agxset(e, xd->t_draw, agxbuse(xbufs[EMIT_TDRAW])); if (agxblen(xbufs[EMIT_HDRAW])) agxset(e, xd->h_draw, agxbuse(xbufs[EMIT_HDRAW])); if (agxblen(xbufs[EMIT_ELABEL])) agxset(e, xd->e_l_draw,agxbuse(xbufs[EMIT_ELABEL])); if (agxblen(xbufs[EMIT_TLABEL])) agxset(e, xd->tl_draw, agxbuse(xbufs[EMIT_TLABEL])); if (agxblen(xbufs[EMIT_HLABEL])) agxset(e, xd->hl_draw, agxbuse(xbufs[EMIT_HLABEL])); penwidth[EMIT_EDRAW] = 1; penwidth[EMIT_ELABEL] = 1; penwidth[EMIT_TDRAW] = 1; penwidth[EMIT_HDRAW] = 1; penwidth[EMIT_TLABEL] = 1; penwidth[EMIT_HLABEL] = 1; textflags[EMIT_EDRAW] = 0; textflags[EMIT_ELABEL] = 0; textflags[EMIT_TDRAW] = 0; textflags[EMIT_HDRAW] = 0; textflags[EMIT_TLABEL] = 0; textflags[EMIT_HLABEL] = 0; }
static void xdot_end_graph(graph_t* g) { int i; if (agxblen(xbufs[EMIT_GDRAW])) { if (!xd->g_draw) xd->g_draw = safe_dcl(g, AGRAPH, "_draw_", ""); agxset(g, xd->g_draw, agxbuse(xbufs[EMIT_GDRAW])); } if (GD_label(g)) agxset(g, xd->g_l_draw, agxbuse(xbufs[EMIT_GLABEL])); agsafeset (g, "xdotversion", xd->version_s, ""); for (i = 0; i < NUMXBUFS; i++) agxbfree(xbuf+i); free (xd); penwidth[EMIT_GDRAW] = 1; penwidth[EMIT_GLABEL] = 1; textflags[EMIT_GDRAW] = 0; textflags[EMIT_GLABEL] = 0; }
static void xdot_end_edge(GVJ_t* job) { Agedge_t* e = job->obj->u.e; if (agxblen(xbufs[EMIT_EDRAW])) #ifndef WITH_CGRAPH agxset(e, xd->e_draw->index, agxbuse(xbufs[EMIT_EDRAW])); #else /* WITH_CGRAPH */ agxset(e, xd->e_draw, agxbuse(xbufs[EMIT_EDRAW])); #endif /* WITH_CGRAPH */ if (agxblen(xbufs[EMIT_TDRAW])) #ifndef WITH_CGRAPH agxset(e, xd->t_draw->index, agxbuse(xbufs[EMIT_TDRAW])); #else /* WITH_CGRAPH */ agxset(e, xd->t_draw, agxbuse(xbufs[EMIT_TDRAW])); #endif /* WITH_CGRAPH */ if (agxblen(xbufs[EMIT_HDRAW])) #ifndef WITH_CGRAPH agxset(e, xd->h_draw->index, agxbuse(xbufs[EMIT_HDRAW])); #else /* WITH_CGRAPH */ agxset(e, xd->h_draw, agxbuse(xbufs[EMIT_HDRAW])); #endif /* WITH_CGRAPH */ if (agxblen(xbufs[EMIT_ELABEL])) #ifndef WITH_CGRAPH agxset(e, xd->e_l_draw->index,agxbuse(xbufs[EMIT_ELABEL])); #else /* WITH_CGRAPH */ agxset(e, xd->e_l_draw,agxbuse(xbufs[EMIT_ELABEL])); #endif /* WITH_CGRAPH */ if (agxblen(xbufs[EMIT_TLABEL])) #ifndef WITH_CGRAPH agxset(e, xd->tl_draw->index, agxbuse(xbufs[EMIT_TLABEL])); #else /* WITH_CGRAPH */ agxset(e, xd->tl_draw, agxbuse(xbufs[EMIT_TLABEL])); #endif /* WITH_CGRAPH */ if (agxblen(xbufs[EMIT_HLABEL])) #ifndef WITH_CGRAPH agxset(e, xd->hl_draw->index, agxbuse(xbufs[EMIT_HLABEL])); #else /* WITH_CGRAPH */ agxset(e, xd->hl_draw, agxbuse(xbufs[EMIT_HLABEL])); #endif /* WITH_CGRAPH */ penwidth[EMIT_EDRAW] = 1; penwidth[EMIT_ELABEL] = 1; penwidth[EMIT_TDRAW] = 1; penwidth[EMIT_HDRAW] = 1; penwidth[EMIT_TLABEL] = 1; penwidth[EMIT_HLABEL] = 1; }
static void printTok(int tok) { char *s; switch (tok) { case T_BR: s = "T_BR"; break; case T_br: s = "T_br"; break; case T_end_br: s = "T_end_br"; break; case T_end_table: s = "T_end_table"; break; case T_row: s = "T_row"; break; case T_end_row: s = "T_end_row"; break; case T_end_cell: s = "T_end_cell"; break; case T_html: s = "T_html"; break; case T_end_html: s = "T_end_html"; break; case T_string: s = "T_string"; break; case T_error: s = "T_error"; break; case T_table: s = "T_table"; break; case T_cell: s = "T_cell"; break; case T_img: s = "T_img"; break; case T_end_img: s = "T_end_img"; break; case T_IMG: s = "T_IMG"; break; default: s = "<unknown>"; } if (tok == T_string) { fprintf(stderr, "%s \"", s); fwrite(agxbstart(state.xb), 1, agxblen(state.xb), stderr); fprintf(stderr, "\"\n"); } else fprintf(stderr, "%s\n", s); }
/* * John M. suggests: * You might want to add four more: * * _ohdraw_ (optional head-end arrow for edges) * _ohldraw_ (optional head-end label for edges) * _otdraw_ (optional tail-end arrow for edges) * _otldraw_ (optional tail-end label for edges) * * that would be generated when an additional option is supplied to * dot, etc. and * these would be the arrow/label positions to use if a user want to flip the * direction of an edge (as sometimes is there want). * * N.B. John M. asks: * By the way, I don't know if you ever plan to add other letters for * the xdot spec, but could you reserve "a" and also "A" (for attribute), * "n" and also "N" (for numeric), "w" (for sWitch), "s" (for string) * and "t" (for tooltip) and "x" (for position). We use those letters in * our drawing spec (and also "<" and ">"), so if you start generating * output with them, it could break what we have. */ void extend_attrs(GVJ_t * job, graph_t *g, int s_arrows, int e_arrows) { node_t *n; edge_t *e; attrsym_t *n_draw = NULL; attrsym_t *n_l_draw = NULL; attrsym_t *e_draw = NULL; attrsym_t *h_draw = NULL; attrsym_t *t_draw = NULL; attrsym_t *e_l_draw = NULL; attrsym_t *hl_draw = NULL; attrsym_t *tl_draw = NULL; unsigned char buf0[BUFSIZ]; unsigned char buf1[BUFSIZ]; unsigned char buf2[BUFSIZ]; unsigned char buf3[BUFSIZ]; unsigned char buf4[BUFSIZ]; unsigned char buf5[BUFSIZ]; gvc = job->gvc; agsafeset (g, "xdotversion", XDOTVERSION, ""); if (GD_has_labels(g) & GRAPH_LABEL) g_l_draw = safe_dcl(g, g, "_ldraw_", "", agraphattr); else g_l_draw = NULL; if (GD_n_cluster(g)) g_draw = safe_dcl(g, g, "_draw_", "", agraphattr); else g_draw = NULL; n_draw = safe_dcl(g, g->proto->n, "_draw_", "", agnodeattr); n_l_draw = safe_dcl(g, g->proto->n, "_ldraw_", "", agnodeattr); e_draw = safe_dcl(g, g->proto->e, "_draw_", "", agedgeattr); if (e_arrows) h_draw = safe_dcl(g, g->proto->e, "_hdraw_", "", agedgeattr); if (s_arrows) t_draw = safe_dcl(g, g->proto->e, "_tdraw_", "", agedgeattr); if (GD_has_labels(g) & EDGE_LABEL) e_l_draw = safe_dcl(g, g->proto->e, "_ldraw_", "", agedgeattr); if (GD_has_labels(g) & HEAD_LABEL) hl_draw = safe_dcl(g, g->proto->e, "_hldraw_", "", agedgeattr); if (GD_has_labels(g) & TAIL_LABEL) tl_draw = safe_dcl(g, g->proto->e, "_tldraw_", "", agedgeattr); agxbinit(&xbuf0, BUFSIZ, buf0); agxbinit(&xbuf1, BUFSIZ, buf1); agxbinit(&xbuf2, BUFSIZ, buf2); agxbinit(&xbuf3, BUFSIZ, buf3); agxbinit(&xbuf4, BUFSIZ, buf4); agxbinit(&xbuf5, BUFSIZ, buf5); for (n = agfstnode(g); n; n = agnxtnode(g, n)) { if (ND_shape(n) && !isInvis(late_string(n, N_style, ""))) { ND_shape(n)->fns->codefn(job, n); agxset(n, n_draw->index, agxbuse(xbufs[EMIT_NDRAW])); agxset(n, n_l_draw->index, agxbuse(xbufs[EMIT_NLABEL])); } if (State < GVSPLINES) continue; for (e = agfstout(g, n); e; e = agnxtout(g, e)) { if (ED_edge_type(e) == IGNORED) continue; if (isInvis(late_string(e, E_style, ""))) continue; if (ED_spl(e) == NULL) continue; emit_edge_graphics (job, e); agxset(e, e_draw->index, agxbuse(xbufs[EMIT_EDRAW])); if (t_draw) agxset(e, t_draw->index, agxbuse(xbufs[EMIT_TDRAW])); if (h_draw) agxset(e, h_draw->index, agxbuse(xbufs[EMIT_HDRAW])); if (e_l_draw) agxset(e, e_l_draw->index,agxbuse(xbufs[EMIT_ELABEL])); if (tl_draw) agxset(e, tl_draw->index, agxbuse(xbufs[EMIT_TLABEL])); if (hl_draw) agxset(e, hl_draw->index, agxbuse(xbufs[EMIT_HLABEL])); } } emit_background(job, g); if (agxblen(xbufs[EMIT_GDRAW])) { if (!g_draw) g_draw = safe_dcl(g, g, "_draw_", "", agraphattr); agxset(g, g_draw->index, agxbuse(xbufs[EMIT_GDRAW])); } if (GD_label(g)) { emit_label(job, EMIT_GLABEL, GD_label(g), (void *) g); agxset(g, g_l_draw->index, agxbuse(xbufs[EMIT_GLABEL])); } emit_clusters(job, g, 0); agxbfree(&xbuf0); agxbfree(&xbuf1); agxbfree(&xbuf2); agxbfree(&xbuf3); agxbfree(&xbuf4); agxbfree(&xbuf5); }