Serenity Operating System
at master 59 lines 1.5 kB view raw
1/* 2 * Copyright (c) 2021, Peter Elliott <pelliott@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <AK/StringBuilder.h> 8#include <AK/Vector.h> 9#include <LibMarkdown/BlockQuote.h> 10#include <LibMarkdown/Visitor.h> 11 12namespace Markdown { 13 14DeprecatedString BlockQuote::render_to_html(bool) const 15{ 16 StringBuilder builder; 17 builder.append("<blockquote>\n"sv); 18 builder.append(m_contents->render_to_html()); 19 builder.append("</blockquote>\n"sv); 20 return builder.to_deprecated_string(); 21} 22 23Vector<DeprecatedString> BlockQuote::render_lines_for_terminal(size_t view_width) const 24{ 25 Vector<DeprecatedString> lines; 26 size_t child_width = view_width < 4 ? 0 : view_width - 4; 27 for (auto& line : m_contents->render_lines_for_terminal(child_width)) 28 lines.append(DeprecatedString::formatted(" {}", line)); 29 30 return lines; 31} 32 33RecursionDecision BlockQuote::walk(Visitor& visitor) const 34{ 35 RecursionDecision rd = visitor.visit(*this); 36 if (rd != RecursionDecision::Recurse) 37 return rd; 38 39 return m_contents->walk(visitor); 40} 41 42OwnPtr<BlockQuote> BlockQuote::parse(LineIterator& lines) 43{ 44 lines.push_context(LineIterator::Context::block_quote()); 45 if (lines.is_end()) { 46 lines.pop_context(); 47 return {}; 48 } 49 50 auto contents = ContainerBlock::parse(lines); 51 lines.pop_context(); 52 53 if (!contents) 54 return {}; 55 56 return make<BlockQuote>(move(contents)); 57} 58 59}