Add highlight style, title style, fputs_highlighted. Improve 'show style'

Have 'show style' and its subcommands using a style to style its output.
This allows the GDB user or developer to use 'show style' to visually see
with one command how all the current styles look like.

Add 2 new styles highlight style, title style and fputs_highlighted function.

Highlight style is used by fputs_highlighted to highlight the parts of
its char *STR argument that match a HIGHLIGHT regexp.
This (and the title style) will be used in a following patch.
This commit is contained in:
Philippe Waroquiers 2019-05-31 13:47:37 +02:00
parent 79b377b3cf
commit 9303eb2fb1
5 changed files with 161 additions and 34 deletions

View file

@ -1869,6 +1869,42 @@ fputs_styled (const char *linebuffer, const ui_file_style &style,
}
}
/* See utils.h. */
void
fputs_highlighted (const char *str, const compiled_regex &highlight,
struct ui_file *stream)
{
regmatch_t pmatch;
while (*str && highlight.exec (str, 1, &pmatch, 0) == 0)
{
size_t n_highlight = pmatch.rm_eo - pmatch.rm_so;
/* Output the part before pmatch with current style. */
while (pmatch.rm_so > 0)
{
fputc_filtered (*str, stream);
pmatch.rm_so--;
str++;
}
/* Output pmatch with the highlight style. */
set_output_style (stream, highlight_style.style ());
while (n_highlight > 0)
{
fputc_filtered (*str, stream);
n_highlight--;
str++;
}
set_output_style (stream, ui_file_style ());
}
/* Output the trailing part of STR not matching HIGHLIGHT. */
if (*str)
fputs_filtered (str, stream);
}
int
putchar_unfiltered (int c)
{