Rafał Pitoń 11 лет назад
Родитель
Сommit
b0ae339508
3 измененных файлов с 32 добавлено и 3 удалено
  1. 10 0
      misago/markup/bbcode/blocks.py
  2. 5 3
      misago/markup/parser.py
  3. 17 0
      misago/markup/tests.py

+ 10 - 0
misago/markup/bbcode/blocks.py

@@ -0,0 +1,10 @@
+import re
+
+from markdown.blockprocessors import HRProcessor
+
+
+class BBCodeHRProcessor(HRProcessor):
+    RE = r'^\[hr\]*'
+
+    # Detect hr on any line of a block.
+    SEARCH_RE = re.compile(RE, re.MULTILINE | re.IGNORECASE)

+ 5 - 3
misago/markup/parser.py

@@ -1,5 +1,5 @@
 import markdown
-from misago.markup.bbcode import inline
+from misago.markup.bbcode import inline, blocks
 
 
 def parse_text(text, author=None, allow_mentions=True, allow_links=True,
@@ -72,8 +72,10 @@ def md_factory(author=None, allow_mentions=True, allow_links=True,
         del md.inlinePatterns['image_link']
 
     if allow_blocks:
-        # Add [quote], [spoiler], [list] and [code] blocks
-        pass
+        # Add [hr] [quote], [spoiler], [list] and [code] blocks
+        md.parser.blockprocessors.add('bb_hr',
+                                      blocks.BBCodeHRProcessor(md.parser),
+                                      '>hr')
     else:
         # Remove blocks
         del md.parser.blockprocessors['hashheader']

+ 17 - 0
misago/markup/tests.py

@@ -36,3 +36,20 @@ Lorem [b]ipsum[/B].
 
         result = parse_text(test_text)
         self.assertEqual(expected_result, result['parsed_text'])
+
+    def test_blocks(self):
+        """block elements are correctly parsed"""
+        test_text = """
+Lorem ipsum.
+[hr]
+Dolor met.
+""".strip()
+
+        expected_result = """
+<p>Lorem ipsum.</p>
+<hr />
+<p>Dolor met.</p>
+""".strip()
+
+        result = parse_text(test_text)
+        self.assertEqual(expected_result, result['parsed_text'])