X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/afee8ed17a56617618fb7f963b111d7cf0fb56e7..369d712295bb4d450ea412727837d5a3fc3724b3:/test/getcwidth.c?ds=sidebyside diff --git a/test/getcwidth.c b/test/getcwidth.c index f24172fe..f2a2ac69 100644 --- a/test/getcwidth.c +++ b/test/getcwidth.c @@ -20,6 +20,9 @@ #include #endif +static void usage(char *); +static void dumpwidth(void); + int main(int argc, char *argv[]) { @@ -35,17 +38,22 @@ main(int argc, char *argv[]) setlocale(LC_ALL, ""); - if (argc != 1) { - fprintf(stderr, "Usage: %s\n", argv[0]); - fprintf(stderr, "Returns the column width of a UTF-8 " - "multibyte character\n"); - exit(1); + if (argc > 2) + usage(argv[0]); + + if (argc == 2) { + if (strcmp(argv[1], "--dump") == 0) { + dumpwidth(); + exit(0); + } else { + usage(argv[0]); + } } #ifndef MULTIBYTE_SUPPORT fprintf(stderr, "Nmh was not configured with multibyte support\n"); exit(1); -#else +#else /* MULTIBYTE_SUPPORT */ /* * It's not clear to me that we can just call mbtowc() with a * combining character; just to be safe, feed it in a base @@ -78,3 +86,39 @@ main(int argc, char *argv[]) exit(0); #endif /* MULTIBYTE_SUPPORT */ } + +static void +usage(char *argv0) +{ + fprintf(stderr, "Usage: %s [--dump]\n", argv0); + fprintf(stderr, "Returns the column width of a UTF-8 combining " + "multibyte character\n"); + fprintf(stderr, "\t--dump\tDump complete width table\n"); + + exit(1); +} + +static void +dumpwidth(void) +{ +#ifndef MULTIBYTE_SUPPORT + fprintf(stderr, "Nmh was not configured with multibyte support\n"); + exit(1); +#else /* MULTIBYTE_SUPPORT */ + wchar_t wc, low; + int width, lastwidth; + + for (wc = low = 1, lastwidth = wcwidth(wc); wc <= 0xffff; wc++) { + width = wcwidth(wc); + if (width != lastwidth) { + printf("%04X - %04X = %d\n", low, wc - 1, lastwidth); + low = wc; + } + lastwidth = width; + } + + width = wcwidth(wc - 1); + if (width == lastwidth) + printf("%04X - %04X = %d\n", low, wc - 1, width); +#endif /* MULTIBYTE_SUPPORT */ +}