]> granicus.if.org Git - graphviz/commitdiff
output class value in svg files
authorKeenan Brock <keenan@thebrocks.net>
Sun, 26 Apr 2015 22:29:42 +0000 (18:29 -0400)
committerKeenan Brock <keenan@thebrocks.net>
Fri, 17 Jul 2015 02:38:20 +0000 (22:38 -0400)
plugin/core/gvrender_core_svg.c

index c0cf411746a317d50e9af7511d10b6df6133cffd..7325db798fdc245037dc070f22b6a529b86a0689 100644 (file)
@@ -208,9 +208,17 @@ static void svg_end_graph(GVJ_t * job)
 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\">\n");
+    gvputs(job, "\" class=\"layer");
+    if ((str = agget(obj->u.n, "class"))) {
+       gvputs(job, " ");
+       gvputs(job, xml_string(str));
+    }
+    gvputs(job, "\">\n");
 }
 
 static void svg_end_layer(GVJ_t * job)
@@ -225,14 +233,19 @@ 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\"");
+    gvputs(job, "\" class=\"graph");
+    if ((str = agget(obj->u.n, "class"))) {
+        gvputs(job, " ");
+        gvputs(job, xml_string(str));
+    }
     gvprintf(job,
-            " transform=\"scale(%g %g) rotate(%d) translate(%g %g)\">\n",
+            "\" transform=\"scale(%g %g) rotate(%d) translate(%g %g)\">\n",
             job->scale.x, job->scale.y, -job->rotation,
             job->translation.x, -job->translation.y);
     /* default style */
@@ -251,10 +264,16 @@ 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\">");
+    gvputs(job, "\" class=\"cluster");
+    if ((str = agget(obj->u.n, "class"))) {
+        gvputs(job, " ");
+        gvputs(job, xml_string(str));
+    }
+    gvputs(job, "\">\n");
     gvputs(job, "<title>");
     gvputs(job, xml_string(agnameof(obj->u.g)));
     gvputs(job, "</title>\n");
@@ -268,12 +287,18 @@ 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\">");
+    gvputs(job, "\" class=\"node");
+    if ((str = agget(obj->u.n, "class"))) {
+        gvputs(job, " ");
+        gvputs(job, xml_string(str));
+    }
+    gvputs(job, "\">\n");
     gvputs(job, "<title>");
     gvputs(job, xml_string(agnameof(obj->u.n)));
     gvputs(job, "</title>\n");
@@ -288,10 +313,16 @@ 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\">");
+    gvputs(job, "\" class=\"edge");
+    if ((str = agget(obj->u.n, "class"))) {
+        gvputs(job, " ");
+        gvputs(job, xml_string(str));
+    }
+    gvputs(job, "\">\n");
 
     gvputs(job, "<title>");
     ename = strdup_and_subst_obj("\\E", (void *) (obj->u.e));