minirst: add a helper function to build an RST table from an array
authorMatt Mackall <mpm@selenic.com>
Thu, 11 Aug 2011 22:40:43 -0500
changeset 15039 c981f4a9ea74
parent 15038 3f4d337cb80a
child 15041 3afe5edda4e3
minirst: add a helper function to build an RST table from an array
mercurial/minirst.py
tests/test-minirst.py
tests/test-minirst.py.out
--- 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)
--- 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)
--- 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
 
 ----------------------------------------------------------------------