aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWaylan Limberg <waylan@gmail.com>2013-08-07 21:39:08 -0400
committerWaylan Limberg <waylan@gmail.com>2013-08-07 21:39:08 -0400
commita64592d5f288d0b83b11aa7d4eade728d5d5fb91 (patch)
treed14e2849cf2ca93b9a0bf813fa0f75644af2b3f8
parenta4ceb0b2a5f2c2ae8aa3981182cf829fdd28e840 (diff)
downloadmarkdown-a64592d5f288d0b83b11aa7d4eade728d5d5fb91.tar.gz
markdown-a64592d5f288d0b83b11aa7d4eade728d5d5fb91.tar.bz2
markdown-a64592d5f288d0b83b11aa7d4eade728d5d5fb91.zip
Serializers now preserve case of tags.
It is up to the markdown code (and extension authors to make sure tags are of the correct case (there may be cases were an extension might need to mix cases - which should be preserved). Fixes #237. Thanks for the report @eichin.
-rw-r--r--markdown/serializers.py7
-rw-r--r--tests/test_apis.py32
2 files changed, 35 insertions, 4 deletions
diff --git a/markdown/serializers.py b/markdown/serializers.py
index b19d61c..0c4ebcb 100644
--- a/markdown/serializers.py
+++ b/markdown/serializers.py
@@ -172,19 +172,18 @@ def _serialize_html(write, elem, qnames, namespaces, format):
if k:
k = ":" + k
write(" xmlns%s=\"%s\"" % (k, _escape_attrib(v)))
- if format == "xhtml" and tag in HTML_EMPTY:
+ if format == "xhtml" and tag.lower() in HTML_EMPTY:
write(" />")
else:
write(">")
- tag = tag.lower()
if text:
- if tag == "script" or tag == "style":
+ if tag.lower() in ["script", "style"]:
write(text)
else:
write(_escape_cdata(text))
for e in elem:
_serialize_html(write, e, qnames, None, format)
- if tag not in HTML_EMPTY:
+ if tag.lower() not in HTML_EMPTY:
write("</" + tag + ">")
if elem.tail:
write(_escape_cdata(elem.tail))
diff --git a/tests/test_apis.py b/tests/test_apis.py
index dd232b3..4a7c7c7 100644
--- a/tests/test_apis.py
+++ b/tests/test_apis.py
@@ -326,6 +326,38 @@ class testETreeComments(unittest.TestCase):
'<!--foo-->\n')
+class testSerializers(unittest.TestCase):
+ """ Test the html and xhtml serializers. """
+
+ def testHtml(self):
+ """ Test HTML serialization. """
+ el = markdown.util.etree.Element('div')
+ p = markdown.util.etree.SubElement(el, 'p')
+ p.text = 'foo'
+ hr = markdown.util.etree.SubElement(el, 'hr')
+ self.assertEqual(markdown.serializers.to_html_string(el),
+ '<div><p>foo</p><hr></div>')
+
+ def testXhtml(self):
+ """" Test XHTML serialization. """
+ el = markdown.util.etree.Element('div')
+ p = markdown.util.etree.SubElement(el, 'p')
+ p.text = 'foo'
+ hr = markdown.util.etree.SubElement(el, 'hr')
+ self.assertEqual(markdown.serializers.to_xhtml_string(el),
+ '<div><p>foo</p><hr /></div>')
+
+ def testMixedCaseTags(self):
+ """" Test preservation of tag case. """
+ el = markdown.util.etree.Element('MixedCase')
+ el.text = 'not valid '
+ em = markdown.util.etree.SubElement(el, 'EMPHASIS')
+ em.text = 'html'
+ hr = markdown.util.etree.SubElement(el, 'HR')
+ self.assertEqual(markdown.serializers.to_xhtml_string(el),
+ '<MixedCase>not valid <EMPHASIS>html</EMPHASIS><HR /></MixedCase>')
+
+
class testAtomicString(unittest.TestCase):
""" Test that AtomicStrings are honored (not parsed). """