summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshimizukawa <shimizukawa@gmail.com>2013-02-06 00:29:59 +0900
committershimizukawa <shimizukawa@gmail.com>2013-02-06 00:29:59 +0900
commit9bd8c2371bf682cb420d8fa0435e77e641b3530b (patch)
tree6d2803620de86da708531572db3606d24ba0eacc
parent32a005fe1a5d16c6005e5d2dc14183b25583aa6b (diff)
downloadsphinx-9bd8c2371bf682cb420d8fa0435e77e641b3530b.tar.gz
Fix text builder did not respect wide/fullwidth charactors for table layout.
-rw-r--r--sphinx/writers/text.py6
-rw-r--r--tests/test_build_text.py21
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