2 Copyright (C) 2018-2023 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
22 /* Styles that can be applied to a ui_file. */
25 /* One of the basic colors that can be handled by ANSI
40 /* Representation of a terminal color. */
55 gdb_assert (c
>= -1 && c
<= 255);
58 color (uint8_t r
, uint8_t g
, uint8_t b
)
66 bool operator== (const color
&other
) const
68 if (m_simple
!= other
.m_simple
)
71 return m_value
== other
.m_value
;
72 return (m_red
== other
.m_red
&& m_green
== other
.m_green
73 && m_blue
== other
.m_blue
);
76 bool operator< (const color
&other
) const
78 if (m_simple
!= other
.m_simple
)
79 return m_simple
< other
.m_simple
;
81 return m_value
< other
.m_value
;
82 if (m_red
< other
.m_red
)
84 if (m_red
== other
.m_red
)
86 if (m_green
< other
.m_green
)
88 if (m_green
== other
.m_green
)
89 return m_blue
< other
.m_blue
;
94 /* Return true if this is the "NONE" color, false otherwise. */
97 return m_simple
&& m_value
== NONE
;
100 /* Return true if this is one of the basic colors, false
102 bool is_basic () const
104 return m_simple
&& m_value
>= BLACK
&& m_value
<= WHITE
;
107 /* Return the value of a basic color. */
108 int get_value () const
110 gdb_assert (is_basic ());
114 /* Fill in RGB with the red/green/blue values for this color.
115 This may not be called for basic colors or for the "NONE"
117 void get_rgb (uint8_t *rgb
) const;
119 /* Append the ANSI terminal escape sequence for this color to STR.
120 IS_FG indicates whether this is a foreground or background
121 color. Returns true if any characters were written; returns
122 false otherwise (which can only happen for the "NONE"
124 bool append_ansi (bool is_fg
, std::string
*str
) const;
134 uint8_t m_red
, m_green
, m_blue
;
139 /* Intensity settings that are available. */
147 ui_file_style () = default;
149 ui_file_style (color f
, color b
, intensity i
= NORMAL
)
156 bool operator== (const ui_file_style
&other
) const
158 return (m_foreground
== other
.m_foreground
159 && m_background
== other
.m_background
160 && m_intensity
== other
.m_intensity
161 && m_reverse
== other
.m_reverse
);
164 bool operator!= (const ui_file_style
&other
) const
166 return !(*this == other
);
169 /* Return the ANSI escape sequence for this style. */
170 std::string
to_ansi () const;
172 /* Return true if this style is the default style; false
174 bool is_default () const
176 return (m_foreground
== NONE
177 && m_background
== NONE
178 && m_intensity
== NORMAL
182 /* Return true if this style specified reverse display; false
184 bool is_reverse () const
189 /* Set/clear the reverse display flag. */
190 void set_reverse (bool reverse
)
195 /* Return the foreground color of this style. */
196 const color
&get_foreground () const
201 /* Set the foreground color of this style. */
202 void set_fg (color c
)
207 /* Return the background color of this style. */
208 const color
&get_background () const
213 /* Set the background color of this style. */
214 void set_bg (color c
)
219 /* Return the intensity of this style. */
220 intensity
get_intensity () const
225 /* Parse an ANSI escape sequence in BUF, modifying this style. BUF
226 must begin with an ESC character. Return true if an escape
227 sequence was successfully parsed; false otherwise. In either
228 case, N_READ is updated to reflect the number of chars read from
230 bool parse (const char *buf
, size_t *n_read
);
232 /* We need this because we can't pass a reference via va_args. */
233 const ui_file_style
*ptr () const
240 color m_foreground
= NONE
;
241 color m_background
= NONE
;
242 intensity m_intensity
= NORMAL
;
243 bool m_reverse
= false;
246 /* Skip an ANSI escape sequence in BUF. BUF must begin with an ESC
247 character. Return true if an escape sequence was successfully
248 skipped; false otherwise. If an escape sequence was skipped,
249 N_READ is updated to reflect the number of chars read from BUF. */
251 extern bool skip_ansi_escape (const char *buf
, int *n_read
);
253 #endif /* UI_STYLE_H */