File src/ui/column_view.c changed (mode: 100644) (index 2b52f0c1c..6e0bc9b06) |
... |
... |
columns_format_line(columns_t *cols, void *format_data, int max_line_width) |
354 |
354 |
* character inside previous column. */ |
* character inside previous column. */ |
355 |
355 |
if(prev_col_end > print_start) |
if(prev_col_end > print_start) |
356 |
356 |
{ |
{ |
357 |
|
const int prev_col_max_width = (print_start > prev_col_start) |
|
358 |
|
? (print_start - prev_col_start) |
|
|
357 |
|
const int prev_col_max_width = (cur_col_start > prev_col_start) |
|
358 |
|
? (cur_col_start - prev_col_start) |
359 |
359 |
: 0; |
: 0; |
360 |
360 |
const size_t break_point = utf8_strsnlen(prev_col_buf, |
const size_t break_point = utf8_strsnlen(prev_col_buf, |
361 |
361 |
prev_col_max_width); |
prev_col_max_width); |
362 |
362 |
prev_col_buf[break_point] = '\0'; |
prev_col_buf[break_point] = '\0'; |
363 |
363 |
int real_prev_end = prev_col_start + get_width_on_screen(prev_col_buf); |
int real_prev_end = prev_col_start + get_width_on_screen(prev_col_buf); |
364 |
364 |
fill_gap_pos(format_data, real_prev_end, print_start, prev_col_id); |
fill_gap_pos(format_data, real_prev_end, print_start, prev_col_id); |
365 |
|
print_start = prev_col_end; |
|
|
365 |
|
print_start = real_prev_end; |
366 |
366 |
} |
} |
367 |
367 |
else |
else |
368 |
368 |
{ |
{ |
File tests/column_view/utf8.c changed (mode: 100644) (index d310e81a2..56a8bea83) |
... |
... |
static const size_t MAX_WIDTH = 20; |
22 |
22 |
static char print_buffer[80 + 1]; |
static char print_buffer[80 + 1]; |
23 |
23 |
|
|
24 |
24 |
static const char *col1_str; |
static const char *col1_str; |
|
25 |
|
static const char *col2_str; |
25 |
26 |
|
|
26 |
27 |
SETUP_ONCE() |
SETUP_ONCE() |
27 |
28 |
{ |
{ |
|
... |
... |
SETUP() |
39 |
40 |
col2_next = &column2_func; |
col2_next = &column2_func; |
40 |
41 |
|
|
41 |
42 |
col1_str = "师从螺丝刀йклмнопрстуфхцчшщьыъэюя"; |
col1_str = "师从螺丝刀йклмнопрстуфхцчшщьыъэюя"; |
|
43 |
|
col2_str = "яюэъыьщшчцхфутсрпонмлкйизжёедгв推"; |
42 |
44 |
} |
} |
43 |
45 |
|
|
44 |
46 |
TEARDOWN() |
TEARDOWN() |
|
... |
... |
column1_func(void *data, size_t buf_len, char buf[], const format_info_t *info) |
64 |
66 |
static void |
static void |
65 |
67 |
column2_func(void *data, size_t buf_len, char buf[], const format_info_t *info) |
column2_func(void *data, size_t buf_len, char buf[], const format_info_t *info) |
66 |
68 |
{ |
{ |
67 |
|
snprintf(buf, buf_len + 1, "%s", "яюэъыьщшчцхфутсрпонмлкйизжёедгв推"); |
|
|
69 |
|
snprintf(buf, buf_len + 1, "%s", col2_str); |
68 |
70 |
} |
} |
69 |
71 |
|
|
70 |
72 |
static void |
static void |
|
... |
... |
TEST(none_cropping_allows_for_correct_gaps, IF(locale_works)) |
140 |
142 |
assert_string_equal(expected, print_buffer); |
assert_string_equal(expected, print_buffer); |
141 |
143 |
} |
} |
142 |
144 |
|
|
|
145 |
|
TEST(none_cropping_cuts_wide_strings_correctly, IF(locale_works)) |
|
146 |
|
{ |
|
147 |
|
static column_info_t column_infos[2] = { |
|
148 |
|
{ .column_id = COL1_ID, .full_width = 10UL, .text_width = 10UL, |
|
149 |
|
.align = AT_LEFT, .sizing = ST_AUTO, .cropping = CT_NONE, }, |
|
150 |
|
{ .column_id = COL2_ID, .full_width = 4UL, .text_width = 4UL, |
|
151 |
|
.align = AT_RIGHT, .sizing = ST_AUTO, .cropping = CT_NONE, }, |
|
152 |
|
}; |
|
153 |
|
|
|
154 |
|
col1_str = "师从螺丝"; |
|
155 |
|
col2_str = "xyz"; |
|
156 |
|
|
|
157 |
|
perform_test(column_infos, 2, 9); |
|
158 |
|
assert_string_equal("师从螺xyz", print_buffer); |
|
159 |
|
|
|
160 |
|
perform_test(column_infos, 2, 10); |
|
161 |
|
assert_string_equal("师从螺 xyz", print_buffer); |
|
162 |
|
|
|
163 |
|
perform_test(column_infos, 2, 11); |
|
164 |
|
assert_string_equal("师从螺丝xyz", print_buffer); |
|
165 |
|
|
|
166 |
|
perform_test(column_infos, 2, 12); |
|
167 |
|
assert_string_equal("师从螺丝 xyz", print_buffer); |
|
168 |
|
} |
|
169 |
|
|
143 |
170 |
TEST(add_ellipsis_ok, IF(locale_works)) |
TEST(add_ellipsis_ok, IF(locale_works)) |
144 |
171 |
{ |
{ |
145 |
172 |
static column_info_t column_infos[2] = { |
static column_info_t column_infos[2] = { |