From 2b31b87431ff40331bbb05cd4ea3860ee597cb22 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Tue, 14 Nov 2023 20:31:46 +0100 Subject: [PATCH] Update Strong and Emphasis Renderers to use settings available in AST Node (#11) * Fix StrongRenderer * Fix EmphasisRenderer --- src/Renderer/Inline/EmphasisRenderer.php | 9 +++- src/Renderer/Inline/StrongRenderer.php | 9 +++- .../Renderer/Inline/EmphasisRendererTest.php | 41 ++++++++++++++++++- tests/Renderer/Inline/StrongRendererTest.php | 41 ++++++++++++++++++- tests/stubs/kitchen-sink-expected.md | 3 ++ tests/stubs/kitchen-sink.md | 3 ++ 6 files changed, 102 insertions(+), 4 deletions(-) diff --git a/src/Renderer/Inline/EmphasisRenderer.php b/src/Renderer/Inline/EmphasisRenderer.php index 7255574..9504495 100644 --- a/src/Renderer/Inline/EmphasisRenderer.php +++ b/src/Renderer/Inline/EmphasisRenderer.php @@ -38,6 +38,13 @@ public function render(Node $node, ChildNodeRendererInterface $childRenderer): s return "*{$content}*"; } - return "_{$content}_"; + if ($this->config->get('commonmark/use_underscore')) { + return "_{$content}_"; + } + + $openingDelimiter = $node->getOpeningDelimiter(); + $closingDelimiter = $node->getClosingDelimiter(); + + return "$openingDelimiter{$content}$closingDelimiter"; } } diff --git a/src/Renderer/Inline/StrongRenderer.php b/src/Renderer/Inline/StrongRenderer.php index be71204..aa24d22 100644 --- a/src/Renderer/Inline/StrongRenderer.php +++ b/src/Renderer/Inline/StrongRenderer.php @@ -38,6 +38,13 @@ public function render(Node $node, ChildNodeRendererInterface $childRenderer): s return "**{$content}**"; } - return "__{$content}__"; + if ($this->config->get('commonmark/use_underscore')) { + return "__{$content}__"; + } + + $openingDelimiter = $node->getOpeningDelimiter(); + $closingDelimiter = $node->getClosingDelimiter(); + + return "$openingDelimiter{$content}$closingDelimiter"; } } diff --git a/tests/Renderer/Inline/EmphasisRendererTest.php b/tests/Renderer/Inline/EmphasisRendererTest.php index 5e300dd..8943afb 100644 --- a/tests/Renderer/Inline/EmphasisRendererTest.php +++ b/tests/Renderer/Inline/EmphasisRendererTest.php @@ -24,7 +24,7 @@ protected function setUp(): void } #[Test] - public function it_renders_emphasis(): void + public function it_renders_emphasis_using_asterisk(): void { $block = new Emphasis(); $fakeRenderer = new FakeChildNodeRenderer(); @@ -36,6 +36,45 @@ public function it_renders_emphasis(): void $this->assertEquals('*::children::*', $result); } + #[Test] + public function it_renders_emphasis_using_underscore(): void + { + $block = new Emphasis('_'); + $fakeRenderer = new FakeChildNodeRenderer(); + $fakeRenderer->pretendChildrenExist(); + + $this->renderer->setConfiguration($this->createConfiguration([ + 'commonmark' => [ + 'use_asterisk' => false, + ], + ])); + + $result = $this->renderer->render($block, $fakeRenderer); + + $this->assertIsString($result); + $this->assertEquals('_::children::_', $result); + } + + #[Test] + public function it_renders_emphasis_with_whatever_delimiter_used(): void + { + $block = new Emphasis('$'); + $fakeRenderer = new FakeChildNodeRenderer(); + $fakeRenderer->pretendChildrenExist(); + + $this->renderer->setConfiguration($this->createConfiguration([ + 'commonmark' => [ + 'use_asterisk' => false, + 'use_underscore' => false, + ], + ])); + + $result = $this->renderer->render($block, $fakeRenderer); + + $this->assertIsString($result); + $this->assertEquals('$::children::$', $result); + } + /** * @param array $values */ diff --git a/tests/Renderer/Inline/StrongRendererTest.php b/tests/Renderer/Inline/StrongRendererTest.php index 4b3f4d3..9c989ca 100644 --- a/tests/Renderer/Inline/StrongRendererTest.php +++ b/tests/Renderer/Inline/StrongRendererTest.php @@ -24,7 +24,7 @@ protected function setUp(): void } #[Test] - public function it_renders_strong(): void + public function it_renders_strong_with_asterisks(): void { $block = new Strong(); $fakeRenderer = new FakeChildNodeRenderer(); @@ -36,6 +36,45 @@ public function it_renders_strong(): void $this->assertEquals('**::children::**', $result); } + #[Test] + public function it_renders_strong_using_underscores_if_use_asterik_is_disabled(): void + { + $block = new Strong('__'); + $fakeRenderer = new FakeChildNodeRenderer(); + $fakeRenderer->pretendChildrenExist(); + + $this->renderer->setConfiguration($this->createConfiguration([ + 'commonmark' => [ + 'use_asterisk' => false, + ], + ])); + + $result = $this->renderer->render($block, $fakeRenderer); + + $this->assertIsString($result); + $this->assertEquals('__::children::__', $result); + } + + #[Test] + public function it_renders_strong_using_whatever_delimiter_used_in_the_original(): void + { + $block = new Strong('$$'); + $fakeRenderer = new FakeChildNodeRenderer(); + $fakeRenderer->pretendChildrenExist(); + + $this->renderer->setConfiguration($this->createConfiguration([ + 'commonmark' => [ + 'use_asterisk' => false, + 'use_underscore' => false, + ], + ])); + + $result = $this->renderer->render($block, $fakeRenderer); + + $this->assertIsString($result); + $this->assertEquals('$$::children::$$', $result); + } + /** * @param array $values */ diff --git a/tests/stubs/kitchen-sink-expected.md b/tests/stubs/kitchen-sink-expected.md index 68ab37b..8b52dd6 100644 --- a/tests/stubs/kitchen-sink-expected.md +++ b/tests/stubs/kitchen-sink-expected.md @@ -25,3 +25,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). *This Text is Italic* `\Class->getFoo()` + +- List Item A with `inline code` +- List Item B diff --git a/tests/stubs/kitchen-sink.md b/tests/stubs/kitchen-sink.md index cb6bb8e..33affb9 100644 --- a/tests/stubs/kitchen-sink.md +++ b/tests/stubs/kitchen-sink.md @@ -25,3 +25,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). *This Text is Italic* `\Class->getFoo()` + +- List Item A with `inline code` +- List Item B