diff roundup/cgi/templating.py @ 6277:957a0fc20021

issue2551094 - markdown mismatch - new config for embedded newine Make earlier patch to fix mismatch between simplemde formatting of embedded newlines choosable. New option MARKDOWN_BREAK_ON_NEWLINE added to config.ini. If set to true all 4 renders: markdown, markdown2, mistune and simplemde will make a newline into a hard linebreak using <br> when displayed.
author John Rouillard <rouilj@ieee.org>
date Sun, 25 Oct 2020 16:12:15 -0400
parents bda491248fd8
children 9ec3a9bc4ea5
line wrap: on
line diff
--- a/roundup/cgi/templating.py	Fri Oct 23 18:38:37 2020 -0400
+++ b/roundup/cgi/templating.py	Sun Oct 25 16:12:15 2020 -0400
@@ -69,7 +69,13 @@
             # don't allow disabled protocols in links
             _safe_protocols = re.compile('(?!' + ':|'.join([re.escape(s) for s in _disable_url_schemes]) + ':)', re.IGNORECASE)
 
-        markdown = lambda s: Markdown(safe_mode='escape', extras={ 'fenced-code-blocks' : True }).convert(s)
+        def _extras(config):
+            extras = { 'fenced-code-blocks' : True }
+            if config['MARKDOWN_BREAK_ON_NEWLINE']:
+                extras['break-on-newline'] = True
+            return extras
+
+        markdown = lambda s, c: Markdown(safe_mode='escape', extras=_extras(c)).convert(s)
     except ImportError:
         markdown = None
 
@@ -107,7 +113,13 @@
                 else:
                     md.treeprocessors['restrict_links'] = RestrictLinksProcessor()
 
-        markdown = lambda s: markdown_impl(s, extensions=[SafeHtml(), 'fenced_code'])
+        def _extensions(config):
+            extensions = [SafeHtml(), 'fenced_code']
+            if config['MARKDOWN_BREAK_ON_NEWLINE']:
+                extensions.append('nl2br')
+            return extensions
+
+        markdown = lambda s, c: markdown_impl(s, extensions=_extensions(c))
     except ImportError:
         markdown = None
 
@@ -117,7 +129,14 @@
     try:
         import mistune
         mistune._scheme_blacklist = [ s + ':' for s in _disable_url_schemes ]
-        markdown = mistune.markdown
+
+        def _options(config):
+            options = {}
+            if config['MARKDOWN_BREAK_ON_NEWLINE']:
+                options['hard_wrap'] = True
+            return options
+
+        markdown = lambda s, c: mistune.markdown(s, **_options(c))
     except ImportError:
         markdown = None
 
@@ -1731,7 +1750,7 @@
         if hyperlink:
             s = self.hyper_re.sub(self._hyper_repl_markdown, s)
         try:
-            s = u2s(markdown(s2u(s)))
+            s = u2s(markdown(s2u(s), self._db.config))
         except Exception:  # when markdown formatting fails return markup
             return self.plain(escape=0, hyperlink=hyperlink)
         return s

Roundup Issue Tracker: http://roundup-tracker.org/