Просмотр исходного кода

LibMarkdown: Make href always a String

This already was the case in some sense, but made it very inconvenient
to access it.
Ben Wiederhake 3 лет назад
Родитель
Сommit
aca01932bd
2 измененных файлов с 10 добавлено и 14 удалено
  1. 8 12
      Userland/Libraries/LibMarkdown/Text.cpp
  2. 2 2
      Userland/Libraries/LibMarkdown/Text.h

+ 8 - 12
Userland/Libraries/LibMarkdown/Text.cpp

@@ -99,13 +99,13 @@ void Text::LinkNode::render_to_html(StringBuilder& builder) const
 {
     if (is_image) {
         builder.append("<img src=\"");
-        href->render_to_html(builder);
+        builder.append(escape_html_entities(href));
         builder.append("\" alt=\"");
         text->render_to_html(builder);
         builder.append("\" >");
     } else {
         builder.append("<a href=\"");
-        href->render_to_html(builder);
+        builder.append(escape_html_entities(href));
         builder.append("\">");
         text->render_to_html(builder);
         builder.append("</a>");
@@ -114,21 +114,17 @@ void Text::LinkNode::render_to_html(StringBuilder& builder) const
 
 void Text::LinkNode::render_for_terminal(StringBuilder& builder) const
 {
-    StringBuilder href_builder;
-    href->render_for_terminal(href_builder);
-    String href_string = href_builder.build();
-
-    bool is_linked = href_string.contains("://");
+    bool is_linked = href.contains("://");
     if (is_linked) {
         builder.append("\e]8;;");
-        builder.append(href_string);
+        builder.append(href);
         builder.append("\e\\");
     }
 
     text->render_for_terminal(builder);
 
     if (is_linked) {
-        builder.appendff(" <{}>", href_string);
+        builder.appendff(" <{}>", href);
         builder.append("\033]8;;\033\\");
     }
 }
@@ -471,14 +467,14 @@ NonnullOwnPtr<Text::Node> Text::parse_link(Vector<Token>::ConstIterator& tokens)
     auto separator = *tokens;
     VERIFY(separator == "](");
 
-    auto address = make<MultiNode>();
+    StringBuilder address;
     for (auto iterator = tokens + 1; !iterator.is_end(); ++iterator) {
         if (*iterator == ")") {
             tokens = iterator;
-            return make<LinkNode>(is_image, move(link_text), move(address));
+            return make<LinkNode>(is_image, move(link_text), address.build());
         }
 
-        address->children.append(make<TextNode>(iterator->data));
+        address.append(iterator->data);
     }
 
     link_text->children.prepend(make<TextNode>(opening.data));

+ 2 - 2
Userland/Libraries/LibMarkdown/Text.h

@@ -88,9 +88,9 @@ public:
     public:
         bool is_image;
         NonnullOwnPtr<Node> text;
-        NonnullOwnPtr<Node> href;
+        String href;
 
-        LinkNode(bool is_image, NonnullOwnPtr<Node> text, NonnullOwnPtr<Node> href)
+        LinkNode(bool is_image, NonnullOwnPtr<Node> text, String href)
             : is_image(is_image)
             , text(move(text))
             , href(move(href))