diff options
author | Isaac Muse <faceless.shop@gmail.com> | 2021-08-04 13:47:39 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-04 15:47:39 -0400 |
commit | e11cd255cae5fd3c5ef5fdd6352cd28e212fd328 (patch) | |
tree | 4531e8301053d5b4c3f61143dd6ea3fd43678b19 | |
parent | f0b7f98e62703c7387eb39e02ba2b7fc18615d91 (diff) | |
download | python-markdown-e11cd255cae5fd3c5ef5fdd6352cd28e212fd328.tar.gz |
Don't process shebangs in codehilite when processing fenced code
Fixes #1156.
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | docs/change_log/release-3.3.md | 1 | ||||
-rw-r--r-- | markdown/extensions/codehilite.py | 4 | ||||
-rw-r--r-- | markdown/extensions/fenced_code.py | 2 | ||||
-rw-r--r-- | tests/test_syntax/extensions/test_fenced_code.py | 30 |
5 files changed, 37 insertions, 3 deletions
@@ -69,3 +69,6 @@ ENV/ # MkDocs documentation site/ + +# Mac files +.DS_Store diff --git a/docs/change_log/release-3.3.md b/docs/change_log/release-3.3.md index 12273bc..a538543 100644 --- a/docs/change_log/release-3.3.md +++ b/docs/change_log/release-3.3.md @@ -102,6 +102,7 @@ The following bug fixes are included in the 3.3 release: * Fix complex scenarios involving lists and admonitions (#1004). * Fix complex scenarios with nested ordered and unordered lists in a definition list (#918). * Fix corner cases with lists under admonitions. +* Don't process shebangs in fenced code blocks when using CodeHilite (#1156). [spec]: https://www.w3.org/TR/html5/text-level-semantics.html#the-code-element [fenced_code]: ../extensions/fenced_code_blocks.md diff --git a/markdown/extensions/codehilite.py b/markdown/extensions/codehilite.py index 9eed561..e1c2218 100644 --- a/markdown/extensions/codehilite.py +++ b/markdown/extensions/codehilite.py @@ -112,7 +112,7 @@ class CodeHilite: self.options = options - def hilite(self): + def hilite(self, shebang=True): """ Pass code to the [Pygments](http://pygments.pocoo.org/) highliter with optional line numbers. The output should then be styled with css to @@ -125,7 +125,7 @@ class CodeHilite: self.src = self.src.strip('\n') - if self.lang is None: + if self.lang is None and shebang: self._parseHeader() if pygments and self.use_pygments: diff --git a/markdown/extensions/fenced_code.py b/markdown/extensions/fenced_code.py index 04c249e..9be0ca0 100644 --- a/markdown/extensions/fenced_code.py +++ b/markdown/extensions/fenced_code.py @@ -116,7 +116,7 @@ class FencedBlockPreprocessor(Preprocessor): **local_config ) - code = highliter.hilite() + code = highliter.hilite(shebang=False) else: id_attr = lang_attr = class_attr = kv_pairs = '' if lang: diff --git a/tests/test_syntax/extensions/test_fenced_code.py b/tests/test_syntax/extensions/test_fenced_code.py index ac6ce17..56473b7 100644 --- a/tests/test_syntax/extensions/test_fenced_code.py +++ b/tests/test_syntax/extensions/test_fenced_code.py @@ -381,6 +381,36 @@ class TestFencedCodeWithCodehilite(TestCase): if has_pygments and pygments.__version__ != required_pygments_version: self.skipTest(f'Pygments=={required_pygments_version} is required') + def test_shebang(self): + + if has_pygments: + expected = ''' + <div class="codehilite"><pre><span></span><code>#!test + </code></pre></div> + ''' + else: + expected = ''' + <pre class="codehilite"><code>#!test + </code></pre> + ''' + + self.assertMarkdownRenders( + self.dedent( + ''' + ``` + #!test + ``` + ''' + ), + self.dedent( + expected + ), + extensions=[ + markdown.extensions.codehilite.CodeHiliteExtension(linenums=None, guess_lang=False), + 'fenced_code' + ] + ) + def testFencedCodeWithHighlightLines(self): if has_pygments: expected = self.dedent( |