Add a new configuration option to control tabler header row inference (#161)
Add option to infer first table row as table header (defaults to false)
This commit is contained in:
@@ -102,6 +102,7 @@ class MarkdownConverter(object):
|
||||
strong_em_symbol = ASTERISK
|
||||
sub_symbol = ''
|
||||
sup_symbol = ''
|
||||
table_infer_header = False
|
||||
wrap = False
|
||||
wrap_width = 80
|
||||
|
||||
@@ -518,13 +519,24 @@ class MarkdownConverter(object):
|
||||
cells = el.find_all(['td', 'th'])
|
||||
is_headrow = (
|
||||
all([cell.name == 'th' for cell in cells])
|
||||
or (not el.previous_sibling and not el.parent.name == 'tbody')
|
||||
or (el.parent.name == 'thead'
|
||||
# avoid multiple tr in thead
|
||||
and len(el.parent.find_all('tr')) == 1)
|
||||
)
|
||||
is_head_row_missing = (
|
||||
(not el.previous_sibling and not el.parent.name == 'tbody')
|
||||
or (not el.previous_sibling and el.parent.name == 'tbody' and len(el.parent.parent.find_all(['thead'])) < 1)
|
||||
)
|
||||
overline = ''
|
||||
underline = ''
|
||||
if is_headrow and not el.previous_sibling:
|
||||
# first row and is headline: print headline underline
|
||||
if ((is_headrow
|
||||
or (is_head_row_missing
|
||||
and self.options['table_infer_header']))
|
||||
and not el.previous_sibling):
|
||||
# first row and:
|
||||
# - is headline or
|
||||
# - headline is missing and header inference is enabled
|
||||
# print headline underline
|
||||
full_colspan = 0
|
||||
for cell in cells:
|
||||
if 'colspan' in cell.attrs and cell['colspan'].isdigit():
|
||||
@@ -532,13 +544,16 @@ class MarkdownConverter(object):
|
||||
else:
|
||||
full_colspan += 1
|
||||
underline += '| ' + ' | '.join(['---'] * full_colspan) + ' |' + '\n'
|
||||
elif (not el.previous_sibling
|
||||
and (el.parent.name == 'table'
|
||||
or (el.parent.name == 'tbody'
|
||||
and not el.parent.previous_sibling))):
|
||||
elif ((is_head_row_missing
|
||||
and not self.options['table_infer_header'])
|
||||
or (not el.previous_sibling
|
||||
and (el.parent.name == 'table'
|
||||
or (el.parent.name == 'tbody'
|
||||
and not el.parent.previous_sibling)))):
|
||||
# headline is missing and header inference is disabled or:
|
||||
# first row, not headline, and:
|
||||
# - the parent is table or
|
||||
# - the parent is tbody at the beginning of a table.
|
||||
# - the parent is table or
|
||||
# - the parent is tbody at the beginning of a table.
|
||||
# print empty headline above this row
|
||||
overline += '| ' + ' | '.join([''] * len(cells)) + ' |' + '\n'
|
||||
overline += '| ' + ' | '.join(['---'] * len(cells)) + ' |' + '\n'
|
||||
|
||||
@@ -61,6 +61,10 @@ def main(argv=sys.argv[1:]):
|
||||
"should be converted to markdown images instead, this option can "
|
||||
"be set to a list of parent tags that should be allowed to "
|
||||
"contain inline images.")
|
||||
parser.add_argument('--table-infer-header', dest='table_infer_header',
|
||||
action='store_true',
|
||||
help="When a table has no header row (as indicated by '<thead>' "
|
||||
"or '<th>'), use the first body row as the header row.")
|
||||
parser.add_argument('-w', '--wrap', action='store_true',
|
||||
help="Wrap all text paragraphs at --wrap-width characters.")
|
||||
parser.add_argument('--wrap-width', type=int, default=80)
|
||||
|
||||
Reference in New Issue
Block a user