]> granicus.if.org Git - graphviz/commitdiff
replace 'gvprintf(… xml_string(…))' with 'gvputs_xml'
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 2 Oct 2021 03:35:39 +0000 (20:35 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Fri, 8 Oct 2021 14:57:37 +0000 (07:57 -0700)
A first demonstration of how to use the `xml_escape` functionality introduced in
preceding commits. Note that, while this is intended to be a non-functional
change, this does side step intermediate buffering in `xml_string` and escaped
output is now passed directly to `gvputs`.

Related to #1868.

plugin/core/gvrender_core_map.c
plugin/core/gvrender_core_svg.c
plugin/visio/VisioText.cpp

index 8d9fe61011fc3e926bfd037002544d1801a3b041..836bab70cbe2c70bc502f8833ace52cc97b0e9a9 100644 (file)
@@ -99,12 +99,12 @@ static void map_output_shape (GVJ_t *job, map_shape_t map_shape, pointf * AF, in
        }
         if (target && target[0]) {
             gvputs(job, " target=\"");
-           gvputs(job, xml_string(target));
+           gvputs_xml(job, target);
            gvputs(job, "\"");
        }
         if (tooltip && tooltip[0]) {
             gvputs(job, " title=\"");
-           gvputs(job, xml_string(tooltip));
+           gvputs_xml(job, tooltip);
            gvputs(job, "\"");
        }
         /*
@@ -146,32 +146,30 @@ static void map_output_shape (GVJ_t *job, map_shape_t map_shape, pointf * AF, in
 static void map_begin_page(GVJ_t * job)
 {
     obj_state_t *obj = job->obj;
-    char *s;
 
     switch (job->render.id) {
     case FORMAT_IMAP:
         gvputs(job, "base referer\n");
         if (obj->url && obj->url[0]) {
            gvputs(job, "default ");
-           gvputs(job, xml_string(obj->url));
+           gvputs_xml(job, obj->url);
            gvputs(job, "\n");
        }
         break;
     case FORMAT_ISMAP:
         if (obj->url && obj->url[0]) {
            gvputs(job, "default ");
-           gvputs(job, xml_string(obj->url));
+           gvputs_xml(job, obj->url);
            gvputs(job, " ");
-           gvputs(job, xml_string(agnameof(obj->u.g)));
+           gvputs_xml(job, agnameof(obj->u.g));
            gvputs(job, "\n");
        }
         break;
     case FORMAT_CMAPX:
-       s = xml_string(agnameof(obj->u.g));
        gvputs(job, "<map id=\"");
-       gvputs(job, s);
+       gvputs_xml(job, agnameof(obj->u.g));
        gvputs(job, "\" name=\"");
-       gvputs(job, s);
+       gvputs_xml(job, agnameof(obj->u.g));
        gvputs(job, "\">\n");
         break;
     default:
index 6becb8595b1177e950c60ff4b3245394fea6fd21..570bcaafb9fc7cd2d58c288054ac766111cd9527 100644 (file)
@@ -92,13 +92,15 @@ static void svg_print_id_class(GVJ_t * job, char* id, char* idx, char* kind, voi
     char* str;
 
     GVPUTS(job, "<g id=\"");
-    gvputs(job, xml_string(id));
-    if (idx)
-       gvprintf (job, "_%s", xml_string(idx));
+    gvputs_xml(job, id);
+    if (idx) {
+       GVPUTS(job, "_");
+       gvputs_xml(job, idx);
+    }
     gvprintf(job, "\" class=\"%s", kind);
     if ((str = agget(obj, "class")) && *str) {
        GVPUTS(job, " ");
-       gvputs(job, xml_string(str));
+       gvputs_xml(job, str);
     }
     GVPUTS(job, "\"");
 }
@@ -162,7 +164,7 @@ static void svg_grstyle(GVJ_t * job, int filled, int gid)
 static void svg_comment(GVJ_t * job, char *str)
 {
     GVPUTS(job, "<!-- ");
-    gvputs(job, xml_string(str));
+    gvputs_xml(job, str);
     GVPUTS(job, " -->\n");
 }
 
@@ -180,11 +182,11 @@ static void svg_begin_job(GVJ_t * job)
                 " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n"
 
                 "<!-- Generated by ");
-    gvputs(job, xml_string(job->common->info[0]));
+    gvputs_xml(job, job->common->info[0]);
     GVPUTS(job, " version ");
-    gvputs(job, xml_string(job->common->info[1]));
+    gvputs_xml(job, job->common->info[1]);
     GVPUTS(job, " (");
-    gvputs(job, xml_string(job->common->info[2]));
+    gvputs_xml(job, job->common->info[2]);
     GVPUTS(job, ")\n"
                 " -->\n");
 }
@@ -196,7 +198,7 @@ static void svg_begin_graph(GVJ_t * job)
     GVPUTS(job, "<!--");
     if (agnameof(obj->u.g)[0] && agnameof(obj->u.g)[0] != LOCALNAMEPREFIX) {
        GVPUTS(job, " Title: ");
-       gvputs(job, xml_string(agnameof(obj->u.g)));
+       gvputs_xml(job, agnameof(obj->u.g));
     }
     gvprintf(job, " Pages: %d -->\n",
             job->pagesArraySize.x * job->pagesArraySize.y);
@@ -260,7 +262,7 @@ static void svg_begin_page(GVJ_t * job)
     /* default style */
     if (agnameof(obj->u.g)[0] && agnameof(obj->u.g)[0] != LOCALNAMEPREFIX) {
        GVPUTS(job, "<title>");
-       gvputs(job, xml_string(agnameof(obj->u.g)));
+       gvputs_xml(job, agnameof(obj->u.g));
        GVPUTS(job, "</title>\n");
     }
 }
@@ -277,7 +279,7 @@ static void svg_begin_cluster(GVJ_t * job)
     svg_print_id_class(job, obj->id, NULL, "cluster", obj->u.sg);
     GVPUTS(job, ">\n"
                 "<title>");
-    gvputs(job, xml_string(agnameof(obj->u.g)));
+    gvputs_xml(job, agnameof(obj->u.g));
     GVPUTS(job, "</title>\n");
 }
 
@@ -298,7 +300,7 @@ static void svg_begin_node(GVJ_t * job)
     svg_print_id_class(job, obj->id, idx, "node", obj->u.n);
     GVPUTS(job, ">\n"
                 "<title>");
-    gvputs(job, xml_string(agnameof(obj->u.n)));
+    gvputs_xml(job, agnameof(obj->u.n));
     GVPUTS(job, "</title>\n");
 }
 
@@ -317,7 +319,7 @@ static void svg_begin_edge(GVJ_t * job)
 
                 "<title>");
     ename = strdup_and_subst_obj("\\E", obj->u.e);
-    gvputs(job, xml_string(ename));
+    gvputs_xml(job, ename);
     free(ename);
     GVPUTS(job, "</title>\n");
 }
@@ -334,7 +336,7 @@ svg_begin_anchor(GVJ_t * job, char *href, char *tooltip, char *target,
     GVPUTS(job, "<g");
     if (id) {
        GVPUTS(job, " id=\"a_");
-        gvputs(job, xml_string(id));
+        gvputs_xml(job, id);
         GVPUTS(job, "\"");
     }
     GVPUTS(job, ">"
@@ -352,7 +354,7 @@ svg_begin_anchor(GVJ_t * job, char *href, char *tooltip, char *target,
     }
     if (target && target[0]) {
        GVPUTS(job, " target=\"");
-       gvputs(job, xml_string(target));
+       gvputs_xml(job, target);
        GVPUTS(job, "\"");
     }
     GVPUTS(job, ">\n");
@@ -470,8 +472,9 @@ static void svg_textspan(GVJ_t * job, pointf p, textspan_t * span)
     }
     GVPUTS(job, ">");
     if (obj->labeledgealigned) {
-       gvprintf(job, "<textPath xlink:href=\"#%s_p\" startOffset=\"50%%\">", xml_string(obj->id));
-       GVPUTS(job, "<tspan x=\"0\" dy=\"");
+       GVPUTS(job, "<textPath xlink:href=\"#");
+       gvputs_xml(job, obj->id);
+       GVPUTS(job, "_p\" startOffset=\"50%\"><tspan x=\"0\" dy=\"");
         gvprintdouble(job, -p.y);
         GVPUTS(job, "\">");
     }
@@ -618,7 +621,7 @@ svg_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start,
     GVPUTS(job, "<path");
     if (obj->labeledgealigned) {
        GVPUTS(job, " id=\"");
-       gvputs(job, xml_string(obj->id));
+       gvputs_xml(job, obj->id);
        GVPUTS(job, "_p\" ");
     } 
     svg_grstyle(job, filled, gid);
index 53021818a1b8c50b2d18527688359451fe2089ba..5bf1a88a0cd48bafacfba0f4d73dd4f93a961e4c 100644 (file)
@@ -64,8 +64,10 @@ namespace Visio
        
        void Run::Print(GVJ_t* job, unsigned int index) const
        {
-               auto c_str = const_cast<char*>(_text.c_str());
-               gvprintf(job, "<pp IX='%u'/><cp IX='%u'/>%s\n", index, index, xml_string(c_str));       /* para mark + char mark + actual text */
+               // para mark + char mark + actual text
+               gvprintf(job, "<pp IX='%u'/><cp IX='%u'/>", index, index);
+               gvputs_xml(job, _text.c_str());
+               gvputs(job, "\n");
        }
        
        Text Text::CreateText(GVJ_t* job, pointf p, textspan_t* span)