h* tag conversion
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
4
tests.py
4
tests.py
@@ -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_')
|
||||
|
||||
Reference in New Issue
Block a user