diff options
Diffstat (limited to 'codegen')
| -rw-r--r-- | codegen/canon.zig | 24 | ||||
| -rw-r--r-- | codegen/case_prop.zig | 31 | ||||
| -rw-r--r-- | codegen/ccc.zig | 31 | ||||
| -rw-r--r-- | codegen/compat.zig | 27 | ||||
| -rw-r--r-- | codegen/core_props.zig | 32 | ||||
| -rw-r--r-- | codegen/dwp.zig | 42 | ||||
| -rw-r--r-- | codegen/fold.zig | 59 | ||||
| -rw-r--r-- | codegen/gbp.zig | 57 | ||||
| -rw-r--r-- | codegen/gencat.zig | 35 | ||||
| -rw-r--r-- | codegen/hangul.zig | 32 | ||||
| -rw-r--r-- | codegen/lower.zig | 26 | ||||
| -rw-r--r-- | codegen/normp.zig | 32 | ||||
| -rw-r--r-- | codegen/numeric.zig | 31 | ||||
| -rw-r--r-- | codegen/props.zig | 32 | ||||
| -rw-r--r-- | codegen/scripts.zig | 38 | ||||
| -rw-r--r-- | codegen/upper.zig | 31 | ||||
| -rw-r--r-- | codegen/wbp.zig | 32 |
17 files changed, 324 insertions, 268 deletions
diff --git a/codegen/canon.zig b/codegen/canon.zig index 28b7f28..89a9070 100644 --- a/codegen/canon.zig +++ b/codegen/canon.zig | |||
| @@ -1,32 +1,30 @@ | |||
| 1 | const std = @import("std"); | 1 | const std = @import("std"); |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | 3 | ||
| 4 | pub fn main() !void { | 4 | pub fn main() anyerror!void { |
| 5 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); | 5 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| 6 | defer arena.deinit(); | 6 | defer arena.deinit(); |
| 7 | const allocator = arena.allocator(); | 7 | const allocator = arena.allocator(); |
| 8 | 8 | ||
| 9 | var line_buf: [4096]u8 = undefined; | ||
| 10 | var write_buf: [4096]u8 = undefined; | ||
| 9 | // Process UnicodeData.txt | 11 | // Process UnicodeData.txt |
| 10 | var in_file = try std.fs.cwd().openFile("data/unicode/UnicodeData.txt", .{}); | 12 | var in_file = try std.fs.cwd().openFile("data/unicode/UnicodeData.txt", .{}); |
| 11 | defer in_file.close(); | 13 | defer in_file.close(); |
| 12 | var in_buf = std.io.bufferedReader(in_file.reader()); | 14 | var in_reader = in_file.reader(&line_buf); |
| 13 | const in_reader = in_buf.reader(); | ||
| 14 | 15 | ||
| 15 | var args_iter = try std.process.argsWithAllocator(allocator); | 16 | var args_iter = try std.process.argsWithAllocator(allocator); |
| 16 | defer args_iter.deinit(); | 17 | defer args_iter.deinit(); |
| 17 | _ = args_iter.skip(); | 18 | _ = args_iter.skip(); |
| 18 | const output_path = args_iter.next() orelse @panic("No output file arg!"); | 19 | const output_path = args_iter.next() orelse @panic("No output file arg!"); |
| 19 | 20 | ||
| 20 | const compressor = std.compress.flate.deflate.compressor; | ||
| 21 | var out_file = try std.fs.cwd().createFile(output_path, .{}); | 21 | var out_file = try std.fs.cwd().createFile(output_path, .{}); |
| 22 | defer out_file.close(); | 22 | defer out_file.close(); |
| 23 | var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); | 23 | var file_writer = out_file.writer(&write_buf); |
| 24 | const writer = out_comp.writer(); | 24 | var writer = &file_writer.interface; |
| 25 | |||
| 26 | const endian = builtin.cpu.arch.endian(); | 25 | const endian = builtin.cpu.arch.endian(); |
| 27 | var line_buf: [4096]u8 = undefined; | ||
| 28 | 26 | ||
| 29 | lines: while (try in_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 27 | lines: while (in_reader.interface.takeDelimiterInclusive('\n')) |line| { |
| 30 | if (line.len == 0) continue; | 28 | if (line.len == 0) continue; |
| 31 | 29 | ||
| 32 | var field_iter = std.mem.splitScalar(u8, line, ';'); | 30 | var field_iter = std.mem.splitScalar(u8, line, ';'); |
| @@ -60,8 +58,12 @@ pub fn main() !void { | |||
| 60 | 58 | ||
| 61 | try writer.writeInt(u8, @intCast(len), endian); | 59 | try writer.writeInt(u8, @intCast(len), endian); |
| 62 | for (cps[0..len]) |cp| try writer.writeInt(u24, cp, endian); | 60 | for (cps[0..len]) |cp| try writer.writeInt(u24, cp, endian); |
| 61 | } else |err| switch (err) { | ||
| 62 | error.EndOfStream => {}, | ||
| 63 | else => { | ||
| 64 | return err; | ||
| 65 | }, | ||
| 63 | } | 66 | } |
| 64 | |||
| 65 | try writer.writeInt(u16, 0, endian); | 67 | try writer.writeInt(u16, 0, endian); |
| 66 | try out_comp.flush(); | 68 | try writer.flush(); |
| 67 | } | 69 | } |
diff --git a/codegen/case_prop.zig b/codegen/case_prop.zig index 6c912a8..66eb62c 100644 --- a/codegen/case_prop.zig +++ b/codegen/case_prop.zig | |||
| @@ -22,7 +22,7 @@ const BlockMap = std.HashMap( | |||
| 22 | std.hash_map.default_max_load_percentage, | 22 | std.hash_map.default_max_load_percentage, |
| 23 | ); | 23 | ); |
| 24 | 24 | ||
| 25 | pub fn main() !void { | 25 | pub fn main() anyerror!void { |
| 26 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); | 26 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| 27 | defer arena.deinit(); | 27 | defer arena.deinit(); |
| 28 | const allocator = arena.allocator(); | 28 | const allocator = arena.allocator(); |
| @@ -35,10 +35,9 @@ pub fn main() !void { | |||
| 35 | // Process DerivedCoreProperties.txt | 35 | // Process DerivedCoreProperties.txt |
| 36 | var in_file = try std.fs.cwd().openFile("data/unicode/DerivedCoreProperties.txt", .{}); | 36 | var in_file = try std.fs.cwd().openFile("data/unicode/DerivedCoreProperties.txt", .{}); |
| 37 | defer in_file.close(); | 37 | defer in_file.close(); |
| 38 | var in_buf = std.io.bufferedReader(in_file.reader()); | 38 | var in_reader = in_file.reader(&line_buf); |
| 39 | const in_reader = in_buf.reader(); | ||
| 40 | 39 | ||
| 41 | while (try in_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 40 | while (in_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 42 | if (line.len == 0 or line[0] == '#') continue; | 41 | if (line.len == 0 or line[0] == '#') continue; |
| 43 | const no_comment = if (mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; | 42 | const no_comment = if (mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; |
| 44 | 43 | ||
| @@ -79,15 +78,20 @@ pub fn main() !void { | |||
| 79 | else => {}, | 78 | else => {}, |
| 80 | } | 79 | } |
| 81 | } | 80 | } |
| 81 | } else |err| switch (err) { | ||
| 82 | error.EndOfStream => {}, | ||
| 83 | else => { | ||
| 84 | return err; | ||
| 85 | }, | ||
| 82 | } | 86 | } |
| 83 | 87 | ||
| 84 | var blocks_map = BlockMap.init(allocator); | 88 | var blocks_map = BlockMap.init(allocator); |
| 85 | defer blocks_map.deinit(); | 89 | defer blocks_map.deinit(); |
| 86 | 90 | ||
| 87 | var stage1 = std.ArrayList(u16).init(allocator); | 91 | var stage1 = std.array_list.Managed(u16).init(allocator); |
| 88 | defer stage1.deinit(); | 92 | defer stage1.deinit(); |
| 89 | 93 | ||
| 90 | var stage2 = std.ArrayList(u8).init(allocator); | 94 | var stage2 = std.array_list.Managed(u8).init(allocator); |
| 91 | defer stage2.deinit(); | 95 | defer stage2.deinit(); |
| 92 | 96 | ||
| 93 | var block: Block = [_]u8{0} ** block_size; | 97 | var block: Block = [_]u8{0} ** block_size; |
| @@ -118,18 +122,17 @@ pub fn main() !void { | |||
| 118 | _ = args_iter.skip(); | 122 | _ = args_iter.skip(); |
| 119 | const output_path = args_iter.next() orelse @panic("No output file arg!"); | 123 | const output_path = args_iter.next() orelse @panic("No output file arg!"); |
| 120 | 124 | ||
| 121 | const compressor = std.compress.flate.deflate.compressor; | 125 | var write_buf: [4096]u8 = undefined; |
| 122 | var out_file = try std.fs.cwd().createFile(output_path, .{}); | 126 | var out_file = try std.fs.cwd().createFile(output_path, .{}); |
| 123 | defer out_file.close(); | 127 | defer out_file.close(); |
| 124 | var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); | 128 | var writer = out_file.writer(&write_buf); |
| 125 | const writer = out_comp.writer(); | ||
| 126 | 129 | ||
| 127 | const endian = builtin.cpu.arch.endian(); | 130 | const endian = builtin.cpu.arch.endian(); |
| 128 | try writer.writeInt(u16, @intCast(stage1.items.len), endian); | 131 | try writer.interface.writeInt(u16, @intCast(stage1.items.len), endian); |
| 129 | for (stage1.items) |i| try writer.writeInt(u16, i, endian); | 132 | for (stage1.items) |i| try writer.interface.writeInt(u16, i, endian); |
| 130 | 133 | ||
| 131 | try writer.writeInt(u16, @intCast(stage2.items.len), endian); | 134 | try writer.interface.writeInt(u16, @intCast(stage2.items.len), endian); |
| 132 | try writer.writeAll(stage2.items); | 135 | try writer.interface.writeAll(stage2.items); |
| 133 | 136 | ||
| 134 | try out_comp.flush(); | 137 | try writer.interface.flush(); |
| 135 | } | 138 | } |
diff --git a/codegen/ccc.zig b/codegen/ccc.zig index a01c8d2..b9b2bc3 100644 --- a/codegen/ccc.zig +++ b/codegen/ccc.zig | |||
| @@ -21,7 +21,7 @@ const BlockMap = std.HashMap( | |||
| 21 | std.hash_map.default_max_load_percentage, | 21 | std.hash_map.default_max_load_percentage, |
| 22 | ); | 22 | ); |
| 23 | 23 | ||
| 24 | pub fn main() !void { | 24 | pub fn main() anyerror!void { |
| 25 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); | 25 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| 26 | defer arena.deinit(); | 26 | defer arena.deinit(); |
| 27 | const allocator = arena.allocator(); | 27 | const allocator = arena.allocator(); |
| @@ -34,10 +34,9 @@ pub fn main() !void { | |||
| 34 | // Process DerivedCombiningClass.txt | 34 | // Process DerivedCombiningClass.txt |
| 35 | var cc_file = try std.fs.cwd().openFile("data/unicode/extracted/DerivedCombiningClass.txt", .{}); | 35 | var cc_file = try std.fs.cwd().openFile("data/unicode/extracted/DerivedCombiningClass.txt", .{}); |
| 36 | defer cc_file.close(); | 36 | defer cc_file.close(); |
| 37 | var cc_buf = std.io.bufferedReader(cc_file.reader()); | 37 | var cc_reader = cc_file.reader(&line_buf); |
| 38 | const cc_reader = cc_buf.reader(); | ||
| 39 | 38 | ||
| 40 | while (try cc_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 39 | while (cc_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 41 | if (line.len == 0 or line[0] == '#') continue; | 40 | if (line.len == 0 or line[0] == '#') continue; |
| 42 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; | 41 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; |
| 43 | 42 | ||
| @@ -68,15 +67,20 @@ pub fn main() !void { | |||
| 68 | else => {}, | 67 | else => {}, |
| 69 | } | 68 | } |
| 70 | } | 69 | } |
| 70 | } else |err| switch (err) { | ||
| 71 | error.EndOfStream => {}, | ||
| 72 | else => { | ||
| 73 | return err; | ||
| 74 | }, | ||
| 71 | } | 75 | } |
| 72 | 76 | ||
| 73 | var blocks_map = BlockMap.init(allocator); | 77 | var blocks_map = BlockMap.init(allocator); |
| 74 | defer blocks_map.deinit(); | 78 | defer blocks_map.deinit(); |
| 75 | 79 | ||
| 76 | var stage1 = std.ArrayList(u16).init(allocator); | 80 | var stage1 = std.array_list.Managed(u16).init(allocator); |
| 77 | defer stage1.deinit(); | 81 | defer stage1.deinit(); |
| 78 | 82 | ||
| 79 | var stage2 = std.ArrayList(u8).init(allocator); | 83 | var stage2 = std.array_list.Managed(u8).init(allocator); |
| 80 | defer stage2.deinit(); | 84 | defer stage2.deinit(); |
| 81 | 85 | ||
| 82 | var block: Block = [_]u8{0} ** block_size; | 86 | var block: Block = [_]u8{0} ** block_size; |
| @@ -107,18 +111,17 @@ pub fn main() !void { | |||
| 107 | _ = args_iter.skip(); | 111 | _ = args_iter.skip(); |
| 108 | const output_path = args_iter.next() orelse @panic("No output file arg!"); | 112 | const output_path = args_iter.next() orelse @panic("No output file arg!"); |
| 109 | 113 | ||
| 110 | const compressor = std.compress.flate.deflate.compressor; | 114 | var write_buf: [4096]u8 = undefined; |
| 111 | var out_file = try std.fs.cwd().createFile(output_path, .{}); | 115 | var out_file = try std.fs.cwd().createFile(output_path, .{}); |
| 112 | defer out_file.close(); | 116 | defer out_file.close(); |
| 113 | var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); | 117 | var writer = out_file.writer(&write_buf); |
| 114 | const writer = out_comp.writer(); | ||
| 115 | 118 | ||
| 116 | const endian = builtin.cpu.arch.endian(); | 119 | const endian = builtin.cpu.arch.endian(); |
| 117 | try writer.writeInt(u16, @intCast(stage1.items.len), endian); | 120 | try writer.interface.writeInt(u16, @intCast(stage1.items.len), endian); |
| 118 | for (stage1.items) |i| try writer.writeInt(u16, i, endian); | 121 | for (stage1.items) |i| try writer.interface.writeInt(u16, i, endian); |
| 119 | 122 | ||
| 120 | try writer.writeInt(u16, @intCast(stage2.items.len), endian); | 123 | try writer.interface.writeInt(u16, @intCast(stage2.items.len), endian); |
| 121 | try writer.writeAll(stage2.items); | 124 | try writer.interface.writeAll(stage2.items); |
| 122 | 125 | ||
| 123 | try out_comp.flush(); | 126 | try writer.interface.flush(); |
| 124 | } | 127 | } |
diff --git a/codegen/compat.zig b/codegen/compat.zig index 07616fc..835a636 100644 --- a/codegen/compat.zig +++ b/codegen/compat.zig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | const std = @import("std"); | 1 | const std = @import("std"); |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | 3 | ||
| 4 | pub fn main() !void { | 4 | pub fn main() anyerror!void { |
| 5 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); | 5 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| 6 | defer arena.deinit(); | 6 | defer arena.deinit(); |
| 7 | const allocator = arena.allocator(); | 7 | const allocator = arena.allocator(); |
| @@ -9,24 +9,22 @@ pub fn main() !void { | |||
| 9 | // Process UnicodeData.txt | 9 | // Process UnicodeData.txt |
| 10 | var in_file = try std.fs.cwd().openFile("data/unicode/UnicodeData.txt", .{}); | 10 | var in_file = try std.fs.cwd().openFile("data/unicode/UnicodeData.txt", .{}); |
| 11 | defer in_file.close(); | 11 | defer in_file.close(); |
| 12 | var in_buf = std.io.bufferedReader(in_file.reader()); | 12 | var line_buf: [4096]u8 = undefined; |
| 13 | const in_reader = in_buf.reader(); | 13 | var write_buf: [4096]u8 = undefined; |
| 14 | var in_reader = in_file.reader(&line_buf); | ||
| 14 | 15 | ||
| 15 | var args_iter = try std.process.argsWithAllocator(allocator); | 16 | var args_iter = try std.process.argsWithAllocator(allocator); |
| 16 | defer args_iter.deinit(); | 17 | defer args_iter.deinit(); |
| 17 | _ = args_iter.skip(); | 18 | _ = args_iter.skip(); |
| 18 | const output_path = args_iter.next() orelse @panic("No output file arg!"); | 19 | const output_path = args_iter.next() orelse @panic("No output file arg!"); |
| 19 | 20 | ||
| 20 | const compressor = std.compress.flate.deflate.compressor; | ||
| 21 | var out_file = try std.fs.cwd().createFile(output_path, .{}); | 21 | var out_file = try std.fs.cwd().createFile(output_path, .{}); |
| 22 | defer out_file.close(); | 22 | defer out_file.close(); |
| 23 | var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); | 23 | var writer = out_file.writer(&write_buf); |
| 24 | const writer = out_comp.writer(); | ||
| 25 | 24 | ||
| 26 | const endian = builtin.cpu.arch.endian(); | 25 | const endian = builtin.cpu.arch.endian(); |
| 27 | var line_buf: [4096]u8 = undefined; | ||
| 28 | 26 | ||
| 29 | lines: while (try in_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 27 | lines: while (in_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 30 | if (line.len == 0) continue; | 28 | if (line.len == 0) continue; |
| 31 | 29 | ||
| 32 | var field_iter = std.mem.splitScalar(u8, line, ';'); | 30 | var field_iter = std.mem.splitScalar(u8, line, ';'); |
| @@ -55,10 +53,15 @@ pub fn main() !void { | |||
| 55 | } | 53 | } |
| 56 | } | 54 | } |
| 57 | 55 | ||
| 58 | try writer.writeInt(u8, @intCast(len), endian); | 56 | try writer.interface.writeInt(u8, @intCast(len), endian); |
| 59 | for (cps[0..len]) |cp| try writer.writeInt(u24, cp, endian); | 57 | for (cps[0..len]) |cp| try writer.interface.writeInt(u24, cp, endian); |
| 58 | } else |err| switch (err) { | ||
| 59 | error.EndOfStream => {}, | ||
| 60 | else => { | ||
| 61 | return err; | ||
| 62 | }, | ||
| 60 | } | 63 | } |
| 61 | 64 | ||
| 62 | try writer.writeInt(u16, 0, endian); | 65 | try writer.interface.writeInt(u16, 0, endian); |
| 63 | try out_comp.flush(); | 66 | try writer.interface.flush(); |
| 64 | } | 67 | } |
diff --git a/codegen/core_props.zig b/codegen/core_props.zig index f60c7a9..19063f6 100644 --- a/codegen/core_props.zig +++ b/codegen/core_props.zig | |||
| @@ -22,7 +22,7 @@ const BlockMap = std.HashMap( | |||
| 22 | std.hash_map.default_max_load_percentage, | 22 | std.hash_map.default_max_load_percentage, |
| 23 | ); | 23 | ); |
| 24 | 24 | ||
| 25 | pub fn main() !void { | 25 | pub fn main() anyerror!void { |
| 26 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); | 26 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| 27 | defer arena.deinit(); | 27 | defer arena.deinit(); |
| 28 | const allocator = arena.allocator(); | 28 | const allocator = arena.allocator(); |
| @@ -35,10 +35,9 @@ pub fn main() !void { | |||
| 35 | // Process DerivedCoreProperties.txt | 35 | // Process DerivedCoreProperties.txt |
| 36 | var in_file = try std.fs.cwd().openFile("data/unicode/DerivedCoreProperties.txt", .{}); | 36 | var in_file = try std.fs.cwd().openFile("data/unicode/DerivedCoreProperties.txt", .{}); |
| 37 | defer in_file.close(); | 37 | defer in_file.close(); |
| 38 | var in_buf = std.io.bufferedReader(in_file.reader()); | 38 | var in_reader = in_file.reader(&line_buf); |
| 39 | const in_reader = in_buf.reader(); | ||
| 40 | 39 | ||
| 41 | while (try in_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 40 | while (in_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 42 | if (line.len == 0 or line[0] == '#') continue; | 41 | if (line.len == 0 or line[0] == '#') continue; |
| 43 | const no_comment = if (mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; | 42 | const no_comment = if (mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; |
| 44 | 43 | ||
| @@ -82,15 +81,19 @@ pub fn main() !void { | |||
| 82 | else => {}, | 81 | else => {}, |
| 83 | } | 82 | } |
| 84 | } | 83 | } |
| 84 | } else |err| switch (err) { | ||
| 85 | error.EndOfStream => {}, | ||
| 86 | else => { | ||
| 87 | return err; | ||
| 88 | }, | ||
| 85 | } | 89 | } |
| 86 | |||
| 87 | var blocks_map = BlockMap.init(allocator); | 90 | var blocks_map = BlockMap.init(allocator); |
| 88 | defer blocks_map.deinit(); | 91 | defer blocks_map.deinit(); |
| 89 | 92 | ||
| 90 | var stage1 = std.ArrayList(u16).init(allocator); | 93 | var stage1 = std.array_list.Managed(u16).init(allocator); |
| 91 | defer stage1.deinit(); | 94 | defer stage1.deinit(); |
| 92 | 95 | ||
| 93 | var stage2 = std.ArrayList(u8).init(allocator); | 96 | var stage2 = std.array_list.Managed(u8).init(allocator); |
| 94 | defer stage2.deinit(); | 97 | defer stage2.deinit(); |
| 95 | 98 | ||
| 96 | var block: Block = [_]u8{0} ** block_size; | 99 | var block: Block = [_]u8{0} ** block_size; |
| @@ -121,18 +124,17 @@ pub fn main() !void { | |||
| 121 | _ = args_iter.skip(); | 124 | _ = args_iter.skip(); |
| 122 | const output_path = args_iter.next() orelse @panic("No output file arg!"); | 125 | const output_path = args_iter.next() orelse @panic("No output file arg!"); |
| 123 | 126 | ||
| 124 | const compressor = std.compress.flate.deflate.compressor; | 127 | var out_buf: [4096]u8 = undefined; |
| 125 | var out_file = try std.fs.cwd().createFile(output_path, .{}); | 128 | var out_file = try std.fs.cwd().createFile(output_path, .{}); |
| 126 | defer out_file.close(); | 129 | defer out_file.close(); |
| 127 | var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); | 130 | var writer = out_file.writer(&out_buf); |
| 128 | const writer = out_comp.writer(); | ||
| 129 | 131 | ||
| 130 | const endian = builtin.cpu.arch.endian(); | 132 | const endian = builtin.cpu.arch.endian(); |
| 131 | try writer.writeInt(u16, @intCast(stage1.items.len), endian); | 133 | try writer.interface.writeInt(u16, @intCast(stage1.items.len), endian); |
| 132 | for (stage1.items) |i| try writer.writeInt(u16, i, endian); | 134 | for (stage1.items) |i| try writer.interface.writeInt(u16, i, endian); |
| 133 | 135 | ||
| 134 | try writer.writeInt(u16, @intCast(stage2.items.len), endian); | 136 | try writer.interface.writeInt(u16, @intCast(stage2.items.len), endian); |
| 135 | try writer.writeAll(stage2.items); | 137 | try writer.interface.writeAll(stage2.items); |
| 136 | 138 | ||
| 137 | try out_comp.flush(); | 139 | try writer.interface.flush(); |
| 138 | } | 140 | } |
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 | ||
| 26 | pub fn main() !void { | 26 | pub 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 | } |
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"); | |||
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const mem = std.mem; | 3 | const mem = std.mem; |
| 4 | 4 | ||
| 5 | pub fn main() !void { | 5 | pub 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 | } |
diff --git a/codegen/gbp.zig b/codegen/gbp.zig index 3fc4461..d654cf1 100644 --- a/codegen/gbp.zig +++ b/codegen/gbp.zig | |||
| @@ -47,7 +47,7 @@ const BlockMap = std.HashMap( | |||
| 47 | std.hash_map.default_max_load_percentage, | 47 | std.hash_map.default_max_load_percentage, |
| 48 | ); | 48 | ); |
| 49 | 49 | ||
| 50 | pub fn main() !void { | 50 | pub fn main() anyerror!void { |
| 51 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); | 51 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| 52 | defer arena.deinit(); | 52 | defer arena.deinit(); |
| 53 | const allocator = arena.allocator(); | 53 | const allocator = arena.allocator(); |
| @@ -66,10 +66,9 @@ pub fn main() !void { | |||
| 66 | // Process Indic | 66 | // Process Indic |
| 67 | var indic_file = try std.fs.cwd().openFile("data/unicode/DerivedCoreProperties.txt", .{}); | 67 | var indic_file = try std.fs.cwd().openFile("data/unicode/DerivedCoreProperties.txt", .{}); |
| 68 | defer indic_file.close(); | 68 | defer indic_file.close(); |
| 69 | var indic_buf = std.io.bufferedReader(indic_file.reader()); | 69 | var indic_reader = indic_file.reader(&line_buf); |
| 70 | const indic_reader = indic_buf.reader(); | ||
| 71 | 70 | ||
| 72 | while (try indic_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 71 | while (indic_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 73 | if (line.len == 0 or line[0] == '#') continue; | 72 | if (line.len == 0 or line[0] == '#') continue; |
| 74 | if (std.mem.indexOf(u8, line, "InCB") == null) continue; | 73 | if (std.mem.indexOf(u8, line, "InCB") == null) continue; |
| 75 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; | 74 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; |
| @@ -100,15 +99,18 @@ pub fn main() !void { | |||
| 100 | else => {}, | 99 | else => {}, |
| 101 | } | 100 | } |
| 102 | } | 101 | } |
| 102 | } else |err| switch (err) { | ||
| 103 | error.EndOfStream => {}, | ||
| 104 | else => { | ||
| 105 | return err; | ||
| 106 | }, | ||
| 103 | } | 107 | } |
| 104 | |||
| 105 | // Process GBP | 108 | // Process GBP |
| 106 | var gbp_file = try std.fs.cwd().openFile("data/unicode/auxiliary/GraphemeBreakProperty.txt", .{}); | 109 | var gbp_file = try std.fs.cwd().openFile("data/unicode/auxiliary/GraphemeBreakProperty.txt", .{}); |
| 107 | defer gbp_file.close(); | 110 | defer gbp_file.close(); |
| 108 | var gbp_buf = std.io.bufferedReader(gbp_file.reader()); | 111 | var gbp_reader = gbp_file.reader(&line_buf); |
| 109 | const gbp_reader = gbp_buf.reader(); | ||
| 110 | 112 | ||
| 111 | while (try gbp_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 113 | while (gbp_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 112 | if (line.len == 0 or line[0] == '#') continue; | 114 | if (line.len == 0 or line[0] == '#') continue; |
| 113 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; | 115 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; |
| 114 | 116 | ||
| @@ -138,15 +140,18 @@ pub fn main() !void { | |||
| 138 | else => {}, | 140 | else => {}, |
| 139 | } | 141 | } |
| 140 | } | 142 | } |
| 143 | } else |err| switch (err) { | ||
| 144 | error.EndOfStream => {}, | ||
| 145 | else => { | ||
| 146 | return err; | ||
| 147 | }, | ||
| 141 | } | 148 | } |
| 142 | |||
| 143 | // Process Emoji | 149 | // Process Emoji |
| 144 | var emoji_file = try std.fs.cwd().openFile("data/unicode/emoji/emoji-data.txt", .{}); | 150 | var emoji_file = try std.fs.cwd().openFile("data/unicode/emoji/emoji-data.txt", .{}); |
| 145 | defer emoji_file.close(); | 151 | defer emoji_file.close(); |
| 146 | var emoji_buf = std.io.bufferedReader(emoji_file.reader()); | 152 | var emoji_reader = emoji_file.reader(&line_buf); |
| 147 | const emoji_reader = emoji_buf.reader(); | ||
| 148 | 153 | ||
| 149 | while (try emoji_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 154 | while (emoji_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 150 | if (line.len == 0 or line[0] == '#') continue; | 155 | if (line.len == 0 or line[0] == '#') continue; |
| 151 | if (std.mem.indexOf(u8, line, "Extended_Pictographic") == null) continue; | 156 | if (std.mem.indexOf(u8, line, "Extended_Pictographic") == null) continue; |
| 152 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; | 157 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; |
| @@ -170,15 +175,20 @@ pub fn main() !void { | |||
| 170 | else => {}, | 175 | else => {}, |
| 171 | } | 176 | } |
| 172 | } | 177 | } |
| 178 | } else |err| switch (err) { | ||
| 179 | error.EndOfStream => {}, | ||
| 180 | else => { | ||
| 181 | return err; | ||
| 182 | }, | ||
| 173 | } | 183 | } |
| 174 | 184 | ||
| 175 | var blocks_map = BlockMap.init(allocator); | 185 | var blocks_map = BlockMap.init(allocator); |
| 176 | defer blocks_map.deinit(); | 186 | defer blocks_map.deinit(); |
| 177 | 187 | ||
| 178 | var stage1 = std.ArrayList(u16).init(allocator); | 188 | var stage1 = std.array_list.Managed(u16).init(allocator); |
| 179 | defer stage1.deinit(); | 189 | defer stage1.deinit(); |
| 180 | 190 | ||
| 181 | var stage2 = std.ArrayList(u16).init(allocator); | 191 | var stage2 = std.array_list.Managed(u16).init(allocator); |
| 182 | defer stage2.deinit(); | 192 | defer stage2.deinit(); |
| 183 | 193 | ||
| 184 | var stage3 = std.AutoArrayHashMap(u8, u16).init(allocator); | 194 | var stage3 = std.AutoArrayHashMap(u8, u16).init(allocator); |
| @@ -227,22 +237,21 @@ pub fn main() !void { | |||
| 227 | _ = args_iter.skip(); | 237 | _ = args_iter.skip(); |
| 228 | const output_path = args_iter.next() orelse @panic("No output file arg!"); | 238 | const output_path = args_iter.next() orelse @panic("No output file arg!"); |
| 229 | 239 | ||
| 230 | const compressor = std.compress.flate.deflate.compressor; | 240 | var write_buf: [4096]u8 = undefined; |
| 231 | var out_file = try std.fs.cwd().createFile(output_path, .{}); | 241 | var out_file = try std.fs.cwd().createFile(output_path, .{}); |
| 232 | defer out_file.close(); | 242 | defer out_file.close(); |
| 233 | var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); | 243 | var writer = out_file.writer(&write_buf); |
| 234 | const writer = out_comp.writer(); | ||
| 235 | 244 | ||
| 236 | const endian = builtin.cpu.arch.endian(); | 245 | const endian = builtin.cpu.arch.endian(); |
| 237 | try writer.writeInt(u16, @intCast(stage1.items.len), endian); | 246 | try writer.interface.writeInt(u16, @intCast(stage1.items.len), endian); |
| 238 | for (stage1.items) |i| try writer.writeInt(u16, i, endian); | 247 | for (stage1.items) |i| try writer.interface.writeInt(u16, i, endian); |
| 239 | 248 | ||
| 240 | try writer.writeInt(u16, @intCast(stage2.items.len), endian); | 249 | try writer.interface.writeInt(u16, @intCast(stage2.items.len), endian); |
| 241 | for (stage2.items) |i| try writer.writeInt(u16, i, endian); | 250 | for (stage2.items) |i| try writer.interface.writeInt(u16, i, endian); |
| 242 | 251 | ||
| 243 | const props_bytes = stage3.keys(); | 252 | const props_bytes = stage3.keys(); |
| 244 | try writer.writeInt(u16, @intCast(props_bytes.len), endian); | 253 | try writer.interface.writeInt(u16, @intCast(props_bytes.len), endian); |
| 245 | try writer.writeAll(props_bytes); | 254 | try writer.interface.writeAll(props_bytes); |
| 246 | 255 | ||
| 247 | try out_comp.flush(); | 256 | try writer.interface.flush(); |
| 248 | } | 257 | } |
diff --git a/codegen/gencat.zig b/codegen/gencat.zig index fe06bd7..7dedb5d 100644 --- a/codegen/gencat.zig +++ b/codegen/gencat.zig | |||
| @@ -67,10 +67,9 @@ pub fn main() !void { | |||
| 67 | // Process DerivedGeneralCategory.txt | 67 | // Process DerivedGeneralCategory.txt |
| 68 | var in_file = try std.fs.cwd().openFile("data/unicode/extracted/DerivedGeneralCategory.txt", .{}); | 68 | var in_file = try std.fs.cwd().openFile("data/unicode/extracted/DerivedGeneralCategory.txt", .{}); |
| 69 | defer in_file.close(); | 69 | defer in_file.close(); |
| 70 | var in_buf = std.io.bufferedReader(in_file.reader()); | 70 | var in_reader = in_file.reader(&line_buf); |
| 71 | const in_reader = in_buf.reader(); | ||
| 72 | 71 | ||
| 73 | while (try in_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 72 | while (in_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 74 | if (line.len == 0 or line[0] == '#') continue; | 73 | if (line.len == 0 or line[0] == '#') continue; |
| 75 | 74 | ||
| 76 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; | 75 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; |
| @@ -101,18 +100,23 @@ pub fn main() !void { | |||
| 101 | else => {}, | 100 | else => {}, |
| 102 | } | 101 | } |
| 103 | } | 102 | } |
| 103 | } else |err| switch (err) { | ||
| 104 | error.EndOfStream => {}, | ||
| 105 | else => { | ||
| 106 | return err; | ||
| 107 | }, | ||
| 104 | } | 108 | } |
| 105 | 109 | ||
| 106 | var blocks_map = BlockMap.init(allocator); | 110 | var blocks_map = BlockMap.init(allocator); |
| 107 | defer blocks_map.deinit(); | 111 | defer blocks_map.deinit(); |
| 108 | 112 | ||
| 109 | var stage1 = std.ArrayList(u16).init(allocator); | 113 | var stage1 = std.array_list.Managed(u16).init(allocator); |
| 110 | defer stage1.deinit(); | 114 | defer stage1.deinit(); |
| 111 | 115 | ||
| 112 | var stage2 = std.ArrayList(u5).init(allocator); | 116 | var stage2 = std.array_list.Managed(u5).init(allocator); |
| 113 | defer stage2.deinit(); | 117 | defer stage2.deinit(); |
| 114 | 118 | ||
| 115 | var stage3 = std.ArrayList(u5).init(allocator); | 119 | var stage3 = std.array_list.Managed(u5).init(allocator); |
| 116 | defer stage3.deinit(); | 120 | defer stage3.deinit(); |
| 117 | 121 | ||
| 118 | var block: Block = [_]u5{0} ** block_size; | 122 | var block: Block = [_]u5{0} ** block_size; |
| @@ -151,21 +155,20 @@ pub fn main() !void { | |||
| 151 | _ = args_iter.skip(); | 155 | _ = args_iter.skip(); |
| 152 | const output_path = args_iter.next() orelse @panic("No output file arg!"); | 156 | const output_path = args_iter.next() orelse @panic("No output file arg!"); |
| 153 | 157 | ||
| 154 | const compressor = std.compress.flate.deflate.compressor; | 158 | var write_buf: [4096]u8 = undefined; |
| 155 | var out_file = try std.fs.cwd().createFile(output_path, .{}); | 159 | var out_file = try std.fs.cwd().createFile(output_path, .{}); |
| 156 | defer out_file.close(); | 160 | defer out_file.close(); |
| 157 | var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); | 161 | var writer = out_file.writer(&write_buf); |
| 158 | const writer = out_comp.writer(); | ||
| 159 | 162 | ||
| 160 | const endian = builtin.cpu.arch.endian(); | 163 | const endian = builtin.cpu.arch.endian(); |
| 161 | try writer.writeInt(u16, @intCast(stage1.items.len), endian); | 164 | try writer.interface.writeInt(u16, @intCast(stage1.items.len), endian); |
| 162 | for (stage1.items) |i| try writer.writeInt(u16, i, endian); | 165 | for (stage1.items) |i| try writer.interface.writeInt(u16, i, endian); |
| 163 | 166 | ||
| 164 | try writer.writeInt(u16, @intCast(stage2.items.len), endian); | 167 | try writer.interface.writeInt(u16, @intCast(stage2.items.len), endian); |
| 165 | for (stage2.items) |i| try writer.writeInt(u8, i, endian); | 168 | for (stage2.items) |i| try writer.interface.writeInt(u8, i, endian); |
| 166 | 169 | ||
| 167 | try writer.writeInt(u8, @intCast(stage3.items.len), endian); | 170 | try writer.interface.writeInt(u8, @intCast(stage3.items.len), endian); |
| 168 | for (stage3.items) |i| try writer.writeInt(u8, i, endian); | 171 | for (stage3.items) |i| try writer.interface.writeInt(u8, i, endian); |
| 169 | 172 | ||
| 170 | try out_comp.flush(); | 173 | try writer.interface.flush(); |
| 171 | } | 174 | } |
diff --git a/codegen/hangul.zig b/codegen/hangul.zig index 2c42bb7..6768b3f 100644 --- a/codegen/hangul.zig +++ b/codegen/hangul.zig | |||
| @@ -30,7 +30,7 @@ const BlockMap = std.HashMap( | |||
| 30 | std.hash_map.default_max_load_percentage, | 30 | std.hash_map.default_max_load_percentage, |
| 31 | ); | 31 | ); |
| 32 | 32 | ||
| 33 | pub fn main() !void { | 33 | pub fn main() anyerror!void { |
| 34 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); | 34 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| 35 | defer arena.deinit(); | 35 | defer arena.deinit(); |
| 36 | const allocator = arena.allocator(); | 36 | const allocator = arena.allocator(); |
| @@ -43,10 +43,9 @@ pub fn main() !void { | |||
| 43 | // Process HangulSyllableType.txt | 43 | // Process HangulSyllableType.txt |
| 44 | var in_file = try std.fs.cwd().openFile("data/unicode/HangulSyllableType.txt", .{}); | 44 | var in_file = try std.fs.cwd().openFile("data/unicode/HangulSyllableType.txt", .{}); |
| 45 | defer in_file.close(); | 45 | defer in_file.close(); |
| 46 | var in_buf = std.io.bufferedReader(in_file.reader()); | 46 | var in_reader = in_file.reader(&line_buf); |
| 47 | const in_reader = in_buf.reader(); | ||
| 48 | 47 | ||
| 49 | while (try in_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 48 | while (in_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 50 | if (line.len == 0 or line[0] == '#') continue; | 49 | if (line.len == 0 or line[0] == '#') continue; |
| 51 | 50 | ||
| 52 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; | 51 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; |
| @@ -77,15 +76,19 @@ pub fn main() !void { | |||
| 77 | else => {}, | 76 | else => {}, |
| 78 | } | 77 | } |
| 79 | } | 78 | } |
| 79 | } else |err| switch (err) { | ||
| 80 | error.EndOfStream => {}, | ||
| 81 | else => { | ||
| 82 | return err; | ||
| 83 | }, | ||
| 80 | } | 84 | } |
| 81 | |||
| 82 | var blocks_map = BlockMap.init(allocator); | 85 | var blocks_map = BlockMap.init(allocator); |
| 83 | defer blocks_map.deinit(); | 86 | defer blocks_map.deinit(); |
| 84 | 87 | ||
| 85 | var stage1 = std.ArrayList(u16).init(allocator); | 88 | var stage1 = std.array_list.Managed(u16).init(allocator); |
| 86 | defer stage1.deinit(); | 89 | defer stage1.deinit(); |
| 87 | 90 | ||
| 88 | var stage2 = std.ArrayList(u3).init(allocator); | 91 | var stage2 = std.array_list.Managed(u3).init(allocator); |
| 89 | defer stage2.deinit(); | 92 | defer stage2.deinit(); |
| 90 | 93 | ||
| 91 | var block: Block = [_]u3{0} ** block_size; | 94 | var block: Block = [_]u3{0} ** block_size; |
| @@ -116,18 +119,17 @@ pub fn main() !void { | |||
| 116 | _ = args_iter.skip(); | 119 | _ = args_iter.skip(); |
| 117 | const output_path = args_iter.next() orelse @panic("No output file arg!"); | 120 | const output_path = args_iter.next() orelse @panic("No output file arg!"); |
| 118 | 121 | ||
| 119 | const compressor = std.compress.flate.deflate.compressor; | 122 | var write_buf: [4096]u8 = undefined; |
| 120 | var out_file = try std.fs.cwd().createFile(output_path, .{}); | 123 | var out_file = try std.fs.cwd().createFile(output_path, .{}); |
| 121 | defer out_file.close(); | 124 | defer out_file.close(); |
| 122 | var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); | 125 | var writer = out_file.writer(&write_buf); |
| 123 | const writer = out_comp.writer(); | ||
| 124 | 126 | ||
| 125 | const endian = builtin.cpu.arch.endian(); | 127 | const endian = builtin.cpu.arch.endian(); |
| 126 | try writer.writeInt(u16, @intCast(stage1.items.len), endian); | 128 | try writer.interface.writeInt(u16, @intCast(stage1.items.len), endian); |
| 127 | for (stage1.items) |i| try writer.writeInt(u16, i, endian); | 129 | for (stage1.items) |i| try writer.interface.writeInt(u16, i, endian); |
| 128 | 130 | ||
| 129 | try writer.writeInt(u16, @intCast(stage2.items.len), endian); | 131 | try writer.interface.writeInt(u16, @intCast(stage2.items.len), endian); |
| 130 | for (stage2.items) |i| try writer.writeInt(u8, i, endian); | 132 | for (stage2.items) |i| try writer.interface.writeInt(u8, i, endian); |
| 131 | 133 | ||
| 132 | try out_comp.flush(); | 134 | try writer.interface.flush(); |
| 133 | } | 135 | } |
diff --git a/codegen/lower.zig b/codegen/lower.zig index a053fe3..c11cb0a 100644 --- a/codegen/lower.zig +++ b/codegen/lower.zig | |||
| @@ -6,27 +6,25 @@ pub fn main() !void { | |||
| 6 | defer arena.deinit(); | 6 | defer arena.deinit(); |
| 7 | const allocator = arena.allocator(); | 7 | const allocator = arena.allocator(); |
| 8 | 8 | ||
| 9 | var line_buf: [4096]u8 = undefined; | ||
| 10 | var write_buf: [4096]u8 = undefined; | ||
| 9 | // Process UnicodeData.txt | 11 | // Process UnicodeData.txt |
| 10 | var in_file = try std.fs.cwd().openFile("data/unicode/UnicodeData.txt", .{}); | 12 | var in_file = try std.fs.cwd().openFile("data/unicode/UnicodeData.txt", .{}); |
| 11 | defer in_file.close(); | 13 | defer in_file.close(); |
| 12 | var in_buf = std.io.bufferedReader(in_file.reader()); | 14 | var in_reader = in_file.reader(&line_buf); |
| 13 | const in_reader = in_buf.reader(); | ||
| 14 | 15 | ||
| 15 | var args_iter = try std.process.argsWithAllocator(allocator); | 16 | var args_iter = try std.process.argsWithAllocator(allocator); |
| 16 | defer args_iter.deinit(); | 17 | defer args_iter.deinit(); |
| 17 | _ = args_iter.skip(); | 18 | _ = args_iter.skip(); |
| 18 | const output_path = args_iter.next() orelse @panic("No output file arg!"); | 19 | const output_path = args_iter.next() orelse @panic("No output file arg!"); |
| 19 | 20 | ||
| 20 | const compressor = std.compress.flate.deflate.compressor; | ||
| 21 | var out_file = try std.fs.cwd().createFile(output_path, .{}); | 21 | var out_file = try std.fs.cwd().createFile(output_path, .{}); |
| 22 | defer out_file.close(); | 22 | defer out_file.close(); |
| 23 | var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); | 23 | var writer = out_file.writer(&write_buf); |
| 24 | const writer = out_comp.writer(); | ||
| 25 | 24 | ||
| 26 | const endian = builtin.cpu.arch.endian(); | 25 | const endian = builtin.cpu.arch.endian(); |
| 27 | var line_buf: [4096]u8 = undefined; | ||
| 28 | 26 | ||
| 29 | lines: while (try in_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 27 | lines: while (in_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 30 | if (line.len == 0) continue; | 28 | if (line.len == 0) continue; |
| 31 | 29 | ||
| 32 | var field_iter = std.mem.splitScalar(u8, line, ';'); | 30 | var field_iter = std.mem.splitScalar(u8, line, ';'); |
| @@ -42,16 +40,20 @@ pub fn main() !void { | |||
| 42 | 13 => { | 40 | 13 => { |
| 43 | // Simple lowercase mapping | 41 | // Simple lowercase mapping |
| 44 | if (field.len == 0) continue :lines; | 42 | if (field.len == 0) continue :lines; |
| 45 | try writer.writeInt(i24, cp, endian); | 43 | try writer.interface.writeInt(i24, cp, endian); |
| 46 | const mapping = try std.fmt.parseInt(i24, field, 16); | 44 | const mapping = try std.fmt.parseInt(i24, field, 16); |
| 47 | try writer.writeInt(i24, mapping - cp, endian); | 45 | try writer.interface.writeInt(i24, mapping - cp, endian); |
| 48 | }, | 46 | }, |
| 49 | 47 | ||
| 50 | else => {}, | 48 | else => {}, |
| 51 | } | 49 | } |
| 52 | } | 50 | } |
| 51 | } else |err| switch (err) { | ||
| 52 | error.EndOfStream => {}, | ||
| 53 | else => { | ||
| 54 | return err; | ||
| 55 | }, | ||
| 53 | } | 56 | } |
| 54 | 57 | try writer.interface.writeInt(u24, 0, endian); | |
| 55 | try writer.writeInt(u24, 0, endian); | 58 | try writer.interface.flush(); |
| 56 | try out_comp.flush(); | ||
| 57 | } | 59 | } |
diff --git a/codegen/normp.zig b/codegen/normp.zig index 60dabdc..71a1ae5 100644 --- a/codegen/normp.zig +++ b/codegen/normp.zig | |||
| @@ -21,7 +21,7 @@ const BlockMap = std.HashMap( | |||
| 21 | std.hash_map.default_max_load_percentage, | 21 | std.hash_map.default_max_load_percentage, |
| 22 | ); | 22 | ); |
| 23 | 23 | ||
| 24 | pub fn main() !void { | 24 | pub fn main() anyerror!void { |
| 25 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); | 25 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| 26 | defer arena.deinit(); | 26 | defer arena.deinit(); |
| 27 | const allocator = arena.allocator(); | 27 | const allocator = arena.allocator(); |
| @@ -34,10 +34,9 @@ pub fn main() !void { | |||
| 34 | // Process DerivedNormalizationProps.txt | 34 | // Process DerivedNormalizationProps.txt |
| 35 | var in_file = try std.fs.cwd().openFile("data/unicode/DerivedNormalizationProps.txt", .{}); | 35 | var in_file = try std.fs.cwd().openFile("data/unicode/DerivedNormalizationProps.txt", .{}); |
| 36 | defer in_file.close(); | 36 | defer in_file.close(); |
| 37 | var in_buf = std.io.bufferedReader(in_file.reader()); | 37 | var in_reader = in_file.reader(&line_buf); |
| 38 | const in_reader = in_buf.reader(); | ||
| 39 | 38 | ||
| 40 | while (try in_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 39 | while (in_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 41 | if (line.len == 0 or line[0] == '#') continue; | 40 | if (line.len == 0 or line[0] == '#') continue; |
| 42 | 41 | ||
| 43 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; | 42 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; |
| @@ -78,15 +77,19 @@ pub fn main() !void { | |||
| 78 | else => {}, | 77 | else => {}, |
| 79 | } | 78 | } |
| 80 | } | 79 | } |
| 80 | } else |err| switch (err) { | ||
| 81 | error.EndOfStream => {}, | ||
| 82 | else => { | ||
| 83 | return err; | ||
| 84 | }, | ||
| 81 | } | 85 | } |
| 82 | |||
| 83 | var blocks_map = BlockMap.init(allocator); | 86 | var blocks_map = BlockMap.init(allocator); |
| 84 | defer blocks_map.deinit(); | 87 | defer blocks_map.deinit(); |
| 85 | 88 | ||
| 86 | var stage1 = std.ArrayList(u16).init(allocator); | 89 | var stage1 = std.array_list.Managed(u16).init(allocator); |
| 87 | defer stage1.deinit(); | 90 | defer stage1.deinit(); |
| 88 | 91 | ||
| 89 | var stage2 = std.ArrayList(u3).init(allocator); | 92 | var stage2 = std.array_list.Managed(u3).init(allocator); |
| 90 | defer stage2.deinit(); | 93 | defer stage2.deinit(); |
| 91 | 94 | ||
| 92 | var block: Block = [_]u3{0} ** block_size; | 95 | var block: Block = [_]u3{0} ** block_size; |
| @@ -117,18 +120,17 @@ pub fn main() !void { | |||
| 117 | _ = args_iter.skip(); | 120 | _ = args_iter.skip(); |
| 118 | const output_path = args_iter.next() orelse @panic("No output file arg!"); | 121 | const output_path = args_iter.next() orelse @panic("No output file arg!"); |
| 119 | 122 | ||
| 120 | const compressor = std.compress.flate.deflate.compressor; | 123 | var write_buf: [4096]u8 = undefined; |
| 121 | var out_file = try std.fs.cwd().createFile(output_path, .{}); | 124 | var out_file = try std.fs.cwd().createFile(output_path, .{}); |
| 122 | defer out_file.close(); | 125 | defer out_file.close(); |
| 123 | var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); | 126 | var writer = out_file.writer(&write_buf); |
| 124 | const writer = out_comp.writer(); | ||
| 125 | 127 | ||
| 126 | const endian = builtin.cpu.arch.endian(); | 128 | const endian = builtin.cpu.arch.endian(); |
| 127 | try writer.writeInt(u16, @intCast(stage1.items.len), endian); | 129 | try writer.interface.writeInt(u16, @intCast(stage1.items.len), endian); |
| 128 | for (stage1.items) |i| try writer.writeInt(u16, i, endian); | 130 | for (stage1.items) |i| try writer.interface.writeInt(u16, i, endian); |
| 129 | 131 | ||
| 130 | try writer.writeInt(u16, @intCast(stage2.items.len), endian); | 132 | try writer.interface.writeInt(u16, @intCast(stage2.items.len), endian); |
| 131 | for (stage2.items) |i| try writer.writeInt(u8, i, endian); | 133 | for (stage2.items) |i| try writer.interface.writeInt(u8, i, endian); |
| 132 | 134 | ||
| 133 | try out_comp.flush(); | 135 | try writer.interface.flush(); |
| 134 | } | 136 | } |
diff --git a/codegen/numeric.zig b/codegen/numeric.zig index 038ac0a..cf918e8 100644 --- a/codegen/numeric.zig +++ b/codegen/numeric.zig | |||
| @@ -22,7 +22,7 @@ const BlockMap = std.HashMap( | |||
| 22 | std.hash_map.default_max_load_percentage, | 22 | std.hash_map.default_max_load_percentage, |
| 23 | ); | 23 | ); |
| 24 | 24 | ||
| 25 | pub fn main() !void { | 25 | pub fn main() anyerror!void { |
| 26 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); | 26 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| 27 | defer arena.deinit(); | 27 | defer arena.deinit(); |
| 28 | const allocator = arena.allocator(); | 28 | const allocator = arena.allocator(); |
| @@ -35,10 +35,9 @@ pub fn main() !void { | |||
| 35 | // Process DerivedNumericType.txt | 35 | // Process DerivedNumericType.txt |
| 36 | var in_file = try std.fs.cwd().openFile("data/unicode/extracted/DerivedNumericType.txt", .{}); | 36 | var in_file = try std.fs.cwd().openFile("data/unicode/extracted/DerivedNumericType.txt", .{}); |
| 37 | defer in_file.close(); | 37 | defer in_file.close(); |
| 38 | var in_buf = std.io.bufferedReader(in_file.reader()); | 38 | var in_reader = in_file.reader(&line_buf); |
| 39 | const in_reader = in_buf.reader(); | ||
| 40 | 39 | ||
| 41 | while (try in_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 40 | while (in_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 42 | if (line.len == 0 or line[0] == '#') continue; | 41 | if (line.len == 0 or line[0] == '#') continue; |
| 43 | const no_comment = if (mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; | 42 | const no_comment = if (mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; |
| 44 | 43 | ||
| @@ -79,15 +78,20 @@ pub fn main() !void { | |||
| 79 | else => {}, | 78 | else => {}, |
| 80 | } | 79 | } |
| 81 | } | 80 | } |
| 81 | } else |err| switch (err) { | ||
| 82 | error.EndOfStream => {}, | ||
| 83 | else => { | ||
| 84 | return err; | ||
| 85 | }, | ||
| 82 | } | 86 | } |
| 83 | 87 | ||
| 84 | var blocks_map = BlockMap.init(allocator); | 88 | var blocks_map = BlockMap.init(allocator); |
| 85 | defer blocks_map.deinit(); | 89 | defer blocks_map.deinit(); |
| 86 | 90 | ||
| 87 | var stage1 = std.ArrayList(u16).init(allocator); | 91 | var stage1 = std.array_list.Managed(u16).init(allocator); |
| 88 | defer stage1.deinit(); | 92 | defer stage1.deinit(); |
| 89 | 93 | ||
| 90 | var stage2 = std.ArrayList(u8).init(allocator); | 94 | var stage2 = std.array_list.Managed(u8).init(allocator); |
| 91 | defer stage2.deinit(); | 95 | defer stage2.deinit(); |
| 92 | 96 | ||
| 93 | var block: Block = [_]u8{0} ** block_size; | 97 | var block: Block = [_]u8{0} ** block_size; |
| @@ -118,18 +122,17 @@ pub fn main() !void { | |||
| 118 | _ = args_iter.skip(); | 122 | _ = args_iter.skip(); |
| 119 | const output_path = args_iter.next() orelse @panic("No output file arg!"); | 123 | const output_path = args_iter.next() orelse @panic("No output file arg!"); |
| 120 | 124 | ||
| 121 | const compressor = std.compress.flate.deflate.compressor; | 125 | var write_buf: [4096]u8 = undefined; |
| 122 | var out_file = try std.fs.cwd().createFile(output_path, .{}); | 126 | var out_file = try std.fs.cwd().createFile(output_path, .{}); |
| 123 | defer out_file.close(); | 127 | defer out_file.close(); |
| 124 | var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); | 128 | var writer = out_file.writer(&write_buf); |
| 125 | const writer = out_comp.writer(); | ||
| 126 | 129 | ||
| 127 | const endian = builtin.cpu.arch.endian(); | 130 | const endian = builtin.cpu.arch.endian(); |
| 128 | try writer.writeInt(u16, @intCast(stage1.items.len), endian); | 131 | try writer.interface.writeInt(u16, @intCast(stage1.items.len), endian); |
| 129 | for (stage1.items) |i| try writer.writeInt(u16, i, endian); | 132 | for (stage1.items) |i| try writer.interface.writeInt(u16, i, endian); |
| 130 | 133 | ||
| 131 | try writer.writeInt(u16, @intCast(stage2.items.len), endian); | 134 | try writer.interface.writeInt(u16, @intCast(stage2.items.len), endian); |
| 132 | try writer.writeAll(stage2.items); | 135 | try writer.interface.writeAll(stage2.items); |
| 133 | 136 | ||
| 134 | try out_comp.flush(); | 137 | try writer.interface.flush(); |
| 135 | } | 138 | } |
diff --git a/codegen/props.zig b/codegen/props.zig index 24b22e0..6ff0a33 100644 --- a/codegen/props.zig +++ b/codegen/props.zig | |||
| @@ -22,7 +22,7 @@ const BlockMap = std.HashMap( | |||
| 22 | std.hash_map.default_max_load_percentage, | 22 | std.hash_map.default_max_load_percentage, |
| 23 | ); | 23 | ); |
| 24 | 24 | ||
| 25 | pub fn main() !void { | 25 | pub fn main() anyerror!void { |
| 26 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); | 26 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| 27 | defer arena.deinit(); | 27 | defer arena.deinit(); |
| 28 | const allocator = arena.allocator(); | 28 | const allocator = arena.allocator(); |
| @@ -35,10 +35,9 @@ pub fn main() !void { | |||
| 35 | // Process PropList.txt | 35 | // Process PropList.txt |
| 36 | var in_file = try std.fs.cwd().openFile("data/unicode/PropList.txt", .{}); | 36 | var in_file = try std.fs.cwd().openFile("data/unicode/PropList.txt", .{}); |
| 37 | defer in_file.close(); | 37 | defer in_file.close(); |
| 38 | var in_buf = std.io.bufferedReader(in_file.reader()); | 38 | var in_reader = in_file.reader(&line_buf); |
| 39 | const in_reader = in_buf.reader(); | ||
| 40 | 39 | ||
| 41 | while (try in_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 40 | while (in_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 42 | if (line.len == 0 or line[0] == '#') continue; | 41 | if (line.len == 0 or line[0] == '#') continue; |
| 43 | const no_comment = if (mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; | 42 | const no_comment = if (mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; |
| 44 | 43 | ||
| @@ -79,15 +78,20 @@ pub fn main() !void { | |||
| 79 | else => {}, | 78 | else => {}, |
| 80 | } | 79 | } |
| 81 | } | 80 | } |
| 81 | } else |err| switch (err) { | ||
| 82 | error.EndOfStream => {}, | ||
| 83 | else => { | ||
| 84 | return err; | ||
| 85 | }, | ||
| 82 | } | 86 | } |
| 83 | 87 | ||
| 84 | var blocks_map = BlockMap.init(allocator); | 88 | var blocks_map = BlockMap.init(allocator); |
| 85 | defer blocks_map.deinit(); | 89 | defer blocks_map.deinit(); |
| 86 | 90 | ||
| 87 | var stage1 = std.ArrayList(u16).init(allocator); | 91 | var stage1 = std.array_list.Managed(u16).init(allocator); |
| 88 | defer stage1.deinit(); | 92 | defer stage1.deinit(); |
| 89 | 93 | ||
| 90 | var stage2 = std.ArrayList(u8).init(allocator); | 94 | var stage2 = std.array_list.Managed(u8).init(allocator); |
| 91 | defer stage2.deinit(); | 95 | defer stage2.deinit(); |
| 92 | 96 | ||
| 93 | var block: Block = [_]u8{0} ** block_size; | 97 | var block: Block = [_]u8{0} ** block_size; |
| @@ -118,18 +122,16 @@ pub fn main() !void { | |||
| 118 | _ = args_iter.skip(); | 122 | _ = args_iter.skip(); |
| 119 | const output_path = args_iter.next() orelse @panic("No output file arg!"); | 123 | const output_path = args_iter.next() orelse @panic("No output file arg!"); |
| 120 | 124 | ||
| 121 | const compressor = std.compress.flate.deflate.compressor; | 125 | var write_buf: [4096]u8 = undefined; |
| 122 | var out_file = try std.fs.cwd().createFile(output_path, .{}); | 126 | var out_file = try std.fs.cwd().createFile(output_path, .{}); |
| 123 | defer out_file.close(); | 127 | defer out_file.close(); |
| 124 | var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); | 128 | var writer = out_file.writer(&write_buf); |
| 125 | const writer = out_comp.writer(); | ||
| 126 | 129 | ||
| 127 | const endian = builtin.cpu.arch.endian(); | 130 | const endian = builtin.cpu.arch.endian(); |
| 128 | try writer.writeInt(u16, @intCast(stage1.items.len), endian); | 131 | try writer.interface.writeInt(u16, @intCast(stage1.items.len), endian); |
| 129 | for (stage1.items) |i| try writer.writeInt(u16, i, endian); | 132 | for (stage1.items) |i| try writer.interface.writeInt(u16, i, endian); |
| 130 | 133 | ||
| 131 | try writer.writeInt(u16, @intCast(stage2.items.len), endian); | 134 | try writer.interface.writeInt(u16, @intCast(stage2.items.len), endian); |
| 132 | try writer.writeAll(stage2.items); | 135 | try writer.interface.writeAll(stage2.items); |
| 133 | 136 | try writer.interface.flush(); | |
| 134 | try out_comp.flush(); | ||
| 135 | } | 137 | } |
diff --git a/codegen/scripts.zig b/codegen/scripts.zig index 530205d..bdd3d9d 100644 --- a/codegen/scripts.zig +++ b/codegen/scripts.zig | |||
| @@ -195,7 +195,7 @@ const BlockMap = std.HashMap( | |||
| 195 | std.hash_map.default_max_load_percentage, | 195 | std.hash_map.default_max_load_percentage, |
| 196 | ); | 196 | ); |
| 197 | 197 | ||
| 198 | pub fn main() !void { | 198 | pub fn main() anyerror!void { |
| 199 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); | 199 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| 200 | defer arena.deinit(); | 200 | defer arena.deinit(); |
| 201 | const allocator = arena.allocator(); | 201 | const allocator = arena.allocator(); |
| @@ -208,10 +208,9 @@ pub fn main() !void { | |||
| 208 | // Process DerivedGeneralCategory.txt | 208 | // Process DerivedGeneralCategory.txt |
| 209 | var in_file = try std.fs.cwd().openFile("data/unicode/Scripts.txt", .{}); | 209 | var in_file = try std.fs.cwd().openFile("data/unicode/Scripts.txt", .{}); |
| 210 | defer in_file.close(); | 210 | defer in_file.close(); |
| 211 | var in_buf = std.io.bufferedReader(in_file.reader()); | 211 | var in_reader = in_file.reader(&line_buf); |
| 212 | const in_reader = in_buf.reader(); | ||
| 213 | 212 | ||
| 214 | while (try in_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 213 | while (in_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 215 | if (line.len == 0 or line[0] == '#') continue; | 214 | if (line.len == 0 or line[0] == '#') continue; |
| 216 | 215 | ||
| 217 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; | 216 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; |
| @@ -245,18 +244,22 @@ pub fn main() !void { | |||
| 245 | else => {}, | 244 | else => {}, |
| 246 | } | 245 | } |
| 247 | } | 246 | } |
| 247 | } else |err| switch (err) { | ||
| 248 | error.EndOfStream => {}, | ||
| 249 | else => { | ||
| 250 | return err; | ||
| 251 | }, | ||
| 248 | } | 252 | } |
| 249 | |||
| 250 | var blocks_map = BlockMap.init(allocator); | 253 | var blocks_map = BlockMap.init(allocator); |
| 251 | defer blocks_map.deinit(); | 254 | defer blocks_map.deinit(); |
| 252 | 255 | ||
| 253 | var stage1 = std.ArrayList(u16).init(allocator); | 256 | var stage1 = std.array_list.Managed(u16).init(allocator); |
| 254 | defer stage1.deinit(); | 257 | defer stage1.deinit(); |
| 255 | 258 | ||
| 256 | var stage2 = std.ArrayList(u8).init(allocator); | 259 | var stage2 = std.array_list.Managed(u8).init(allocator); |
| 257 | defer stage2.deinit(); | 260 | defer stage2.deinit(); |
| 258 | 261 | ||
| 259 | var stage3 = std.ArrayList(u8).init(allocator); | 262 | var stage3 = std.array_list.Managed(u8).init(allocator); |
| 260 | defer stage3.deinit(); | 263 | defer stage3.deinit(); |
| 261 | 264 | ||
| 262 | var block: Block = [_]u8{0} ** block_size; | 265 | var block: Block = [_]u8{0} ** block_size; |
| @@ -295,21 +298,20 @@ pub fn main() !void { | |||
| 295 | _ = args_iter.skip(); | 298 | _ = args_iter.skip(); |
| 296 | const output_path = args_iter.next() orelse @panic("No output file arg!"); | 299 | const output_path = args_iter.next() orelse @panic("No output file arg!"); |
| 297 | 300 | ||
| 298 | const compressor = std.compress.flate.deflate.compressor; | 301 | var write_buf: [4096]u8 = undefined; |
| 299 | var out_file = try std.fs.cwd().createFile(output_path, .{}); | 302 | var out_file = try std.fs.cwd().createFile(output_path, .{}); |
| 300 | defer out_file.close(); | 303 | defer out_file.close(); |
| 301 | var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); | 304 | var writer = out_file.writer(&write_buf); |
| 302 | const writer = out_comp.writer(); | ||
| 303 | 305 | ||
| 304 | const endian = builtin.cpu.arch.endian(); | 306 | const endian = builtin.cpu.arch.endian(); |
| 305 | try writer.writeInt(u16, @intCast(stage1.items.len), endian); | 307 | try writer.interface.writeInt(u16, @intCast(stage1.items.len), endian); |
| 306 | for (stage1.items) |i| try writer.writeInt(u16, i, endian); | 308 | for (stage1.items) |i| try writer.interface.writeInt(u16, i, endian); |
| 307 | 309 | ||
| 308 | try writer.writeInt(u16, @intCast(stage2.items.len), endian); | 310 | try writer.interface.writeInt(u16, @intCast(stage2.items.len), endian); |
| 309 | for (stage2.items) |i| try writer.writeInt(u8, i, endian); | 311 | for (stage2.items) |i| try writer.interface.writeInt(u8, i, endian); |
| 310 | 312 | ||
| 311 | try writer.writeInt(u8, @intCast(stage3.items.len), endian); | 313 | try writer.interface.writeInt(u8, @intCast(stage3.items.len), endian); |
| 312 | for (stage3.items) |i| try writer.writeInt(u8, i, endian); | 314 | for (stage3.items) |i| try writer.interface.writeInt(u8, i, endian); |
| 313 | 315 | ||
| 314 | try out_comp.flush(); | 316 | try writer.interface.flush(); |
| 315 | } | 317 | } |
diff --git a/codegen/upper.zig b/codegen/upper.zig index 5848911..7d96a0e 100644 --- a/codegen/upper.zig +++ b/codegen/upper.zig | |||
| @@ -1,32 +1,29 @@ | |||
| 1 | const std = @import("std"); | 1 | const std = @import("std"); |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | 3 | ||
| 4 | pub fn main() !void { | 4 | pub fn main() anyerror!void { |
| 5 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); | 5 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| 6 | defer arena.deinit(); | 6 | defer arena.deinit(); |
| 7 | const allocator = arena.allocator(); | 7 | const allocator = arena.allocator(); |
| 8 | 8 | ||
| 9 | var line_buf: [4096]u8 = undefined; | ||
| 10 | var write_buf: [4096]u8 = undefined; | ||
| 9 | // Process UnicodeData.txt | 11 | // Process UnicodeData.txt |
| 10 | var in_file = try std.fs.cwd().openFile("data/unicode/UnicodeData.txt", .{}); | 12 | var in_file = try std.fs.cwd().openFile("data/unicode/UnicodeData.txt", .{}); |
| 11 | defer in_file.close(); | 13 | defer in_file.close(); |
| 12 | var in_buf = std.io.bufferedReader(in_file.reader()); | 14 | var in_reader = in_file.reader(&line_buf); |
| 13 | const in_reader = in_buf.reader(); | ||
| 14 | 15 | ||
| 15 | var args_iter = try std.process.argsWithAllocator(allocator); | 16 | var args_iter = try std.process.argsWithAllocator(allocator); |
| 16 | defer args_iter.deinit(); | 17 | defer args_iter.deinit(); |
| 17 | _ = args_iter.skip(); | 18 | _ = args_iter.skip(); |
| 18 | const output_path = args_iter.next() orelse @panic("No output file arg!"); | 19 | const output_path = args_iter.next() orelse @panic("No output file arg!"); |
| 19 | 20 | ||
| 20 | const compressor = std.compress.flate.deflate.compressor; | ||
| 21 | var out_file = try std.fs.cwd().createFile(output_path, .{}); | 21 | var out_file = try std.fs.cwd().createFile(output_path, .{}); |
| 22 | defer out_file.close(); | 22 | defer out_file.close(); |
| 23 | var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); | 23 | var file_writer = out_file.writer(&write_buf); |
| 24 | const writer = out_comp.writer(); | ||
| 25 | |||
| 26 | const endian = builtin.cpu.arch.endian(); | 24 | const endian = builtin.cpu.arch.endian(); |
| 27 | var line_buf: [4096]u8 = undefined; | ||
| 28 | 25 | ||
| 29 | lines: while (try in_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 26 | lines: while (in_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 30 | if (line.len == 0) continue; | 27 | if (line.len == 0) continue; |
| 31 | 28 | ||
| 32 | var field_iter = std.mem.splitScalar(u8, line, ';'); | 29 | var field_iter = std.mem.splitScalar(u8, line, ';'); |
| @@ -42,16 +39,24 @@ pub fn main() !void { | |||
| 42 | 12 => { | 39 | 12 => { |
| 43 | // Simple uppercase mapping | 40 | // Simple uppercase mapping |
| 44 | if (field.len == 0) continue :lines; | 41 | if (field.len == 0) continue :lines; |
| 45 | try writer.writeInt(i24, cp, endian); | 42 | try file_writer.interface.writeInt(i24, cp, endian); |
| 46 | const mapping = try std.fmt.parseInt(i24, field, 16); | 43 | const mapping = try std.fmt.parseInt(i24, field, 16); |
| 47 | try writer.writeInt(i24, mapping - cp, endian); | 44 | try file_writer.interface.writeInt(i24, mapping - cp, endian); |
| 48 | }, | 45 | }, |
| 49 | 46 | ||
| 50 | else => {}, | 47 | else => {}, |
| 51 | } | 48 | } |
| 52 | } | 49 | } |
| 50 | } else |err| switch (err) { | ||
| 51 | error.ReadFailed => { | ||
| 52 | return in_reader.err orelse err; | ||
| 53 | }, | ||
| 54 | error.EndOfStream => {}, | ||
| 55 | else => { | ||
| 56 | return err; | ||
| 57 | }, | ||
| 53 | } | 58 | } |
| 54 | 59 | ||
| 55 | try writer.writeInt(u24, 0, endian); | 60 | try file_writer.interface.writeInt(u24, 0, endian); |
| 56 | try out_comp.flush(); | 61 | try file_writer.interface.flush(); |
| 57 | } | 62 | } |
diff --git a/codegen/wbp.zig b/codegen/wbp.zig index 741103e..b1ed56a 100644 --- a/codegen/wbp.zig +++ b/codegen/wbp.zig | |||
| @@ -43,7 +43,7 @@ const BlockMap = std.HashMap( | |||
| 43 | std.hash_map.default_max_load_percentage, | 43 | std.hash_map.default_max_load_percentage, |
| 44 | ); | 44 | ); |
| 45 | 45 | ||
| 46 | pub fn main() !void { | 46 | pub fn main() anyerror!void { |
| 47 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); | 47 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| 48 | defer arena.deinit(); | 48 | defer arena.deinit(); |
| 49 | const allocator = arena.allocator(); | 49 | const allocator = arena.allocator(); |
| @@ -56,10 +56,9 @@ pub fn main() !void { | |||
| 56 | // Process HangulSyllableType.txt | 56 | // Process HangulSyllableType.txt |
| 57 | var in_file = try std.fs.cwd().openFile("data/unicode/auxiliary/WordBreakProperty.txt", .{}); | 57 | var in_file = try std.fs.cwd().openFile("data/unicode/auxiliary/WordBreakProperty.txt", .{}); |
| 58 | defer in_file.close(); | 58 | defer in_file.close(); |
| 59 | var in_buf = std.io.bufferedReader(in_file.reader()); | 59 | var in_reader = in_file.reader(&line_buf); |
| 60 | const in_reader = in_buf.reader(); | ||
| 61 | 60 | ||
| 62 | while (try in_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { | 61 | while (in_reader.interface.takeDelimiterExclusive('\n')) |line| { |
| 63 | if (line.len == 0 or line[0] == '#') continue; | 62 | if (line.len == 0 or line[0] == '#') continue; |
| 64 | 63 | ||
| 65 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; | 64 | const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; |
| @@ -90,15 +89,19 @@ pub fn main() !void { | |||
| 90 | else => {}, | 89 | else => {}, |
| 91 | } | 90 | } |
| 92 | } | 91 | } |
| 92 | } else |err| switch (err) { | ||
| 93 | error.EndOfStream => {}, | ||
| 94 | else => { | ||
| 95 | return err; | ||
| 96 | }, | ||
| 93 | } | 97 | } |
| 94 | |||
| 95 | var blocks_map = BlockMap.init(allocator); | 98 | var blocks_map = BlockMap.init(allocator); |
| 96 | defer blocks_map.deinit(); | 99 | defer blocks_map.deinit(); |
| 97 | 100 | ||
| 98 | var stage1 = std.ArrayList(u16).init(allocator); | 101 | var stage1 = std.array_list.Managed(u16).init(allocator); |
| 99 | defer stage1.deinit(); | 102 | defer stage1.deinit(); |
| 100 | 103 | ||
| 101 | var stage2 = std.ArrayList(u5).init(allocator); | 104 | var stage2 = std.array_list.Managed(u5).init(allocator); |
| 102 | defer stage2.deinit(); | 105 | defer stage2.deinit(); |
| 103 | 106 | ||
| 104 | var block: Block = [_]u5{0} ** block_size; | 107 | var block: Block = [_]u5{0} ** block_size; |
| @@ -129,18 +132,17 @@ pub fn main() !void { | |||
| 129 | _ = args_iter.skip(); | 132 | _ = args_iter.skip(); |
| 130 | const output_path = args_iter.next() orelse @panic("No output file arg!"); | 133 | const output_path = args_iter.next() orelse @panic("No output file arg!"); |
| 131 | 134 | ||
| 132 | const compressor = std.compress.flate.deflate.compressor; | 135 | var write_buf: [4096]u8 = undefined; |
| 133 | var out_file = try std.fs.cwd().createFile(output_path, .{}); | 136 | var out_file = try std.fs.cwd().createFile(output_path, .{}); |
| 134 | defer out_file.close(); | 137 | defer out_file.close(); |
| 135 | var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); | 138 | var writer = out_file.writer(&write_buf); |
| 136 | const writer = out_comp.writer(); | ||
| 137 | 139 | ||
| 138 | const endian = builtin.cpu.arch.endian(); | 140 | const endian = builtin.cpu.arch.endian(); |
| 139 | try writer.writeInt(u16, @intCast(stage1.items.len), endian); | 141 | try writer.interface.writeInt(u16, @intCast(stage1.items.len), endian); |
| 140 | for (stage1.items) |i| try writer.writeInt(u16, i, endian); | 142 | for (stage1.items) |i| try writer.interface.writeInt(u16, i, endian); |
| 141 | 143 | ||
| 142 | try writer.writeInt(u16, @intCast(stage2.items.len), endian); | 144 | try writer.interface.writeInt(u16, @intCast(stage2.items.len), endian); |
| 143 | for (stage2.items) |i| try writer.writeInt(u8, i, endian); | 145 | for (stage2.items) |i| try writer.interface.writeInt(u8, i, endian); |
| 144 | 146 | ||
| 145 | try out_comp.flush(); | 147 | try writer.interface.flush(); |
| 146 | } | 148 | } |