1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 02:37:36 +00:00

LibMarkdown: Make thematic break parsing more correct

also fix a conflict with lists and thematic breaks
This commit is contained in:
Peter Elliott 2022-04-24 22:44:53 -06:00 committed by Andreas Kling
parent 5ad44ac2e5
commit c15c57a6af
2 changed files with 6 additions and 10 deletions

View file

@ -108,11 +108,11 @@ OwnPtr<ContainerBlock> ContainerBlock::parse(LineIterator& lines)
}
bool any = try_parse_block<Table>(lines, blocks)
|| try_parse_block<HorizontalRule>(lines, blocks)
|| try_parse_block<List>(lines, blocks)
|| try_parse_block<CodeBlock>(lines, blocks)
|| try_parse_block<CommentBlock>(lines, blocks)
|| try_parse_block<Heading>(lines, blocks)
|| try_parse_block<HorizontalRule>(lines, blocks)
|| try_parse_block<BlockQuote>(lines, blocks);
if (any) {

View file

@ -8,6 +8,7 @@
#include <AK/StringBuilder.h>
#include <LibMarkdown/HorizontalRule.h>
#include <LibMarkdown/Visitor.h>
#include <LibRegex/Regex.h>
namespace Markdown {
@ -34,6 +35,8 @@ RecursionDecision HorizontalRule::walk(Visitor& visitor) const
return RecursionDecision::Continue;
}
static Regex<ECMA262> thematic_break_re("^ {0,3}([\\*\\-_])(\\s*\\1\\s*){2,}$");
OwnPtr<HorizontalRule> HorizontalRule::parse(LineIterator& lines)
{
if (lines.is_end())
@ -41,16 +44,9 @@ OwnPtr<HorizontalRule> HorizontalRule::parse(LineIterator& lines)
StringView line = *lines;
if (line.length() < 3)
auto match = thematic_break_re.match(line);
if (!match.success)
return {};
if (!line.starts_with('-') && !line.starts_with('_') && !line.starts_with('*'))
return {};
auto first_character = line.characters_without_null_termination()[0];
for (auto ch : line) {
if (ch != first_character)
return {};
}
++lines;
return make<HorizontalRule>();