diff options
Diffstat (limited to 'libwc/ambwidth_map.awk')
-rw-r--r-- | libwc/ambwidth_map.awk | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/libwc/ambwidth_map.awk b/libwc/ambwidth_map.awk new file mode 100644 index 0000000..8544f58 --- /dev/null +++ b/libwc/ambwidth_map.awk @@ -0,0 +1,47 @@ +BEGIN { + FS = "[; ]"; + i = 0; +} +$2 == "A" { + code = sprintf("0x%s", $1); + if (strtonum(code) < 0x10000) { + map[i] = code + i++; + } +} +END { + n = 0; + start = map[0] + prev = strtonum(map[0]); + for (j = 1; j < i; j++) { + cur = strtonum(map[j]); + if (match(map[j], "[.]+")) { + map2[n] = sprintf("%s, %s", start, map[j - 1]); + n++; + gsub("[.]+", ", 0x", map[j]) + map2[n] = map[j]; + n++; + start = map[j + 1]; + cur = strtonum(start); + } else { + if (cur - prev > 2) { + map2[n] = sprintf("%s, %s", start, map[j - 1]); + start = map[j]; + n++; + } + + if (j == i - 1) { + map2[n] = sprintf("%s, %s", start, map[j]); + n++; + } + } + prev = cur; + } + + printf("static wc_map ucs_ambwidth_map[] = {\n"); + for (j = 0; j < n; j++) { + printf(" { %s },\n", map2[j]); + } + printf("};\n"); + printf("#define N_ucs_ambwidth_map (sizeof(ucs_ambwidth_map) / sizeof(*ucs_ambwidth_map))\n"); +} |