Coverage Report

Created: 2022-05-20 06:15

/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/String.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
String HorizontalRule::render_to_html(bool) const
16
0
{
17
0
    return "<hr />\n";
18
0
}
19
20
String HorizontalRule::render_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");
26
0
    return builder.to_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
14.3M
{
42
14.3M
    if (lines.is_end())
43
0
        return {};
44
45
14.3M
    StringView line = *lines;
46
47
14.3M
    auto match = thematic_break_re.match(line);
48
14.3M
    if (!match.success)
49
14.3M
        return {};
50
51
16.7k
    ++lines;
52
16.7k
    return make<HorizontalRule>();
53
14.3M
}
54
55
}