summaryrefslogtreecommitdiff
path: root/codegen/dwp.zig
diff options
context:
space:
mode:
Diffstat (limited to 'codegen/dwp.zig')
-rw-r--r--codegen/dwp.zig42
1 files changed, 24 insertions, 18 deletions
diff --git a/codegen/dwp.zig b/codegen/dwp.zig
index 5e5bf6a..fad08d1 100644
--- a/codegen/dwp.zig
+++ b/codegen/dwp.zig
@@ -23,7 +23,7 @@ const BlockMap = std.HashMap(
23 std.hash_map.default_max_load_percentage, 23 std.hash_map.default_max_load_percentage,
24); 24);
25 25
26pub fn main() !void { 26pub fn main() anyerror!void {
27 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); 27 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
28 defer arena.deinit(); 28 defer arena.deinit();
29 const allocator = arena.allocator(); 29 const allocator = arena.allocator();
@@ -36,10 +36,9 @@ pub fn main() !void {
36 // Process DerivedEastAsianWidth.txt 36 // Process DerivedEastAsianWidth.txt
37 var deaw_file = try std.fs.cwd().openFile("data/unicode/extracted/DerivedEastAsianWidth.txt", .{}); 37 var deaw_file = try std.fs.cwd().openFile("data/unicode/extracted/DerivedEastAsianWidth.txt", .{});
38 defer deaw_file.close(); 38 defer deaw_file.close();
39 var deaw_buf = std.io.bufferedReader(deaw_file.reader()); 39 var deaw_reader = deaw_file.reader(&line_buf);
40 const deaw_reader = deaw_buf.reader();
41 40
42 while (try deaw_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { 41 while (deaw_reader.interface.takeDelimiterExclusive('\n')) |line| {
43 if (line.len == 0) continue; 42 if (line.len == 0) continue;
44 43
45 // @missing ranges 44 // @missing ranges
@@ -88,15 +87,18 @@ pub fn main() !void {
88 else => {}, 87 else => {},
89 } 88 }
90 } 89 }
90 } else |err| switch (err) {
91 error.EndOfStream => {},
92 else => {
93 return err;
94 },
91 } 95 }
92
93 // Process DerivedGeneralCategory.txt 96 // Process DerivedGeneralCategory.txt
94 var dgc_file = try std.fs.cwd().openFile("data/unicode/extracted/DerivedGeneralCategory.txt", .{}); 97 var dgc_file = try std.fs.cwd().openFile("data/unicode/extracted/DerivedGeneralCategory.txt", .{});
95 defer dgc_file.close(); 98 defer dgc_file.close();
96 var dgc_buf = std.io.bufferedReader(dgc_file.reader()); 99 var dgc_reader = dgc_file.reader(&line_buf);
97 const dgc_reader = dgc_buf.reader();
98 100
99 while (try dgc_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { 101 while (dgc_reader.interface.takeDelimiterExclusive('\n')) |line| {
100 if (line.len == 0 or line[0] == '#') continue; 102 if (line.len == 0 or line[0] == '#') continue;
101 const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; 103 const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line;
102 104
@@ -139,15 +141,20 @@ pub fn main() !void {
139 else => {}, 141 else => {},
140 } 142 }
141 } 143 }
144 } else |err| switch (err) {
145 error.EndOfStream => {},
146 else => {
147 return err;
148 },
142 } 149 }
143 150
144 var blocks_map = BlockMap.init(allocator); 151 var blocks_map = BlockMap.init(allocator);
145 defer blocks_map.deinit(); 152 defer blocks_map.deinit();
146 153
147 var stage1 = std.ArrayList(u16).init(allocator); 154 var stage1 = std.array_list.Managed(u16).init(allocator);
148 defer stage1.deinit(); 155 defer stage1.deinit();
149 156
150 var stage2 = std.ArrayList(i4).init(allocator); 157 var stage2 = std.array_list.Managed(i4).init(allocator);
151 defer stage2.deinit(); 158 defer stage2.deinit();
152 159
153 var block: Block = [_]i4{0} ** block_size; 160 var block: Block = [_]i4{0} ** block_size;
@@ -227,18 +234,17 @@ pub fn main() !void {
227 _ = args_iter.skip(); 234 _ = args_iter.skip();
228 const output_path = args_iter.next() orelse @panic("No output file arg!"); 235 const output_path = args_iter.next() orelse @panic("No output file arg!");
229 236
230 const compressor = std.compress.flate.deflate.compressor; 237 var write_buf: [4096]u8 = undefined;
231 var out_file = try std.fs.cwd().createFile(output_path, .{}); 238 var out_file = try std.fs.cwd().createFile(output_path, .{});
232 defer out_file.close(); 239 defer out_file.close();
233 var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); 240 var writer = out_file.writer(&write_buf);
234 const writer = out_comp.writer();
235 241
236 const endian = builtin.cpu.arch.endian(); 242 const endian = builtin.cpu.arch.endian();
237 try writer.writeInt(u16, @intCast(stage1.items.len), endian); 243 try writer.interface.writeInt(u16, @intCast(stage1.items.len), endian);
238 for (stage1.items) |i| try writer.writeInt(u16, i, endian); 244 for (stage1.items) |i| try writer.interface.writeInt(u16, i, endian);
239 245
240 try writer.writeInt(u16, @intCast(stage2.items.len), endian); 246 try writer.interface.writeInt(u16, @intCast(stage2.items.len), endian);
241 for (stage2.items) |i| try writer.writeInt(i8, i, endian); 247 for (stage2.items) |i| try writer.interface.writeInt(i8, i, endian);
242 248
243 try out_comp.flush(); 249 try writer.interface.flush();
244} 250}