diff --git a/markdownify/__init__.py b/markdownify/__init__.py index 780761c..1099a6d 100644 --- a/markdownify/__init__.py +++ b/markdownify/__init__.py @@ -363,16 +363,20 @@ def get_conv_fn(self, tag_name): if not self.should_convert_tag(tag_name): return None - # Handle headings with convert_hN() function + # Look for an explicitly defined conversion function by tag name first + convert_fn_name = "convert_%s" % re_make_convert_fn_name.sub("_", tag_name) + convert_fn = getattr(self, convert_fn_name, None) + if convert_fn: + return convert_fn + + # If tag is any heading, handle with convert_hN() function match = re_html_heading.match(tag_name) if match: - n = int(match.group(1)) + n = int(match.group(1)) # get value of N from return lambda el, text, parent_tags: self.convert_hN(n, el, text, parent_tags) - # For other tags, look up their conversion function by tag name - convert_fn_name = "convert_%s" % re_make_convert_fn_name.sub('_', tag_name) - convert_fn = getattr(self, convert_fn_name, None) - return convert_fn + # No conversion function was found + return None def should_convert_tag(self, tag): """Given a tag name, return whether to convert based on strip/convert options.""" diff --git a/tests/test_custom_converter.py b/tests/test_custom_converter.py index 26faf90..00a83fc 100644 --- a/tests/test_custom_converter.py +++ b/tests/test_custom_converter.py @@ -14,8 +14,12 @@ def convert_custom_tag(self, el, text, parent_tags): """Ensure conversion function is found for tags with special characters in name""" return "convert_custom_tag(): %s" % text + def convert_h1(self, el, text, parent_tags): + """Ensure explicit heading conversion function is used""" + return "convert_h1: %s" % (text) + def convert_hN(self, n, el, text, parent_tags): - """Ensure conversion function is found for headings""" + """Ensure general heading conversion function is used""" return "convert_hN(%d): %s" % (n, text) @@ -29,6 +33,8 @@ def md(html, **options): assert md("text") == "convert_custom_tag(): text" + assert md("

text

") == "convert_h1: text" + assert md("

text

") == "convert_hN(3): text"