]> granicus.if.org Git - graphviz/commitdiff
Implement gvRender to make a NULL stream mean no output;
authorerg <devnull@localhost>
Fri, 25 Aug 2006 22:32:50 +0000 (22:32 +0000)
committererg <devnull@localhost>
Fri, 25 Aug 2006 22:32:50 +0000 (22:32 +0000)
change dot and xdot renderers to respect this meaning;
fix some finalization in gvRender.

lib/common/emit.c
lib/gvc/gvc.c
lib/gvc/gvcjob.h
lib/gvc/gvjobs.c
plugin/core/gvrender_core_dot.c

index dee3464ed2d38bb5c7b3b11b3b340674c0d37d3f..3dcc38cdc713dd8766c2174472f8c1a76b84900e 100644 (file)
@@ -486,18 +486,18 @@ static void init_job_flags(GVJ_t * job, graph_t * g)
 {
     switch (job->output_lang) {
     case GVRENDER_PLUGIN:
-        job->flags = chkOrder(g) | job->render.features->flags;
+        job->flags |= chkOrder(g) | job->render.features->flags;
         break;
     case VTX:
         /* output sorted, i.e. all nodes then all edges */
-        job->flags = EMIT_SORTED;
+        job->flags |= EMIT_SORTED;
         break;
     case DIA:
         /* output in preorder traversal of the graph */
-        job->flags = EMIT_PREORDER;
+        job->flags |= EMIT_PREORDER;
         break;
     default:
-        job->flags = chkOrder(g);
+        job->flags |= chkOrder(g);
         break;
     }
 }
index 37b3df92e0a6bc4212e6f62d580b98d8ebf96a56..d464e002858206576059de2c8a099d08f3026c25 100644 (file)
@@ -95,7 +95,6 @@ int gvRender(GVC_t *gvc, graph_t *g, char *format, FILE *out)
     /* create a job for the required format */
     rc = gvjobs_output_langname(gvc, format);
     job = gvc->job;
-    firstjob = gvc->active_jobs;
     if (rc == NO_SUPPORT) {
         agerr (AGERR, "Renderer type: \"%s\" not recognized. Use one of:%s\n",
                 format, gvplugin_list(gvc, API_render, format));
@@ -108,9 +107,14 @@ int gvRender(GVC_t *gvc, graph_t *g, char *format, FILE *out)
        return -1;
     }
     job->output_file = out;
+    if (out == NULL)
+       job->flags |= OUTPUT_NOT_REQUIRED;
     gvRenderJobs(gvc, g);
-    if (firstjob)
+    firstjob = gvc->active_jobs;
+    if (firstjob) {
+       gvrender_end_job(firstjob);
        gvdevice_finalize(firstjob);
+    }
     gvjobs_delete(gvc);
 
     return 0;
@@ -120,13 +124,14 @@ int gvRender(GVC_t *gvc, graph_t *g, char *format, FILE *out)
 int gvRenderFilename(GVC_t *gvc, graph_t *g, char *format, char *filename)
 {
     int rc;
-    GVJ_t *job = gvc->job;
-    GVJ_t *firstjob = gvc->active_jobs;
+    GVJ_t *job;
+    GVJ_t *firstjob;
 
     g = g->root;
 
     /* create a job for the required format */
     rc = gvjobs_output_langname(gvc, format);
+    job = gvc->job;
     if (rc == NO_SUPPORT) {
        agerr(AGERR, "Renderer type: \"%s\" not recognized. Use one of:%s\n",                format, gvplugin_list(gvc, API_render, format));
        return -1;
@@ -139,8 +144,11 @@ int gvRenderFilename(GVC_t *gvc, graph_t *g, char *format, char *filename)
     }
     gvjobs_output_filename(gvc, filename);
     gvRenderJobs(gvc, g);
-    if (firstjob)
+    firstjob = gvc->active_jobs;
+    if (firstjob) {
+       gvrender_end_job(firstjob);
        gvdevice_finalize(firstjob);
+    }
     gvjobs_delete(gvc);
 
     return 0;
index 2748c076583477226a5859cb7208516b574f150b..eb872ec2ffeca5025452eba4e774ca73ca5764fd 100644 (file)
@@ -63,6 +63,7 @@ extern "C" {
 #define GVRENDER_DOES_TARGETS (1<<20)
 #define GVRENDER_DOES_Z (1<<21)
 #define LAYOUT_NOT_REQUIRED (1<<22)
+#define OUTPUT_NOT_REQUIRED (1<<23)
 
     typedef struct {
        int flags;
index 5d19bdff2a9671e751aecb5b0d3abca15b8ef8c6..1922d177df557521ad00375159caad62850ae368 100644 (file)
@@ -154,4 +154,5 @@ void gvjobs_delete(GVC_t * gvc)
     }
     gvc->jobs = gvc->job = gvc->active_jobs = output_filename_job = output_langname_job =
        NULL;
+    gvc->common.viewNum = 0;
 }
index 478398d2987c5a5d6f0ea24201150c77c3acdc61..c36930a04963faec4ca0ae0c72ad6746544034cf 100644 (file)
@@ -158,11 +158,13 @@ static void dot_end_graph(GVJ_t *job)
            break;
        case FORMAT_DOT:
        case FORMAT_CANON:
-           agwrite(g, job->output_file);
+           if (!(job->flags & OUTPUT_NOT_REQUIRED))
+               agwrite(g, job->output_file);
            break;
        case FORMAT_XDOT:
            extend_attrs(job, g, xbufs);
-           agwrite(g, job->output_file);
+           if (!(job->flags & OUTPUT_NOT_REQUIRED))
+               agwrite(g, job->output_file);
            break;
     }
 }