Skip to content

Commit 6724d6d

Browse files
petelliottawesomekling
authored andcommitted
LibMarkdown: Add terminal rendering for new markdown Text parser
1 parent ec9f892 commit 6724d6d

File tree

1 file changed

+40
-10
lines changed

1 file changed

+40
-10
lines changed

Userland/Libraries/LibMarkdown/Text.cpp

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,17 @@ void Text::EmphasisNode::render_to_html(StringBuilder& builder) const
2121
builder.append((strong) ? "</strong>" : "</em>");
2222
}
2323

24-
void Text::EmphasisNode::render_for_terminal(StringBuilder&) const
24+
void Text::EmphasisNode::render_for_terminal(StringBuilder& builder) const
2525
{
26-
// FIXME.
26+
if (strong) {
27+
builder.append("\e[1m");
28+
child->render_for_terminal(builder);
29+
builder.append("\e[22m");
30+
} else {
31+
builder.append("\e[3m");
32+
child->render_for_terminal(builder);
33+
builder.append("\e[23m");
34+
}
2735
}
2836

2937
size_t Text::EmphasisNode::terminal_length() const
@@ -38,9 +46,11 @@ void Text::CodeNode::render_to_html(StringBuilder& builder) const
3846
builder.append("</code>");
3947
}
4048

41-
void Text::CodeNode::render_for_terminal(StringBuilder&) const
49+
void Text::CodeNode::render_for_terminal(StringBuilder& builder) const
4250
{
43-
// FIXME.
51+
builder.append("\e[1m");
52+
code->render_for_terminal(builder);
53+
builder.append("\e[22m");
4454
}
4555

4656
size_t Text::CodeNode::terminal_length() const
@@ -53,9 +63,11 @@ void Text::TextNode::render_to_html(StringBuilder& builder) const
5363
builder.append(escape_html_entities(text));
5464
}
5565

56-
void Text::TextNode::render_for_terminal(StringBuilder&) const
66+
void Text::TextNode::render_for_terminal(StringBuilder& builder) const
5767
{
58-
// FIXME.
68+
String text_copy = text;
69+
text_copy.replace("\n", " ");
70+
builder.append(text_copy);
5971
}
6072

6173
size_t Text::TextNode::terminal_length() const
@@ -80,9 +92,25 @@ void Text::LinkNode::render_to_html(StringBuilder& builder) const
8092
}
8193
}
8294

83-
void Text::LinkNode::render_for_terminal(StringBuilder&) const
95+
void Text::LinkNode::render_for_terminal(StringBuilder& builder) const
8496
{
85-
// FIXME.
97+
StringBuilder href_builder;
98+
href->render_for_terminal(href_builder);
99+
String href_string = href_builder.build();
100+
101+
bool is_linked = href_string.contains("://");
102+
if (is_linked) {
103+
builder.append("\e]8;;");
104+
builder.append(href_string);
105+
builder.append("\e\\");
106+
}
107+
108+
text->render_for_terminal(builder);
109+
110+
if (is_linked) {
111+
builder.appendff(" <{}>", href_string);
112+
builder.append("\033]8;;\033\\");
113+
}
86114
}
87115

88116
size_t Text::LinkNode::terminal_length() const
@@ -97,9 +125,11 @@ void Text::MultiNode::render_to_html(StringBuilder& builder) const
97125
}
98126
}
99127

100-
void Text::MultiNode::render_for_terminal(StringBuilder&) const
128+
void Text::MultiNode::render_for_terminal(StringBuilder& builder) const
101129
{
102-
// FIXME.
130+
for (auto& child : children) {
131+
child.render_for_terminal(builder);
132+
}
103133
}
104134

105135
size_t Text::MultiNode::terminal_length() const

0 commit comments

Comments
 (0)