From: Wolfgang Kroener <w...@azog.de> UTF-8 characters in the -c calendar output no longer break the layout. --- src/calendar.c | 33 +++++++++++++++++++++++++++++++-- 1 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/src/calendar.c b/src/calendar.c index e678a09..5fe62e6 100644 --- a/src/calendar.c +++ b/src/calendar.c @@ -14,6 +14,7 @@ #include <stdio.h> #include <string.h> +#include <wchar.h> #include <ctype.h> #include <stdlib.h> @@ -520,6 +521,9 @@ static int WriteOneColLine(int col) char const *s; char const *space; int numwritten = 0; + int tmplen; + mbstate_t ps = {0}; + int twobytestart = 1; /* Print as many characters as possible within the column */ space = NULL; @@ -552,7 +556,20 @@ static int WriteOneColLine(int col) if (!space) { for (s = e->pos; s - e->pos < ColSpaces; s++) { if (!*s) break; - numwritten++; + tmplen = mbrlen(s, 2, &ps); + if ((size_t)tmplen != (size_t)-1 && (size_t)tmplen != (size_t)-2) { + /* non-twobyte character found */ + numwritten++; + } else { + /* twobyte character */ + if (twobytestart == 1) { + numwritten++; + twobytestart = 0; + } else { + e->pos++; + twobytestart = 1; + } + } PutChar(*s); } e->pos = s; @@ -561,7 +578,19 @@ static int WriteOneColLine(int col) /* We found a space - print everything before it. */ for (s = e->pos; s<space; s++) { if (!*s) break; - numwritten++; + tmplen = mbrlen(s, 2, &ps); + if ((size_t)tmplen != (size_t)-1 && (size_t)tmplen != (size_t)-2) { + /* non-twobyte character found */ + numwritten++; + } else { + /* twobyte character */ + if (twobytestart == 1) { + numwritten++; + twobytestart = 0; + } else { + twobytestart = 1; + } + } PutChar(*s); } } -- 1.7.1 _______________________________________________ Remind-fans mailing list Remind-fans@lists.whatexit.org http://lists.whatexit.org/mailman/listinfo/remind-fans