summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Shachnev <mitya57@gmail.com>2018-09-25 13:31:07 +0300
committerDmitry Shachnev <mitya57@gmail.com>2018-09-25 13:31:07 +0300
commit0889b5e37eb70f50e1adb5d9c38cdbac0cc82fb7 (patch)
tree880cabd0a487a0138ccfbe0954ae31c0ea09af91
parentcc2d85c05a4e7185e3468b17d8e9ddf9ae71373f (diff)
downloadpython-markdown-issue712.tar.gz
Make ENTITY_RE support hexadecimal entitiesissue712
Fixes #712.
-rw-r--r--markdown/inlinepatterns.py4
-rw-r--r--tests/test_syntax/inline/test_entities.py44
2 files changed, 46 insertions, 2 deletions
diff --git a/markdown/inlinepatterns.py b/markdown/inlinepatterns.py
index e4af53e..3d3e65f 100644
--- a/markdown/inlinepatterns.py
+++ b/markdown/inlinepatterns.py
@@ -155,8 +155,8 @@ AUTOMAIL_RE = r'<([^> \!]*@[^> ]*)>'
# <...>
HTML_RE = r'(\<([a-zA-Z/][^\>]*?|\!--.*?--)\>)'
-# &amp;
-ENTITY_RE = r'(&(?:\#[0-9]+|[a-zA-Z0-9]+);)'
+# "&#38;" (decimal) or "&#x26;" (hex) or "&amp;" (named)
+ENTITY_RE = r'(&(?:\#[0-9]+|\#x[0-9a-fA-F]+|[a-zA-Z0-9]+);)'
# two spaces at end of line
LINE_BREAK_RE = r' \n'
diff --git a/tests/test_syntax/inline/test_entities.py b/tests/test_syntax/inline/test_entities.py
new file mode 100644
index 0000000..67b0647
--- /dev/null
+++ b/tests/test_syntax/inline/test_entities.py
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+"""
+Python Markdown
+
+A Python implementation of John Gruber's Markdown.
+
+Documentation: https://python-markdown.github.io/
+GitHub: https://github.com/Python-Markdown/markdown/
+PyPI: https://pypi.org/project/Markdown/
+
+Started by Manfred Stienstra (http://www.dwerg.net/).
+Maintained for a few years by Yuri Takhteyev (http://www.freewisdom.org).
+Currently maintained by Waylan Limberg (https://github.com/waylan),
+Dmitry Shachnev (https://github.com/mitya57) and Isaac Muse (https://github.com/facelessuser).
+
+Copyright 2007-2018 The Python Markdown Project (v. 1.7 and later)
+Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
+Copyright 2004 Manfred Stienstra (the original version)
+
+License: BSD (see LICENSE.md for details).
+"""
+
+from markdown.test_tools import TestCase
+
+
+class TestEntities(TestCase):
+
+ def test_named_entities(self):
+ self.assertMarkdownRenders("&amp;", "<p>&amp;</p>")
+ self.assertMarkdownRenders("&sup2;", "<p>&sup2;</p>")
+ self.assertMarkdownRenders("&Aacute;", "<p>&Aacute;</p>")
+
+ def test_decimal_entities(self):
+ self.assertMarkdownRenders("&#38;", "<p>&#38;</p>")
+ self.assertMarkdownRenders("&#178;", "<p>&#178;</p>")
+
+ def test_hexadecimal_entities(self):
+ self.assertMarkdownRenders("&#x00026;", "<p>&#x00026;</p>")
+ self.assertMarkdownRenders("&#xB2;", "<p>&#xB2;</p>")
+
+ def test_false_entities(self):
+ self.assertMarkdownRenders("&not an entity;", "<p>&amp;not an entity;</p>")
+ self.assertMarkdownRenders("&#B2;", "<p>&amp;#B2;</p>")
+ self.assertMarkdownRenders("&#xnothex;", "<p>&amp;#xnothex;</p>")