فهرست منبع

LibMarkdown: Support up to 3 spaces before an ATX header

Peter Elliott 3 سال پیش
والد
کامیت
4d3454d700
1فایلهای تغییر یافته به همراه15 افزوده شده و 4 حذف شده
  1. 15 4
      Userland/Libraries/LibMarkdown/Heading.cpp

+ 15 - 4
Userland/Libraries/LibMarkdown/Heading.cpp

@@ -50,17 +50,28 @@ OwnPtr<Heading> Heading::parse(LineIterator& lines)
         return {};
 
     StringView line = *lines;
+    size_t indent = 0;
+
+    // Allow for up to 3 spaces of indentation.
+    // https://spec.commonmark.org/0.30/#example-68
+    for (size_t i = 0; i < 3; ++i) {
+        if (line[i] != ' ')
+            break;
+
+        ++indent;
+    }
+
     size_t level;
 
-    for (level = 0; level < line.length(); level++) {
-        if (line[level] != '#')
+    for (level = 0; indent + level < line.length(); level++) {
+        if (line[indent + level] != '#')
             break;
     }
 
-    if (!level || level >= line.length() || line[level] != ' ' || level > 6)
+    if (!level || indent + level >= line.length() || line[indent + level] != ' ' || level > 6)
         return {};
 
-    StringView title_view = line.substring_view(level + 1, line.length() - level - 1);
+    StringView title_view = line.substring_view(indent + level + 1);
     auto text = Text::parse(title_view);
     auto heading = make<Heading>(move(text), level);