From 4d3454d7003ccc5adf3dac844f8c7f89845726e3 Mon Sep 17 00:00:00 2001 From: Peter Elliott Date: Sun, 24 Apr 2022 23:07:59 -0600 Subject: [PATCH] LibMarkdown: Support up to 3 spaces before an ATX header --- Userland/Libraries/LibMarkdown/Heading.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Userland/Libraries/LibMarkdown/Heading.cpp b/Userland/Libraries/LibMarkdown/Heading.cpp index 2eb24c0447..fe16f4d22b 100644 --- a/Userland/Libraries/LibMarkdown/Heading.cpp +++ b/Userland/Libraries/LibMarkdown/Heading.cpp @@ -50,17 +50,28 @@ OwnPtr 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(move(text), level);