graph/encoding/dot: refactor quoting docs
MODIFY
graph/encoding/dot/decode.go
graph/encoding/dot/decode.go
@@ -44,9 +44,7 @@ type PortSetter interface {
// If the number of graphs encoded in data is not one, an error is returned and
// dst will hold the first graph in data.
//
-// Attributes and IDs are quoted if needed during marshalling, to conform with
-// valid DOT syntax. Quoted IDs and attributes are unquoted during unmarshaling,
-// so the data is kept in raw form.
+// Attributes and IDs are unquoted during unmarshalling if appropriate.
func Unmarshal(data []byte, dst encoding.Builder) error {
file, err := dot.ParseBytes(data)
if err != nil {
@@ -64,9 +62,7 @@ func Unmarshal(data []byte, dst encoding.Builder) error {
// If the number of graphs encoded in data is not one, an error is returned and
// dst will hold the first graph in data.
//
-// Attributes and IDs are quoted if needed during marshalling, to conform with
-// valid DOT syntax. Quoted IDs and attributes are unquoted during unmarshaling,
-// so the data is kept in raw form.
+// Attributes and IDs are unquoted during unmarshalling if appropriate.
func UnmarshalMulti(data []byte, dst encoding.MultiBuilder) error {
file, err := dot.ParseBytes(data)
if err != nil {

MODIFY
graph/encoding/dot/doc.go
graph/encoding/dot/doc.go
//
// DOT grammar: http://www.graphviz.org/doc/info/lang.html
//
+// Attribute quoting
+//
+// Attributes and IDs are quoted if needed during marshalling, to conform with
+// valid DOT syntax. Quoted IDs and attributes are unquoted during unmarshaling,
+// so the data is kept in raw form. As an exception, quoted text with a leading
+// `"<` and a trailing `>"` is not unquoted to ensure preservation of the string
+// during a round-trip.
package dot // import "gonum.org/v1/gonum/graph/encoding/dot"

MODIFY
graph/encoding/dot/encode.go
graph/encoding/dot/encode.go
@@ -93,9 +93,7 @@ type MultiSubgrapher interface {
// implementation of the Node, Attributer, Porter, Attributers, Structurer,
// Subgrapher and Graph interfaces.
//
-// Attributes and IDs are quoted if needed during marshalling, to conform with
-// valid DOT syntax. Quoted IDs and attributes are unquoted during unmarshaling,
-// so the data is kept in raw form.
+// Attributes and IDs are quoted if needed during marshalling.
func Marshal(g graph.Graph, name, prefix, indent string) ([]byte, error) {
var p simpleGraphPrinter
p.indent = indent
@@ -118,9 +116,7 @@ func Marshal(g graph.Graph, name, prefix, indent string) ([]byte, error) {
// implementation of the Node, Attributer, Porter, Attributers, Structurer,
// MultiSubgrapher and Multigraph interfaces.
//
-// Attributes and IDs are quoted if needed during marshalling, to conform with
-// valid DOT syntax. Quoted IDs and attributes are unquoted during unmarshaling,
-// so the data is kept in raw form.
+// Attributes and IDs are quoted if needed during marshalling.
func MarshalMulti(g graph.Multigraph, name, prefix, indent string) ([]byte, error) {
var p multiGraphPrinter
p.indent = indent

graph/encoding/dot: refactor quoting docs (#797)