aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgen/prop/ccc116
-rw-r--r--include/unicode/prop.h62
-rw-r--r--lib/unicode/prop/uprop_get_ccc.c408
3 files changed, 586 insertions, 0 deletions
diff --git a/gen/prop/ccc b/gen/prop/ccc
new file mode 100755
index 0000000..4f370e7
--- /dev/null
+++ b/gen/prop/ccc
@@ -0,0 +1,116 @@
+#!/bin/sh
+
+set -e
+cd "${0%/*}/../.."
+exec >lib/unicode/prop/uprop_get_ccc.c
+
+gawk '
+BEGIN {
+ FS = ";"
+
+ map[1] = "OV"
+ map[6] = "HANR"
+ map[7] = "NK"
+ map[8] = "KV"
+ map[9] = "VR"
+ map[10] = "CCC10"
+ map[11] = "CCC11"
+ map[12] = "CCC12"
+ map[13] = "CCC13"
+ map[14] = "CCC14"
+ map[15] = "CCC15"
+ map[16] = "CCC16"
+ map[17] = "CCC17"
+ map[18] = "CCC18"
+ map[19] = "CCC19"
+ map[20] = "CCC20"
+ map[21] = "CCC21"
+ map[22] = "CCC22"
+ map[23] = "CCC23"
+ map[24] = "CCC24"
+ map[25] = "CCC25"
+ map[26] = "CCC26"
+ map[27] = "CCC27"
+ map[28] = "CCC28"
+ map[29] = "CCC29"
+ map[30] = "CCC30"
+ map[31] = "CCC31"
+ map[32] = "CCC32"
+ map[33] = "CCC33"
+ map[34] = "CCC34"
+ map[35] = "CCC35"
+ map[36] = "CCC36"
+ map[84] = "CCC84"
+ map[91] = "CCC91"
+ map[103] = "CCC103"
+ map[107] = "CCC107"
+ map[118] = "CCC118"
+ map[122] = "CCC122"
+ map[129] = "CCC129"
+ map[130] = "CCC130"
+ map[132] = "CCC132"
+ map[133] = "CCC133"
+ map[200] = "ATBL"
+ map[202] = "ATB"
+ map[214] = "ATA"
+ map[216] = "ATAR"
+ map[218] = "BL"
+ map[220] = "B"
+ map[222] = "BR"
+ map[224] = "L"
+ map[226] = "R"
+ map[228] = "AL"
+ map[230] = "A"
+ map[232] = "AR"
+ map[233] = "DB"
+ map[234] = "DA"
+ map[240] = "IS"
+
+ print "/* This file is autogenerated by gen/prop/ccc; DO NOT EDIT. */"
+ print ""
+ print "#include \"_bsearch.h\""
+ print "#include \"macros.h\""
+ print "#include \"rune.h\""
+ print "#include \"unicode/prop.h\""
+ print ""
+}
+
+{
+ s = "CCC_" (map[$4] ? map[$4] : "NR")
+ 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 {
+ print "static const struct {"
+ print "\trune lo, hi;"
+ print "\tenum uprop_ccc val;"
+ print "} lookup[] = {"
+
+ for (i = 0; i <= 0x10FFFF; i++) {
+ if (!props[i] || props[i] == "CCC_NR")
+ 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[lo]
+ }
+
+ print "};"
+ print ""
+ print "_MLIB_DEFINE_BSEARCH(enum uprop_ccc, lookup, CCC_NR)"
+ print ""
+ print "enum uprop_ccc"
+ print "uprop_get_ccc(rune ch)"
+ print "{"
+ print "\treturn ch < lookup[0].lo ? CCC_NR : mlib_lookup(ch);"
+ print "}"
+}
+' data/UnicodeData
diff --git a/include/unicode/prop.h b/include/unicode/prop.h
index b6f32fd..55c40b5 100644
--- a/include/unicode/prop.h
+++ b/include/unicode/prop.h
@@ -452,6 +452,67 @@ enum uprop_bpt {
BPT_O, /* Open */
};
+enum uprop_ccc : int {
+ CCC_NR = 0, /* Not Reordered */
+ CCC_OV = 1, /* Overlay */
+ CCC_HANR = 6, /* Han Reading */
+ CCC_NK = 7, /* Nukta */
+ CCC_KV = 8, /* Kana Voicing */
+ CCC_VR = 9, /* Virama */
+ CCC_CCC10 = 10, /* CCC10 */
+ CCC_CCC11 = 11, /* CCC11 */
+ CCC_CCC12 = 12, /* CCC12 */
+ CCC_CCC13 = 13, /* CCC13 */
+ CCC_CCC14 = 14, /* CCC14 */
+ CCC_CCC15 = 15, /* CCC15 */
+ CCC_CCC16 = 16, /* CCC16 */
+ CCC_CCC17 = 17, /* CCC17 */
+ CCC_CCC18 = 18, /* CCC18 */
+ CCC_CCC19 = 19, /* CCC19 */
+ CCC_CCC20 = 20, /* CCC20 */
+ CCC_CCC21 = 21, /* CCC21 */
+ CCC_CCC22 = 22, /* CCC22 */
+ CCC_CCC23 = 23, /* CCC23 */
+ CCC_CCC24 = 24, /* CCC24 */
+ CCC_CCC25 = 25, /* CCC25 */
+ CCC_CCC26 = 26, /* CCC26 */
+ CCC_CCC27 = 27, /* CCC27 */
+ CCC_CCC28 = 28, /* CCC28 */
+ CCC_CCC29 = 29, /* CCC29 */
+ CCC_CCC30 = 30, /* CCC30 */
+ CCC_CCC31 = 31, /* CCC31 */
+ CCC_CCC32 = 32, /* CCC32 */
+ CCC_CCC33 = 33, /* CCC33 */
+ CCC_CCC34 = 34, /* CCC34 */
+ CCC_CCC35 = 35, /* CCC35 */
+ CCC_CCC36 = 36, /* CCC36 */
+ CCC_CCC84 = 84, /* CCC84 */
+ CCC_CCC91 = 91, /* CCC91 */
+ CCC_CCC103 = 103, /* CCC103 */
+ CCC_CCC107 = 107, /* CCC107 */
+ CCC_CCC118 = 118, /* CCC118 */
+ CCC_CCC122 = 122, /* CCC122 */
+ CCC_CCC129 = 129, /* CCC129 */
+ CCC_CCC130 = 130, /* CCC130 */
+ CCC_CCC132 = 132, /* CCC132 */
+ CCC_CCC133 = 133, /* CCC133 */
+ CCC_ATBL = 200, /* Attached Below Left */
+ CCC_ATB = 202, /* Attached Below */
+ CCC_ATA = 214, /* Attached Above */
+ CCC_ATAR = 216, /* Attached Above Right */
+ CCC_BL = 218, /* Below Left */
+ CCC_B = 220, /* Below */
+ CCC_BR = 222, /* Below Right */
+ CCC_L = 224, /* Left */
+ CCC_R = 226, /* Right */
+ CCC_AL = 228, /* Above Left */
+ CCC_A = 230, /* Above */
+ CCC_AR = 232, /* Above Right */
+ CCC_DB = 233, /* Double Below */
+ CCC_DA = 234, /* Double Above */
+ CCC_IS = 240, /* Iota Subscript */
+};
+
enum uprop_dt {
DT_NONE, /* None */
DT_CAN, /* Canonical */
@@ -833,6 +894,7 @@ enum uprop_vo {
[[_mlib_pure]] enum uprop_bc uprop_get_bc(rune);
[[_mlib_pure]] enum uprop_blk uprop_get_blk(rune);
[[_mlib_pure]] enum uprop_bpt uprop_get_bpt(rune);
+[[_mlib_pure]] enum uprop_ccc uprop_get_ccc(rune);
[[_mlib_pure]] enum uprop_dt uprop_get_dt(rune);
[[_mlib_pure]] enum uprop_ea uprop_get_ea(rune);
[[_mlib_pure]] enum uprop_gc uprop_get_gc(rune);
diff --git a/lib/unicode/prop/uprop_get_ccc.c b/lib/unicode/prop/uprop_get_ccc.c
new file mode 100644
index 0000000..1e46c23
--- /dev/null
+++ b/lib/unicode/prop/uprop_get_ccc.c
@@ -0,0 +1,408 @@
+/* This file is autogenerated by gen/prop/ccc; DO NOT EDIT. */
+
+#include "_bsearch.h"
+#include "macros.h"
+#include "rune.h"
+#include "unicode/prop.h"
+
+static const struct {
+ rune lo, hi;
+ enum uprop_ccc val;
+} lookup[] = {
+ {RUNE_C(0x000300), RUNE_C(0x000314), CCC_A},
+ {RUNE_C(0x000315), RUNE_C(0x000315), CCC_AR},
+ {RUNE_C(0x000316), RUNE_C(0x000319), CCC_B},
+ {RUNE_C(0x00031A), RUNE_C(0x00031A), CCC_AR},
+ {RUNE_C(0x00031B), RUNE_C(0x00031B), CCC_ATAR},
+ {RUNE_C(0x00031C), RUNE_C(0x000320), CCC_B},
+ {RUNE_C(0x000321), RUNE_C(0x000322), CCC_ATB},
+ {RUNE_C(0x000323), RUNE_C(0x000326), CCC_B},
+ {RUNE_C(0x000327), RUNE_C(0x000328), CCC_ATB},
+ {RUNE_C(0x000329), RUNE_C(0x000333), CCC_B},
+ {RUNE_C(0x000334), RUNE_C(0x000338), CCC_OV},
+ {RUNE_C(0x000339), RUNE_C(0x00033C), CCC_B},
+ {RUNE_C(0x00033D), RUNE_C(0x000344), CCC_A},
+ {RUNE_C(0x000345), RUNE_C(0x000345), CCC_IS},
+ {RUNE_C(0x000346), RUNE_C(0x000346), CCC_A},
+ {RUNE_C(0x000347), RUNE_C(0x000349), CCC_B},
+ {RUNE_C(0x00034A), RUNE_C(0x00034C), CCC_A},
+ {RUNE_C(0x00034D), RUNE_C(0x00034E), CCC_B},
+ {RUNE_C(0x000350), RUNE_C(0x000352), CCC_A},
+ {RUNE_C(0x000353), RUNE_C(0x000356), CCC_B},
+ {RUNE_C(0x000357), RUNE_C(0x000357), CCC_A},
+ {RUNE_C(0x000358), RUNE_C(0x000358), CCC_AR},
+ {RUNE_C(0x000359), RUNE_C(0x00035A), CCC_B},
+ {RUNE_C(0x00035B), RUNE_C(0x00035B), CCC_A},
+ {RUNE_C(0x00035C), RUNE_C(0x00035C), CCC_DB},
+ {RUNE_C(0x00035D), RUNE_C(0x00035E), CCC_DA},
+ {RUNE_C(0x00035F), RUNE_C(0x00035F), CCC_DB},
+ {RUNE_C(0x000360), RUNE_C(0x000361), CCC_DA},
+ {RUNE_C(0x000362), RUNE_C(0x000362), CCC_DB},
+ {RUNE_C(0x000363), RUNE_C(0x00036F), CCC_A},
+ {RUNE_C(0x000483), RUNE_C(0x000487), CCC_A},
+ {RUNE_C(0x000591), RUNE_C(0x000591), CCC_B},
+ {RUNE_C(0x000592), RUNE_C(0x000595), CCC_A},
+ {RUNE_C(0x000596), RUNE_C(0x000596), CCC_B},
+ {RUNE_C(0x000597), RUNE_C(0x000599), CCC_A},
+ {RUNE_C(0x00059A), RUNE_C(0x00059A), CCC_BR},
+ {RUNE_C(0x00059B), RUNE_C(0x00059B), CCC_B},
+ {RUNE_C(0x00059C), RUNE_C(0x0005A1), CCC_A},
+ {RUNE_C(0x0005A2), RUNE_C(0x0005A7), CCC_B},
+ {RUNE_C(0x0005A8), RUNE_C(0x0005A9), CCC_A},
+ {RUNE_C(0x0005AA), RUNE_C(0x0005AA), CCC_B},
+ {RUNE_C(0x0005AB), RUNE_C(0x0005AC), CCC_A},
+ {RUNE_C(0x0005AD), RUNE_C(0x0005AD), CCC_BR},
+ {RUNE_C(0x0005AE), RUNE_C(0x0005AE), CCC_AL},
+ {RUNE_C(0x0005AF), RUNE_C(0x0005AF), CCC_A},
+ {RUNE_C(0x0005B0), RUNE_C(0x0005B0), CCC_CCC10},
+ {RUNE_C(0x0005B1), RUNE_C(0x0005B1), CCC_CCC11},
+ {RUNE_C(0x0005B2), RUNE_C(0x0005B2), CCC_CCC12},
+ {RUNE_C(0x0005B3), RUNE_C(0x0005B3), CCC_CCC13},
+ {RUNE_C(0x0005B4), RUNE_C(0x0005B4), CCC_CCC14},
+ {RUNE_C(0x0005B5), RUNE_C(0x0005B5), CCC_CCC15},
+ {RUNE_C(0x0005B6), RUNE_C(0x0005B6), CCC_CCC16},
+ {RUNE_C(0x0005B7), RUNE_C(0x0005B7), CCC_CCC17},
+ {RUNE_C(0x0005B8), RUNE_C(0x0005B8), CCC_CCC18},
+ {RUNE_C(0x0005B9), RUNE_C(0x0005BA), CCC_CCC19},
+ {RUNE_C(0x0005BB), RUNE_C(0x0005BB), CCC_CCC20},
+ {RUNE_C(0x0005BC), RUNE_C(0x0005BC), CCC_CCC21},
+ {RUNE_C(0x0005BD), RUNE_C(0x0005BD), CCC_CCC22},
+ {RUNE_C(0x0005BF), RUNE_C(0x0005BF), CCC_CCC23},
+ {RUNE_C(0x0005C1), RUNE_C(0x0005C1), CCC_CCC24},
+ {RUNE_C(0x0005C2), RUNE_C(0x0005C2), CCC_CCC25},
+ {RUNE_C(0x0005C4), RUNE_C(0x0005C4), CCC_A},
+ {RUNE_C(0x0005C5), RUNE_C(0x0005C5), CCC_B},
+ {RUNE_C(0x0005C7), RUNE_C(0x0005C7), CCC_CCC18},
+ {RUNE_C(0x000610), RUNE_C(0x000617), CCC_A},
+ {RUNE_C(0x000618), RUNE_C(0x000618), CCC_CCC30},
+ {RUNE_C(0x000619), RUNE_C(0x000619), CCC_CCC31},
+ {RUNE_C(0x00061A), RUNE_C(0x00061A), CCC_CCC32},
+ {RUNE_C(0x00064B), RUNE_C(0x00064B), CCC_CCC27},
+ {RUNE_C(0x00064C), RUNE_C(0x00064C), CCC_CCC28},
+ {RUNE_C(0x00064D), RUNE_C(0x00064D), CCC_CCC29},
+ {RUNE_C(0x00064E), RUNE_C(0x00064E), CCC_CCC30},
+ {RUNE_C(0x00064F), RUNE_C(0x00064F), CCC_CCC31},
+ {RUNE_C(0x000650), RUNE_C(0x000650), CCC_CCC32},
+ {RUNE_C(0x000651), RUNE_C(0x000651), CCC_CCC33},
+ {RUNE_C(0x000652), RUNE_C(0x000652), CCC_CCC34},
+ {RUNE_C(0x000653), RUNE_C(0x000654), CCC_A},
+ {RUNE_C(0x000655), RUNE_C(0x000656), CCC_B},
+ {RUNE_C(0x000657), RUNE_C(0x00065B), CCC_A},
+ {RUNE_C(0x00065C), RUNE_C(0x00065C), CCC_B},
+ {RUNE_C(0x00065D), RUNE_C(0x00065E), CCC_A},
+ {RUNE_C(0x00065F), RUNE_C(0x00065F), CCC_B},
+ {RUNE_C(0x000670), RUNE_C(0x000670), CCC_CCC35},
+ {RUNE_C(0x0006D6), RUNE_C(0x0006DC), CCC_A},
+ {RUNE_C(0x0006DF), RUNE_C(0x0006E2), CCC_A},
+ {RUNE_C(0x0006E3), RUNE_C(0x0006E3), CCC_B},
+ {RUNE_C(0x0006E4), RUNE_C(0x0006E4), CCC_A},
+ {RUNE_C(0x0006E7), RUNE_C(0x0006E8), CCC_A},
+ {RUNE_C(0x0006EA), RUNE_C(0x0006EA), CCC_B},
+ {RUNE_C(0x0006EB), RUNE_C(0x0006EC), CCC_A},
+ {RUNE_C(0x0006ED), RUNE_C(0x0006ED), CCC_B},
+ {RUNE_C(0x000711), RUNE_C(0x000711), CCC_CCC36},
+ {RUNE_C(0x000730), RUNE_C(0x000730), CCC_A},
+ {RUNE_C(0x000731), RUNE_C(0x000731), CCC_B},
+ {RUNE_C(0x000732), RUNE_C(0x000733), CCC_A},
+ {RUNE_C(0x000734), RUNE_C(0x000734), CCC_B},
+ {RUNE_C(0x000735), RUNE_C(0x000736), CCC_A},
+ {RUNE_C(0x000737), RUNE_C(0x000739), CCC_B},
+ {RUNE_C(0x00073A), RUNE_C(0x00073A), CCC_A},
+ {RUNE_C(0x00073B), RUNE_C(0x00073C), CCC_B},
+ {RUNE_C(0x00073D), RUNE_C(0x00073D), CCC_A},
+ {RUNE_C(0x00073E), RUNE_C(0x00073E), CCC_B},
+ {RUNE_C(0x00073F), RUNE_C(0x000741), CCC_A},
+ {RUNE_C(0x000742), RUNE_C(0x000742), CCC_B},
+ {RUNE_C(0x000743), RUNE_C(0x000743), CCC_A},
+ {RUNE_C(0x000744), RUNE_C(0x000744), CCC_B},
+ {RUNE_C(0x000745), RUNE_C(0x000745), CCC_A},
+ {RUNE_C(0x000746), RUNE_C(0x000746), CCC_B},
+ {RUNE_C(0x000747), RUNE_C(0x000747), CCC_A},
+ {RUNE_C(0x000748), RUNE_C(0x000748), CCC_B},
+ {RUNE_C(0x000749), RUNE_C(0x00074A), CCC_A},
+ {RUNE_C(0x0007EB), RUNE_C(0x0007F1), CCC_A},
+ {RUNE_C(0x0007F2), RUNE_C(0x0007F2), CCC_B},
+ {RUNE_C(0x0007F3), RUNE_C(0x0007F3), CCC_A},
+ {RUNE_C(0x0007FD), RUNE_C(0x0007FD), CCC_B},
+ {RUNE_C(0x000816), RUNE_C(0x000819), CCC_A},
+ {RUNE_C(0x00081B), RUNE_C(0x000823), CCC_A},
+ {RUNE_C(0x000825), RUNE_C(0x000827), CCC_A},
+ {RUNE_C(0x000829), RUNE_C(0x00082D), CCC_A},
+ {RUNE_C(0x000859), RUNE_C(0x00085B), CCC_B},
+ {RUNE_C(0x000898), RUNE_C(0x000898), CCC_A},
+ {RUNE_C(0x000899), RUNE_C(0x00089B), CCC_B},
+ {RUNE_C(0x00089C), RUNE_C(0x00089F), CCC_A},
+ {RUNE_C(0x0008CA), RUNE_C(0x0008CE), CCC_A},
+ {RUNE_C(0x0008CF), RUNE_C(0x0008D3), CCC_B},
+ {RUNE_C(0x0008D4), RUNE_C(0x0008E1), CCC_A},
+ {RUNE_C(0x0008E3), RUNE_C(0x0008E3), CCC_B},
+ {RUNE_C(0x0008E4), RUNE_C(0x0008E5), CCC_A},
+ {RUNE_C(0x0008E6), RUNE_C(0x0008E6), CCC_B},
+ {RUNE_C(0x0008E7), RUNE_C(0x0008E8), CCC_A},
+ {RUNE_C(0x0008E9), RUNE_C(0x0008E9), CCC_B},
+ {RUNE_C(0x0008EA), RUNE_C(0x0008EC), CCC_A},
+ {RUNE_C(0x0008ED), RUNE_C(0x0008EF), CCC_B},
+ {RUNE_C(0x0008F0), RUNE_C(0x0008F0), CCC_CCC27},
+ {RUNE_C(0x0008F1), RUNE_C(0x0008F1), CCC_CCC28},
+ {RUNE_C(0x0008F2), RUNE_C(0x0008F2), CCC_CCC29},
+ {RUNE_C(0x0008F3), RUNE_C(0x0008F5), CCC_A},
+ {RUNE_C(0x0008F6), RUNE_C(0x0008F6), CCC_B},
+ {RUNE_C(0x0008F7), RUNE_C(0x0008F8), CCC_A},
+ {RUNE_C(0x0008F9), RUNE_C(0x0008FA), CCC_B},
+ {RUNE_C(0x0008FB), RUNE_C(0x0008FF), CCC_A},
+ {RUNE_C(0x00093C), RUNE_C(0x00093C), CCC_NK},
+ {RUNE_C(0x00094D), RUNE_C(0x00094D), CCC_VR},
+ {RUNE_C(0x000951), RUNE_C(0x000951), CCC_A},
+ {RUNE_C(0x000952), RUNE_C(0x000952), CCC_B},
+ {RUNE_C(0x000953), RUNE_C(0x000954), CCC_A},
+ {RUNE_C(0x0009BC), RUNE_C(0x0009BC), CCC_NK},
+ {RUNE_C(0x0009CD), RUNE_C(0x0009CD), CCC_VR},
+ {RUNE_C(0x0009FE), RUNE_C(0x0009FE), CCC_A},
+ {RUNE_C(0x000A3C), RUNE_C(0x000A3C), CCC_NK},
+ {RUNE_C(0x000A4D), RUNE_C(0x000A4D), CCC_VR},
+ {RUNE_C(0x000ABC), RUNE_C(0x000ABC), CCC_NK},
+ {RUNE_C(0x000ACD), RUNE_C(0x000ACD), CCC_VR},
+ {RUNE_C(0x000B3C), RUNE_C(0x000B3C), CCC_NK},
+ {RUNE_C(0x000B4D), RUNE_C(0x000B4D), CCC_VR},
+ {RUNE_C(0x000BCD), RUNE_C(0x000BCD), CCC_VR},
+ {RUNE_C(0x000C3C), RUNE_C(0x000C3C), CCC_NK},
+ {RUNE_C(0x000C4D), RUNE_C(0x000C4D), CCC_VR},
+ {RUNE_C(0x000C55), RUNE_C(0x000C55), CCC_CCC84},
+ {RUNE_C(0x000C56), RUNE_C(0x000C56), CCC_CCC91},
+ {RUNE_C(0x000CBC), RUNE_C(0x000CBC), CCC_NK},
+ {RUNE_C(0x000CCD), RUNE_C(0x000CCD), CCC_VR},
+ {RUNE_C(0x000D3B), RUNE_C(0x000D3C), CCC_VR},
+ {RUNE_C(0x000D4D), RUNE_C(0x000D4D), CCC_VR},
+ {RUNE_C(0x000DCA), RUNE_C(0x000DCA), CCC_VR},
+ {RUNE_C(0x000E38), RUNE_C(0x000E39), CCC_CCC103},
+ {RUNE_C(0x000E3A), RUNE_C(0x000E3A), CCC_VR},
+ {RUNE_C(0x000E48), RUNE_C(0x000E4B), CCC_CCC107},
+ {RUNE_C(0x000EB8), RUNE_C(0x000EB9), CCC_CCC118},
+ {RUNE_C(0x000EBA), RUNE_C(0x000EBA), CCC_VR},
+ {RUNE_C(0x000EC8), RUNE_C(0x000ECB), CCC_CCC122},
+ {RUNE_C(0x000F18), RUNE_C(0x000F19), CCC_B},
+ {RUNE_C(0x000F35), RUNE_C(0x000F35), CCC_B},
+ {RUNE_C(0x000F37), RUNE_C(0x000F37), CCC_B},
+ {RUNE_C(0x000F39), RUNE_C(0x000F39), CCC_ATAR},
+ {RUNE_C(0x000F71), RUNE_C(0x000F71), CCC_CCC129},
+ {RUNE_C(0x000F72), RUNE_C(0x000F72), CCC_CCC130},
+ {RUNE_C(0x000F74), RUNE_C(0x000F74), CCC_CCC132},
+ {RUNE_C(0x000F7A), RUNE_C(0x000F7D), CCC_CCC130},
+ {RUNE_C(0x000F80), RUNE_C(0x000F80), CCC_CCC130},
+ {RUNE_C(0x000F82), RUNE_C(0x000F83), CCC_A},
+ {RUNE_C(0x000F84), RUNE_C(0x000F84), CCC_VR},
+ {RUNE_C(0x000F86), RUNE_C(0x000F87), CCC_A},
+ {RUNE_C(0x000FC6), RUNE_C(0x000FC6), CCC_B},
+ {RUNE_C(0x001037), RUNE_C(0x001037), CCC_NK},
+ {RUNE_C(0x001039), RUNE_C(0x00103A), CCC_VR},
+ {RUNE_C(0x00108D), RUNE_C(0x00108D), CCC_B},
+ {RUNE_C(0x00135D), RUNE_C(0x00135F), CCC_A},
+ {RUNE_C(0x001714), RUNE_C(0x001715), CCC_VR},
+ {RUNE_C(0x001734), RUNE_C(0x001734), CCC_VR},
+ {RUNE_C(0x0017D2), RUNE_C(0x0017D2), CCC_VR},
+ {RUNE_C(0x0017DD), RUNE_C(0x0017DD), CCC_A},
+ {RUNE_C(0x0018A9), RUNE_C(0x0018A9), CCC_AL},
+ {RUNE_C(0x001939), RUNE_C(0x001939), CCC_BR},
+ {RUNE_C(0x00193A), RUNE_C(0x00193A), CCC_A},
+ {RUNE_C(0x00193B), RUNE_C(0x00193B), CCC_B},
+ {RUNE_C(0x001A17), RUNE_C(0x001A17), CCC_A},
+ {RUNE_C(0x001A18), RUNE_C(0x001A18), CCC_B},
+ {RUNE_C(0x001A60), RUNE_C(0x001A60), CCC_VR},
+ {RUNE_C(0x001A75), RUNE_C(0x001A7C), CCC_A},
+ {RUNE_C(0x001A7F), RUNE_C(0x001A7F), CCC_B},
+ {RUNE_C(0x001AB0), RUNE_C(0x001AB4), CCC_A},
+ {RUNE_C(0x001AB5), RUNE_C(0x001ABA), CCC_B},
+ {RUNE_C(0x001ABB), RUNE_C(0x001ABC), CCC_A},
+ {RUNE_C(0x001ABD), RUNE_C(0x001ABD), CCC_B},
+ {RUNE_C(0x001ABF), RUNE_C(0x001AC0), CCC_B},
+ {RUNE_C(0x001AC1), RUNE_C(0x001AC2), CCC_A},
+ {RUNE_C(0x001AC3), RUNE_C(0x001AC4), CCC_B},
+ {RUNE_C(0x001AC5), RUNE_C(0x001AC9), CCC_A},
+ {RUNE_C(0x001ACA), RUNE_C(0x001ACA), CCC_B},
+ {RUNE_C(0x001ACB), RUNE_C(0x001ACE), CCC_A},
+ {RUNE_C(0x001B34), RUNE_C(0x001B34), CCC_NK},
+ {RUNE_C(0x001B44), RUNE_C(0x001B44), CCC_VR},
+ {RUNE_C(0x001B6B), RUNE_C(0x001B6B), CCC_A},
+ {RUNE_C(0x001B6C), RUNE_C(0x001B6C), CCC_B},
+ {RUNE_C(0x001B6D), RUNE_C(0x001B73), CCC_A},
+ {RUNE_C(0x001BAA), RUNE_C(0x001BAB), CCC_VR},
+ {RUNE_C(0x001BE6), RUNE_C(0x001BE6), CCC_NK},
+ {RUNE_C(0x001BF2), RUNE_C(0x001BF3), CCC_VR},
+ {RUNE_C(0x001C37), RUNE_C(0x001C37), CCC_NK},
+ {RUNE_C(0x001CD0), RUNE_C(0x001CD2), CCC_A},
+ {RUNE_C(0x001CD4), RUNE_C(0x001CD4), CCC_OV},
+ {RUNE_C(0x001CD5), RUNE_C(0x001CD9), CCC_B},
+ {RUNE_C(0x001CDA), RUNE_C(0x001CDB), CCC_A},
+ {RUNE_C(0x001CDC), RUNE_C(0x001CDF), CCC_B},
+ {RUNE_C(0x001CE0), RUNE_C(0x001CE0), CCC_A},
+ {RUNE_C(0x001CE2), RUNE_C(0x001CE8), CCC_OV},
+ {RUNE_C(0x001CED), RUNE_C(0x001CED), CCC_B},
+ {RUNE_C(0x001CF4), RUNE_C(0x001CF4), CCC_A},
+ {RUNE_C(0x001CF8), RUNE_C(0x001CF9), CCC_A},
+ {RUNE_C(0x001DC0), RUNE_C(0x001DC1), CCC_A},
+ {RUNE_C(0x001DC2), RUNE_C(0x001DC2), CCC_B},
+ {RUNE_C(0x001DC3), RUNE_C(0x001DC9), CCC_A},
+ {RUNE_C(0x001DCA), RUNE_C(0x001DCA), CCC_B},
+ {RUNE_C(0x001DCB), RUNE_C(0x001DCC), CCC_A},
+ {RUNE_C(0x001DCD), RUNE_C(0x001DCD), CCC_DA},
+ {RUNE_C(0x001DCE), RUNE_C(0x001DCE), CCC_ATA},
+ {RUNE_C(0x001DCF), RUNE_C(0x001DCF), CCC_B},
+ {RUNE_C(0x001DD0), RUNE_C(0x001DD0), CCC_ATB},
+ {RUNE_C(0x001DD1), RUNE_C(0x001DF5), CCC_A},
+ {RUNE_C(0x001DF6), RUNE_C(0x001DF6), CCC_AR},
+ {RUNE_C(0x001DF7), RUNE_C(0x001DF8), CCC_AL},
+ {RUNE_C(0x001DF9), RUNE_C(0x001DF9), CCC_B},
+ {RUNE_C(0x001DFA), RUNE_C(0x001DFA), CCC_BL},
+ {RUNE_C(0x001DFB), RUNE_C(0x001DFB), CCC_A},
+ {RUNE_C(0x001DFC), RUNE_C(0x001DFC), CCC_DB},
+ {RUNE_C(0x001DFD), RUNE_C(0x001DFD), CCC_B},
+ {RUNE_C(0x001DFE), RUNE_C(0x001DFE), CCC_A},
+ {RUNE_C(0x001DFF), RUNE_C(0x001DFF), CCC_B},
+ {RUNE_C(0x0020D0), RUNE_C(0x0020D1), CCC_A},
+ {RUNE_C(0x0020D2), RUNE_C(0x0020D3), CCC_OV},
+ {RUNE_C(0x0020D4), RUNE_C(0x0020D7), CCC_A},
+ {RUNE_C(0x0020D8), RUNE_C(0x0020DA), CCC_OV},
+ {RUNE_C(0x0020DB), RUNE_C(0x0020DC), CCC_A},
+ {RUNE_C(0x0020E1), RUNE_C(0x0020E1), CCC_A},
+ {RUNE_C(0x0020E5), RUNE_C(0x0020E6), CCC_OV},
+ {RUNE_C(0x0020E7), RUNE_C(0x0020E7), CCC_A},
+ {RUNE_C(0x0020E8), RUNE_C(0x0020E8), CCC_B},
+ {RUNE_C(0x0020E9), RUNE_C(0x0020E9), CCC_A},
+ {RUNE_C(0x0020EA), RUNE_C(0x0020EB), CCC_OV},
+ {RUNE_C(0x0020EC), RUNE_C(0x0020EF), CCC_B},
+ {RUNE_C(0x0020F0), RUNE_C(0x0020F0), CCC_A},
+ {RUNE_C(0x002CEF), RUNE_C(0x002CF1), CCC_A},
+ {RUNE_C(0x002D7F), RUNE_C(0x002D7F), CCC_VR},
+ {RUNE_C(0x002DE0), RUNE_C(0x002DFF), CCC_A},
+ {RUNE_C(0x00302A), RUNE_C(0x00302A), CCC_BL},
+ {RUNE_C(0x00302B), RUNE_C(0x00302B), CCC_AL},
+ {RUNE_C(0x00302C), RUNE_C(0x00302C), CCC_AR},
+ {RUNE_C(0x00302D), RUNE_C(0x00302D), CCC_BR},
+ {RUNE_C(0x00302E), RUNE_C(0x00302F), CCC_L},
+ {RUNE_C(0x003099), RUNE_C(0x00309A), CCC_KV},
+ {RUNE_C(0x00A66F), RUNE_C(0x00A66F), CCC_A},
+ {RUNE_C(0x00A674), RUNE_C(0x00A67D), CCC_A},
+ {RUNE_C(0x00A69E), RUNE_C(0x00A69F), CCC_A},
+ {RUNE_C(0x00A6F0), RUNE_C(0x00A6F1), CCC_A},
+ {RUNE_C(0x00A806), RUNE_C(0x00A806), CCC_VR},
+ {RUNE_C(0x00A82C), RUNE_C(0x00A82C), CCC_VR},
+ {RUNE_C(0x00A8C4), RUNE_C(0x00A8C4), CCC_VR},
+ {RUNE_C(0x00A8E0), RUNE_C(0x00A8F1), CCC_A},
+ {RUNE_C(0x00A92B), RUNE_C(0x00A92D), CCC_B},
+ {RUNE_C(0x00A953), RUNE_C(0x00A953), CCC_VR},
+ {RUNE_C(0x00A9B3), RUNE_C(0x00A9B3), CCC_NK},
+ {RUNE_C(0x00A9C0), RUNE_C(0x00A9C0), CCC_VR},
+ {RUNE_C(0x00AAB0), RUNE_C(0x00AAB0), CCC_A},
+ {RUNE_C(0x00AAB2), RUNE_C(0x00AAB3), CCC_A},
+ {RUNE_C(0x00AAB4), RUNE_C(0x00AAB4), CCC_B},
+ {RUNE_C(0x00AAB7), RUNE_C(0x00AAB8), CCC_A},
+ {RUNE_C(0x00AABE), RUNE_C(0x00AABF), CCC_A},
+ {RUNE_C(0x00AAC1), RUNE_C(0x00AAC1), CCC_A},
+ {RUNE_C(0x00AAF6), RUNE_C(0x00AAF6), CCC_VR},
+ {RUNE_C(0x00ABED), RUNE_C(0x00ABED), CCC_VR},
+ {RUNE_C(0x00FB1E), RUNE_C(0x00FB1E), CCC_CCC26},
+ {RUNE_C(0x00FE20), RUNE_C(0x00FE26), CCC_A},
+ {RUNE_C(0x00FE27), RUNE_C(0x00FE2D), CCC_B},
+ {RUNE_C(0x00FE2E), RUNE_C(0x00FE2F), CCC_A},
+ {RUNE_C(0x0101FD), RUNE_C(0x0101FD), CCC_B},
+ {RUNE_C(0x0102E0), RUNE_C(0x0102E0), CCC_B},
+ {RUNE_C(0x010376), RUNE_C(0x01037A), CCC_A},
+ {RUNE_C(0x010A0D), RUNE_C(0x010A0D), CCC_B},
+ {RUNE_C(0x010A0F), RUNE_C(0x010A0F), CCC_A},
+ {RUNE_C(0x010A38), RUNE_C(0x010A38), CCC_A},
+ {RUNE_C(0x010A39), RUNE_C(0x010A39), CCC_OV},
+ {RUNE_C(0x010A3A), RUNE_C(0x010A3A), CCC_B},
+ {RUNE_C(0x010A3F), RUNE_C(0x010A3F), CCC_VR},
+ {RUNE_C(0x010AE5), RUNE_C(0x010AE5), CCC_A},
+ {RUNE_C(0x010AE6), RUNE_C(0x010AE6), CCC_B},
+ {RUNE_C(0x010D24), RUNE_C(0x010D27), CCC_A},
+ {RUNE_C(0x010EAB), RUNE_C(0x010EAC), CCC_A},
+ {RUNE_C(0x010EFD), RUNE_C(0x010EFF), CCC_B},
+ {RUNE_C(0x010F46), RUNE_C(0x010F47), CCC_B},
+ {RUNE_C(0x010F48), RUNE_C(0x010F4A), CCC_A},
+ {RUNE_C(0x010F4B), RUNE_C(0x010F4B), CCC_B},
+ {RUNE_C(0x010F4C), RUNE_C(0x010F4C), CCC_A},
+ {RUNE_C(0x010F4D), RUNE_C(0x010F50), CCC_B},
+ {RUNE_C(0x010F82), RUNE_C(0x010F82), CCC_A},
+ {RUNE_C(0x010F83), RUNE_C(0x010F83), CCC_B},
+ {RUNE_C(0x010F84), RUNE_C(0x010F84), CCC_A},
+ {RUNE_C(0x010F85), RUNE_C(0x010F85), CCC_B},
+ {RUNE_C(0x011046), RUNE_C(0x011046), CCC_VR},
+ {RUNE_C(0x011070), RUNE_C(0x011070), CCC_VR},
+ {RUNE_C(0x01107F), RUNE_C(0x01107F), CCC_VR},
+ {RUNE_C(0x0110B9), RUNE_C(0x0110B9), CCC_VR},
+ {RUNE_C(0x0110BA), RUNE_C(0x0110BA), CCC_NK},
+ {RUNE_C(0x011100), RUNE_C(0x011102), CCC_A},
+ {RUNE_C(0x011133), RUNE_C(0x011134), CCC_VR},
+ {RUNE_C(0x011173), RUNE_C(0x011173), CCC_NK},
+ {RUNE_C(0x0111C0), RUNE_C(0x0111C0), CCC_VR},
+ {RUNE_C(0x0111CA), RUNE_C(0x0111CA), CCC_NK},
+ {RUNE_C(0x011235), RUNE_C(0x011235), CCC_VR},
+ {RUNE_C(0x011236), RUNE_C(0x011236), CCC_NK},
+ {RUNE_C(0x0112E9), RUNE_C(0x0112E9), CCC_NK},
+ {RUNE_C(0x0112EA), RUNE_C(0x0112EA), CCC_VR},
+ {RUNE_C(0x01133B), RUNE_C(0x01133C), CCC_NK},
+ {RUNE_C(0x01134D), RUNE_C(0x01134D), CCC_VR},
+ {RUNE_C(0x011366), RUNE_C(0x01136C), CCC_A},
+ {RUNE_C(0x011370), RUNE_C(0x011374), CCC_A},
+ {RUNE_C(0x011442), RUNE_C(0x011442), CCC_VR},
+ {RUNE_C(0x011446), RUNE_C(0x011446), CCC_NK},
+ {RUNE_C(0x01145E), RUNE_C(0x01145E), CCC_A},
+ {RUNE_C(0x0114C2), RUNE_C(0x0114C2), CCC_VR},
+ {RUNE_C(0x0114C3), RUNE_C(0x0114C3), CCC_NK},
+ {RUNE_C(0x0115BF), RUNE_C(0x0115BF), CCC_VR},
+ {RUNE_C(0x0115C0), RUNE_C(0x0115C0), CCC_NK},
+ {RUNE_C(0x01163F), RUNE_C(0x01163F), CCC_VR},
+ {RUNE_C(0x0116B6), RUNE_C(0x0116B6), CCC_VR},
+ {RUNE_C(0x0116B7), RUNE_C(0x0116B7), CCC_NK},
+ {RUNE_C(0x01172B), RUNE_C(0x01172B), CCC_VR},
+ {RUNE_C(0x011839), RUNE_C(0x011839), CCC_VR},
+ {RUNE_C(0x01183A), RUNE_C(0x01183A), CCC_NK},
+ {RUNE_C(0x01193D), RUNE_C(0x01193E), CCC_VR},
+ {RUNE_C(0x011943), RUNE_C(0x011943), CCC_NK},
+ {RUNE_C(0x0119E0), RUNE_C(0x0119E0), CCC_VR},
+ {RUNE_C(0x011A34), RUNE_C(0x011A34), CCC_VR},
+ {RUNE_C(0x011A47), RUNE_C(0x011A47), CCC_VR},
+ {RUNE_C(0x011A99), RUNE_C(0x011A99), CCC_VR},
+ {RUNE_C(0x011C3F), RUNE_C(0x011C3F), CCC_VR},
+ {RUNE_C(0x011D42), RUNE_C(0x011D42), CCC_NK},
+ {RUNE_C(0x011D44), RUNE_C(0x011D45), CCC_VR},
+ {RUNE_C(0x011D97), RUNE_C(0x011D97), CCC_VR},
+ {RUNE_C(0x011F41), RUNE_C(0x011F42), CCC_VR},
+ {RUNE_C(0x016AF0), RUNE_C(0x016AF4), CCC_OV},
+ {RUNE_C(0x016B30), RUNE_C(0x016B36), CCC_A},
+ {RUNE_C(0x016FF0), RUNE_C(0x016FF1), CCC_HANR},
+ {RUNE_C(0x01BC9E), RUNE_C(0x01BC9E), CCC_OV},
+ {RUNE_C(0x01D165), RUNE_C(0x01D166), CCC_ATAR},
+ {RUNE_C(0x01D167), RUNE_C(0x01D169), CCC_OV},
+ {RUNE_C(0x01D16D), RUNE_C(0x01D16D), CCC_R},
+ {RUNE_C(0x01D16E), RUNE_C(0x01D172), CCC_ATAR},
+ {RUNE_C(0x01D17B), RUNE_C(0x01D182), CCC_B},
+ {RUNE_C(0x01D185), RUNE_C(0x01D189), CCC_A},
+ {RUNE_C(0x01D18A), RUNE_C(0x01D18B), CCC_B},
+ {RUNE_C(0x01D1AA), RUNE_C(0x01D1AD), CCC_A},
+ {RUNE_C(0x01D242), RUNE_C(0x01D244), CCC_A},
+ {RUNE_C(0x01E000), RUNE_C(0x01E006), CCC_A},
+ {RUNE_C(0x01E008), RUNE_C(0x01E018), CCC_A},
+ {RUNE_C(0x01E01B), RUNE_C(0x01E021), CCC_A},
+ {RUNE_C(0x01E023), RUNE_C(0x01E024), CCC_A},
+ {RUNE_C(0x01E026), RUNE_C(0x01E02A), CCC_A},
+ {RUNE_C(0x01E08F), RUNE_C(0x01E08F), CCC_A},
+ {RUNE_C(0x01E130), RUNE_C(0x01E136), CCC_A},
+ {RUNE_C(0x01E2AE), RUNE_C(0x01E2AE), CCC_A},
+ {RUNE_C(0x01E2EC), RUNE_C(0x01E2EF), CCC_A},
+ {RUNE_C(0x01E4EC), RUNE_C(0x01E4ED), CCC_AR},
+ {RUNE_C(0x01E4EE), RUNE_C(0x01E4EE), CCC_B},
+ {RUNE_C(0x01E4EF), RUNE_C(0x01E4EF), CCC_A},
+ {RUNE_C(0x01E8D0), RUNE_C(0x01E8D6), CCC_B},
+ {RUNE_C(0x01E944), RUNE_C(0x01E949), CCC_A},
+ {RUNE_C(0x01E94A), RUNE_C(0x01E94A), CCC_NK},
+};
+
+_MLIB_DEFINE_BSEARCH(enum uprop_ccc, lookup, CCC_NR)
+
+enum uprop_ccc
+uprop_get_ccc(rune ch)
+{
+ return ch < lookup[0].lo ? CCC_NR : mlib_lookup(ch);
+}