diff --git a/Userland/Libraries/LibMarkdown/Text.cpp b/Userland/Libraries/LibMarkdown/Text.cpp index 05b517cfe7e..5c29a5f1114 100644 --- a/Userland/Libraries/LibMarkdown/Text.cpp +++ b/Userland/Libraries/LibMarkdown/Text.cpp @@ -21,9 +21,17 @@ void Text::EmphasisNode::render_to_html(StringBuilder& builder) const builder.append((strong) ? "" : ""); } -void Text::EmphasisNode::render_for_terminal(StringBuilder&) const +void Text::EmphasisNode::render_for_terminal(StringBuilder& builder) const { - // FIXME. + if (strong) { + builder.append("\e[1m"); + child->render_for_terminal(builder); + builder.append("\e[22m"); + } else { + builder.append("\e[3m"); + child->render_for_terminal(builder); + builder.append("\e[23m"); + } } size_t Text::EmphasisNode::terminal_length() const @@ -38,9 +46,11 @@ void Text::CodeNode::render_to_html(StringBuilder& builder) const builder.append(""); } -void Text::CodeNode::render_for_terminal(StringBuilder&) const +void Text::CodeNode::render_for_terminal(StringBuilder& builder) const { - // FIXME. + builder.append("\e[1m"); + code->render_for_terminal(builder); + builder.append("\e[22m"); } size_t Text::CodeNode::terminal_length() const @@ -53,9 +63,11 @@ void Text::TextNode::render_to_html(StringBuilder& builder) const builder.append(escape_html_entities(text)); } -void Text::TextNode::render_for_terminal(StringBuilder&) const +void Text::TextNode::render_for_terminal(StringBuilder& builder) const { - // FIXME. + String text_copy = text; + text_copy.replace("\n", " "); + builder.append(text_copy); } size_t Text::TextNode::terminal_length() const @@ -80,9 +92,25 @@ void Text::LinkNode::render_to_html(StringBuilder& builder) const } } -void Text::LinkNode::render_for_terminal(StringBuilder&) const +void Text::LinkNode::render_for_terminal(StringBuilder& builder) const { - // FIXME. + StringBuilder href_builder; + href->render_for_terminal(href_builder); + String href_string = href_builder.build(); + + bool is_linked = href_string.contains("://"); + if (is_linked) { + builder.append("\e]8;;"); + builder.append(href_string); + builder.append("\e\\"); + } + + text->render_for_terminal(builder); + + if (is_linked) { + builder.appendff(" <{}>", href_string); + builder.append("\033]8;;\033\\"); + } } size_t Text::LinkNode::terminal_length() const @@ -97,9 +125,11 @@ void Text::MultiNode::render_to_html(StringBuilder& builder) const } } -void Text::MultiNode::render_for_terminal(StringBuilder&) const +void Text::MultiNode::render_for_terminal(StringBuilder& builder) const { - // FIXME. + for (auto& child : children) { + child.render_for_terminal(builder); + } } size_t Text::MultiNode::terminal_length() const