def _format_table()

in c3dm/tools/tabulate.py [0:0]


def _format_table(fmt, headers, rows, colwidths, colaligns, is_multiline):
	"""Produce a plain-text representation of the table."""
	lines = []
	hidden = fmt.with_header_hide if (headers and fmt.with_header_hide) else []
	pad = fmt.padding
	headerrow = fmt.headerrow

	padded_widths = [(w + 2*pad) for w in colwidths]
	if is_multiline:
		pad_row = lambda row, _: row  # do it later, in _append_multiline_row
		append_row = partial(_append_multiline_row, pad=pad)
	else:
		pad_row = _pad_row
		append_row = _append_basic_row

	padded_headers = pad_row(headers, pad)
	padded_rows = [pad_row(row, pad) for row in rows]

	if fmt.lineabove and "lineabove" not in hidden:
		_append_line(lines, padded_widths, colaligns, fmt.lineabove)

	if padded_headers:
		append_row(lines, padded_headers, padded_widths, colaligns, headerrow)
		if fmt.linebelowheader and "linebelowheader" not in hidden:
			_append_line(lines, padded_widths, colaligns, fmt.linebelowheader)

	if padded_rows and fmt.linebetweenrows and "linebetweenrows" not in hidden:
		# initial rows with a line below
		for row in padded_rows[:-1]:
			append_row(lines, row, padded_widths, colaligns, fmt.datarow)
			_append_line(lines, padded_widths, colaligns, fmt.linebetweenrows)
		# the last row without a line below
		append_row(lines, padded_rows[-1], padded_widths, colaligns, fmt.datarow)
	else:
		for row in padded_rows:
			append_row(lines, row, padded_widths, colaligns, fmt.datarow)

	if fmt.linebelow and "linebelow" not in hidden:
		_append_line(lines, padded_widths, colaligns, fmt.linebelow)

	if headers or rows:
		return "\n".join(lines)
	else: # a completely empty table
		return ""