Properly fix combining-char-word-wrapping.

This commit is contained in:
Dianne Skoll
2020-11-01 12:05:21 -05:00
parent 3f0a4e5c39
commit 7499ada891
4 changed files with 80 additions and 51 deletions

View File

@@ -929,6 +929,10 @@ static void PrintCentered(char const *s, int width, char *pad)
break;
}
}
/* Mop up any potential combining characters */
while (*ws && wcwidth(*ws) == 0) {
PutWideChar(*ws++);
}
for (i=d+len; i<width; i++) fputs(pad, stdout);
if (buf != static_buf) free(buf);
#endif
@@ -981,6 +985,7 @@ static int WriteOneColLine(int col)
#ifdef REM_USE_WCHAR
wchar_t const *ws;
wchar_t const *wspace;
int width;
#endif
int numwritten = 0;
@@ -1005,9 +1010,18 @@ static int WriteOneColLine(int col)
}
/* Find the last space char within the column. */
while (ws - e->wc_pos <= ColSpaces) {
if (!*ws) {wspace = ws; break;}
if (iswspace(*ws)) wspace = ws;
width = 0;
while (width <= ColSpaces) {
if (!*ws) {
wspace = ws;
break;
}
if (iswspace(*ws)) {
wspace = ws;
}
if (wcwidth(*ws)) {
width++;
}
ws++;
}

View File

@@ -291,7 +291,7 @@ EOF
export LC_ALL=en_US.utf-8
export LANG=en_US.utf-8
../src/remind -c ../tests/utf-8.rem >> ../tests/test.out
../src/remind -w128 -c ../tests/utf-8.rem >> ../tests/test.out
cmp -s ../tests/test.out ../tests/test.cmp
if [ "$?" = "0" ]; then
echo "Remind: Acceptance test PASSED"

View File

@@ -6847,49 +6847,64 @@ February 29
|26 |27 |28 |29 |30 |31 | |
| | | | | | | |
+----------+----------+----------+----------+----------+----------+----------+
+----------------------------------------------------------------------------+
| November 2020 |
+----------+----------+----------+----------+----------+----------+----------+
| Sunday | Monday | Tuesday |Wednesday | Thursday | Friday | Saturday |
+----------+----------+----------+----------+----------+----------+----------+
|1 ******* |2 |3 |4 |5 |6 |7 |
| | | | | | | |
|ру́сский |ру́сский |ру́сский |ру́сский |ру́сский |ру́сский |ру́сский |
| | | | | | | |
|עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |
| | | | | | | |
| | | | | | | |
+----------+----------+----------+----------+----------+----------+----------+
|8 |9 |10 |11 |12 |13 |14 |
| | | | | | | |
|ру́сский |ру́сский |ру́сский |ру́сский |ру́сский |ру́сский |ру́сский |
| | | | | | | |
|עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |
| | | | | | | |
| | | | | | | |
+----------+----------+----------+----------+----------+----------+----------+
|15 |16 |17 |18 |19 |20 |21 |
| | | | | | | |
|ру́сский |ру́сский |ру́сский |ру́сский |ру́сский |ру́сский |ру́сский |
| | | | | | | |
|עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |
| | | | | | | |
| | | | | | | |
+----------+----------+----------+----------+----------+----------+----------+
|22 |23 |24 |25 |26 |27 |28 |
| | | | | | | |
|ру́сский |ру́сский |ру́сский |ру́сский |ру́сский |ру́сский |ру́сский |
| | | | | | | |
|עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |עִבְרִית |
| | | | | | | |
| | | | | | | |
+----------+----------+----------+----------+----------+----------+----------+
|29 |30 | | | | | |
| | | | | | | |
|ру́сский |ру́сский | | | | | |
| | | | | | | |
|עִבְרִית |עִבְרִית | | | | | |
| | | | | | | |
| | | | | | | |
+----------+----------+----------+----------+----------+----------+----------+
+-----------------------------------------------------------------------------------------------------------------------------+
| November 2020 |
+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
| Sunday | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday |
+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
|1 ************** |2 |3 |4 |5 |6 |7 |
| | | | | | | |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
| | | | | | | |
|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|
|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|
|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|
+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
|8 |9 |10 |11 |12 |13 |14 |
| | | | | | | |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
| | | | | | | |
|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|
|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|
|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|
+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
|15 |16 |17 |18 |19 |20 |21 |
| | | | | | | |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
| | | | | | | |
|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|
|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|
|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|
+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
|22 |23 |24 |25 |26 |27 |28 |
| | | | | | | |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
|ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |ру́сский ру́сский |
| | | | | | | |
|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|
|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|
|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית|
+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
|29 |30 | | | | | |
| | | | | | | |
|ру́сский ру́сский |ру́сский ру́сский | | | | | |
|ру́сский ру́сский |ру́сский ру́сский | | | | | |
|ру́сский ру́сский |ру́сский ру́сский | | | | | |
|ру́сский ру́сский |ру́сский ру́сский | | | | | |
| | | | | | | |
|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית| | | | | |
|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית| | | | | |
|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית| | | | | |
+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+

View File

@@ -1,2 +1,2 @@
MSG ру́сский
MSG עִבְרִית
MSG ру́сский ру́сский ру́сский ру́сский ру́сский ру́сский ру́сский ру́сский
MSG עִבְרִית עִבְרִית עִבְרִית עִבְרִית עִבְרִית עִבְרִית עִבְרִית עִבְרִית עִבְרִית