diff --git a/src/Rules/ListRule.php b/src/Rules/ListRule.php index 73704c0..b212d35 100644 --- a/src/Rules/ListRule.php +++ b/src/Rules/ListRule.php @@ -41,7 +41,10 @@ public function parse(Parser $parser): ?Token $newlines = $parser->consumeWhile(Parser::NEW_LINE); } - if (preg_match('/(?:^|\n)[-*+] /', $childContent)) { + if (preg_match( + '/(?:^|\n)(?:[-*+]|[0-9]+\.) /', + $childContent, + )) { break; } @@ -77,7 +80,9 @@ public function parse(Parser $parser): ?Token $children = $childContent === '' ? null - : $parser->withRules(new ListRule())->lex($childContent)[0]; + : $parser->withRules(new ListRule(), new OrderedListRule())->lex( + $childContent, + )[0]; $item = new ListItem($content, $children); diff --git a/src/Rules/OrderedListRule.php b/src/Rules/OrderedListRule.php index 588673b..7523705 100644 --- a/src/Rules/OrderedListRule.php +++ b/src/Rules/OrderedListRule.php @@ -58,7 +58,9 @@ public function parse(Parser $parser): ?Token } $children = $childContent !== '' - ? $parser->withRules(new OrderedListRule())->lex($childContent)[0] + ? $parser->withRules(new ListRule(), new OrderedListRule())->lex( + $childContent, + )[0] : null; $item = new ListItem($content, $children); diff --git a/tests/Rules/ListRuleTest.php b/tests/Rules/ListRuleTest.php index 06a3b16..118c59e 100644 --- a/tests/Rules/ListRuleTest.php +++ b/tests/Rules/ListRuleTest.php @@ -5,6 +5,7 @@ use PHPUnit\Framework\Attributes\Test; use Tempest\Markdown\Parser; use Tempest\Markdown\Rules\ListRule; +use Tempest\Markdown\Rules\OrderedListRule; use Tempest\Markdown\Rules\TextRule; use Tempest\Markdown\Tests\ParserTestCase; @@ -158,4 +159,18 @@ public function test_lex_nested_sibling_after_sublist(): void $html, ); } + + #[Test] + public function test_lex_nested_ordered_list(): void + { + $html = (string) new Parser(highlighter: null, rules: [ + new ListRule(), + new OrderedListRule(), + ])->parse("- one\n 1. child\n- two\n"); + + $this->assertSame( + '