diff --git a/src/calendar.c b/src/calendar.c index db9f546f..49d41bd9 100644 --- a/src/calendar.c +++ b/src/calendar.c @@ -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; iwc_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++; } diff --git a/tests/test-rem b/tests/test-rem index 3e098713..09ba135d 100644 --- a/tests/test-rem +++ b/tests/test-rem @@ -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" diff --git a/tests/test.cmp b/tests/test.cmp index 01d22b98..8fc8c3d0 100644 --- a/tests/test.cmp +++ b/tests/test.cmp @@ -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 | | | | | | +| | | | | | | | +|ру́сский ру́сский |ру́сский ру́сский | | | | | | +|ру́сский ру́сский |ру́сский ру́сский | | | | | | +|ру́сский ру́сский |ру́сский ру́сский | | | | | | +|ру́сский ру́сский |ру́сский ру́сский | | | | | | +| | | | | | | | +|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית| | | | | | +|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית| | | | | | +|עִבְרִית עִבְרִית עִבְרִית|עִבְרִית עִבְרִית עִבְרִית| | | | | | ++-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+ \ No newline at end of file diff --git a/tests/utf-8.rem b/tests/utf-8.rem index 70c9138a..3476ab19 100644 --- a/tests/utf-8.rem +++ b/tests/utf-8.rem @@ -1,2 +1,2 @@ -MSG ру́сский -MSG עִבְרִית +MSG ру́сский ру́сский ру́сский ру́сский ру́сский ру́сский ру́сский ру́сский +MSG עִבְרִית עִבְרִית עִבְרִית עִבְרִית עִבְרִית עִבְרִית עִבְרִית עִבְרִית עִבְרִית