1/* Helper code for graphviz output.
2 Copyright (C) 2019-2023 Free Software Foundation, Inc.
3 Contributed by David Malcolm <dmalcolm@redhat.com>.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify it
8under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 3, or (at your option)
10any later version.
11
12GCC is distributed in the hope that it will be useful, but
13WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
20
21#include "config.h"
22#include "system.h"
23#include "coretypes.h"
24#include "graphviz.h"
25
26/* graphviz_out's ctor, wrapping PP. */
27
28graphviz_out::graphviz_out (pretty_printer *pp)
29: m_pp (pp),
30 m_indent (0)
31{
32}
33
34/* Formatted print of FMT. */
35
36void
37graphviz_out::print (const char *fmt, ...)
38{
39 va_list ap;
40
41 va_start (ap, fmt);
42 text_info text (fmt, &ap, errno);
43 pp_format (m_pp, &text);
44 pp_output_formatted_text (m_pp);
45 va_end (ap);
46}
47
48/* Formatted print of FMT. The text is indented by the current
49 indent, and a newline is added. */
50
51void
52graphviz_out::println (const char *fmt, ...)
53{
54 va_list ap;
55
56 write_indent ();
57
58 va_start (ap, fmt);
59 text_info text (fmt, &ap, errno);
60 pp_format (m_pp, &text);
61 pp_output_formatted_text (m_pp);
62 va_end (ap);
63
64 pp_newline (m_pp);
65}
66
67/* Print the current indent to the underlying pp. */
68
69void
70graphviz_out::write_indent ()
71{
72 for (int i = 0; i < m_indent * 2; ++i)
73 pp_space (m_pp);
74}
75
76/* Write the start of an HTML-like row via <TR>, writing to the stream
77 so that followup text can be escaped. */
78
79void
80graphviz_out::begin_tr ()
81{
82 pp_string (m_pp, "<TR>");
83 pp_write_text_to_stream (m_pp);
84}
85
86/* Write the end of an HTML-like row via </TR>, writing to the stream
87 so that followup text can be escaped. */
88
89void
90graphviz_out::end_tr ()
91{
92 pp_string (m_pp, "</TR>");
93 pp_write_text_to_stream (m_pp);
94}
95
96/* Write the start of an HTML-like <TD>, writing to the stream
97 so that followup text can be escaped. */
98
99void
100graphviz_out::begin_td ()
101{
102 pp_string (m_pp, "<TD ALIGN=\"LEFT\">");
103 pp_write_text_to_stream (m_pp);
104}
105
106/* Write the end of an HTML-like </TD>, writing to the stream
107 so that followup text can be escaped. */
108
109void
110graphviz_out::end_td ()
111{
112 pp_string (m_pp, "</TD>");
113 pp_write_text_to_stream (m_pp);
114}
115
116/* Write the start of an HTML-like row via <TR><TD>, writing to the stream
117 so that followup text can be escaped. */
118
119void
120graphviz_out::begin_trtd ()
121{
122 pp_string (m_pp, "<TR><TD ALIGN=\"LEFT\">");
123 pp_write_text_to_stream (m_pp);
124}
125
126/* Write the end of an HTML-like row via </TD></TR>, writing to the stream
127 so that followup text can be escaped. */
128
129void
130graphviz_out::end_tdtr ()
131{
132 pp_string (m_pp, "</TD></TR>");
133 pp_write_text_to_stream (m_pp);
134}
135

source code of gcc/graphviz.cc