authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2024-10-15 04:12:06 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2024-10-15 04:12:06 -07:00
logb36455e5d663c14d561d18d5fa62b35492a8e463
tree16efa4b1fdc8de96788b2717acbfc0fceeff94d3
parent2cc7c30d6b22737f720498502fb3a45de7245f19

add u_hasBinaryProperty


5 files changed, 309 insertions(+), 0 deletions(-)

licenses.txt+4
...@@ -1,3 +1,7 @@...@@ -1,3 +1,7 @@
1MIT:1MIT:
2= https://spdx.org/licenses/MIT2= https://spdx.org/licenses/MIT
3- This3- This
4- git https://github.com/nektro/zig-unicode-ucd
5
6Unspecified:
7- git https://github.com/unicode-org/icu
src/main.zig+145
...@@ -1 +1,146 @@...@@ -1 +1,146 @@
1const std = @import("std");1const std = @import("std");
2const icu = @import("icu");
3
4const t = @import("./types.zig");
5
6//
7//
8
9export fn u_hasBinaryProperty(cp: u32, prop: t.UProperty) bool {
10 return switch (prop) {
11 .UCHAR_ALPHABETIC => icu.hasDerivedCoreProperty(cp, .Alphabetic),
12 .UCHAR_ASCII_HEX_DIGIT => icu.hasProperty(cp, .ASCII_Hex_Digit),
13 .UCHAR_BIDI_CONTROL => icu.hasProperty(cp, .Bidi_Control),
14 .UCHAR_BIDI_MIRRORED => false, // TODO
15 .UCHAR_DASH => icu.hasProperty(cp, .Dash),
16 .UCHAR_DEFAULT_IGNORABLE_CODE_POINT => icu.hasDerivedCoreProperty(cp, .Default_Ignorable_Code_Point),
17 .UCHAR_DEPRECATED => icu.hasProperty(cp, .Deprecated),
18 .UCHAR_DIACRITIC => icu.hasProperty(cp, .Diacritic),
19 .UCHAR_EXTENDER => icu.hasProperty(cp, .Extender),
20 .UCHAR_FULL_COMPOSITION_EXCLUSION => false, // TODO
21 .UCHAR_GRAPHEME_BASE => icu.hasDerivedCoreProperty(cp, .Grapheme_Base),
22 .UCHAR_GRAPHEME_EXTEND => icu.hasDerivedCoreProperty(cp, .Grapheme_Extend),
23 .UCHAR_GRAPHEME_LINK => icu.hasDerivedCoreProperty(cp, .Grapheme_Link),
24 .UCHAR_HEX_DIGIT => icu.hasProperty(cp, .Hex_Digit),
25 .UCHAR_HYPHEN => icu.hasProperty(cp, .Hyphen),
26 .UCHAR_ID_CONTINUE => icu.hasDerivedCoreProperty(cp, .ID_Continue),
27 .UCHAR_ID_START => icu.hasDerivedCoreProperty(cp, .ID_Start),
28 .UCHAR_IDEOGRAPHIC => icu.hasProperty(cp, .Ideographic),
29 .UCHAR_IDS_BINARY_OPERATOR => icu.hasProperty(cp, .IDS_Binary_Operator),
30 .UCHAR_IDS_TRINARY_OPERATOR => icu.hasProperty(cp, .IDS_Trinary_Operator),
31 .UCHAR_JOIN_CONTROL => icu.hasProperty(cp, .Join_Control),
32 .UCHAR_LOGICAL_ORDER_EXCEPTION => icu.hasProperty(cp, .Logical_Order_Exception),
33 .UCHAR_LOWERCASE => icu.hasDerivedCoreProperty(cp, .Lowercase),
34 .UCHAR_MATH => icu.hasDerivedCoreProperty(cp, .Math),
35 .UCHAR_NONCHARACTER_CODE_POINT => icu.hasProperty(cp, .Noncharacter_Code_Point),
36 .UCHAR_QUOTATION_MARK => icu.hasProperty(cp, .Quotation_Mark),
37 .UCHAR_RADICAL => icu.hasProperty(cp, .Radical),
38 .UCHAR_SOFT_DOTTED => icu.hasProperty(cp, .Soft_Dotted),
39 .UCHAR_TERMINAL_PUNCTUATION => icu.hasProperty(cp, .Terminal_Punctuation),
40 .UCHAR_UNIFIED_IDEOGRAPH => icu.hasProperty(cp, .Unified_Ideograph),
41 .UCHAR_UPPERCASE => icu.hasDerivedCoreProperty(cp, .Uppercase),
42 .UCHAR_WHITE_SPACE => icu.hasProperty(cp, .White_Space),
43 .UCHAR_XID_CONTINUE => icu.hasDerivedCoreProperty(cp, .XID_Continue),
44 .UCHAR_XID_START => icu.hasDerivedCoreProperty(cp, .XID_Start),
45 .UCHAR_CASE_SENSITIVE => false, // TODO
46 .UCHAR_S_TERM => false, // TODO
47 .UCHAR_VARIATION_SELECTOR => false, // TODO
48 .UCHAR_NFD_INERT => false, // TODO
49 .UCHAR_NFKD_INERT => false, // TODO
50 .UCHAR_NFC_INERT => false, // TODO
51 .UCHAR_NFKC_INERT => false, // TODO
52 .UCHAR_SEGMENT_STARTER => false, // TODO
53 .UCHAR_PATTERN_SYNTAX => false, // TODO
54 .UCHAR_PATTERN_WHITE_SPACE => false, // TODO
55 .UCHAR_POSIX_ALNUM => false, // TODO
56 .UCHAR_POSIX_BLANK => false, // TODO
57 .UCHAR_POSIX_GRAPH => false, // TODO
58 .UCHAR_POSIX_PRINT => false, // TODO
59 .UCHAR_POSIX_XDIGIT => false, // TODO
60 .UCHAR_CASED => icu.hasDerivedCoreProperty(cp, .Cased),
61 .UCHAR_CASE_IGNORABLE => icu.hasDerivedCoreProperty(cp, .Case_Ignorable),
62 .UCHAR_CHANGES_WHEN_LOWERCASED => icu.hasDerivedCoreProperty(cp, .Changes_When_Lowercased),
63 .UCHAR_CHANGES_WHEN_UPPERCASED => icu.hasDerivedCoreProperty(cp, .Changes_When_Uppercased),
64 .UCHAR_CHANGES_WHEN_TITLECASED => icu.hasDerivedCoreProperty(cp, .Changes_When_Titlecased),
65 .UCHAR_CHANGES_WHEN_CASEFOLDED => icu.hasDerivedCoreProperty(cp, .Changes_When_Casefolded),
66 .UCHAR_CHANGES_WHEN_CASEMAPPED => icu.hasDerivedCoreProperty(cp, .Changes_When_Casemapped),
67 .UCHAR_CHANGES_WHEN_NFKC_CASEFOLDED => false, // TODO
68 .UCHAR_EMOJI => false, // TODO
69 .UCHAR_EMOJI_PRESENTATION => false, // TODO
70 .UCHAR_EMOJI_MODIFIER => false, // TODO
71 .UCHAR_EMOJI_MODIFIER_BASE => false, // TODO
72 .UCHAR_EMOJI_COMPONENT => false, // TODO
73 .UCHAR_REGIONAL_INDICATOR => icu.hasProperty(cp, .Regional_Indicator),
74 .UCHAR_PREPENDED_CONCATENATION_MARK => false, // TODO
75 .UCHAR_EXTENDED_PICTOGRAPHIC => false, // TODO
76 .UCHAR_BASIC_EMOJI => false, // TODO
77 .UCHAR_EMOJI_KEYCAP_SEQUENCE => false, // TODO
78 .UCHAR_RGI_EMOJI_MODIFIER_SEQUENCE => false, // TODO
79 .UCHAR_RGI_EMOJI_FLAG_SEQUENCE => false, // TODO
80 .UCHAR_RGI_EMOJI_TAG_SEQUENCE => false, // TODO
81 .UCHAR_RGI_EMOJI_ZWJ_SEQUENCE => false, // TODO
82 .UCHAR_RGI_EMOJI => false, // TODO
83 .UCHAR_IDS_UNARY_OPERATOR => false, // TODO
84 .UCHAR_ID_COMPAT_MATH_START => icu.hasProperty(cp, .ID_Compat_Math_Start),
85 .UCHAR_ID_COMPAT_MATH_CONTINUE => icu.hasProperty(cp, .ID_Compat_Math_Continue),
86 .UCHAR_BIDI_CLASS => false, // TODO
87 .UCHAR_BLOCK => false, // TODO
88 .UCHAR_CANONICAL_COMBINING_CLASS => false, // TODO
89 .UCHAR_DECOMPOSITION_TYPE => false, // TODO
90 .UCHAR_EAST_ASIAN_WIDTH => false, // TODO
91 .UCHAR_GENERAL_CATEGORY => false, // TODO
92 .UCHAR_JOINING_GROUP => false, // TODO
93 .UCHAR_JOINING_TYPE => false, // TODO
94 .UCHAR_LINE_BREAK => false, // TODO
95 .UCHAR_NUMERIC_TYPE => false, // TODO
96 .UCHAR_SCRIPT => false, // TODO
97 .UCHAR_HANGUL_SYLLABLE_TYPE => false, // TODO
98 .UCHAR_NFD_QUICK_CHECK => false, // TODO
99 .UCHAR_NFKD_QUICK_CHECK => false, // TODO
100 .UCHAR_NFC_QUICK_CHECK => false, // TODO
101 .UCHAR_NFKC_QUICK_CHECK => false, // TODO
102 .UCHAR_LEAD_CANONICAL_COMBINING_CLASS => false, // TODO
103 .UCHAR_TRAIL_CANONICAL_COMBINING_CLASS => false, // TODO
104 .UCHAR_GRAPHEME_CLUSTER_BREAK => false, // TODO
105 .UCHAR_SENTENCE_BREAK => false, // TODO
106 .UCHAR_WORD_BREAK => false, // TODO
107 .UCHAR_BIDI_PAIRED_BRACKET_TYPE => false, // TODO
108 .UCHAR_INDIC_POSITIONAL_CATEGORY => false, // TODO
109 .UCHAR_INDIC_SYLLABIC_CATEGORY => false, // TODO
110 .UCHAR_VERTICAL_ORIENTATION => false, // TODO
111 .UCHAR_GENERAL_CATEGORY_MASK => false, // TODO
112 .UCHAR_NUMERIC_VALUE => false, // TODO
113 .UCHAR_AGE => false, // TODO
114 .UCHAR_BIDI_MIRRORING_GLYPH => false, // TODO
115 .UCHAR_CASE_FOLDING => false, // TODO
116 .UCHAR_LOWERCASE_MAPPING => false, // TODO
117 .UCHAR_NAME => false, // TODO
118 .UCHAR_SIMPLE_CASE_FOLDING => false, // TODO
119 .UCHAR_SIMPLE_LOWERCASE_MAPPING => false, // TODO
120 .UCHAR_SIMPLE_TITLECASE_MAPPING => false, // TODO
121 .UCHAR_SIMPLE_UPPERCASE_MAPPING => false, // TODO
122 .UCHAR_TITLECASE_MAPPING => false, // TODO
123 .UCHAR_UPPERCASE_MAPPING => false, // TODO
124 .UCHAR_BIDI_PAIRED_BRACKET => false, // TODO
125 .UCHAR_SCRIPT_EXTENSIONS => false, // TODO
126 _ => false,
127
128 // InCB,
129
130 // Other_Math,
131 // Other_Alphabetic,
132 // Other_Lowercase,
133 // Other_Uppercase,
134 // Other_Grapheme_Extend,
135 // Other_Default_Ignorable_Code_Point,
136 // Other_ID_Start,
137 // Other_ID_Continue,
138 // Sentence_Terminal,
139 // Variation_Selector,
140 // Pattern_White_Space,
141 // Pattern_Syntax,
142 // Prepended_Concatenation_Mark,
143 // IDS_Unary_Operator,
144 // Modifier_Combining_Mark,
145 };
146}
src/root.zig+25
...@@ -1 +1,26 @@...@@ -1 +1,26 @@
1const std = @import("std");1const std = @import("std");
2const unicodeucd = @import("unicode-ucd");
3
4pub fn hasDerivedCoreProperty(cp: u32, comptime prop: unicodeucd.derived_core_properties.CoreProperty.Property) bool {
5 @setEvalBranchQuota(100_000);
6 inline for (unicodeucd.derived_core_properties.data) |item| {
7 if (item.property == prop) {
8 if (cp >= item.from and cp <= item.to) {
9 return true;
10 }
11 }
12 }
13 return false;
14}
15
16pub fn hasProperty(cp: u32, comptime prop: unicodeucd.prop_list.PropList.Property) bool {
17 @setEvalBranchQuota(100_000);
18 inline for (unicodeucd.prop_list.data) |item| {
19 if (item.property == prop) {
20 if (cp >= item.from and cp <= item.to) {
21 return true;
22 }
23 }
24 }
25 return false;
26}
src/types.zig created+131
...@@ -0,0 +1,131 @@
1pub const UProperty = enum(c_uint) {
2 UCHAR_ALPHABETIC = 0,
3 UCHAR_ASCII_HEX_DIGIT = 1,
4 UCHAR_BIDI_CONTROL = 2,
5 UCHAR_BIDI_MIRRORED = 3,
6 UCHAR_DASH = 4,
7 UCHAR_DEFAULT_IGNORABLE_CODE_POINT = 5,
8 UCHAR_DEPRECATED = 6,
9 UCHAR_DIACRITIC = 7,
10 UCHAR_EXTENDER = 8,
11 UCHAR_FULL_COMPOSITION_EXCLUSION = 9,
12 UCHAR_GRAPHEME_BASE = 10,
13 UCHAR_GRAPHEME_EXTEND = 11,
14 UCHAR_GRAPHEME_LINK = 12,
15 UCHAR_HEX_DIGIT = 13,
16 UCHAR_HYPHEN = 14,
17 UCHAR_ID_CONTINUE = 15,
18 UCHAR_ID_START = 16,
19 UCHAR_IDEOGRAPHIC = 17,
20 UCHAR_IDS_BINARY_OPERATOR = 18,
21 UCHAR_IDS_TRINARY_OPERATOR = 19,
22 UCHAR_JOIN_CONTROL = 20,
23 UCHAR_LOGICAL_ORDER_EXCEPTION = 21,
24 UCHAR_LOWERCASE = 22,
25 UCHAR_MATH = 23,
26 UCHAR_NONCHARACTER_CODE_POINT = 24,
27 UCHAR_QUOTATION_MARK = 25,
28 UCHAR_RADICAL = 26,
29 UCHAR_SOFT_DOTTED = 27,
30 UCHAR_TERMINAL_PUNCTUATION = 28,
31 UCHAR_UNIFIED_IDEOGRAPH = 29,
32 UCHAR_UPPERCASE = 30,
33 UCHAR_WHITE_SPACE = 31,
34 UCHAR_XID_CONTINUE = 32,
35 UCHAR_XID_START = 33,
36 UCHAR_CASE_SENSITIVE = 34,
37 UCHAR_S_TERM = 35,
38 UCHAR_VARIATION_SELECTOR = 36,
39 UCHAR_NFD_INERT = 37,
40 UCHAR_NFKD_INERT = 38,
41 UCHAR_NFC_INERT = 39,
42 UCHAR_NFKC_INERT = 40,
43 UCHAR_SEGMENT_STARTER = 41,
44 UCHAR_PATTERN_SYNTAX = 42,
45 UCHAR_PATTERN_WHITE_SPACE = 43,
46 UCHAR_POSIX_ALNUM = 44,
47 UCHAR_POSIX_BLANK = 45,
48 UCHAR_POSIX_GRAPH = 46,
49 UCHAR_POSIX_PRINT = 47,
50 UCHAR_POSIX_XDIGIT = 48,
51 UCHAR_CASED = 49,
52 UCHAR_CASE_IGNORABLE = 50,
53 UCHAR_CHANGES_WHEN_LOWERCASED = 51,
54 UCHAR_CHANGES_WHEN_UPPERCASED = 52,
55 UCHAR_CHANGES_WHEN_TITLECASED = 53,
56 UCHAR_CHANGES_WHEN_CASEFOLDED = 54,
57 UCHAR_CHANGES_WHEN_CASEMAPPED = 55,
58 UCHAR_CHANGES_WHEN_NFKC_CASEFOLDED = 56,
59 UCHAR_EMOJI = 57,
60 UCHAR_EMOJI_PRESENTATION = 58,
61 UCHAR_EMOJI_MODIFIER = 59,
62 UCHAR_EMOJI_MODIFIER_BASE = 60,
63 UCHAR_EMOJI_COMPONENT = 61,
64 UCHAR_REGIONAL_INDICATOR = 62,
65 UCHAR_PREPENDED_CONCATENATION_MARK = 63,
66 UCHAR_EXTENDED_PICTOGRAPHIC = 64,
67 UCHAR_BASIC_EMOJI = 65,
68 UCHAR_EMOJI_KEYCAP_SEQUENCE = 66,
69 UCHAR_RGI_EMOJI_MODIFIER_SEQUENCE = 67,
70 UCHAR_RGI_EMOJI_FLAG_SEQUENCE = 68,
71 UCHAR_RGI_EMOJI_TAG_SEQUENCE = 69,
72 UCHAR_RGI_EMOJI_ZWJ_SEQUENCE = 70,
73 UCHAR_RGI_EMOJI = 71,
74 UCHAR_IDS_UNARY_OPERATOR = 72,
75 UCHAR_ID_COMPAT_MATH_START = 73,
76 UCHAR_ID_COMPAT_MATH_CONTINUE = 74,
77
78 UCHAR_BIDI_CLASS = 0x1000,
79 UCHAR_BLOCK = 0x1001,
80 UCHAR_CANONICAL_COMBINING_CLASS = 0x1002,
81 UCHAR_DECOMPOSITION_TYPE = 0x1003,
82 UCHAR_EAST_ASIAN_WIDTH = 0x1004,
83 UCHAR_GENERAL_CATEGORY = 0x1005,
84 UCHAR_JOINING_GROUP = 0x1006,
85 UCHAR_JOINING_TYPE = 0x1007,
86 UCHAR_LINE_BREAK = 0x1008,
87 UCHAR_NUMERIC_TYPE = 0x1009,
88 UCHAR_SCRIPT = 0x100A,
89 UCHAR_HANGUL_SYLLABLE_TYPE = 0x100B,
90 UCHAR_NFD_QUICK_CHECK = 0x100C,
91 UCHAR_NFKD_QUICK_CHECK = 0x100D,
92 UCHAR_NFC_QUICK_CHECK = 0x100E,
93 UCHAR_NFKC_QUICK_CHECK = 0x100F,
94 UCHAR_LEAD_CANONICAL_COMBINING_CLASS = 0x1010,
95 UCHAR_TRAIL_CANONICAL_COMBINING_CLASS = 0x1011,
96 UCHAR_GRAPHEME_CLUSTER_BREAK = 0x1012,
97 UCHAR_SENTENCE_BREAK = 0x1013,
98 UCHAR_WORD_BREAK = 0x1014,
99 UCHAR_BIDI_PAIRED_BRACKET_TYPE = 0x1015,
100 UCHAR_INDIC_POSITIONAL_CATEGORY = 0x1016,
101 UCHAR_INDIC_SYLLABIC_CATEGORY = 0x1017,
102 UCHAR_VERTICAL_ORIENTATION = 0x1018,
103
104 UCHAR_GENERAL_CATEGORY_MASK = 0x2000,
105
106 UCHAR_NUMERIC_VALUE = 0x3000,
107
108 UCHAR_AGE = 0x4000,
109 UCHAR_BIDI_MIRRORING_GLYPH = 0x4001,
110 UCHAR_CASE_FOLDING = 0x4002,
111 UCHAR_LOWERCASE_MAPPING = 0x4004,
112 UCHAR_NAME = 0x4005,
113 UCHAR_SIMPLE_CASE_FOLDING = 0x4006,
114 UCHAR_SIMPLE_LOWERCASE_MAPPING = 0x4007,
115 UCHAR_SIMPLE_TITLECASE_MAPPING = 0x4008,
116 UCHAR_SIMPLE_UPPERCASE_MAPPING = 0x4009,
117 UCHAR_TITLECASE_MAPPING = 0x400A,
118 UCHAR_UPPERCASE_MAPPING = 0x400C,
119 UCHAR_BIDI_PAIRED_BRACKET = 0x400D,
120
121 UCHAR_SCRIPT_EXTENSIONS = 0x7000,
122
123 _,
124
125 const UCHAR_BINARY_START: UProperty = .UCHAR_ALPHABETIC;
126 const UCHAR_INT_START: UProperty = .UCHAR_BIDI_CLASS;
127 const UCHAR_MASK_START: UProperty = .UCHAR_GENERAL_CATEGORY_MASK;
128 const UCHAR_DOUBLE_START: UProperty = .UCHAR_NUMERIC_VALUE;
129 const UCHAR_STRING_START: UProperty = .UCHAR_AGE;
130 const UCHAR_OTHER_PROPERTY_START: UProperty = .UCHAR_SCRIPT_EXTENSIONS;
131};
zigmod.yml+4
...@@ -4,3 +4,7 @@ main: src/root.zig...@@ -4,3 +4,7 @@ main: src/root.zig
4license: MIT4license: MIT
5description: An implementation of International Components for Unicode in only Zig5description: An implementation of International Components for Unicode in only Zig
6dependencies:6dependencies:
7 - src: git https://github.com/nektro/zig-unicode-ucd
8 - src: git https://github.com/unicode-org/icu
9 id: w3gat1zdicytwwvxn7rqgs0a9wgv7om530itr1t7
10 keep: true