diff --git a/Applications/Help/main.cpp b/Applications/Help/main.cpp index e6203e8a6b74d9..c21907ad7cd999 100644 --- a/Applications/Help/main.cpp +++ b/Applications/Help/main.cpp @@ -80,7 +80,7 @@ int main(int argc, char* argv[]) ASSERT(success); String html = md_document.render_to_html(); - auto html_document = parse_html(html); + auto html_document = parse_html_document(html); html_view->set_document(html_document); String page_and_section = model->page_and_section(tree_view->selection().first()); diff --git a/Applications/IRCClient/IRCLogBuffer.cpp b/Applications/IRCClient/IRCLogBuffer.cpp index a56443b14582ae..782a69c6cc38e3 100644 --- a/Applications/IRCClient/IRCLogBuffer.cpp +++ b/Applications/IRCClient/IRCLogBuffer.cpp @@ -1,4 +1,6 @@ #include "IRCLogBuffer.h" +#include +#include #include #include #include @@ -33,42 +35,43 @@ IRCLogBuffer::~IRCLogBuffer() { } -void IRCLogBuffer::add_message(char prefix, const String& name, const String& text, Color color) +static String timestamp_string() { - auto message_element = create_element(document(), "div"); - message_element->set_attribute("style", String::format("color: %s;", color.to_string().characters())); - auto timestamp_element = create_element(document(), "span"); auto now = time(nullptr); auto* tm = localtime(&now); - auto timestamp_string = String::format("%02u:%02u:%02u ", tm->tm_hour, tm->tm_min, tm->tm_sec); - timestamp_element->append_child(adopt(*new Text(document(), timestamp_string))); - auto nick_element = create_element(document(), "b"); - nick_element->append_child(*new Text(document(), String::format("<%c%s> ", prefix ? prefix : ' ', name.characters()))); - auto text_element = create_element(document(), "span"); - text_element->append_child(*new Text(document(), text)); - message_element->append_child(timestamp_element); - message_element->append_child(nick_element); - message_element->append_child(text_element); - m_container_element->append_child(message_element); + return String::format("%02u:%02u:%02u ", tm->tm_hour, tm->tm_min, tm->tm_sec); +} +void IRCLogBuffer::add_message(char prefix, const String& name, const String& text, Color color) +{ + auto nick_string = String::format("<%c%s> ", prefix ? prefix : ' ', name.characters()); + auto html = String::format( + "
" + "%s" + "%s" + "%s" + "
", + color.to_string().characters(), + timestamp_string().characters(), + nick_string.characters(), + text.characters()); + auto fragment = parse_html_fragment(*m_document, html); + m_container_element->append_child(fragment->remove_child(*fragment->first_child())); m_document->force_layout(); } void IRCLogBuffer::add_message(const String& text, Color color) { - auto message_element = create_element(document(), "div"); - message_element->set_attribute("style", String::format("color: %s;", color.to_string().characters())); - auto timestamp_element = create_element(document(), "span"); - auto now = time(nullptr); - auto* tm = localtime(&now); - auto timestamp_string = String::format("%02u:%02u:%02u ", tm->tm_hour, tm->tm_min, tm->tm_sec); - timestamp_element->append_child(adopt(*new Text(document(), timestamp_string))); - auto text_element = create_element(document(), "span"); - text_element->append_child(*new Text(document(), text)); - message_element->append_child(timestamp_element); - message_element->append_child(text_element); - m_container_element->append_child(message_element); - + auto html = String::format( + "
" + "%s" + "%s" + "
", + color.to_string().characters(), + timestamp_string().characters(), + text.characters()); + auto fragment = parse_html_fragment(*m_document, html); + m_container_element->append_child(fragment->remove_child(*fragment->first_child())); m_document->force_layout(); } diff --git a/DevTools/HackStudio/Editor.cpp b/DevTools/HackStudio/Editor.cpp index 590f60090b695f..682149b3566c02 100644 --- a/DevTools/HackStudio/Editor.cpp +++ b/DevTools/HackStudio/Editor.cpp @@ -121,7 +121,7 @@ void Editor::show_documentation_tooltip_if_available(const String& hovered_token auto html_text = man_document.render_to_html(); - auto html_document = parse_html(html_text); + auto html_document = parse_html_document(html_text); if (!html_document) { dbg() << "failed to parse HTML"; return; diff --git a/Libraries/LibHTML/HtmlView.cpp b/Libraries/LibHTML/HtmlView.cpp index b77b547f6e63ff..9b2f88054a4b5e 100644 --- a/Libraries/LibHTML/HtmlView.cpp +++ b/Libraries/LibHTML/HtmlView.cpp @@ -314,7 +314,7 @@ void HtmlView::load(const URL& url) if (url.path().ends_with(".png")) { document = create_image_document(data, url); } else { - document = parse_html(data, url); + document = parse_html_document(data, url); } ASSERT(document); set_document(document); diff --git a/Libraries/LibHTML/Parser/HTMLParser.cpp b/Libraries/LibHTML/Parser/HTMLParser.cpp index 25cf52968e53a2..bf1accfb750124 100644 --- a/Libraries/LibHTML/Parser/HTMLParser.cpp +++ b/Libraries/LibHTML/Parser/HTMLParser.cpp @@ -34,7 +34,7 @@ static bool is_self_closing_tag(const StringView& tag_name) || tag_name == "wbr"; } -static bool parse_html(const StringView& html, Document& document, ParentNode& root) +static bool parse_html_document(const StringView& html, Document& document, ParentNode& root) { NonnullRefPtrVector node_stack; node_stack.append(root); @@ -313,17 +313,17 @@ static bool parse_html(const StringView& html, Document& document, ParentNode& r RefPtr parse_html_fragment(Document& document, const StringView& html) { auto fragment = adopt(*new DocumentFragment(document)); - if (!parse_html(html, document, *fragment)) + if (!parse_html_document(html, document, *fragment)) return nullptr; return fragment; } -NonnullRefPtr parse_html(const StringView& html, const URL& url) +NonnullRefPtr parse_html_document(const StringView& html, const URL& url) { auto document = adopt(*new Document); document->set_url(url); - bool success = parse_html(html, *document, *document); + bool success = parse_html_document(html, *document, *document); ASSERT(success); document->fixup(); diff --git a/Libraries/LibHTML/Parser/HTMLParser.h b/Libraries/LibHTML/Parser/HTMLParser.h index f852a158a76d3b..46dc22428a8e05 100644 --- a/Libraries/LibHTML/Parser/HTMLParser.h +++ b/Libraries/LibHTML/Parser/HTMLParser.h @@ -5,5 +5,5 @@ class DocumentFragment; -NonnullRefPtr parse_html(const StringView&, const URL& = URL()); +NonnullRefPtr parse_html_document(const StringView&, const URL& = URL()); RefPtr parse_html_fragment(Document&, const StringView&); diff --git a/Userland/html.cpp b/Userland/html.cpp index 91cfdf6b1e2b05..33562f42c3c2be 100644 --- a/Userland/html.cpp +++ b/Userland/html.cpp @@ -34,7 +34,7 @@ int main(int argc, char** argv) } String html = String::copy(f->read_all()); - auto document = parse_html(html); + auto document = parse_html_document(html); auto window = GWindow::construct(); auto widget = HtmlView::construct();