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