#!/bin/sh set -e cd "${0%/*}/../.." exec >lib/unicode/prop/uprop_get_nfkc_scf.c gawk ' BEGIN { FS = "( *; *| *#.*)" print "#include \"_bsearch.h\"" print "#include \"macros.h\"" print "#include \"rune.h\"" print "#include \"unicode/prop.h\"" print "" print "#define M(...) ((struct rview)_(__VA_ARGS__))" print "#define _(...) \\" print "\t{(const rune []){__VA_ARGS__}, lengthof(((const rune []){__VA_ARGS__}))}" print "" print "static const struct {" print "\trune lo, hi;" print "\tstruct rview val;" print "} lookup[] = {" } $2 == "NFKC_SCF" { n = split($1, xs, /\.\./) printf "\t{RUNE_C(0x%s), RUNE_C(0x%s), _(", xs[1], xs[n] n = split($3, xs, / /) for (i = 1; i <= n; i++) { printf "RUNE_C(0x%s)", xs[i] if (i < n) printf ", " } print ")}," } END { print "};" print "" print "_MLIB_DEFINE_BSEARCH(struct rview, lookup, M(ch))" print "" print "struct rview" print "uprop_get_nfkc_scf(rune ch)" print "{" print "\treturn ch < lookup[0].lo ? M(ch) : mlib_lookup(ch);" print "}" } ' data/DerivedNormalizationProps