чување 1a401f51c5397cd4bb26508c850c4a3908221add
родитељ 29d5023c38e8629769473c5c6a93c535dd50efea
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Tue, 16 May 2023 23:01:07 +0200
Bugfix: within_column wasn't taking buffering into account
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
| M | table.c | | | 25 | ++++++++++++++----------- |
измењених датотека: 1, додавања: 14(+), брисања: 11(-)
diff --git a/table.c b/table.c
@@ -424,7 +424,7 @@ round_div(UINT a, UINT b)
}
int
-within_column(size_t column_start)
+within_column(size_t column_start, size_t current_rune_column)
{
return format ? (current_rune_column
< column_start + *(format + current_table_column))
@@ -749,7 +749,7 @@ do_column:
printf("%s", u8ch);
column_start++;
}
- else if (!within_column(column_start))
+ else if (!within_column(column_start, current_rune_column))
{
if (current_table_column == table_columns - 1)
{
@@ -798,7 +798,7 @@ empty_line:
printf("%s", u8ch);
while (current_table_column + 1 < table_columns)
{
- while (within_column(column_start))
+ while (within_column(column_start, current_rune_column))
{
printf(" ");
current_rune_column++;
@@ -815,7 +815,7 @@ empty_line:
current_table_column++;
current_rune_column++;
}
- while (within_column(column_start))
+ while (within_column(column_start, current_rune_column))
{
printf(" ");
current_rune_column++;
@@ -882,7 +882,7 @@ continue_line:
: ALIGN_LEFT,
¤t_rune_column);
- while (within_column(column_start))
+ while (within_column(column_start, current_rune_column))
{
printf(" ");
current_rune_column++;
@@ -917,7 +917,8 @@ continue_line:
}
else if (!ch_len) /* UTF-8 error */
{
- if (within_column(column_start))
+ if (within_column(column_start,
+ current_rune_column + outbufrunelen))
{
sprintf((char*)poutbuf, "%c", *pline++);
poutbuf++;
@@ -927,7 +928,8 @@ continue_line:
}
else if (uch == (u32)L'\t' && expand_tabs)
{
- while (within_column(column_start))
+ while (within_column(column_start,
+ current_rune_column + outbufrunelen))
{
sprintf((char*)poutbuf, " ");
poutbuf++;
@@ -942,7 +944,8 @@ continue_line:
else
{
pch_end = pline + ch_len;
- if (within_column(column_start))
+ if (within_column(column_start,
+ current_rune_column + outbufrunelen))
{
while (pline != pch_end)
poutbuf += sprintf((char*)poutbuf, "%c",
@@ -980,7 +983,7 @@ done_line:;
}
while (current_table_column < table_columns - 1)
{
- while (within_column(column_start))
+ while (within_column(column_start, current_rune_column))
{
printf(" ");
current_rune_column++;
@@ -997,7 +1000,7 @@ done_line:;
current_table_column++;
current_rune_column++;
}
- while (within_column(column_start))
+ while (within_column(column_start, current_rune_column))
{
printf(" ");
current_rune_column++;
@@ -1034,7 +1037,7 @@ do_bottom_border:
*table_symbols[current_symbol_set][6]);
column_start++;
}
- else if (!within_column(column_start))
+ else if (!within_column(column_start, current_rune_column))
{
if (current_table_column == table_columns - 1)
{