Coverage Report

Created: 2025-09-05 06:52

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