From fe204eeaf9676a13498034d9b17a8d985e040e52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Mon, 7 Dec 2015 08:37:08 +0100 Subject: [PATCH] graphviz.dot: better string escaping using unparse-string --- extra/graphviz/dot/dot.factor | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/extra/graphviz/dot/dot.factor b/extra/graphviz/dot/dot.factor index 105caf327e..82109cc87b 100644 --- a/extra/graphviz/dot/dot.factor +++ b/extra/graphviz/dot/dot.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2012 Alex Vondrak. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors classes classes.tuple combinators formatting -graphviz graphviz.attributes io io.files kernel namespaces +USING: accessors classes classes.tuple combinators formatting graphviz +graphviz.attributes io io.files kernel namespaces prettyprint.backend sequences splitting strings words ; IN: graphviz.dot @@ -14,11 +14,10 @@ GENERIC: dot. ( obj -- ) ! option in case there's a keyword clash, spaces in the ID, ! etc. This does mean that HTML labels aren't supported, but ! they don't seem to work using the Graphviz API anyway. -: escape ( str -- str' ) - "\"" split "\\\"" join - "\0" split "" join ; +: quote-string ( str -- str' ) + "\"" "\"" unparse-string "\0" split "" join ; -M: string dot. escape "\"%s\" " printf ; +M: string dot. quote-string "%s " printf ; : id. ( obj -- ) id>> dot. ; @@ -47,7 +46,7 @@ M: subgraph dot. "subgraph " write [ id. ] [ statements. ] bi ; : attribute, ( attr value -- ) - dup [ "%s=\"%s\"," printf ] [ 2drop ] if ; + dup [ quote-string "%s=%s," printf ] [ 2drop ] if ; : attributes. ( attrs -- ) "[" write