diff --git a/app/Factories/MarkdownFactory.php b/app/Factories/MarkdownFactory.php index 7005dafc15..f636973e06 100644 --- a/app/Factories/MarkdownFactory.php +++ b/app/Factories/MarkdownFactory.php @@ -41,6 +41,7 @@ use League\CommonMark\Renderer\Inline\TextRenderer; use League\CommonMark\Util\HtmlFilter; +use function rtrim; use function strip_tags; use function strtr; @@ -123,7 +124,7 @@ public function markdown(string $markdown, Tree|null $tree = null): string $html = $converter->convert($markdown)->getContent(); - // The markdown convert adds newlines, but not in a documented way. Safest to ignore them. - return strtr($html, ["\n" => '']); + // The markdown convert adds newlines, remove the last one. + return rtrim($html, "\n"); } } diff --git a/tests/Unit/Factories/MarkdownFactoryTest.php b/tests/Unit/Factories/MarkdownFactoryTest.php index 50ab211283..4eb20af0d1 100644 --- a/tests/Unit/Factories/MarkdownFactoryTest.php +++ b/tests/Unit/Factories/MarkdownFactoryTest.php @@ -111,7 +111,7 @@ public function testSoftLineBreaks(): void ); self::assertSame( - '

alpha
beta
gamma
delta

', + "

alpha
beta
gamma
\ndelta

", $factory->markdown("alpha\nbeta\ngamma \ndelta") ); } @@ -126,8 +126,23 @@ public function testMultipleParagraphs(): void ); self::assertSame( - '

alpha
beta

gamma
delta

', + "

alpha
beta

\n

gamma
delta

", $factory->markdown("alpha\nbeta\n\n\n\ngamma\ndelta") ); } + + public function testMarkdownCodeBlock(): void + { + $factory = new MarkdownFactory(); + // code block within backticks + self::assertSame( + "
alpha\n beta\n  gamma\n   delta\n
", + $factory->markdown("````\nalpha\n beta\n gamma\n delta\n````") + ); + // code block through indentation + self::assertSame( + "
alpha\n beta\n  gamma\n   delta\n
", + $factory->markdown(" alpha\n beta\n gamma\n delta") + ); + } }