# HG changeset patch # User Matt Mackall # Date 1313120443 18000 # Node ID c981f4a9ea74ef0a40da1e8bfb41ce3dc9570d34 # Parent 3f4d337cb80aa80fbfddee6d9e76a260d1edbf36 minirst: add a helper function to build an RST table from an array diff -r 3f4d337cb80a -r c981f4a9ea74 mercurial/minirst.py --- a/mercurial/minirst.py Thu Aug 11 22:40:41 2011 -0500 +++ b/mercurial/minirst.py Thu Aug 11 22:40:43 2011 -0500 @@ -553,3 +553,19 @@ text = formatblocks(s[2], width) lines.append([(section, l) for l in text.splitlines(True)]) return lines + +def maketable(data, indent=0, header=False): + '''Generate an RST table for the given table data''' + + widths = [max(encoding.colwidth(e) for e in c) for c in zip(*data)] + indent = ' ' * indent + f = indent + ' '.join('%%-%ds' % w for w in widths) + '\n' + div = indent + ' '.join('=' * w for w in widths) + '\n' + + out = [div] + for row in data: + out.append(f % tuple(row)) + if header and len(data) > 1: + out.insert(2, div) + out.append(div) + return ''.join(out) diff -r 3f4d337cb80a -r c981f4a9ea74 tests/test-minirst.py --- a/tests/test-minirst.py Thu Aug 11 22:40:41 2011 -0500 +++ b/tests/test-minirst.py Thu Aug 11 22:40:43 2011 -0500 @@ -232,14 +232,13 @@ debugformat('comments', comments, 30) -table = """ - === === === - a b c - === === === - 1 2 3 - foo bar baz - aa bb sdfsdfsdf this line is way too long for this cell. - === === === -""" + +data = [['a', 'b', 'c'], + ['1', '2', '3'], + ['foo', 'bar', 'baz this list is very very very long man']] + +table = minirst.maketable(data, 2, True) + +print table debugformat('table', table, 30) diff -r 3f4d337cb80a -r c981f4a9ea74 tests/test-minirst.py.out --- a/tests/test-minirst.py.out Thu Aug 11 22:40:41 2011 -0500 +++ b/tests/test-minirst.py.out Thu Aug 11 22:40:43 2011 -0500 @@ -388,15 +388,21 @@ Empty comment above ---------------------------------------------------------------------- + === === ======================================== + a b c + === === ======================================== + 1 2 3 + foo bar baz this list is very very very long man + === === ======================================== + table formatted to fit within 30 characters: ---------------------------------------------------------------------- a b c ------------------------------ 1 2 3 - foo bar baz - aa bb sdfsdfsdf this line - is way too long for - this cell. + foo bar baz this list is + very very very long + man ----------------------------------------------------------------------