From 0889b5e37eb70f50e1adb5d9c38cdbac0cc82fb7 Mon Sep 17 00:00:00 2001 From: Dmitry Shachnev Date: Tue, 25 Sep 2018 13:31:07 +0300 Subject: Make ENTITY_RE support hexadecimal entities Fixes #712. --- markdown/inlinepatterns.py | 4 +-- tests/test_syntax/inline/test_entities.py | 44 +++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 tests/test_syntax/inline/test_entities.py 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/][^\>]*?|\!--.*?--)\>)' -# & -ENTITY_RE = r'(&(?:\#[0-9]+|[a-zA-Z0-9]+);)' +# "&" (decimal) or "&" (hex) or "&" (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("&", "

&

") + self.assertMarkdownRenders("²", "

²

") + self.assertMarkdownRenders("Á", "

Á

") + + def test_decimal_entities(self): + self.assertMarkdownRenders("&", "

&

") + self.assertMarkdownRenders("²", "

²

") + + def test_hexadecimal_entities(self): + self.assertMarkdownRenders("&", "

&

") + self.assertMarkdownRenders("²", "

²

") + + def test_false_entities(self): + self.assertMarkdownRenders("¬ an entity;", "

&not an entity;

") + self.assertMarkdownRenders("&#B2;", "

&#B2;

") + self.assertMarkdownRenders("&#xnothex;", "

&#xnothex;

") -- cgit v1.2.1