diff --git a/markdownify/__init__.py b/markdownify/__init__.py index 32a3cf6..3ff0380 100644 --- a/markdownify/__init__.py +++ b/markdownify/__init__.py @@ -305,7 +305,7 @@ def process_text(self, el, parent_tags=None): # escape special characters if we're not inside a preformatted or code element if '_noformat' not in parent_tags: - text = self.escape(text) + text = self.escape(text, parent_tags) # remove leading whitespace at the start or just after a # block-level element; remove traliing whitespace at the end @@ -347,11 +347,11 @@ def should_convert_tag(self, tag): else: return True - def escape(self, text): + def escape(self, text, parent_tags): if not text: return '' if self.options['escape_misc']: - text = re.sub(r'([\\&<`[>~=+|])', r'\\\1', text) + text = re.sub(r'([]\\&<`[>~=+|])', r'\\\1', text) # A sequence of one or more consecutive '-', preceded and # followed by whitespace or start/end of fragment, might # be confused with an underline of a header, or with a diff --git a/tests/test_escaping.py b/tests/test_escaping.py index d213675..bab4d11 100644 --- a/tests/test_escaping.py +++ b/tests/test_escaping.py @@ -51,7 +51,9 @@ def test_misc(): assert md('-y', escape_misc=True) == '-y' assert md('+ x\n+ y\n', escape_misc=True) == '\\+ x\n\\+ y\n' assert md('`x`', escape_misc=True) == r'\`x\`' - assert md('[text](link)', escape_misc=True) == r'\[text](link)' + assert md('[text](notalink)', escape_misc=True) == r'\[text\](notalink)' + assert md('text]', escape_misc=True) == r'[text\]](link)' + assert md('[text]', escape_misc=True) == r'[\[text\]](link)' assert md('1. x', escape_misc=True) == r'1\. x' # assert md('1. x', escape_misc=True) == r'1\. x' assert md('1. x', escape_misc=True) == r'1\. x'