]> diplodocus.org Git - nmh/blobdiff - test/getcwidth.c
Suppressed display of info message when test-eom-align isn't
[nmh] / test / getcwidth.c
index f24172fefa97ea0f52930ffb668e62ab5b1ead59..f2a2ac69e5207dfd9375644f402d42f282613f44 100644 (file)
@@ -20,6 +20,9 @@
 #include <wchar.h>
 #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 */
+}