On Tue, May 4, 2010 11:07, Akim Demaille wrote:
>> attached patch.txt >Use diff -u.  Thanks!
attached it: patches on the graphviz.c

>Maybe we should use the fact that attributes are free...
An idea to give a try, but now made new dot parser
and already in trouble because my version is more
strict then the dot version. anyway worth do just do it.

Thanks.

-- 
/*
 *   ,           ,
 *  /             \
 * ((__-^^-,-^^-__))
 * `-_---'  `---_-'
 *  `--|o`   'o|--'
 *      \  `  /
 *       ): :(
 *       :o_o:
 *        "-"
 *
 * GNU http://www.gnu.org/
 */

diff -u -r branch-2.5/src/graphviz.c branch-2.5a/src/graphviz.c
--- branch-2.5/src/graphviz.c   2010-05-02 23:04:16.000000000 +0200
+++ branch-2.5a/src/graphviz.c  2010-05-03 06:52:33.000000000 +0200
@@ -27,6 +27,9 @@
 #include "files.h"
 #include "graphviz.h"
 
+static int n_nodes = 0;
+static int n_edges = 0;
+
 /* Return an unambiguous printable representation for NAME, suitable
    for C strings.  Use slot 2 since the user may use slots 0 and 1.  */
 
@@ -39,10 +42,14 @@
 void
 start_graph (FILE *fout)
 {
+  n_nodes = 0;
+  n_edges = 0;
   fprintf (fout,
            _("// Generated by %s.\n"
              "// Report bugs to <%s>.\n"
              "// Home page: <%s>.\n"
+             "// Shifts are solid, gotos are dashed, and error are dotted edge 
lines.\n"
+             "// Shifts are blue, gotos are green, and error are red colored 
edge lines.\n"
              "\n"),
            PACKAGE_STRING,
            PACKAGE_BUGREPORT,
@@ -56,16 +63,18 @@
 void
 output_node (int id, char const *label, FILE *fout)
 {
-  fprintf (fout, "  %d [label=%s]\n", id, quote (label));
+  n_nodes = n_nodes + 1;
+  fprintf (fout, "  \"%d\" [label=%s]\n", id, quote (label));
 }
 
 void
 output_edge (int source, int destination, char const *label,
-            char const *style, FILE *fout)
+            char const *style, char const *color, FILE *fout)
 {
-  fprintf (fout, "  %d -> %d [style=%s", source, destination, style);
+  n_edges = n_edges + 1;
+  fprintf (fout, "  \"%d\" -> \"%d\" [style=%s,color=\"%s\"", source, 
destination, style, color);
   if (label)
-    fprintf (fout, " label=%s", quote (label));
+    fprintf (fout, ",label=%s", quote (label));
   fputs ("]\n", fout);
 }
 
@@ -73,4 +82,5 @@
 finish_graph (FILE *fout)
 {
   fputs ("}\n", fout);
+  fprintf (fout, "// %d nodes and %d edges in this bison graph\n", n_nodes, 
n_edges);
 }
diff -u -r branch-2.5/src/graphviz.h branch-2.5a/src/graphviz.h
--- branch-2.5/src/graphviz.h   2010-04-12 01:19:35.000000000 +0200
+++ branch-2.5a/src/graphviz.h  2010-05-03 06:12:58.000000000 +0200
@@ -38,9 +38,10 @@
 /// \param label        human readable label of the edge
 ///                     (no Dot escaping needed).  Can be 0.
 /// \param style        Dot style of the edge (e.g., "dotted" or "solid").
+/// \param color        Dot color of the edge (e.g., "red" or "green" or 
"blue").
 /// \param fout         output stream.
 void output_edge (int source, int destination, char const *label,
-                 char const *style, FILE *fout);
+                 char const *style, char const *color, FILE *fout);
 
 /// End a Dot graph.
 /// \param fout  output stream.
diff -u -r branch-2.5/src/print_graph.c branch-2.5a/src/print_graph.c
--- branch-2.5/src/print_graph.c        2010-04-12 01:19:35.000000000 +0200
+++ branch-2.5a/src/print_graph.c       2010-05-03 06:08:01.000000000 +0200
@@ -134,12 +134,18 @@
           : TRANSITION_IS_SHIFT (trans, i) ? "solid"
           : "dashed");
 
+       /* Shifts are blue, gotos are green, and error is red. */
+       char const *color =
+         (TRANSITION_IS_ERROR (trans, i) ? "red"
+          : TRANSITION_IS_SHIFT (trans, i) ? "blue"
+          : "green");
+
        if (TRANSITION_IS_ERROR (trans, i)
            && strcmp (symbols[sym]->tag, "error") != 0)
          abort ();
        output_edge (s->number, s1->number,
                     TRANSITION_IS_ERROR (trans, i) ? NULL : symbols[sym]->tag,
-                    style, fgraph);
+                    style, color, fgraph);
       }
 }
 

Reply via email to