@@ -10,8 +10,6 @@ DeclareOperation("GV_StringifyGraphHead", [IsGVGraph]);
1010DeclareOperation(" GV_StringifyDigraphHead" , [ IsGVGraph] );
1111DeclareOperation(" GV_StringifySubgraphHead" , [ IsGVGraph] );
1212DeclareOperation(" GV_StringifyContextHead" , [ IsGVGraph] );
13- DeclareOperation(" GV_StringifyGraphEdge" , [ IsGVEdge] );
14- DeclareOperation(" GV_StringifyDigraphEdge" , [ IsGVEdge] );
1513DeclareOperation(" GV_StringifyNode" , [ IsGVNode] );
1614DeclareOperation(" GV_StringifyGraphAttrs" , [ IsGVGraph] );
1715DeclareOperation(" GV_StringifyNodeEdgeAttrs" , [ IsGV_Map] );
@@ -375,50 +373,21 @@ end);
375373
376374InstallMethod(ViewString, " for a graphviz graph" , [ IsGVGraph] ,
377375function (g )
378- local result, edges, nodes;
379- result := " " ;
380- edges := Length(GraphvizEdges(g));
381- nodes := Length(GV_MapNames(GraphvizNodes(g)));
382-
383- Append(result, StringFormatted(" <graphviz graph " , GraphvizName(g)));
384-
385- if GraphvizName(g) <> " " then
386- Append(result, StringFormatted(" {} " , GraphvizName(g)));
387- fi ;
388-
389- Append(result, StringFormatted(" with {} " , GV_Pluralize(nodes, " node" )));
390- Append(result, StringFormatted(" and {}>" , GV_Pluralize(edges, " edge" )));
376+ local result, edges, nodes, kind;
391377
392- return result;
393- end );
394-
395- InstallMethod(ViewString, " for a graphviz digraph" , [ IsGVDigraph] ,
396- function (g )
397- local result, edges, nodes;
398378 result := " " ;
399379 edges := Length(GraphvizEdges(g));
400380 nodes := Length(GV_MapNames(GraphvizNodes(g)));
401381
402- Append(result, StringFormatted(" <graphviz digraph " , GraphvizName(g)));
403-
404- if GraphvizName(g) <> " " then
405- Append(result, StringFormatted(" {} " , GraphvizName(g)));
382+ if IsGVDigraph(g) then
383+ kind := " digraph" ;
384+ elif IsGVContext(g) then
385+ kind := " context" ;
386+ else
387+ kind := " graph" ;
406388 fi ;
407389
408- Append(result, StringFormatted(" with {} " , GV_Pluralize(nodes, " node" )));
409- Append(result, StringFormatted(" and {}>" , GV_Pluralize(edges, " edge" )));
410-
411- return result;
412- end );
413-
414- InstallMethod(ViewString, " for a graphviz context" , [ IsGVContext] ,
415- function (g )
416- local result, edges, nodes;
417- result := " " ;
418- edges := Length(GraphvizEdges(g));
419- nodes := Length(GV_MapNames(GraphvizNodes(g)));
420-
421- Append(result, StringFormatted(" <graphviz context " , GraphvizName(g)));
390+ Append(result, StringFormatted(" <graphviz {} " , kind));
422391
423392 if GraphvizName(g) <> " " then
424393 Append(result, StringFormatted(" {} " , GraphvizName(g)));
@@ -430,9 +399,9 @@ function(g)
430399 return result;
431400end );
432401
433- # ###########################################################
402+ # ###########################################################
434403# Getters
435- # ###########################################################
404+ # ###########################################################
436405InstallMethod(GraphvizName,
437406" for a graphviz object" ,
438407[ IsGVObject] ,
@@ -1059,33 +1028,19 @@ function(node)
10591028end );
10601029
10611030# @ Return DOT graph edge statement line.
1062- InstallMethod(GV_StringifyGraphEdge, " for a graphviz edge" ,
1063- [ IsGVEdge] ,
1064- function (edge )
1065- local head, tail, attrs;
1066- head := GraphvizName(GraphvizHead(edge));
1067- tail := GraphvizName(GraphvizTail(edge));
1068- attrs := GraphvizAttrs(edge);
1069-
1070- # handle : syntax
1071- return StringFormatted(" \t {} -- {}{}\n " ,
1072- head,
1073- tail,
1074- GV_StringifyNodeEdgeAttrs(attrs));
1075- end );
1076-
1077- # @ Return DOT digraph edge statement line.
1078- InstallMethod(GV_StringifyDigraphEdge, " for a graphviz edge" ,
1079- [ IsGVEdge] ,
1080- function (edge )
1031+ BindGlobal(" GV_StringifyEdge" ,
1032+ function (edge, edge_str )
10811033 local head, tail, attrs;
1034+ Assert (0 , IsGVEdge(edge));
1035+ Assert (0 , IsString(edge_str));
10821036 head := GraphvizName(GraphvizHead(edge));
10831037 tail := GraphvizName(GraphvizTail(edge));
10841038 attrs := GraphvizAttrs(edge);
10851039
10861040 # handle : syntax
1087- return StringFormatted(" \t {} -> {}{}\n " ,
1041+ return StringFormatted(" \t {} {} {}{}\n " ,
10881042 head,
1043+ edge_str,
10891044 tail,
10901045 GV_StringifyNodeEdgeAttrs(attrs));
10911046end );
@@ -1233,9 +1188,9 @@ function(graph, is_subgraph)
12331188 Append(result, GV_StringifyNode(obj));
12341189 elif IsGVEdge(obj) then
12351190 if IsGVDigraph(GV_GetRoot(graph)) then
1236- Append(result, GV_StringifyDigraphEdge (obj));
1191+ Append(result, GV_StringifyEdge (obj, " -> " ));
12371192 else
1238- Append(result, GV_StringifyGraphEdge (obj));
1193+ Append(result, GV_StringifyEdge (obj, " -- " ));
12391194 fi ;
12401195 else
12411196 return ErrorNoReturn(" Invalid graphviz object type." );
0 commit comments