diff options
Diffstat (limited to 'gcc/graphviz.cc')
-rw-r--r-- | gcc/graphviz.cc | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/gcc/graphviz.cc b/gcc/graphviz.cc new file mode 100644 index 0000000..1185fdb --- /dev/null +++ b/gcc/graphviz.cc @@ -0,0 +1,100 @@ +/* Helper code for graphviz output. + Copyright (C) 2019-2020 Free Software Foundation, Inc. + Contributed by David Malcolm <dmalcolm@redhat.com>. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "graphviz.h" + +/* graphviz_out's ctor, wrapping PP. */ + +graphviz_out::graphviz_out (pretty_printer *pp) +: m_pp (pp), + m_indent (0) +{ +} + +/* Formatted print of FMT. */ + +void +graphviz_out::print (const char *fmt, ...) +{ + text_info text; + va_list ap; + + va_start (ap, fmt); + text.err_no = errno; + text.args_ptr = ≈ + text.format_spec = fmt; + pp_format (m_pp, &text); + pp_output_formatted_text (m_pp); + va_end (ap); +} + +/* Formatted print of FMT. The text is indented by the current + indent, and a newline is added. */ + +void +graphviz_out::println (const char *fmt, ...) +{ + text_info text; + va_list ap; + + write_indent (); + + va_start (ap, fmt); + text.err_no = errno; + text.args_ptr = ≈ + text.format_spec = fmt; + pp_format (m_pp, &text); + pp_output_formatted_text (m_pp); + va_end (ap); + + pp_newline (m_pp); +} + +/* Print the current indent to the underlying pp. */ + +void +graphviz_out::write_indent () +{ + for (int i = 0; i < m_indent * 2; ++i) + pp_space (m_pp); +} + +/* Write the start of an HTML-like row via <TR><TD>, writing to the stream + so that followup text can be escaped. */ + +void +graphviz_out::begin_tr () +{ + pp_string (m_pp, "<TR><TD ALIGN=\"LEFT\">"); + pp_write_text_to_stream (m_pp); +} + +/* Write the end of an HTML-like row via </TD></TR>, writing to the stream + so that followup text can be escaped. */ + +void +graphviz_out::end_tr () +{ + pp_string (m_pp, "</TD></TR>"); + pp_write_text_to_stream (m_pp); +} |