/* * 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. */ static void xdot_begin_graph (graph_t *g, int s_arrows, int e_arrows, format_type id) { int i, us; char* s; xd = GNEW(xdot_state_t); if (id == FORMAT_XDOT14) { xd->version = 14; xd->version_s = "1.4"; } else if (id == FORMAT_XDOT12) { xd->version = 12; xd->version_s = "1.2"; } else if ((s = agget(g, "xdotversion")) && s[0] && ((us = versionStr2Version(s)) > 10)) { xd->version = us; xd->version_s = s; } else { xd->version = versionStr2Version(XDOTVERSION); xd->version_s = XDOTVERSION; } if (GD_n_cluster(g)) #ifndef WITH_CGRAPH xd->g_draw = safe_dcl(g, g, "_draw_", "", agraphattr); #else xd->g_draw = safe_dcl(g, AGRAPH, "_draw_", ""); #endif else
/* * 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. */ static void xdot_begin_graph (graph_t *g, int s_arrows, int e_arrows, format_type id) { int i, us; char* s; xd = GNEW(xdot_state_t); if (id == FORMAT_XDOT14) { xd->version = 14; xd->version_s = "1.4"; } else if (id == FORMAT_XDOT12) { xd->version = 12; xd->version_s = "1.2"; } else if ((s = agget(g, "xdotversion")) && s[0] && ((us = versionStr2Version(s)) > 10)) { xd->version = us; xd->version_s = s; } else { xd->version = versionStr2Version(XDOTVERSION); xd->version_s = XDOTVERSION; } if (GD_n_cluster(g)) xd->g_draw = safe_dcl(g, AGRAPH, "_draw_", ""); else xd->g_draw = NULL; if (GD_has_labels(g) & GRAPH_LABEL) xd->g_l_draw = safe_dcl(g, AGRAPH, "_ldraw_", ""); else xd->g_l_draw = NULL; xd->n_draw = safe_dcl(g, AGNODE, "_draw_", ""); xd->n_l_draw = safe_dcl(g, AGNODE, "_ldraw_", ""); xd->e_draw = safe_dcl(g, AGEDGE, "_draw_", ""); if (e_arrows) xd->h_draw = safe_dcl(g, AGEDGE, "_hdraw_", ""); else xd->h_draw = NULL; if (s_arrows) xd->t_draw = safe_dcl(g, AGEDGE, "_tdraw_", ""); else xd->t_draw = NULL; if (GD_has_labels(g) & (EDGE_LABEL|EDGE_XLABEL)) xd->e_l_draw = safe_dcl(g, AGEDGE, "_ldraw_", ""); else xd->e_l_draw = NULL; if (GD_has_labels(g) & HEAD_LABEL) xd->hl_draw = safe_dcl(g, AGEDGE, "_hldraw_", ""); else xd->hl_draw = NULL; if (GD_has_labels(g) & TAIL_LABEL) xd->tl_draw = safe_dcl(g, AGEDGE, "_tldraw_", ""); else xd->tl_draw = NULL; for (i = 0; i < NUMXBUFS; i++) agxbinit(xbuf+i, BUFSIZ, xd->buf[i]); }