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': 🤔

Screenshot_20220402_001102

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
)