From 5e4d32b20d65a013c2becaf43a00701ead6839d6 Mon Sep 17 00:00:00 2001 From: RunasSudo Date: Sun, 20 Dec 2020 23:14:22 +1100 Subject: [PATCH] Fix markdown in HTML behaviour for Python-Markdown 3.3.3 --- wikinote/markup.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/wikinote/markup.py b/wikinote/markup.py index 9a1d96d..f4810f4 100644 --- a/wikinote/markup.py +++ b/wikinote/markup.py @@ -27,16 +27,10 @@ class WNMarkdown(markdown.Markdown): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.registerExtensions([FootnoteExtension(), 'toc', 'tables'], {}) + self.registerExtensions([FootnoteExtension(), 'toc', 'tables', 'md_in_html'], {}) self.meta = {} - # Markdown in HTML - self.preprocessors['html_block'].markdown_in_raw = True - self.parser.blockprocessors.register(markdown.extensions.md_in_html.MarkdownInHtmlProcessor(self.parser), 'markdown_block', 105) - self.parser.blockprocessors.tag_counter = -1 - self.parser.blockprocessors.contain_span_tags = re.compile(r'^(p|h[1-6]|li|dd|dt|td|th|legend|address)$', re.IGNORECASE) - # Override default Markdown processors self.preprocessors.register(NormalizeWhitespace(self), 'normalize_whitespace', 30) self.parser.blockprocessors.register(HashHeaderProcessor(self.parser), 'hashheader', 70) @@ -136,6 +130,17 @@ class NormalizeWhitespace(markdown.preprocessors.Preprocessor): source = re.sub(r'(?<=\n) +\n', '\n', source) return source.split('\n') +# Override to inherit markdown attribute +# This is required since Python-Markdown 3.3.3 so we implement this for backwards compatibility +def HTMLExtractorExtra_get_state(self, tag, attrs): + if 'markdown' not in attrs: + parent_state = self.mdstate[-1] if self.mdstate else None + if parent_state != 'off': + attrs['markdown'] = '1' + return HTMLExtractorExtra_get_state.orig(self, tag, attrs) +HTMLExtractorExtra_get_state.orig = markdown.extensions.md_in_html.HTMLExtractorExtra.get_state +markdown.extensions.md_in_html.HTMLExtractorExtra.get_state = HTMLExtractorExtra_get_state + class DirectiveProcessor(markdown.blockprocessors.BlockProcessor): RE = re.compile(r'^.. +(?P[a-zA-Z0-9_-]+?)::(?: +(?P.*?))?(?:\n|$)')