Merge remote-tracking branch 'upstream/develop' into ordered-list

# Conflicts:
#	markdownify/__init__.py
#	tests/test_conversions.py
This commit is contained in:
SimonIT
2020-08-26 19:41:43 +02:00
7 changed files with 160 additions and 12 deletions

View File

@@ -23,6 +23,19 @@ def escape(text):
return text.replace('_', r'\_')
def chomp(text):
"""
If the text in an inline tag like b, a, or em contains a leading or trailing
space, strip the string and return a space as suffix of prefix, if needed.
This function is used to prevent conversions like
<b> foo</b> => ** foo**
"""
prefix = ' ' if text and text[0] == ' ' else ''
suffix = ' ' if text and text[-1] == ' ' else ''
text = text.strip()
return (prefix, suffix, text)
def _todict(obj):
return dict((k, getattr(obj, k)) for k in dir(obj) if not k.startswith('_'))
@@ -115,13 +128,16 @@ class MarkdownConverter(object):
return '%s\n%s\n\n' % (text, pad_char * len(text)) if text else ''
def convert_a(self, el, text):
prefix, suffix, text = chomp(text)
if not text:
return ''
href = el.get('href')
title = el.get('title')
if self.options['autolinks'] and text == href and not title:
# Shortcut syntax
return '<%s>' % href
title_part = ' "%s"' % title.replace('"', r'\"') if title else ''
return '[%s](%s%s)' % (text or '', href, title_part) if href else text or ''
return '%s[%s](%s%s)%s' % (prefix, text, href, title_part, suffix) if href else text
def convert_b(self, el, text):
return self.convert_strong(el, text)
@@ -133,7 +149,10 @@ class MarkdownConverter(object):
return ' \n'
def convert_em(self, el, text):
return '*%s*' % text if text else ''
prefix, suffix, text = chomp(text)
if not text:
return ''
return '%s*%s*%s' % (prefix, text, suffix)
def convert_hn(self, n, el, text):
style = self.options['heading_style']
@@ -160,7 +179,8 @@ class MarkdownConverter(object):
break
el = el.parent
if nested:
text = '\n' + self.indent(text, 1).rstrip()
# remove trailing newline if nested
return '\n' + self.indent(text, 1).rstrip()
return text + ('\n' if before_paragraph else '')
convert_ul = convert_list
@@ -169,7 +189,11 @@ class MarkdownConverter(object):
def convert_li(self, el, text):
parent = el.parent
if parent is not None and parent.name == 'ol':
bullet = '%s.' % (parent.index(el) + 1)
if parent.get("start"):
start = int(parent.get("start"))
else:
start = 1
bullet = '%s.' % (start + parent.index(el))
else:
depth = -1
while el:
@@ -184,7 +208,10 @@ class MarkdownConverter(object):
return '%s\n\n' % text if text else ''
def convert_strong(self, el, text):
return '**%s**' % text if text else ''
prefix, suffix, text = chomp(text)
if not text:
return ''
return '%s**%s**%s' % (prefix, text, suffix)
def convert_img(self, el, text):
alt = el.attrs.get('alt', None) or ''