diff --git a/markdownify/__init__.py b/markdownify/__init__.py index 284eba3..d3a2e6e 100644 --- a/markdownify/__init__.py +++ b/markdownify/__init__.py @@ -281,20 +281,19 @@ class MarkdownConverter(object): text_data = [] rendered_header = False for row in rows: - headers = row.find_all('th') - columns = row.find_all('td') - if not rendered_header and len(headers) > 0: - headers = [head.text.strip() for head in headers] - text_data.append('| ' + ' | '.join(headers) + ' |') - text_data.append('| ' + ' | '.join(['---'] * len(headers)) + ' |') + cells = row.find_all(['td', 'th']) + is_headrow = all([cell.name == 'th' for cell in cells]) + texts = [cell.text.strip() for cell in cells] + if not rendered_header and is_headrow: + text_data.append('| ' + ' | '.join(texts) + ' |') + text_data.append('| ' + ' | '.join(['---'] * len(cells)) + ' |') rendered_header = True - elif len(columns) > 0: + elif len(cells) > 0: if not rendered_header: - text_data.append('| ' + ' | '.join([''] * len(columns)) + ' |') - text_data.append('| ' + ' | '.join(['---'] * len(columns)) + ' |') + text_data.append('| ' + ' | '.join([''] * len(cells)) + ' |') + text_data.append('| ' + ' | '.join(['---'] * len(cells)) + ' |') rendered_header = True - columns = [colm.text.strip() for colm in columns] - text_data.append('| ' + ' | '.join(columns) + ' |') + text_data.append('| ' + ' | '.join(texts) + ' |') else: continue return '\n'.join(text_data) diff --git a/tests/test_conversions.py b/tests/test_conversions.py index e6f70c0..e2f7c39 100644 --- a/tests/test_conversions.py +++ b/tests/test_conversions.py @@ -60,6 +60,25 @@ table = """
""" +table_with_header_column = """ + + + + + + + + + + + + + + + +
FirstnameLastnameAge
JillSmith50
EveJackson94
""" + + table_head_body = """ @@ -335,6 +354,7 @@ def test_div(): def test_table(): assert md(table) == '| Firstname | Lastname | Age |\n| --- | --- | --- |\n| Jill | Smith | 50 |\n| Eve | Jackson | 94 |' + assert md(table_with_header_column) == '| Firstname | Lastname | Age |\n| --- | --- | --- |\n| Jill | Smith | 50 |\n| Eve | Jackson | 94 |' assert md(table_head_body) == '| Firstname | Lastname | Age |\n| --- | --- | --- |\n| Jill | Smith | 50 |\n| Eve | Jackson | 94 |' assert md(table_missing_text) == '| | Lastname | Age |\n| --- | --- | --- |\n| Jill | | 50 |\n| Eve | Jackson | 94 |' assert md(table_missing_head) == '| | | |\n| --- | --- | --- |\n| Firstname | Lastname | Age |\n| Jill | Smith | 50 |\n| Eve | Jackson | 94 |'