diff --git a/src/Ciconia/Extension/Core/BlockQuoteExtension.php b/src/Ciconia/Extension/Core/BlockQuoteExtension.php index 5359faa..101a562 100644 --- a/src/Ciconia/Extension/Core/BlockQuoteExtension.php +++ b/src/Ciconia/Extension/Core/BlockQuoteExtension.php @@ -41,7 +41,7 @@ public function register(Markdown $markdown) /** * @param Text $text */ - public function processBlockQuote(Text $text) + public function processBlockQuote(Text $text, array $options = array(), $level = 1) { $text->replace('{ (?: @@ -52,18 +52,18 @@ public function processBlockQuote(Text $text) \n* # blanks )+ ) - }mx', function (Text $bq) { + }mx', function (Text $bq) use ($options, $level) { $bq->replace('/^[ \t]*>[ \t]?/m', ''); $bq->replace('/^[ \t]+$/m', ''); - $this->markdown->emit('block', array($bq)); + $this->markdown->emit('block', array($bq, $options, ($level + 1))); //$bq->replace('/^/', ' '); $bq->replace('|\s*
.+?
|s', function (Text $pre) { return $pre->replace('/^ /m', ''); }); - return $this->getRenderer()->renderBlockQuote($bq) . "\n\n"; + return $this->getRenderer()->renderBlockQuote($bq, array('level' => $level)) . "\n\n"; }); } diff --git a/test/Ciconia/Extension/BlockQuoteExtensionTest.php b/test/Ciconia/Extension/BlockQuoteExtensionTest.php new file mode 100644 index 0000000..18dce1b --- /dev/null +++ b/test/Ciconia/Extension/BlockQuoteExtensionTest.php @@ -0,0 +1,110 @@ + + */ +class BlockQuoteExtensionsTest extends PHPUnit_Framework_TestCase +{ + /** + * get an block quote aware HtmlRenderer + * + * @return RendererInterface + */ + protected function getBlockQuoteLevelRenderer() + { + $renderer = $this->getMock('Ciconia\Renderer\HtmlRenderer', array('renderBlockQuote')); + $renderer->expects($this->any()) + ->method('renderBlockQuote') + ->will($this->returnCallback( + function($content, $options) { + return '
'.$content.'
'; + } + )); + return $renderer; + } + + /** + * run an simple block quote aware test + * + * @param string $name + * @param string $markdown + * @param string $expectedHtml + */ + protected function runBlockQuoteLevelTest($name, $markdown, $expectedHtml) + { + $renderer = $this->getBlockQuoteLevelRenderer(); + $ciconia = new Ciconia($renderer); + $html = str_replace("\n", '', $ciconia->render($markdown)); + $expectedHtml = str_replace(array("\n", "\t"), '', $expectedHtml); + $this->assertEquals($expectedHtml, $html, sprintf('%s failed', $name)); + } + + /** + * Test an level 2 block quote + */ + public function testBlockQuoteLevel2() + { + $this->runBlockQuoteLevelTest('block qoute level 2', +'> level 1 line 1 +level 1 line 2 +>> level 2 line 1', + +'
+

level 1 line 1 level 1 line 2

+
+

level 2 line 1

+
+
'); + } + + /** + * Test an level 3 block quote + */ + public function testBlockQuoteLevel2Multiline() + { + $this->runBlockQuoteLevelTest('block qoute level 2 multiline', +'> level 1 line 1 +> level 1 line 2 +>> level 2 line 1 +>> level 2 line 2 +>>> level 3 line 1', + +'
+

level 1 line 1 level 1 line 2

+
+

level 2 line 1 level 2 line 2

+
+

level 3 line 1

+
+
+
'); + } + + /** + * Test an nested block quote + */ + public function testBlockQuoteLevelNested() + { + $this->runBlockQuoteLevelTest('nested block quote and level', +'> level 1 line 1 +> > level 2 line 1 +> > level 2 line 1 +> > > level 3 line 1 +> > > level 3 line 1', + +'
+

level 1 line 1

+
+

level 2 line 1 level 2 line 1

+
+

level 3 line 1 level 3 line 1

+
+
+
'); + } +} \ No newline at end of file