diff --git a/bolt-pages/bolt/pages/markdown.py b/bolt-pages/bolt/pages/markdown.py index 30a5feb249..767bf7c308 100644 --- a/bolt-pages/bolt/pages/markdown.py +++ b/bolt-pages/bolt/pages/markdown.py @@ -3,18 +3,31 @@ from pygments.formatters import html from pygments.lexers import get_lexer_by_name +from bolt.utils.text import slugify + + +class PagesRenderer(mistune.HTMLRenderer): + def heading(self, text, level, **attrs): + """Automatically add an ID to headings if one is not provided.""" + + if "id" not in attrs: + attrs["id"] = slugify(text) + + return super().heading(text, level, **attrs) -class HighlightRenderer(mistune.HTMLRenderer): def block_code(self, code, info=None): + """Highlight code blocks using Pygments.""" + if info: lexer = get_lexer_by_name(info, stripall=True) formatter = html.HtmlFormatter() return highlight(code, lexer, formatter) + return "
" + mistune.escape(code) + "
" def render_markdown(content): - renderer = HighlightRenderer(escape=False) + renderer = PagesRenderer(escape=False) markdown = mistune.create_markdown( renderer=renderer, plugins=["strikethrough", "table"] )