summaryrefslogtreecommitdiff
path: root/codegen/fold.zig
diff options
context:
space:
mode:
authorGravatar Michael Chaten2025-09-13 08:38:24 -0700
committerGravatar Michael Chaten2025-09-14 01:48:41 -0700
commita3b5e884b12fdaa341010ef41bb9382fa0cd89f8 (patch)
tree8bdd22c1c54da0b56ef6b9fe0dc4c2ca667b71a3 /codegen/fold.zig
parentUpdate build to 0.15.0 (diff)
downloadzg-a3b5e884b12fdaa341010ef41bb9382fa0cd89f8.tar.gz
zg-a3b5e884b12fdaa341010ef41bb9382fa0cd89f8.tar.xz
zg-a3b5e884b12fdaa341010ef41bb9382fa0cd89f8.zip
Update codebase to Zig 0.15.1.
Removes compression support
Diffstat (limited to 'codegen/fold.zig')
-rw-r--r--codegen/fold.zig59
1 files changed, 32 insertions, 27 deletions
diff --git a/codegen/fold.zig b/codegen/fold.zig
index cb73cca..cc381a8 100644
--- a/codegen/fold.zig
+++ b/codegen/fold.zig
@@ -2,23 +2,21 @@ const std = @import("std");
2const builtin = @import("builtin"); 2const builtin = @import("builtin");
3const mem = std.mem; 3const mem = std.mem;
4 4
5pub fn main() !void { 5pub fn main() anyerror!void {
6 var gpa = std.heap.GeneralPurposeAllocator(.{}){}; 6 var gpa = std.heap.GeneralPurposeAllocator(.{}){};
7 defer std.debug.assert(gpa.deinit() == .ok); 7 defer std.debug.assert(gpa.deinit() == .ok);
8 const allocator = gpa.allocator(); 8 const allocator = gpa.allocator();
9 9
10 var line_buf: [4096]u8 = undefined;
10 // Process DerivedCoreProperties.txt 11 // Process DerivedCoreProperties.txt
11 var props_file = try std.fs.cwd().openFile("data/unicode/DerivedCoreProperties.txt", .{}); 12 var props_file = try std.fs.cwd().openFile("data/unicode/DerivedCoreProperties.txt", .{});
12 defer props_file.close(); 13 defer props_file.close();
13 var props_buf = std.io.bufferedReader(props_file.reader()); 14 var props_reader = props_file.reader(&line_buf);
14 const props_reader = props_buf.reader();
15 15
16 var props_map = std.AutoHashMap(u21, void).init(allocator); 16 var props_map = std.AutoHashMap(u21, void).init(allocator);
17 defer props_map.deinit(); 17 defer props_map.deinit();
18 18
19 var line_buf: [4096]u8 = undefined; 19 props_lines: while (props_reader.interface.takeDelimiterExclusive('\n')) |line| {
20
21 props_lines: while (try props_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| {
22 if (line.len == 0 or line[0] == '#') continue; 20 if (line.len == 0 or line[0] == '#') continue;
23 21
24 const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; 22 const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line;
@@ -49,18 +47,21 @@ pub fn main() !void {
49 else => {}, 47 else => {},
50 } 48 }
51 } 49 }
50 } else |err| switch (err) {
51 error.EndOfStream => {},
52 else => {
53 return err;
54 },
52 } 55 }
53
54 var codepoint_mapping = std.AutoArrayHashMap(u21, [3]u21).init(allocator); 56 var codepoint_mapping = std.AutoArrayHashMap(u21, [3]u21).init(allocator);
55 defer codepoint_mapping.deinit(); 57 defer codepoint_mapping.deinit();
56 58
57 // Process CaseFolding.txt 59 // Process CaseFolding.txt
58 var cp_file = try std.fs.cwd().openFile("data/unicode/CaseFolding.txt", .{}); 60 var cp_file = try std.fs.cwd().openFile("data/unicode/CaseFolding.txt", .{});
59 defer cp_file.close(); 61 defer cp_file.close();
60 var cp_buf = std.io.bufferedReader(cp_file.reader()); 62 var cp_reader = cp_file.reader(&line_buf);
61 const cp_reader = cp_buf.reader();
62 63
63 while (try cp_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { 64 while (cp_reader.interface.takeDelimiterExclusive('\n')) |line| {
64 if (line.len == 0 or line[0] == '#') continue; 65 if (line.len == 0 or line[0] == '#') continue;
65 66
66 var field_it = std.mem.splitScalar(u8, line, ';'); 67 var field_it = std.mem.splitScalar(u8, line, ';');
@@ -81,9 +82,14 @@ pub fn main() !void {
81 } 82 }
82 83
83 try codepoint_mapping.putNoClobber(codepoint, mapping_buf); 84 try codepoint_mapping.putNoClobber(codepoint, mapping_buf);
85 } else |err| switch (err) {
86 error.EndOfStream => {},
87 else => {
88 return err;
89 },
84 } 90 }
85 91
86 var changes_when_casefolded_exceptions = std.ArrayList(u21).init(allocator); 92 var changes_when_casefolded_exceptions = std.array_list.Managed(u21).init(allocator);
87 defer changes_when_casefolded_exceptions.deinit(); 93 defer changes_when_casefolded_exceptions.deinit();
88 94
89 { 95 {
@@ -221,32 +227,31 @@ pub fn main() !void {
221 _ = args_iter.skip(); 227 _ = args_iter.skip();
222 const output_path = args_iter.next() orelse @panic("No output file arg!"); 228 const output_path = args_iter.next() orelse @panic("No output file arg!");
223 229
224 const compressor = std.compress.flate.deflate.compressor; 230 var write_buf: [4096]u8 = undefined;
225 var out_file = try std.fs.cwd().createFile(output_path, .{}); 231 var out_file = try std.fs.cwd().createFile(output_path, .{});
226 defer out_file.close(); 232 defer out_file.close();
227 var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); 233 var writer = out_file.writer(&write_buf);
228 const writer = out_comp.writer();
229 234
230 const endian = builtin.cpu.arch.endian(); 235 const endian = builtin.cpu.arch.endian();
231 // Table metadata. 236 // Table metadata.
232 try writer.writeInt(u24, @intCast(codepoint_cutoff), endian); 237 try writer.interface.writeInt(u24, @intCast(codepoint_cutoff), endian);
233 try writer.writeInt(u24, @intCast(multiple_codepoint_start), endian); 238 try writer.interface.writeInt(u24, @intCast(multiple_codepoint_start), endian);
234 // Stage 1 239 // Stage 1
235 try writer.writeInt(u16, @intCast(meaningful_stage1.len), endian); 240 try writer.interface.writeInt(u16, @intCast(meaningful_stage1.len), endian);
236 try writer.writeAll(meaningful_stage1); 241 try writer.interface.writeAll(meaningful_stage1);
237 // Stage 2 242 // Stage 2
238 try writer.writeInt(u16, @intCast(stage2.len), endian); 243 try writer.interface.writeInt(u16, @intCast(stage2.len), endian);
239 try writer.writeAll(stage2); 244 try writer.interface.writeAll(stage2);
240 // Stage 3 245 // Stage 3
241 try writer.writeInt(u16, @intCast(stage3.len), endian); 246 try writer.interface.writeInt(u16, @intCast(stage3.len), endian);
242 for (stage3) |offset| try writer.writeInt(i24, offset, endian); 247 for (stage3) |offset| try writer.interface.writeInt(i24, offset, endian);
243 // Changes when case folded 248 // Changes when case folded
244 // Min and max 249 // Min and max
245 try writer.writeInt(u24, std.mem.min(u21, changes_when_casefolded_exceptions.items), endian); 250 try writer.interface.writeInt(u24, std.mem.min(u21, changes_when_casefolded_exceptions.items), endian);
246 try writer.writeInt(u24, std.mem.max(u21, changes_when_casefolded_exceptions.items), endian); 251 try writer.interface.writeInt(u24, std.mem.max(u21, changes_when_casefolded_exceptions.items), endian);
247 try writer.writeInt(u16, @intCast(changes_when_casefolded_exceptions.items.len), endian); 252 try writer.interface.writeInt(u16, @intCast(changes_when_casefolded_exceptions.items.len), endian);
248 for (changes_when_casefolded_exceptions.items) |cp| try writer.writeInt(u24, cp, endian); 253 for (changes_when_casefolded_exceptions.items) |cp| try writer.interface.writeInt(u24, cp, endian);
249 254
250 try out_comp.flush(); 255 try writer.interface.flush();
251 } 256 }
252} 257}