mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Fix text builder did not respect wide/fullwidth charactors for table layout.
This commit is contained in:
parent
529e45a980
commit
b8296ad11e
@ -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('|')
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user