summaryrefslogtreecommitdiff
path: root/markdown/extensions/fenced_code.py
diff options
context:
space:
mode:
Diffstat (limited to 'markdown/extensions/fenced_code.py')
-rw-r--r--markdown/extensions/fenced_code.py25
1 files changed, 10 insertions, 15 deletions
diff --git a/markdown/extensions/fenced_code.py b/markdown/extensions/fenced_code.py
index 9be0ca0..409166a 100644
--- a/markdown/extensions/fenced_code.py
+++ b/markdown/extensions/fenced_code.py
@@ -22,6 +22,7 @@ from ..preprocessors import Preprocessor
from .codehilite import CodeHilite, CodeHiliteExtension, parse_hl_lines
from .attr_list import get_attrs, AttrListExtension
from ..util import parseBoolValue
+from ..serializers import _escape_attrib_html
import re
@@ -120,30 +121,24 @@ class FencedBlockPreprocessor(Preprocessor):
else:
id_attr = lang_attr = class_attr = kv_pairs = ''
if lang:
- lang_attr = ' class="{}{}"'.format(self.config.get('lang_prefix', 'language-'), lang)
+ prefix = self.config.get('lang_prefix', 'language-')
+ lang_attr = f' class="{prefix}{_escape_attrib_html(lang)}"'
if classes:
- class_attr = ' class="{}"'.format(' '.join(classes))
+ class_attr = f' class="{_escape_attrib_html(" ".join(classes))}"'
if id:
- id_attr = ' id="{}"'.format(id)
+ id_attr = f' id="{_escape_attrib_html(id)}"'
if self.use_attr_list and config and not config.get('use_pygments', False):
# Only assign key/value pairs to code element if attr_list ext is enabled, key/value pairs
# were defined on the code block, and the `use_pygments` key was not set to True. The
# `use_pygments` key could be either set to False or not defined. It is omitted from output.
- kv_pairs = ' ' + ' '.join(
- '{k}="{v}"'.format(k=k, v=v) for k, v in config.items() if k != 'use_pygments'
+ kv_pairs = ''.join(
+ f' {k}="{_escape_attrib_html(v)}"' for k, v in config.items() if k != 'use_pygments'
)
- code = '<pre{id}{cls}><code{lang}{kv}>{code}</code></pre>'.format(
- id=id_attr,
- cls=class_attr,
- lang=lang_attr,
- kv=kv_pairs,
- code=self._escape(m.group('code'))
- )
+ code = self._escape(m.group('code'))
+ code = f'<pre{id_attr}{class_attr}><code{lang_attr}{kv_pairs}>{code}</code></pre>'
placeholder = self.md.htmlStash.store(code)
- text = '{}\n{}\n{}'.format(text[:m.start()],
- placeholder,
- text[m.end():])
+ text = f'{text[:m.start()]}\n{placeholder}\n{text[m.end():]}'
else:
break
return text.split("\n")