40 lines
905 B
Awk
40 lines
905 B
Awk
BEGIN {
|
|
FS = "[; ]";
|
|
i = 0;
|
|
}
|
|
$2 == "A" {
|
|
code = code2 = strtonum(sprintf("0x%s", $1))
|
|
if (match($1, /[.]+[0-9A-Fa-f]+/)) {
|
|
s = substr($1, RSTART, RLENGTH)
|
|
sub(/[.]+/, "0x", s)
|
|
code2 = strtonum(s)
|
|
}
|
|
for (; code <= code2; code++) {
|
|
if (code >= 0x10000) { break }
|
|
map[i] = sprintf("0x%04X", code)
|
|
i++;
|
|
}
|
|
}
|
|
END {
|
|
n = 0;
|
|
start = map[0]
|
|
prev = strtonum(map[0]);
|
|
for (j = 1; j < i; j++) {
|
|
cur = strtonum(map[j]);
|
|
if (cur - prev > 1) {
|
|
map2[n] = sprintf("%s, %s", start, map[j - 1]);
|
|
n++;
|
|
start = map[j];
|
|
}
|
|
prev = cur;
|
|
}
|
|
if (i > 0) { map2[n] = sprintf("%s, %s", start, map[i - 1]); n++ }
|
|
|
|
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");
|
|
}
|