From cb78014eefb2b0ddac6c61b2ea10bef7b3028f1a Mon Sep 17 00:00:00 2001 From: Zev Benjamin Date: Wed, 4 Sep 2013 17:03:45 -0400 Subject: [PATCH] bugdown: Allow block-level block quotes It is triggered by specifying the "language" of a code block to "quote" or "quoted": Hamlet said: ~~~ quote To be or **not** to be. That is the question ~~~ (imported from commit 847a0602e335e9f2955e32d9955adf8ac8de068c) --- zerver/lib/bugdown/fenced_code.py | 9 +++++++ zerver/tests.py | 43 +++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/zerver/lib/bugdown/fenced_code.py b/zerver/lib/bugdown/fenced_code.py index 3431e71f83..0816ec5780 100644 --- a/zerver/lib/bugdown/fenced_code.py +++ b/zerver/lib/bugdown/fenced_code.py @@ -107,6 +107,15 @@ class FencedBlockPreprocessor(markdown.preprocessors.Preprocessor): if m.group('lang'): langclass = LANG_TAG % m.group('lang') + if m.group('lang') in ('quote', 'quoted'): + paragraphs = m.group('code').split("\n\n") + quoted_paragraphs = [] + for paragraph in paragraphs: + lines = paragraph.split("\n") + quoted_paragraphs.append("\n".join("> " + line for line in lines if line != '')) + replacement = "\n\n".join(quoted_paragraphs) + return '%s\n%s\n%s'% (text[:m.start()], replacement, text[m.end():]) + # If config is not empty, then the codehighlite extension # is enabled, so we call it to highlite the code if self.codehilite_conf: diff --git a/zerver/tests.py b/zerver/tests.py index c7f1a1532f..f53aad7d84 100644 --- a/zerver/tests.py +++ b/zerver/tests.py @@ -2329,6 +2329,49 @@ def foobar(self): """ self.common_bugdown_test(fenced_code, expected_convert) + def test_fenced_quote(self): + fenced_quote = \ +"""Hamlet said: +~~~ quote +To be or **not** to be. + +That is the question +~~~""" + + expected_convert = \ +"""

Hamlet said:

+
+

To be or not to be.

+

That is the question

+
""" + self.common_bugdown_test(fenced_quote, expected_convert) + + def test_fenced_nested_quote(self): + fenced_quote = \ +"""Hamlet said: +~~~ quote +Polonius said: +> This above all: to thine ownself be true, +And it must follow, as the night the day, +Thou canst not then be false to any man. + +What good advice! +~~~""" + + expected_convert = \ +"""

Hamlet said:

+
+

Polonius said:

+
+

This above all: to thine ownself be true,
+And it must follow, as the night the day,
+Thou canst not then be false to any man.

+
+

What good advice!

+
""" + + self.common_bugdown_test(fenced_quote, expected_convert) + def test_dangerous_block(self): fenced_code = u'xxxxxx xxxxx xxxxxxxx xxxx. x xxxx xxxxxxxxxx:\n\n```\ "xxxx xxxx\\xxxxx\\xxxxxx"```\n\nxxx xxxx xxxxx:```xx.xxxxxxx(x\'^xxxx$\'\