codehilite extension: Pygments style only applied to first block (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 |
| ) |
