h* tag conversion

This commit is contained in:
Matthew Tretter
2012-06-29 13:02:23 -04:00
parent 5220ac6ea2
commit 9798a14f19
2 changed files with 26 additions and 0 deletions

View File

@@ -1,5 +1,9 @@
from lxml.etree import tostring
from lxml.html.soupparser import fromstring
import re
convert_heading_re = re.compile(r'convert_h(\d+)')
def escape(text):
@@ -42,6 +46,21 @@ class MarkdownConverter(object):
node.clear()
node.text = text
def __getattr__(self, attr):
# Handle heading levels > 2
m = convert_heading_re.match(attr)
if m:
n = int(m.group(1))
def convert(el):
return self.convert_hn(n, el)
convert.__name__ = 'convert_h%s' % n
setattr(self, convert.__name__, convert)
return convert
raise AttributeError(attr)
def underline(self, text, pad_char):
text = (text or '').rstrip()
return '%s\n%s\n\n' % (text, pad_char * len(text)) if text else ''
@@ -55,6 +74,9 @@ class MarkdownConverter(object):
def convert_h2(self, el):
return self.underline(el.text, '-')
def convert_hn(self, n, el):
return '%s %s\n\n' % ('#' * n, el.text.rstrip()) if el.text else ''
def convert_i(self, el):
return self.convert_em(el)

View File

@@ -25,5 +25,9 @@ class ConversionTests(unittest.TestCase):
def test_h2(self):
self.assertEqual(md('<h2>Hello</h2>'), 'Hello\n-----\n\n')
def test_hn(self):
self.assertEqual(md('<h3>Hello</h3>'), '### Hello\n\n')
self.assertEqual(md('<h6>Hello</h6>'), '###### Hello\n\n')
def test_i(self):
self.assertEqual(md('<i>Hello</i>'), '_Hello_')