diff options
Diffstat (limited to 'gen/prop/gc')
-rwxr-xr-x | gen/prop/gc | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/gen/prop/gc b/gen/prop/gc new file mode 100755 index 0000000..48c6659 --- /dev/null +++ b/gen/prop/gc @@ -0,0 +1,87 @@ +#!/bin/sh + +set -e +cd "${0%/*}/../.." +exec >include/unicode/__gc.h + +cat <<C +/* This file is autogenerated by gen/prop/gc; DO NOT EDIT. */ + +#ifndef MLIB_UNICODE_PROP___GC_H +#define MLIB_UNICODE_PROP___GC_H + +#include "unicode/prop.h" + +static const enum uprop_gc __mlib_gc_lat1_lt[] = { +C + +gawk ' +BEGIN { + FS = ";" +} + +{ + s = "GC_" toupper($3) + lo = strtonum("0X" $1) + + if ($2 ~ /First/) { + getline + hi = strtonum("0X" $1) + } else + hi = lo + + for (i = lo; i <= hi; i++) + props[i] = s +} + +END { + for (i = 0; i <= 0xFF; i++) + print props[i] "," +} +' data/UnicodeData.txt | paste -d' ' - - - - - - - - | sed 's/^/\t/' + +cat <<C +}; + +static const struct { + rune lo, hi; + enum uprop_gc val; +} __mlib_gc_lt[] = { +C + +gawk ' +BEGIN { + FS = ";" +} + +{ + s = "GC_" toupper($3) + lo = strtonum("0X" $1) + + if ($2 ~ /First/) { + getline + hi = strtonum("0X" $1) + } else + hi = lo + + for (i = lo; i <= hi; i++) + props[i] = s +} + +END { + for (i = 0x100; i <= 0x10FFFF; i++) { + if (!props[i]) + continue + lo = i + while (props[lo] == props[i + 1]) + i++ + printf "\t{RUNE_C(0x%06X), RUNE_C(0x%06X), %s},\n", lo, i, props[lo] + } +} +' data/UnicodeData.txt | sort + +cat <<C +}; + +#endif /* !MLIB_UNICODE_PROP___GC_H */ +C |