util.c: table_print_line: properly align texts involving CJK
For printf in C, width is counted as bytes rather than Unicode width. [1] > If the precision is specified, no more than that many bytes are written. [1] Section 7.21.6, N2176, final draft for ISO/IEC 9899:2017 (C18) Thanks Andrew Gregory for suggesting a simpler approach. Fixes FS#59229 Signed-off-by: Chih-Hsuan Yen <yan12125@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
ff7ff3c58d
commit
4533c6a8e0
1 changed files with 3 additions and 1 deletions
|
@ -522,7 +522,9 @@ static void table_print_line(const alpm_list_t *line, short col_padding,
|
|||
continue;
|
||||
}
|
||||
|
||||
cell_width = (cell->mode & CELL_RIGHT_ALIGN ? (int)widths[i] : -(int)widths[i]);
|
||||
/* calculate cell width, adjusting for multi-byte character strings */
|
||||
cell_width = (int)widths[i] - string_length(str) + strlen(str);
|
||||
cell_width = cell->mode & CELL_RIGHT_ALIGN ? cell_width : -cell_width;
|
||||
|
||||
if(need_padding) {
|
||||
printf("%*s", col_padding, "");
|
||||
|
|
Loading…
Add table
Reference in a new issue