Skip to content

Commit 75cab78

Browse files
authored
Merge pull request #471 from Sanjays2402/fix/create-markdown-escape-custom-renderer
2 parents b5dd994 + 1209f34 commit 75cab78

2 files changed

Lines changed: 21 additions & 3 deletions

File tree

src/mistune/__init__.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,15 @@
2222

2323

2424
def create_markdown(
25-
escape: bool = True,
25+
escape: Optional[bool] = None,
2626
hard_wrap: bool = False,
2727
renderer: Optional[RendererRef] = "html",
2828
plugins: Optional[Iterable[PluginRef]] = None,
2929
) -> Markdown:
3030
"""Create a Markdown instance based on the given condition.
3131
32-
:param escape: Boolean. If using html renderer, escape html.
32+
:param escape: Boolean. If using html renderer, escape html. When it is
33+
``None``, the renderer keeps its own escape setting.
3334
:param hard_wrap: Boolean. Break every new line into ``<br>``.
3435
:param renderer: renderer instance, default is HTMLRenderer.
3536
:param plugins: List of plugins.
@@ -47,7 +48,10 @@ def create_markdown(
4748
# explicit and more similar to 2.x's API
4849
renderer = None
4950
elif renderer == "html":
50-
renderer = HTMLRenderer(escape=escape)
51+
renderer = HTMLRenderer(escape=True if escape is None else escape)
52+
elif escape is not None and isinstance(renderer, HTMLRenderer):
53+
# a renderer instance was given, honor the explicit escape flag
54+
renderer._escape = escape
5155

5256
inline = InlineParser(hard_wrap=hard_wrap)
5357
real_plugins: Optional[Iterable[Plugin]] = None

tests/test_misc.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,20 @@ def _add_name(md, state):
1717
md.parse("", state)
1818
self.assertEqual(state.env["name"], "test")
1919

20+
def test_escape_applies_to_custom_renderer(self):
21+
class CustomRenderer(mistune.HTMLRenderer):
22+
pass
23+
24+
md = mistune.create_markdown(renderer=CustomRenderer(), escape=False)
25+
self.assertEqual(md("<b>hi</b>").strip(), "<p><b>hi</b></p>")
26+
27+
md = mistune.create_markdown(renderer=CustomRenderer(escape=False), escape=True)
28+
self.assertEqual(md("<b>hi</b>").strip(), "<p>&lt;b&gt;hi&lt;/b&gt;</p>")
29+
30+
# without an explicit escape flag the renderer keeps its own setting
31+
md = mistune.create_markdown(renderer=CustomRenderer(escape=False))
32+
self.assertEqual(md("<b>hi</b>").strip(), "<p><b>hi</b></p>")
33+
2034
def test_hard_wrap(self):
2135
md = mistune.create_markdown(escape=False, hard_wrap=True)
2236
result = md("foo\nbar")

0 commit comments

Comments
 (0)