summaryrefslogtreecommitdiff
path: root/codegen/indic.zig
diff options
context:
space:
mode:
authorGravatar Jose Colon Rodriguez2024-02-14 21:39:37 -0400
committerGravatar Jose Colon Rodriguez2024-02-14 21:39:37 -0400
commitb2be2562b908d5563a8e71c44cbad577e4df4201 (patch)
treeeed831bdd2200247f9ffdb1adc8c2a051bd3f3e8 /codegen/indic.zig
parentPassing Unicode 15.1.0 Grapheme Break Tests (diff)
downloadzg-b2be2562b908d5563a8e71c44cbad577e4df4201.tar.gz
zg-b2be2562b908d5563a8e71c44cbad577e4df4201.tar.xz
zg-b2be2562b908d5563a8e71c44cbad577e4df4201.zip
gbp and indic direct array access
Diffstat (limited to 'codegen/indic.zig')
-rw-r--r--codegen/indic.zig32
1 files changed, 4 insertions, 28 deletions
diff --git a/codegen/indic.zig b/codegen/indic.zig
index 871f1c5..07bcd92 100644
--- a/codegen/indic.zig
+++ b/codegen/indic.zig
@@ -130,7 +130,7 @@ pub fn main() !void {
130 const writer = out_buf.writer(); 130 const writer = out_buf.writer();
131 131
132 const prop_code = 132 const prop_code =
133 \\const Prop = enum { 133 \\pub const Prop = enum {
134 \\ none, 134 \\ none,
135 \\ 135 \\
136 \\ Consonant, 136 \\ Consonant,
@@ -142,47 +142,23 @@ pub fn main() !void {
142 142
143 try writer.writeAll(prop_code); 143 try writer.writeAll(prop_code);
144 144
145 try writer.print("const stage_1 = [{}]u16{{", .{stage1.items.len}); 145 try writer.print("pub const stage_1 = [{}]u16{{", .{stage1.items.len});
146 for (stage1.items) |v| { 146 for (stage1.items) |v| {
147 _ = try writer.print("{},", .{v}); 147 _ = try writer.print("{},", .{v});
148 } 148 }
149 try writer.writeAll("};\n"); 149 try writer.writeAll("};\n");
150 150
151 try writer.print("const stage_2 = [{}]u3{{", .{stage2.items.len}); 151 try writer.print("pub const stage_2 = [{}]u3{{", .{stage2.items.len});
152 for (stage2.items) |v| { 152 for (stage2.items) |v| {
153 _ = try writer.print("{},", .{v}); 153 _ = try writer.print("{},", .{v});
154 } 154 }
155 try writer.writeAll("};\n"); 155 try writer.writeAll("};\n");
156 156
157 try writer.print("const stage_3 = [{}]Prop{{", .{stage3.items.len}); 157 try writer.print("pub const stage_3 = [{}]Prop{{", .{stage3.items.len});
158 for (stage3.items) |v| { 158 for (stage3.items) |v| {
159 _ = try writer.print(".{s},", .{@tagName(v)}); 159 _ = try writer.print(".{s},", .{@tagName(v)});
160 } 160 }
161 try writer.writeAll("};\n"); 161 try writer.writeAll("};\n");
162 162
163 const code =
164 \\inline fn getProp(cp: u21) Prop {
165 \\ const stage_1_index = cp >> 8;
166 \\ const stage_2_index = stage_1[stage_1_index] + (cp & 0xff);
167 \\ const stage_3_index = stage_2[stage_2_index];
168 \\ return stage_3[stage_3_index];
169 \\}
170 \\
171 \\pub inline fn isConsonant(cp: u21) bool {
172 \\ return getProp(cp) == .Consonant;
173 \\}
174 \\
175 \\pub inline fn isExtend(cp: u21) bool {
176 \\ return getProp(cp) == .Extend;
177 \\}
178 \\
179 \\pub inline fn isLinker(cp: u21) bool {
180 \\ return getProp(cp) == .Linker;
181 \\}
182 \\
183 ;
184
185 try writer.writeAll(code);
186
187 try out_buf.flush(); 163 try out_buf.flush();
188} 164}