|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r63268 - in trunk: boost/graph libs/graph/doc libs/graph/test
From: jewillco_at_[hidden]
Date: 2010-06-23 16:46:23
Author: jewillco
Date: 2010-06-23 16:46:22 EDT (Wed, 23 Jun 2010)
New Revision: 63268
URL: http://svn.boost.org/trac/boost/changeset/63268
Log:
Made Graphviz writer quote and escape output strings properly; added linkage to boost_graph in test program; added note about needing -lboost_regex in documentation
Text files modified:
trunk/boost/graph/graphviz.hpp | 22 ++++++++++++++++++----
trunk/libs/graph/doc/write-graphviz.html | 4 ++--
trunk/libs/graph/test/Jamfile.v2 | 2 +-
3 files changed, 21 insertions(+), 7 deletions(-)
Modified: trunk/boost/graph/graphviz.hpp
==============================================================================
--- trunk/boost/graph/graphviz.hpp (original)
+++ trunk/boost/graph/graphviz.hpp 2010-06-23 16:46:22 EDT (Wed, 23 Jun 2010)
@@ -26,6 +26,9 @@
#include <boost/graph/overloading.hpp>
#include <boost/graph/dll_import_export.hpp>
#include <boost/spirit/include/classic_multi_pass.hpp>
+#include <boost/regex.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/algorithm/string/replace.hpp>
namespace boost {
@@ -56,13 +59,24 @@
}
};
+ template <typename T>
+ inline std::string escape_dot_string(const T& obj) {
+ static boost::regex valid_unquoted_id("[a-zA-Z\\0200-\\0377_][a-zA-Z\\0200-\\0377_0-9]*|-?(?:[.][0-9]*|[0-9]+(?:[.][0-9]*)?)");
+ std::string s(boost::lexical_cast<std::string>(obj));
+ if (boost::regex_match(s, valid_unquoted_id)) {
+ return s;
+ } else {
+ return "\"" + boost::algorithm::replace_all_copy(s, "\"", "\\\"") + "\"";
+ }
+ }
+
template <class Name>
class label_writer {
public:
label_writer(Name _name) : name(_name) {}
template <class VertexOrEdge>
void operator()(std::ostream& out, const VertexOrEdge& v) const {
- out << "[label=\"" << get(name, v) << "\"]";
+ out << "[label=" << escape_dot_string(get(name, v)) << "]";
}
private:
Name name;
@@ -93,7 +107,7 @@
iend = attr.end();
while ( i != iend ) {
- out << i->first << "=\"" << i->second << "\"";
+ out << i->first << "=" << escape_dot_string(i->second);
++i;
if ( i != iend )
out << ", ";
@@ -506,7 +520,7 @@
else out << ", ";
first = false;
- out << i->first << "=\"" << i->second->get_string(key) << "\"";
+ out << i->first << "=" << escape_dot_string(i->second->get_string(key));
}
}
@@ -536,7 +550,7 @@
else out << ", ";
first = false;
- out << i->first << "=\"" << i->second->get_string(key) << "\"";
+ out << i->first << "=" << escape_dot_string(i->second->get_string(key));
}
}
Modified: trunk/libs/graph/doc/write-graphviz.html
==============================================================================
--- trunk/libs/graph/doc/write-graphviz.html (original)
+++ trunk/libs/graph/doc/write-graphviz.html 2010-06-23 16:46:22 EDT (Wed, 23 Jun 2010)
@@ -330,8 +330,8 @@
<a href="./read_graphviz.html"><tt>read_graphviz</tt></a>
<h3>Notes</h3>
-Note that you can use Graphviz dot file write facilities
-without the library <tt>libbglviz.a</tt>.
+The Graphviz file writing functions require that programs link to the
+<tt>boost_regex</tt> library.
<br>
<HR>
Modified: trunk/libs/graph/test/Jamfile.v2
==============================================================================
--- trunk/libs/graph/test/Jamfile.v2 (original)
+++ trunk/libs/graph/test/Jamfile.v2 2010-06-23 16:46:22 EDT (Wed, 23 Jun 2010)
@@ -112,7 +112,7 @@
[ run clustering_coefficient.cpp ]
[ run core_numbers_test.cpp ]
[ run read_propmap.cpp ]
- [ run mcgregor_subgraphs_test.cpp ]
+ [ run mcgregor_subgraphs_test.cpp ../build//boost_graph ]
[ compile grid_graph_cc.cpp ]
[ run grid_graph_test.cpp ]
[ run incremental_components_test.cpp ]
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk