summaryrefslogtreecommitdiff
path: root/codegen/fold.zig
diff options
context:
space:
mode:
authorGravatar Sam Atman2026-02-04 18:01:36 -0500
committerGravatar Sam Atman2026-02-04 18:01:36 -0500
commitba5d9081b479e95ffa7f3baf751beedd370cec14 (patch)
treec12041d8aab9f9ff68b25a2e2c9042073c3d5f61 /codegen/fold.zig
parentConvert Words module to no-allocation (diff)
downloadzg-ba5d9081b479e95ffa7f3baf751beedd370cec14.tar.gz
zg-ba5d9081b479e95ffa7f3baf751beedd370cec14.tar.xz
zg-ba5d9081b479e95ffa7f3baf751beedd370cec14.zip
Normalization and case folding
Both of which deserve some further attention.
Diffstat (limited to 'codegen/fold.zig')
-rw-r--r--codegen/fold.zig57
1 files changed, 38 insertions, 19 deletions
diff --git a/codegen/fold.zig b/codegen/fold.zig
index 366ed79..c5f54eb 100644
--- a/codegen/fold.zig
+++ b/codegen/fold.zig
@@ -228,26 +228,45 @@ pub fn main() anyerror!void {
228 var out_file = try std.fs.cwd().createFile(output_path, .{}); 228 var out_file = try std.fs.cwd().createFile(output_path, .{});
229 defer out_file.close(); 229 defer out_file.close();
230 var writer = out_file.writer(&write_buf); 230 var writer = out_file.writer(&write_buf);
231
232 const endian = builtin.cpu.arch.endian();
233 // Table metadata. 231 // Table metadata.
234 try writer.interface.writeInt(u24, @intCast(codepoint_cutoff), endian); 232 try writer.interface.print(
235 try writer.interface.writeInt(u24, @intCast(multiple_codepoint_start), endian); 233 \\//! This file is auto-generated. Do not edit.
236 // Stage 1 234 \\
237 try writer.interface.writeInt(u16, @intCast(meaningful_stage1.len), endian); 235 \\pub const cutoff: u21 = {};
238 try writer.interface.writeAll(meaningful_stage1); 236 \\pub const cwcf_exceptions_min: u21 = {};
239 // Stage 2 237 \\pub const cwcf_exceptions_max: u21 = {};
240 try writer.interface.writeInt(u16, @intCast(stage2.len), endian); 238 \\pub const cwcf_exceptions: [{}]u21 = .{{
241 try writer.interface.writeAll(stage2); 239 , .{ codepoint_cutoff, std.mem.min(u21, changes_when_casefolded_exceptions.items), std.mem.max(u21, changes_when_casefolded_exceptions.items), changes_when_casefolded_exceptions.items.len });
242 // Stage 3 240 for (changes_when_casefolded_exceptions.items) |cp| try writer.interface.print("{}, ", .{cp});
243 try writer.interface.writeInt(u16, @intCast(stage3.len), endian); 241
244 for (stage3) |offset| try writer.interface.writeInt(i24, offset, endian); 242 try writer.interface.print(
245 // Changes when case folded 243 \\
246 // Min and max 244 \\}};
247 try writer.interface.writeInt(u24, std.mem.min(u21, changes_when_casefolded_exceptions.items), endian); 245 \\
248 try writer.interface.writeInt(u24, std.mem.max(u21, changes_when_casefolded_exceptions.items), endian); 246 \\pub const multiple_start: u21 = {};
249 try writer.interface.writeInt(u16, @intCast(changes_when_casefolded_exceptions.items.len), endian); 247 \\pub const stage1: [{}]u8 = .{{
250 for (changes_when_casefolded_exceptions.items) |cp| try writer.interface.writeInt(u24, cp, endian); 248 , .{ multiple_codepoint_start, meaningful_stage1.len });
249 for (meaningful_stage1) |entry| try writer.interface.print("{}, ", .{entry});
250
251 try writer.interface.print(
252 \\
253 \\}};
254 \\
255 \\pub const stage2: [{}]u8 = .{{
256 , .{stage2.len});
257 for (stage2) |entry| try writer.interface.print("{}, ", .{entry});
258
259 try writer.interface.print(
260 \\
261 \\}};
262 \\
263 \\pub const stage3: [{}]i24 = .{{
264 , .{stage3.len});
265 for (stage3) |entry| try writer.interface.print("{}, ", .{entry});
266
267 try writer.interface.writeAll(
268 \\};
269 );
251 270
252 try writer.interface.flush(); 271 try writer.interface.flush();
253 } 272 }