Branch data Line data Source code
1 : : /* Copyright (C) 2024 Free Software Foundation, Inc.
2 : : Contributed by David Malcolm <dmalcolm@redhat.com>
3 : :
4 : : This file is part of GCC.
5 : :
6 : : GCC is free software; you can redistribute it and/or modify it under
7 : : the terms of the GNU General Public License as published by the Free
8 : : Software Foundation; either version 3, or (at your option) any later
9 : : version.
10 : :
11 : : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 : : WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 : : FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 : : for more details.
15 : :
16 : : You should have received a copy of the GNU General Public License
17 : : along with GCC; see the file COPYING3. If not see
18 : : <http://www.gnu.org/licenses/>. */
19 : :
20 : : #ifndef GCC_PRETTY_PRINT_MARKUP_H
21 : : #define GCC_PRETTY_PRINT_MARKUP_H
22 : :
23 : : #include "diagnostic-color.h"
24 : :
25 : : class pp_token_list;
26 : :
27 : : namespace pp_markup {
28 : :
29 : : class context
30 : : {
31 : : public:
32 : 21750 : context (pretty_printer &pp,
33 : : bool "ed,
34 : : pp_token_list *formatted_token_list)
35 : 21750 : : m_pp (pp),
36 : 21750 : m_buf (*pp_buffer (&pp)),
37 : 21750 : m_quoted (quoted),
38 : 21750 : m_formatted_token_list (formatted_token_list)
39 : : {
40 : : }
41 : :
42 : : void begin_quote ();
43 : : void end_quote ();
44 : :
45 : : void begin_highlight_color (const char *color_name);
46 : : void end_highlight_color ();
47 : :
48 : : void push_back_any_text ();
49 : :
50 : : pretty_printer &m_pp;
51 : : output_buffer &m_buf;
52 : : bool &m_quoted;
53 : : pp_token_list *m_formatted_token_list;
54 : : };
55 : :
56 : : /* Abstract base class for use in pp_format for handling "%e".
57 : : This can add arbitrary content to the buffer being constructed, and
58 : : isolates the non-typesafe part of the formatting call in one place. */
59 : :
60 : : class element
61 : : {
62 : : public:
63 : 17758 : virtual ~element () {}
64 : : virtual void add_to_phase_2 (context &ctxt) = 0;
65 : :
66 : : protected:
67 : 17758 : element () {}
68 : :
69 : : private:
70 : : DISABLE_COPY_AND_ASSIGN (element);
71 : : };
72 : :
73 : : /* Concrete subclass: handle "%e" by printing a comma-separated list
74 : : of quoted strings. */
75 : :
76 : 180 : class comma_separated_quoted_strings : public element
77 : : {
78 : : public:
79 : 188 : comma_separated_quoted_strings (const auto_vec<const char *> &strings)
80 : 184 : : m_strings (strings)
81 : : {
82 : : }
83 : :
84 : : void add_to_phase_2 (context &ctxt) final override;
85 : :
86 : : private:
87 : : const auto_vec<const char *> &m_strings;
88 : : };
89 : :
90 : : } // namespace pp_markup
91 : :
92 : 74 : class pp_element_quoted_string : public pp_element
93 : : {
94 : : public:
95 : 74 : pp_element_quoted_string (const char *text,
96 : : const char *highlight_color = nullptr)
97 : 74 : : m_text (text),
98 : 74 : m_highlight_color (highlight_color)
99 : : {}
100 : :
101 : 144 : void add_to_phase_2 (pp_markup::context &ctxt) final override
102 : : {
103 : 144 : ctxt.begin_quote ();
104 : 144 : if (m_highlight_color)
105 : 132 : ctxt.begin_highlight_color (m_highlight_color);
106 : 144 : pp_string (&ctxt.m_pp, m_text);
107 : 144 : if (m_highlight_color)
108 : 132 : ctxt.end_highlight_color ();
109 : 144 : ctxt.end_quote ();
110 : 144 : }
111 : :
112 : : private:
113 : : const char *m_text;
114 : : const char *m_highlight_color;
115 : : };
116 : :
117 : : #endif /* GCC_PRETTY_PRINT_MARKUP_H */
|