diff --git a/src/Rules/ListRule.php b/src/Rules/ListRule.php index dab613e..ea4588c 100644 --- a/src/Rules/ListRule.php +++ b/src/Rules/ListRule.php @@ -37,9 +37,15 @@ public function parse(Parser $parser): ?Token $parser->consumeWhile(Parser::NEW_LINE); } - $children = $childContent !== '' - ? $parser->withRules(new ListRule())->lex($childContent)[0] - : null; + $children = null; + + if (substr_count($childContent, '-') > 0) { + $children = $parser->withRules(new ListRule())->lex($childContent)[0]; + } + + if ($children === null && $childContent !== '') { + $content .= ' ' . trim(preg_replace('/\s+/u', ' ', $childContent) ?? ''); + } $item = new ListItem($content, $children); diff --git a/tests/Rules/ListRuleTest.php b/tests/Rules/ListRuleTest.php index c99c4b4..a67aa4c 100644 --- a/tests/Rules/ListRuleTest.php +++ b/tests/Rules/ListRuleTest.php @@ -26,6 +26,14 @@ public function test_lex_multiple_items(): void $this->assertSame('', $html); } + #[Test] + public function test_lex_multiline_items(): void + { + $html = (string) new Parser(highlighter: null, rules: [new ListRule()])->parse("- one\n continued\n further\n- two\n"); + + $this->assertSame('', $html); + } + #[Test] public function test_hyphen_without_whitespace_is_not_a_list(): void {