From 5180ce98cfd8f6d235a71e555712d62044572871 Mon Sep 17 00:00:00 2001
From: Thomas Voss <mail@thomasvoss.com>
Date: Tue, 16 Apr 2024 23:24:05 +0200
Subject: Add uprop_get_equideo()

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

(limited to 'gen/prop')

diff --git a/gen/prop/equideo b/gen/prop/equideo
new file mode 100755
index 0000000..4f3ad2a
--- /dev/null
+++ b/gen/prop/equideo
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+set -e
+cd "${0%/*}/../.."
+exec >lib/unicode/prop/uprop_get_equideo.c
+
+gawk '
+BEGIN {
+	FS = "[ ;]+"
+
+	print "/* This file is autogenerated by gen/prop/equideo; DO NOT EDIT. */"
+	print ""
+	print "#include \"_bsearch.h\""
+	print "#include \"macros.h\""
+	print "#include \"rune.h\""
+	print "#include \"unicode/prop.h\""
+	print ""
+}
+
+/^[A-F0-9]{4}/ {
+	n = split($1, a, /\.\./)
+	lo = strtonum("0X" a[1])
+	hi = strtonum("0X" a[n])
+
+	for (i = lo; i <= hi; i++)
+		props[i] = strtonum("0X" $2)
+}
+
+END {
+	print "static const struct {"
+	print "\trune k, v;"
+	print "} lookup[] = {"
+
+	for (i = 0; i <= 0x10FFFF; i++) {
+		if (props[i])
+			printf "\t{RUNE_C(0x%06X), RUNE_C(0x%06X)},\n", i, props[i]
+	}
+
+	print "};"
+	print ""
+	print "_MLIB_DEFINE_BSEARCH_KV(rune, lookup, \x27\\0\x27)"
+	print ""
+	print "rune"
+	print "uprop_get_equideo(rune ch)"
+	print "{"
+	print "\treturn ch < lookup[0].k || ch > lookup[lengthof(lookup) - 1].k"
+	print "\t\t? \x27\\0\x27"
+	print "\t\t: mlib_lookup_kv(ch);"
+	print "}"
+}
+' data/EquivalentUnifiedIdeograph
-- 
cgit v1.2.3