diff options
author | Isaac Muse <faceless.shop@gmail.com> | 2017-01-20 16:16:52 -0700 |
---|---|---|
committer | Waylan Limberg <waylan.limberg@icloud.com> | 2017-01-20 18:16:52 -0500 |
commit | 4a3d1a6bc0cb49d8a472380614b53fdd300e7512 (patch) | |
tree | 1cfe266d3f780096673e2604cdce375c35cac9bd | |
parent | c70b2c4154d9b6e46f282c1f212c52e9fbfa5a07 (diff) | |
download | markdown-4a3d1a6bc0cb49d8a472380614b53fdd300e7512.tar.gz markdown-4a3d1a6bc0cb49d8a472380614b53fdd300e7512.tar.bz2 markdown-4a3d1a6bc0cb49d8a472380614b53fdd300e7512.zip |
Better inline code escaping (#533)
This aims to escape code in a more expected fashion. This handles
when backticks are escaped and when the escapes before backticks are
escaped.
-rw-r--r-- | markdown/inlinepatterns.py | 14 | ||||
-rw-r--r-- | tests/extensions/extra/tables.html | 21 | ||||
-rw-r--r-- | tests/extensions/extra/tables.txt | 7 | ||||
-rw-r--r-- | tests/misc/backtick-escape.html | 5 | ||||
-rw-r--r-- | tests/misc/backtick-escape.txt | 5 |
5 files changed, 42 insertions, 10 deletions
diff --git a/markdown/inlinepatterns.py b/markdown/inlinepatterns.py index 67bc2a8..37c9afa 100644 --- a/markdown/inlinepatterns.py +++ b/markdown/inlinepatterns.py @@ -103,7 +103,7 @@ BRK = ( NOIMG = r'(?<!\!)' # `e=f()` or ``e=f("`")`` -BACKTICK_RE = r'(?<!\\)(`+)(.+?)(?<!`)\2(?!`)' +BACKTICK_RE = r'(?:(?<!\\)((?:\\{2})+)(?=`+)|(?<!\\)(`+)(.+?)(?<!`)\3(?!`))' # \< ESCAPE_RE = r'\\(.)' @@ -302,12 +302,16 @@ class BacktickPattern(Pattern): """ Return a `<code>` element containing the matching text. """ def __init__(self, pattern): Pattern.__init__(self, pattern) - self.tag = "code" + self.ESCAPED_BSLASH = '%s%s%s' % (util.STX, ord('\\'), util.ETX) + self.tag = 'code' def handleMatch(self, m): - el = util.etree.Element(self.tag) - el.text = util.AtomicString(m.group(3).strip()) - return el + if m.group(4): + el = util.etree.Element(self.tag) + el.text = util.AtomicString(m.group(4).strip()) + return el + else: + return m.group(2).replace('\\\\', self.ESCAPED_BSLASH) class DoubleTagPattern(SimpleTagPattern): diff --git a/tests/extensions/extra/tables.html b/tests/extensions/extra/tables.html index b81582c..2418c98 100644 --- a/tests/extensions/extra/tables.html +++ b/tests/extensions/extra/tables.html @@ -356,4 +356,23 @@ Content Cell | Content Cell <p>| Column1 | Column2 | | ------- || ------- | | row1 | row1 | -| row2 | row2 |</p>
\ No newline at end of file +| row2 | row2 |</p> +<p>Test escaped code in Table</p> +<table> +<thead> +<tr> +<th>Should not be code</th> +<th>Should be code</th> +</tr> +</thead> +<tbody> +<tr> +<td>`Not code`</td> +<td>\<code>code</code></td> +</tr> +<tr> +<td>\`Not code\`</td> +<td>\\<code>code</code></td> +</tr> +</tbody> +</table>
\ No newline at end of file diff --git a/tests/extensions/extra/tables.txt b/tests/extensions/extra/tables.txt index d5bd6ea..d766224 100644 --- a/tests/extensions/extra/tables.txt +++ b/tests/extensions/extra/tables.txt @@ -121,3 +121,10 @@ Escaped pipes in format row should not be a table | ------- \|| ------- | | row1 | row1 | | row2 | row2 | + +Test escaped code in Table + +Should not be code | Should be code +------------------ | -------------- +\`Not code\` | \\`code` +\\\`Not code\\\` | \\\\`code` diff --git a/tests/misc/backtick-escape.html b/tests/misc/backtick-escape.html index 07f5115..da30541 100644 --- a/tests/misc/backtick-escape.html +++ b/tests/misc/backtick-escape.html @@ -1,3 +1,4 @@ -<p>\`This should not be in code.\` -`This also should not be in code.` +<p>`This should not be in code.` +\<code>This should be in code.\\</code> +\`This should not be in code.\` `And finally this should not be in code.`</p>
\ No newline at end of file diff --git a/tests/misc/backtick-escape.txt b/tests/misc/backtick-escape.txt index b4d80b2..c019463 100644 --- a/tests/misc/backtick-escape.txt +++ b/tests/misc/backtick-escape.txt @@ -1,3 +1,4 @@ -\\`This should not be in code.\\` -\`This also should not be in code.\` +\`This should not be in code.\` +\\`This should be in code.\\` +\\\`This should not be in code.\\\` \`And finally this should not be in code.` |