graphviz.dot: fix escaping logic

It used escape the escape char \, but it shouldn't do that because it
leads to double escaping.
db4
Björn Lindqvist 2016-03-11 09:44:42 +01:00
parent 3bf7e49e9f
commit df93e4533d
2 changed files with 28 additions and 3 deletions

View File

@ -0,0 +1,21 @@
USING: graphviz.dot.private io.streams.string sequences tools.test ;
IN: graphviz.dot.tests
! Making sure strings are escaped properly
{
{
"\"BAH\" "
"\"LINE1\\nLINE2\" "
"\"\\lLINE1\\lLINE2\" "
"\"hum\\\"ho\\\"\" "
}
} [
{
"BAH"
"LINE1\\nLINE2"
"\\lLINE1\\lLINE2"
"hum\"ho\""
} [
[ dot. ] with-string-writer
] map
] unit-test

View File

@ -1,8 +1,8 @@
! 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 prettyprint.backend
sequences splitting strings words ;
graphviz.attributes io io.files kernel namespaces sequences splitting
strings words ;
IN: graphviz.dot
<PRIVATE
@ -14,8 +14,12 @@ 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.
!
! Special escaping logic is required here because of the \l escape
! sequence.
: quote-string ( str -- str' )
"\"" "\"" unparse-string "\0" split "" join ;
{ { "\"" "\\\"" } { "\0" "" } } [ first2 replace ] each
"\"" "\"" surround ;
M: string dot. quote-string "%s " printf ;