codehilite extension: Pygments style only applied to first block · Issue #1240 · Python-Markdown/markdown (original) (raw)
I have tracked down a bug and written a fix for this, wanted to explain the issue in an Issue. PR: #1241.
I'm running a small static blog using Pelican, the Elegant theme and I have enabled the Markdown plugin to do code highlighting for me.
My Markdown configuration via Pelican is like this (note 'pygments_style': 'native'
):
MARKDOWN = {
'output_format': 'html5',
'extension_configs': {
'markdown.extensions.admonition': {},
'markdown.extensions.codehilite': {
'css_class': 'highlight',
'noclasses': True,
'pygments_style': 'native',
},
'markdown.extensions.extra': {},
'markdown.extensions.meta': {},
# Enable permalink on headings.
# Note: value set to a space, so that the symbol doesn't become
# part of the RSS feed as per recommendation.
# https://elegant.oncrashreboot.com/permalinks-to-headings
'markdown.extensions.toc': {'permalink': ' '},
},
}
With the upgrade of the Markdown package from 3.2.2 to 3.3.any, the highlighting of any subsequent blocks after the first would be 'default' instead of 'native': 🤔
The commit 10058fa (Refactor fenced_code & codehilite options) seems to have introduced a 'pop' rather than proper 'get' from the local configuration in the sequence of blocks, resulting in this behaviour.
for block in blocks: |
---|
if len(block) == 1 and block[0].tag == 'code': |
code = CodeHilite( |
self.code_unescape(block[0].text), |
tab_length=self.md.tab_length, |
style=self.config.pop('pygments_style', 'default'), |
**self.config |
) |