minirst: create valid output when table data contains a newline
When table data contained a newline, the result of minirst.maketable
did not look nice plus it was not recognised by minirst.format:
== === ====
l1 1 one
l2 2 2
22
l3
== === ====
This problem occurred when the description of options had a very long
translation which was split by newlines. Do not bother a translator with
this detail.
The multiline translations for option descriptions have been fixed in
baf1600adfbe in it.po, de.po and ro.po. I manually did the same as this patch
does, I removed the newlines.
When a newline was in the description, this created unusable help output:
$ hg help somecommand
hg somecommand [option]...
with somecommand, you can...
options:
== =================== =======================================================
=================================== --longdesc VALUE xxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -n --norm
normal desc --newline VALUE line1 line2 == =================== ===============
===========================================================================
now this looks much nicer:
...
options:
--longdesc VALUE xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-n --norm normal desc
--newline VALUE line1 line2
--- a/mercurial/minirst.py Wed Mar 05 14:03:08 2014 +0100
+++ b/mercurial/minirst.py Wed Feb 19 17:32:21 2014 +0100
@@ -697,6 +697,10 @@
for row in data:
l = []
for w, v in zip(widths, row):
+ if '\n' in v:
+ # only remove line breaks and indentation, long lines are
+ # handled by the next tool
+ v = ' '.join(e.lstrip() for e in v.split('\n'))
pad = ' ' * (w - encoding.colwidth(v))
l.append(v + pad)
out.append(indent + ' '.join(l) + "\n")
--- a/tests/test-help.t Wed Mar 05 14:03:08 2014 +0100
+++ b/tests/test-help.t Wed Feb 19 17:32:21 2014 +0100
@@ -657,7 +657,10 @@
> pass
>
> cmdtable = {
- > "nohelp": (nohelp, [], "hg nohelp"),
+ > "nohelp": (nohelp, [('', 'longdesc', 3, 'x'*90),
+ > ('n', '', None, 'normal desc'),
+ > ('', 'newline', '', 'line1\nline2'),
+ > ], "hg nohelp"),
> }
>
> commands.norepo += ' nohelp'
@@ -672,6 +675,13 @@
(no help text available)
+ options:
+
+ --longdesc VALUE xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (default: 3)
+ -n -- normal desc
+ --newline VALUE line1 line2
+
use "hg -v help nohelp" to show the global options
$ hg help -k nohelp
--- a/tests/test-minirst.py Wed Mar 05 14:03:08 2014 +0100
+++ b/tests/test-minirst.py Wed Feb 19 17:32:21 2014 +0100
@@ -244,3 +244,14 @@
print table
debugformats('table', table)
+
+data = [['s', 'long', 'line\ngoes on here'],
+ ['', 'xy', 'tried to fix here\n by indenting']]
+
+rst = minirst.maketable(data, 1, False)
+table = ''.join(rst)
+
+print table
+
+debugformats('table+nl', table)
+
--- a/tests/test-minirst.py.out Wed Mar 05 14:03:08 2014 +0100
+++ b/tests/test-minirst.py.out Wed Feb 19 17:32:21 2014 +0100
@@ -773,3 +773,34 @@
</table>
----------------------------------------------------------------------
+ = ==== ======================================
+ s long line goes on here
+ xy tried to fix here by indenting
+ = ==== ======================================
+
+== table+nl ==
+60 column format:
+----------------------------------------------------------------------
+ s long line goes on here
+ xy tried to fix here by indenting
+----------------------------------------------------------------------
+
+30 column format:
+----------------------------------------------------------------------
+ s long line goes on here
+ xy tried to fix here by
+ indenting
+----------------------------------------------------------------------
+
+html format:
+----------------------------------------------------------------------
+<table>
+<tr><td>s</td>
+<td>long</td>
+<td>line goes on here</td></tr>
+<tr><td></td>
+<td>xy</td>
+<td>tried to fix here by indenting</td></tr>
+</table>
+----------------------------------------------------------------------
+