]> granicus.if.org Git - graphviz/commitdiff
Factor out common code for handling the class attribute;
authorEmden Gansner <emdenrg@google.com>
Fri, 10 Jun 2016 19:25:11 +0000 (15:25 -0400)
committerEmden Gansner <emdenrg@google.com>
Fri, 10 Jun 2016 19:25:11 +0000 (15:25 -0400)
add check for empty string value.

plugin/core/gvrender_core_svg.c

index 7325db798fdc245037dc070f22b6a529b86a0689..6e23584bb497f1a00d7fc56b44dda1cc72f86178 100644 (file)
@@ -80,6 +80,17 @@ static void svg_bzptarray(GVJ_t * job, pointf * A, int n)
 #endif
 }
 
+static void svg_print_class(GVJ_t * job, char* kind, void* obj)
+{
+    char* str;
+
+    gvprintf(job, "\" class=\"%s", kind);
+    if ((str = agget(obj, "class")) && *str) {
+       gvputs(job, " ");
+       gvputs(job, xml_string(str));
+    }
+}
+
 static void svg_print_color(GVJ_t * job, gvcolor_t color)
 {
     switch (color.type) {
@@ -209,15 +220,10 @@ static void svg_begin_layer(GVJ_t * job, char *layername, int layerNum,
                            int numLayers)
 {
     obj_state_t *obj = job->obj;
-    char *str;
 
     gvputs(job, "<g id=\"");
     gvputs(job, xml_string(layername));
-    gvputs(job, "\" class=\"layer");
-    if ((str = agget(obj->u.n, "class"))) {
-       gvputs(job, " ");
-       gvputs(job, xml_string(str));
-    }
+    svg_print_class(job, "layer", obj->u.g);
     gvputs(job, "\">\n");
 }
 
@@ -233,17 +239,12 @@ static void svg_end_layer(GVJ_t * job)
 static void svg_begin_page(GVJ_t * job)
 {
     obj_state_t *obj = job->obj;
-    char *str;
 
     /* its really just a page of the graph, but its still a graph,
      * and it is the entire graph if we're not currently paging */
     gvputs(job, "<g id=\"");
     gvputs(job, xml_string(obj->id));
-    gvputs(job, "\" class=\"graph");
-    if ((str = agget(obj->u.n, "class"))) {
-        gvputs(job, " ");
-        gvputs(job, xml_string(str));
-    }
+    svg_print_class(job, "graph", obj->u.g);
     gvprintf(job,
             "\" transform=\"scale(%g %g) rotate(%d) translate(%g %g)\">\n",
             job->scale.x, job->scale.y, -job->rotation,
@@ -264,15 +265,10 @@ static void svg_end_page(GVJ_t * job)
 static void svg_begin_cluster(GVJ_t * job)
 {
     obj_state_t *obj = job->obj;
-    char *str;
 
     gvputs(job, "<g id=\"");
     gvputs(job, xml_string(obj->id));
-    gvputs(job, "\" class=\"cluster");
-    if ((str = agget(obj->u.n, "class"))) {
-        gvputs(job, " ");
-        gvputs(job, xml_string(str));
-    }
+    svg_print_class(job, "cluster", obj->u.sg);
     gvputs(job, "\">\n");
     gvputs(job, "<title>");
     gvputs(job, xml_string(agnameof(obj->u.g)));
@@ -287,17 +283,12 @@ static void svg_end_cluster(GVJ_t * job)
 static void svg_begin_node(GVJ_t * job)
 {
     obj_state_t *obj = job->obj;
-    char *str;
 
     gvputs(job, "<g id=\"");
     gvputs(job, xml_string(obj->id));
     if (job->layerNum > 1)
        gvprintf (job, "_%s", xml_string(job->gvc->layerIDs[job->layerNum]));
-    gvputs(job, "\" class=\"node");
-    if ((str = agget(obj->u.n, "class"))) {
-        gvputs(job, " ");
-        gvputs(job, xml_string(str));
-    }
+    svg_print_class(job, "node", obj->u.n);
     gvputs(job, "\">\n");
     gvputs(job, "<title>");
     gvputs(job, xml_string(agnameof(obj->u.n)));
@@ -313,15 +304,10 @@ static void svg_begin_edge(GVJ_t * job)
 {
     obj_state_t *obj = job->obj;
     char *ename;
-    char *str;
 
     gvputs(job, "<g id=\"");
     gvputs(job, xml_string(obj->id));
-    gvputs(job, "\" class=\"edge");
-    if ((str = agget(obj->u.n, "class"))) {
-        gvputs(job, " ");
-        gvputs(job, xml_string(str));
-    }
+    svg_print_class(job, "edge", obj->u.e);
     gvputs(job, "\">\n");
 
     gvputs(job, "<title>");