]> gitweb.factorcode.org Git - factor.git/commitdiff
graphviz.dot: better string escaping using unparse-string
authorBjörn Lindqvist <bjourne@gmail.com>
Mon, 7 Dec 2015 07:37:08 +0000 (08:37 +0100)
committerBjörn Lindqvist <bjourne@gmail.com>
Mon, 7 Dec 2015 07:38:10 +0000 (08:38 +0100)
extra/graphviz/dot/dot.factor

index 105caf327e84ec0bb8d4d06448bd35e19bc024eb..82109cc87b66b3437a8a3cb8f87b3eac5c98dba1 100644 (file)
@@ -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