]> git.saurik.com Git - bison.git/blame - src/graphviz.c
graphs: style: use left justification for states
[bison.git] / src / graphviz.c
CommitLineData
35fe0834
PE
1/* Output Graphviz specification of a state machine generated by Bison.
2
c932d613 3 Copyright (C) 2006-2007, 2009-2012 Free Software Foundation, Inc.
35fe0834
PE
4
5 This file is part of Bison, the GNU Compiler Compiler.
6
f16b0819 7 This program is free software: you can redistribute it and/or modify
35fe0834 8 it under the terms of the GNU General Public License as published by
f16b0819
PE
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
35fe0834 11
f16b0819 12 This program is distributed in the hope that it will be useful,
35fe0834
PE
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
f16b0819 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
35fe0834
PE
19
20/* Written by Paul Eggert and Satya Kiran Popuri. */
21
22#include <config.h>
23#include "system.h"
24
25#include <quotearg.h>
26
a0279765 27#include "files.h"
35fe0834
PE
28#include "graphviz.h"
29
30/* Return an unambiguous printable representation for NAME, suitable
31 for C strings. Use slot 2 since the user may use slots 0 and 1. */
32
a13121f7 33static char *
35fe0834
PE
34quote (char const *name)
35{
36 return quotearg_n_style (2, c_quoting_style, name);
37}
38
39void
40start_graph (FILE *fout)
41{
a0279765 42 fprintf (fout,
ad6f84e5
JD
43 _("// Generated by %s.\n"
44 "// Report bugs to <%s>.\n"
45 "// Home page: <%s>.\n"
a0279765
AD
46 "\n"),
47 PACKAGE_STRING,
48 PACKAGE_BUGREPORT,
49 PACKAGE_URL);
50 fprintf (fout,
51 "digraph %s\n"
52 "{\n",
53 quote (grammar_file));
2be37f19 54 fprintf (fout, "node [shape=box]\n");
35fe0834
PE
55}
56
57void
58output_node (int id, char const *label, FILE *fout)
59{
a13121f7 60 fprintf (fout, " %d [label=\"%s\"]\n", id, label);
35fe0834
PE
61}
62
63void
64output_edge (int source, int destination, char const *label,
a13121f7 65 char const *style, FILE *fout)
35fe0834 66{
21f1b063 67 fprintf (fout, " %d -> %d [style=%s", source, destination, style);
35fe0834
PE
68 if (label)
69 fprintf (fout, " label=%s", quote (label));
70 fputs ("]\n", fout);
71}
72
a13121f7
TR
73char const *
74escape (char const *name)
75{
76 char *q = quote (name);
77 q[strlen (q) - 1] = '\0';
78 return q + 1;
79}
80
35fe0834
PE
81void
82finish_graph (FILE *fout)
83{
84 fputs ("}\n", fout);
85}