diff --git a/Userland/Libraries/LibMarkdown/Text.cpp b/Userland/Libraries/LibMarkdown/Text.cpp index e410772d06..7884daa0d8 100644 --- a/Userland/Libraries/LibMarkdown/Text.cpp +++ b/Userland/Libraries/LibMarkdown/Text.cpp @@ -34,6 +34,11 @@ void Text::EmphasisNode::render_for_terminal(StringBuilder& builder) const } } +void Text::EmphasisNode::render_for_raw_print(StringBuilder& builder) const +{ + child->render_for_raw_print(builder); +} + size_t Text::EmphasisNode::terminal_length() const { return child->terminal_length(); @@ -62,6 +67,11 @@ void Text::CodeNode::render_for_terminal(StringBuilder& builder) const builder.append("\e[22m"sv); } +void Text::CodeNode::render_for_raw_print(StringBuilder& builder) const +{ + code->render_for_raw_print(builder); +} + size_t Text::CodeNode::terminal_length() const { return code->terminal_length(); @@ -85,6 +95,10 @@ void Text::BreakNode::render_for_terminal(StringBuilder&) const { } +void Text::BreakNode::render_for_raw_print(StringBuilder&) const +{ +} + size_t Text::BreakNode::terminal_length() const { return 0; @@ -104,6 +118,11 @@ void Text::TextNode::render_to_html(StringBuilder& builder) const builder.append(escape_html_entities(text)); } +void Text::TextNode::render_for_raw_print(StringBuilder& builder) const +{ + builder.append(text); +} + void Text::TextNode::render_for_terminal(StringBuilder& builder) const { if (collapsible && (text == "\n" || text.is_whitespace())) { @@ -158,6 +177,11 @@ void Text::LinkNode::render_to_html(StringBuilder& builder) const } } +void Text::LinkNode::render_for_raw_print(StringBuilder& builder) const +{ + text->render_for_raw_print(builder); +} + void Text::LinkNode::render_for_terminal(StringBuilder& builder) const { bool is_linked = href.contains("://"sv); @@ -198,6 +222,13 @@ void Text::MultiNode::render_to_html(StringBuilder& builder) const } } +void Text::MultiNode::render_for_raw_print(StringBuilder& builder) const +{ + for (auto& child : children) { + child->render_for_raw_print(builder); + } +} + void Text::MultiNode::render_for_terminal(StringBuilder& builder) const { for (auto& child : children) { @@ -236,6 +267,11 @@ void Text::StrikeThroughNode::render_to_html(StringBuilder& builder) const builder.append(""sv); } +void Text::StrikeThroughNode::render_for_raw_print(StringBuilder& builder) const +{ + striked_text->render_for_raw_print(builder); +} + void Text::StrikeThroughNode::render_for_terminal(StringBuilder& builder) const { builder.append("\e[9m"sv); @@ -269,6 +305,13 @@ DeprecatedString Text::render_to_html() const return builder.to_deprecated_string().trim(" \n\t"sv); } +DeprecatedString Text::render_for_raw_print() const +{ + StringBuilder builder; + m_node->render_for_raw_print(builder); + return builder.to_deprecated_string().trim(" \n\t"sv); +} + DeprecatedString Text::render_for_terminal() const { StringBuilder builder; diff --git a/Userland/Libraries/LibMarkdown/Text.h b/Userland/Libraries/LibMarkdown/Text.h index e8c289e55c..40ee75198a 100644 --- a/Userland/Libraries/LibMarkdown/Text.h +++ b/Userland/Libraries/LibMarkdown/Text.h @@ -23,6 +23,7 @@ public: public: virtual void render_to_html(StringBuilder& builder) const = 0; virtual void render_for_terminal(StringBuilder& builder) const = 0; + virtual void render_for_raw_print(StringBuilder& builder) const = 0; virtual size_t terminal_length() const = 0; virtual RecursionDecision walk(Visitor&) const = 0; @@ -42,6 +43,7 @@ public: virtual void render_to_html(StringBuilder& builder) const override; virtual void render_for_terminal(StringBuilder& builder) const override; + virtual void render_for_raw_print(StringBuilder& builder) const override; virtual size_t terminal_length() const override; virtual RecursionDecision walk(Visitor&) const override; }; @@ -57,6 +59,7 @@ public: virtual void render_to_html(StringBuilder& builder) const override; virtual void render_for_terminal(StringBuilder& builder) const override; + virtual void render_for_raw_print(StringBuilder& builder) const override; virtual size_t terminal_length() const override; virtual RecursionDecision walk(Visitor&) const override; }; @@ -65,6 +68,7 @@ public: public: virtual void render_to_html(StringBuilder& builder) const override; virtual void render_for_terminal(StringBuilder& builder) const override; + virtual void render_for_raw_print(StringBuilder& builder) const override; virtual size_t terminal_length() const override; virtual RecursionDecision walk(Visitor&) const override; }; @@ -88,6 +92,7 @@ public: virtual void render_to_html(StringBuilder& builder) const override; virtual void render_for_terminal(StringBuilder& builder) const override; + virtual void render_for_raw_print(StringBuilder& builder) const override; virtual size_t terminal_length() const override; virtual RecursionDecision walk(Visitor&) const override; }; @@ -115,6 +120,7 @@ public: } virtual void render_to_html(StringBuilder& builder) const override; virtual void render_for_terminal(StringBuilder& builder) const override; + virtual void render_for_raw_print(StringBuilder& builder) const override; virtual size_t terminal_length() const override; virtual RecursionDecision walk(Visitor&) const override; }; @@ -125,6 +131,7 @@ public: virtual void render_to_html(StringBuilder& builder) const override; virtual void render_for_terminal(StringBuilder& builder) const override; + virtual void render_for_raw_print(StringBuilder& builder) const override; virtual size_t terminal_length() const override; virtual RecursionDecision walk(Visitor&) const override; }; @@ -140,6 +147,7 @@ public: virtual void render_to_html(StringBuilder& builder) const override; virtual void render_for_terminal(StringBuilder& builder) const override; + virtual void render_for_raw_print(StringBuilder& builder) const override; virtual size_t terminal_length() const override; virtual RecursionDecision walk(Visitor&) const override; }; @@ -148,6 +156,7 @@ public: DeprecatedString render_to_html() const; DeprecatedString render_for_terminal() const; + DeprecatedString render_for_raw_print() const; RecursionDecision walk(Visitor&) const; static Text parse(StringView);