aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIsaac Muse <faceless.shop@gmail.com>2017-01-20 16:16:52 -0700
committerWaylan Limberg <waylan.limberg@icloud.com>2017-01-20 18:16:52 -0500
commit4a3d1a6bc0cb49d8a472380614b53fdd300e7512 (patch)
tree1cfe266d3f780096673e2604cdce375c35cac9bd
parentc70b2c4154d9b6e46f282c1f212c52e9fbfa5a07 (diff)
downloadmarkdown-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.py14
-rw-r--r--tests/extensions/extra/tables.html21
-rw-r--r--tests/extensions/extra/tables.txt7
-rw-r--r--tests/misc/backtick-escape.html5
-rw-r--r--tests/misc/backtick-escape.txt5
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.`