diff options
| -rw-r--r-- | sphinx/writers/text.py | 6 | ||||
| -rw-r--r-- | tests/test_build_text.py | 21 |
2 files changed, 25 insertions, 2 deletions
diff --git a/sphinx/writers/text.py b/sphinx/writers/text.py index 21a27a17..f42d637a 100644 --- a/sphinx/writers/text.py +++ b/sphinx/writers/text.py @@ -393,7 +393,7 @@ class TextTranslator(nodes.NodeVisitor): for i, cell in enumerate(line): par = my_wrap(cell, width=colwidths[i]) if par: - maxwidth = max(map(len, par)) + maxwidth = max(map(column_width, par)) else: maxwidth = 0 realwidths[i] = max(realwidths[i], maxwidth) @@ -413,7 +413,9 @@ class TextTranslator(nodes.NodeVisitor): out = ['|'] for i, cell in enumerate(line): if cell: - out.append(' ' + cell.ljust(realwidths[i]+1)) + adjust_len = len(cell) - column_width(cell) + out.append(' ' + cell.ljust( + realwidths[i] + 1 + adjust_len)) else: out.append(' ' * (realwidths[i] + 2)) out.append('|') diff --git a/tests/test_build_text.py b/tests/test_build_text.py index d0472b8f..63df8ee0 100644 --- a/tests/test_build_text.py +++ b/tests/test_build_text.py @@ -42,3 +42,24 @@ def test_multibyte_title_line(app): expect_underline = underline.replace('=', '*') result_underline = result.splitlines()[2].strip() assert expect_underline == result_underline + + +@with_text_app() +def test_multibyte_table(app): + text = u'\u65e5\u672c\u8a9e' + contents = (u"\n.. list-table::" + "\n" + "\n - - spam" + "\n - egg" + "\n" + "\n - - %(text)s" + "\n - %(text)s" + "\n" % locals()) + + (app.srcdir / 'contents.rst').write_text(contents, encoding='utf-8') + app.builder.build_all() + result = (app.outdir / 'contents.txt').text(encoding='utf-8') + + lines = [line.strip() for line in result.splitlines() if line.strip()] + line_widths = [column_width(line) for line in lines] + assert len(set(line_widths)) == 1 # same widths |
