From 1616feb4901579da80452c95c6e0f732b945c7d5 Mon Sep 17 00:00:00 2001
From: Thomas Voss <mail@thomasvoss.com>
Date: Thu, 18 Apr 2024 11:44:31 +0200
Subject: Add uprop_get_jg()

---
 gen/prop/jg | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)
 create mode 100755 gen/prop/jg

(limited to 'gen/prop/jg')

diff --git a/gen/prop/jg b/gen/prop/jg
new file mode 100755
index 0000000..e88442d
--- /dev/null
+++ b/gen/prop/jg
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+set -e
+cd "${0%/*}/../.."
+exec >lib/unicode/prop/uprop_get_jg.c
+
+gawk '
+BEGIN {
+	FS = "[ ;]+"
+
+	print "/* This file is autogenerated by gen/prop/jg; DO NOT EDIT. */"
+	print ""
+	print "#include \"_bsearch.h\""
+	print "#include \"rune.h\""
+	print "#include \"unicode/prop.h\""
+	print ""
+}
+
+/^[A-F0-9]/ {
+	n = split($1, a, /\.\./)
+	lo = strtonum("0X" a[1])
+	hi = strtonum("0X" a[n])
+
+	for (i = lo; i <= hi; i++)
+		props[i] = "JG_" toupper($2)
+}
+
+END {
+	print "static const struct {"
+	print "\trune lo, hi;"
+	print "\tenum uprop_jg val;"
+	print "} lookup[] = {"
+
+	for (i = 0; i <= 0x10FFFF; i++) {
+		if (!props[i])
+			continue
+		for (lo = i; props[lo] == props[i + 1]; i++)
+			;
+		printf "\t{RUNE_C(0x%06X), RUNE_C(0x%06X), %s},\n", lo, i, props[i]
+	}
+
+	print "};"
+	print ""
+	print "_MLIB_DEFINE_BSEARCH(enum uprop_jg, lookup, JG_NO_JOINING_GROUP)"
+	print ""
+	print "enum uprop_jg"
+	print "uprop_get_jg(rune ch)"
+	print "{"
+	print "\treturn ch < lookup[0].lo ? JG_NO_JOINING_GROUP : mlib_lookup(ch);"
+	print "}"
+}
+' data/DerivedJoiningGroup | sed 's/\s*$//'
-- 
cgit v1.2.3