aboutsummaryrefslogtreecommitdiff
path: root/gcc/diagnostic-format-html.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/diagnostic-format-html.cc')
-rw-r--r--gcc/diagnostic-format-html.cc71
1 files changed, 33 insertions, 38 deletions
diff --git a/gcc/diagnostic-format-html.cc b/gcc/diagnostic-format-html.cc
index f2b255b..05d4273 100644
--- a/gcc/diagnostic-format-html.cc
+++ b/gcc/diagnostic-format-html.cc
@@ -472,7 +472,7 @@ diagnostic_html_format_buffer::flush ()
/* class html_builder. */
/* Style information for writing out HTML paths.
- Colors taken from https://www.patternfly.org/v3/styles/color-palette/ */
+ Colors taken from https://pf3.patternfly.org/v3/styles/color-palette/ */
static const char * const HTML_STYLE
= (" <style>\n"
@@ -511,6 +511,10 @@ static const char * const HTML_STYLE
" box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.5); }\n"
" .frame-funcname { text-align: right;\n"
" font-style: italic; } \n"
+ " .highlight-a { color: #703fec;\n" // pf-purple-400
+ " font-weight: bold; }\n"
+ " .highlight-b { color: #3f9c35;\n" // pf-green-400
+ " font-weight: bold; }\n"
" </style>\n");
/* A little JavaScript for ease of navigation.
@@ -700,11 +704,9 @@ html_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
class html_token_printer : public token_printer
{
public:
- html_token_printer (html_builder &builder,
- xml::element &parent_element)
- : m_builder (builder)
+ html_token_printer (xml::printer &xp)
+ : m_xp (xp)
{
- m_open_elements.push_back (&parent_element);
}
void print_tokens (pretty_printer */*pp*/,
const pp_token_list &tokens) final override
@@ -722,62 +724,50 @@ html_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
pp_token_text *sub = as_a <pp_token_text *> (iter);
/* The value might be in the obstack, so we may need to
copy it. */
- insertion_element ().add_text (sub->m_value.get ());
+ m_xp.add_text (sub->m_value.get ());
}
break;
case pp_token::kind::begin_color:
+ {
+ pp_token_begin_color *sub = as_a <pp_token_begin_color *> (iter);
+ gcc_assert (sub->m_value.get ());
+ m_xp.push_tag_with_class ("span", sub->m_value.get ());
+ }
+ break;
+
case pp_token::kind::end_color:
- /* These are no-ops. */
+ m_xp.pop_tag ();
break;
case pp_token::kind::begin_quote:
{
- insertion_element ().add_text (open_quote);
- push_element (make_span ("gcc-quoted-text"));
+ m_xp.add_text (open_quote);
+ m_xp.push_tag_with_class ("span", "gcc-quoted-text");
}
break;
case pp_token::kind::end_quote:
{
- pop_element ();
- insertion_element ().add_text (close_quote);
+ m_xp.pop_tag ();
+ m_xp.add_text (close_quote);
}
break;
case pp_token::kind::begin_url:
{
pp_token_begin_url *sub = as_a <pp_token_begin_url *> (iter);
- auto anchor = std::make_unique<xml::element> ("a", true);
- anchor->set_attr ("href", sub->m_value.get ());
- push_element (std::move (anchor));
+ m_xp.push_tag ("a", true);
+ m_xp.set_attr ("href", sub->m_value.get ());
}
break;
case pp_token::kind::end_url:
- pop_element ();
+ m_xp.pop_tag ();
break;
}
}
private:
- xml::element &insertion_element () const
- {
- return *m_open_elements.back ();
- }
- void push_element (std::unique_ptr<xml::element> new_element)
- {
- xml::element &current_top = insertion_element ();
- m_open_elements.push_back (new_element.get ());
- current_top.add_child (std::move (new_element));
- }
- void pop_element ()
- {
- m_open_elements.pop_back ();
- }
-
- html_builder &m_builder;
- /* We maintain a stack of currently "open" elements.
- Children are added to the topmost open element. */
- std::vector<xml::element *> m_open_elements;
+ xml::printer &m_xp;
};
auto diag_element = make_div ("gcc-diagnostic");
@@ -798,7 +788,8 @@ html_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
message_span->set_attr ("id", message_span_id);
add_focus_id (message_span_id);
- html_token_printer tok_printer (*this, *message_span.get ());
+ xml::printer xp (*message_span.get ());
+ html_token_printer tok_printer (xp);
m_printer->set_token_printer (&tok_printer);
pp_output_formatted_text (m_printer, m_context.get_urlifier ());
m_printer->set_token_printer (nullptr);
@@ -897,10 +888,14 @@ html_builder::make_metadata_element (label_text label,
xml::printer xp (*item.get ());
xp.add_text ("[");
{
- xp.push_tag ("a", true);
- xp.set_attr ("href", url.get ());
+ if (url.get ())
+ {
+ xp.push_tag ("a", true);
+ xp.set_attr ("href", url.get ());
+ }
xp.add_text (label.get ());
- xp.pop_tag ();
+ if (url.get ())
+ xp.pop_tag ();
}
xp.add_text ("]");
return item;