summaryrefslogtreecommitdiff
path: root/codegen
diff options
context:
space:
mode:
Diffstat (limited to 'codegen')
-rw-r--r--codegen/grapheme_break.zig60
-rw-r--r--codegen/indic.zig32
2 files changed, 8 insertions, 84 deletions
diff --git a/codegen/grapheme_break.zig b/codegen/grapheme_break.zig
index ace875c..95237f3 100644
--- a/codegen/grapheme_break.zig
+++ b/codegen/grapheme_break.zig
@@ -112,7 +112,7 @@ pub fn main() !void {
112 const writer = out_buf.writer(); 112 const writer = out_buf.writer();
113 113
114 const prop_code = 114 const prop_code =
115 \\const Prop = enum { 115 \\pub const Prop = enum {
116 \\ none, 116 \\ none,
117 \\ 117 \\
118 \\ control, 118 \\ control,
@@ -132,75 +132,23 @@ pub fn main() !void {
132 132
133 try writer.writeAll(prop_code); 133 try writer.writeAll(prop_code);
134 134
135 try writer.print("const stage_1 = [{}]u16{{", .{stage1.items.len}); 135 try writer.print("pub const stage_1 = [{}]u16{{", .{stage1.items.len});
136 for (stage1.items) |v| { 136 for (stage1.items) |v| {
137 _ = try writer.print("{},", .{v}); 137 _ = try writer.print("{},", .{v});
138 } 138 }
139 try writer.writeAll("};\n"); 139 try writer.writeAll("};\n");
140 140
141 try writer.print("const stage_2 = [{}]u4{{", .{stage2.items.len}); 141 try writer.print("pub const stage_2 = [{}]u4{{", .{stage2.items.len});
142 for (stage2.items) |v| { 142 for (stage2.items) |v| {
143 _ = try writer.print("{},", .{v}); 143 _ = try writer.print("{},", .{v});
144 } 144 }
145 try writer.writeAll("};\n"); 145 try writer.writeAll("};\n");
146 146
147 try writer.print("const stage_3 = [{}]Prop{{", .{stage3.items.len}); 147 try writer.print("pub const stage_3 = [{}]Prop{{", .{stage3.items.len});
148 for (stage3.items) |v| { 148 for (stage3.items) |v| {
149 _ = try writer.print(".{s},", .{@tagName(v)}); 149 _ = try writer.print(".{s},", .{@tagName(v)});
150 } 150 }
151 try writer.writeAll("};\n"); 151 try writer.writeAll("};\n");
152 152
153 const code =
154 \\inline fn getProp(cp: u21) Prop {
155 \\ const stage_1_index = cp >> 8;
156 \\ const stage_2_index = stage_1[stage_1_index] + (cp & 0xff);
157 \\ const stage_3_index = stage_2[stage_2_index];
158 \\ return stage_3[stage_3_index];
159 \\}
160 \\
161 \\pub inline fn isControl(cp: u21) bool {
162 \\ return getProp(cp) == .control;
163 \\}
164 \\
165 \\pub inline fn isExtend(cp: u21) bool {
166 \\ return getProp(cp) == .extend;
167 \\}
168 \\
169 \\pub inline fn isL(cp: u21) bool {
170 \\ return getProp(cp) == .hangul_l;
171 \\}
172 \\pub inline fn isLv(cp: u21) bool {
173 \\ return getProp(cp) == .hangul_lv;
174 \\}
175 \\pub inline fn isLvt(cp: u21) bool {
176 \\ return getProp(cp) == .hangul_lvt;
177 \\}
178 \\pub inline fn isV(cp: u21) bool {
179 \\ return getProp(cp) == .hangul_v;
180 \\}
181 \\pub inline fn isT(cp: u21) bool {
182 \\ return getProp(cp) == .hangul_t;
183 \\}
184 \\
185 \\pub inline fn isPrepend(cp: u21) bool {
186 \\ return getProp(cp) == .prepend;
187 \\}
188 \\
189 \\pub inline fn isRegionalIndicator(cp: u21) bool {
190 \\ return getProp(cp) == .regional;
191 \\}
192 \\
193 \\pub inline fn isSpacingmark(cp: u21) bool {
194 \\ return getProp(cp) == .spacing;
195 \\}
196 \\
197 \\pub inline fn isZwj(cp: u21) bool {
198 \\ return getProp(cp) == .zwj;
199 \\}
200 \\
201 ;
202
203 try writer.writeAll(code);
204
205 try out_buf.flush(); 153 try out_buf.flush();
206} 154}
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}