diff --git a/markdownify/__init__.py b/markdownify/__init__.py index fd03569..ac53077 100644 --- a/markdownify/__init__.py +++ b/markdownify/__init__.py @@ -319,6 +319,38 @@ def convert_code(self, el, text, convert_as_inline): convert_kbd = convert_code + def convert_dd(self, el, text, convert_as_inline): + text = (text or '').strip() + if convert_as_inline: + return ' ' + text + ' ' + if not text: + return '\n' + + # indent definition content lines by four spaces + def _indent_for_dd(match): + line_content = match.group(1) + return ' ' + line_content if line_content else '' + text = line_with_content_re.sub(_indent_for_dd, text) + + # insert definition marker into first-line indent whitespace + text = ':' + text[1:] + + return '%s\n' % text + + def convert_dt(self, el, text, convert_as_inline): + # remove newlines from term text + text = (text or '').strip() + text = all_whitespace_re.sub(' ', text) + if convert_as_inline: + return ' ' + text + ' ' + if not text: + return '\n' + + # TODO - format consecutive
elements as directly adjacent lines): + # https://michelf.ca/projects/php-markdown/extra/#def-list + + return '\n%s\n' % text + def _convert_hn(self, n, el, text, convert_as_inline): """ Method name prefixed with _ to prevent to call this """ if convert_as_inline: diff --git a/tests/test_conversions.py b/tests/test_conversions.py index 868db7c..cc5ebc7 100644 --- a/tests/test_conversions.py +++ b/tests/test_conversions.py @@ -104,6 +104,16 @@ def test_code(): assert md('foobarbaz', sub_symbol='^') == '`foobarbaz`' +def test_dl(): + assert md('
term
definition
') == '\nterm\n: definition\n' + assert md('

te

rm

definition
') == '\nte rm\n: definition\n' + assert md('
term

definition-p1

definition-p2

') == '\nterm\n: definition-p1\n\n definition-p2\n' + assert md('
term

definition 1

definition 2

') == '\nterm\n: definition 1\n: definition 2\n' + assert md('
term 1
definition 1
term 2
definition 2
') == '\nterm 1\n: definition 1\nterm 2\n: definition 2\n' + assert md('
term

line 1

line 2

') == '\nterm\n: > line 1\n >\n > line 2\n' + assert md('
term
  1. 1

    • 2a
    • 2b
  2. 3

') == '\nterm\n: 1. 1\n\n * 2a\n * 2b\n 2. 3\n' + + def test_del(): inline_tests('del', '~~')