diff options
Diffstat (limited to 'src/po/big5corr.c')
-rw-r--r-- | src/po/big5corr.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/po/big5corr.c b/src/po/big5corr.c new file mode 100644 index 0000000..de8045e --- /dev/null +++ b/src/po/big5corr.c @@ -0,0 +1,58 @@ +/* + * Simplistic program to correct Big5 inside strings. When a trail byte is a + * backslash it needs to be doubled. + * Public domain. + */ + +/* + * 06.11.23, added by Restorer: + * For more details, see: + * https://github.com/vim/vim/pull/3261 + * https://github.com/vim/vim/pull/3476 + * https://github.com/vim/vim/pull/12153 + * (read all comments) + * + * I checked the workability on the list of backslash characters + * specified in zh_TW.UTF-8.po. It works. + * But it is better to have someone native speaker check it. + * + */ + +#include <stdio.h> +#include <string.h> + + int +main(int argc, char **argv) +{ + char buffer[BUFSIZ]; + char *p; + + while (fgets(buffer, BUFSIZ, stdin) != NULL) + { + for (p = buffer; *p != 0; p++) + { + if (strncmp(p, "charset=utf-8", 13) == 0 + || strncmp(p, "charset=UTF-8", 13) == 0) + { + fputs("charset=BIG-5", stdout); + p += 12; + } + else if (strncmp(p, "# Original translations", 23) == 0) + { + fputs("# Generated from zh_TW.UTF-8.po, DO NOT EDIT.", stdout); + while (p[1] != '\n') + ++p; + } + else + { + if (*(unsigned char *)p >= 0xA1) + { + putchar(*p++); + if (*p == '\\') + putchar(*p); + } + putchar(*p); + } + } + } +} |