From 0ea95de4d071ca90c534db8689fd2f2d57b7568f Mon Sep 17 00:00:00 2001 From: Timon de Groot Date: Sat, 9 Apr 2022 13:22:28 +0200 Subject: [PATCH] Add code language callback --- markdownify/__init__.py | 8 +++++++- tests/test_conversions.py | 9 +++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/markdownify/__init__.py b/markdownify/__init__.py index 82262d4..057703f 100644 --- a/markdownify/__init__.py +++ b/markdownify/__init__.py @@ -71,6 +71,7 @@ class MarkdownConverter(object): autolinks = True bullets = '*+-' # An iterable of bullet types. code_language = '' + code_language_callback = None convert = None default_title = False escape_underscores = True @@ -331,7 +332,12 @@ class MarkdownConverter(object): def convert_pre(self, el, text, convert_as_inline): if not text: return '' - return '\n```%s\n%s\n```\n' % (self.options['code_language'], text) + code_language = self.options['code_language'] + + if self.options['code_language_callback']: + code_language = self.options['code_language_callback'](el) or code_language + + return '\n```%s\n%s\n```\n' % (code_language, text) convert_s = convert_del diff --git a/tests/test_conversions.py b/tests/test_conversions.py index 6cf39ac..6b4bdaf 100644 --- a/tests/test_conversions.py +++ b/tests/test_conversions.py @@ -215,3 +215,12 @@ def test_sup(): def test_lang(): assert md('
test\n    foo\nbar
', code_language='python') == '\n```python\ntest\n foo\nbar\n```\n' assert md('
test\n    foo\nbar
', code_language='javascript') == '\n```javascript\ntest\n foo\nbar\n```\n' + + +def test_lang_callback(): + def callback(el): + return el['class'][0] if el.has_attr('class') else None + + assert md('
test\n    foo\nbar
', code_language_callback=callback) == '\n```python\ntest\n foo\nbar\n```\n' + assert md('
test\n    foo\nbar
', code_language_callback=callback) == '\n```javascript\ntest\n foo\nbar\n```\n' + assert md('
test\n    foo\nbar
', code_language_callback=callback) == '\n```javascript\ntest\n foo\nbar\n```\n'