summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIsaac Muse <faceless.shop@gmail.com>2021-08-04 13:47:39 -0600
committerGitHub <noreply@github.com>2021-08-04 15:47:39 -0400
commite11cd255cae5fd3c5ef5fdd6352cd28e212fd328 (patch)
tree4531e8301053d5b4c3f61143dd6ea3fd43678b19
parentf0b7f98e62703c7387eb39e02ba2b7fc18615d91 (diff)
downloadpython-markdown-e11cd255cae5fd3c5ef5fdd6352cd28e212fd328.tar.gz
Don't process shebangs in codehilite when processing fenced code
Fixes #1156.
-rw-r--r--.gitignore3
-rw-r--r--docs/change_log/release-3.3.md1
-rw-r--r--markdown/extensions/codehilite.py4
-rw-r--r--markdown/extensions/fenced_code.py2
-rw-r--r--tests/test_syntax/extensions/test_fenced_code.py30
5 files changed, 37 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore
index 419be2d..6de88e3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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(