From the read_graphviz_new.hpp
source:
struct edge_info {
node_and_port source;
node_and_port target;
properties props;
};
Where node_and_port
looks like this:
struct node_and_port {
node_name name;
std::string angle; // Or empty if no angle
std::vector<std::string> location; // Up to two identifiers
// ...
}
I think (but have not verified) that these results are available if you call the parser directly using:
void parse_graphviz_from_string(const std::string& str, parser_result& result, bool want_directed);
in namespace boost::read_graphviz_detail
. It may also be available in the dynamic_property_map
if you use read_graphviz
directly; it internally refers to read_graphviz_new
.
Note: In graphviz.hpp
, one of two graphviz parsers is selected, based on an #ifdef
:
#ifdef BOOST_GRAPH_USE_SPIRIT_PARSER
return read_graphviz_spirit(data.begin(), data.end(), graph, dp, node_id);
#else // Non-Spirit parser
return read_graphviz_new(data,graph,dp,node_id);
#endif
If I am reading this correctly, then the non-spirit parser is the one you want; the spirit-based one looks like it disregards ports.
Anyway, this is just based on a quick look at the source for boost v. 1.44; for me code of interest lives in /usr/include/boost/graph/detail/read_graphviz_new.hpp
. I have not tested this, but it looks like all the plumbing is there.