Serenity Operating System
at master 55 lines 1.3 kB view raw
1/* 2 * Copyright (c) 2021, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <AK/DeprecatedString.h> 8#include <AK/StringBuilder.h> 9#include <LibMarkdown/HorizontalRule.h> 10#include <LibMarkdown/Visitor.h> 11#include <LibRegex/Regex.h> 12 13namespace Markdown { 14 15DeprecatedString HorizontalRule::render_to_html(bool) const 16{ 17 return "<hr />\n"; 18} 19 20Vector<DeprecatedString> HorizontalRule::render_lines_for_terminal(size_t view_width) const 21{ 22 StringBuilder builder(view_width + 1); 23 for (size_t i = 0; i < view_width; ++i) 24 builder.append('-'); 25 builder.append("\n\n"sv); 26 return Vector<DeprecatedString> { builder.to_deprecated_string() }; 27} 28 29RecursionDecision HorizontalRule::walk(Visitor& visitor) const 30{ 31 RecursionDecision rd = visitor.visit(*this); 32 if (rd != RecursionDecision::Recurse) 33 return rd; 34 // Normalize return value. 35 return RecursionDecision::Continue; 36} 37 38static Regex<ECMA262> thematic_break_re("^ {0,3}([\\*\\-_])(\\s*\\1\\s*){2,}$"); 39 40OwnPtr<HorizontalRule> HorizontalRule::parse(LineIterator& lines) 41{ 42 if (lines.is_end()) 43 return {}; 44 45 StringView line = *lines; 46 47 auto match = thematic_break_re.match(line); 48 if (!match.success) 49 return {}; 50 51 ++lines; 52 return make<HorizontalRule>(); 53} 54 55}