From e485c04ff794a30d21c4a77cccda52b581e95881 Mon Sep 17 00:00:00 2001 From: Sam Atman Date: Thu, 5 Feb 2026 08:01:48 -0500 Subject: De-allocate Emoji module --- codegen/emoji.zig | 56 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 21 deletions(-) (limited to 'codegen/emoji.zig') diff --git a/codegen/emoji.zig b/codegen/emoji.zig index 0a4dbe6..c44c483 100644 --- a/codegen/emoji.zig +++ b/codegen/emoji.zig @@ -44,21 +44,17 @@ pub fn main() !void { var emoji_map = std.AutoHashMap(u21, Emoji).init(allocator); defer emoji_map.deinit(); - var line_buf: [4096]u8 = undefined; - // Process Emoji - var in_file = try std.fs.cwd().openFile("data/unicode/emoji/emoji-data.txt", .{}); - defer in_file.close(); - var in_buf = std.io.bufferedReader(in_file.reader()); - const in_reader = in_buf.reader(); - while (try in_reader.readUntilDelimiterOrEof(&line_buf, '\n')) |line| { - if (line.len == 0 or line[0] == '#') continue; + var @"emo-reader" = std.io.Reader.fixed(@embedFile("emoji-data.txt")); + var count: usize = 0; // XXX: remove + while (@"emo-reader".takeDelimiterInclusive('\n')) |line| { + count += 1; + if (line.len <= 1 or line[0] == '#') continue; const no_comment = if (std.mem.indexOfScalar(u8, line, '#')) |octo| line[0..octo] else line; var field_iter = std.mem.tokenizeAny(u8, no_comment, "; "); var current_code: [2]u21 = undefined; - var i: usize = 0; while (field_iter.next()) |field| : (i += 1) { switch (i) { @@ -91,15 +87,20 @@ pub fn main() !void { else => {}, } } + } else |err| switch (err) { + error.EndOfStream => {}, + else => { + return err; + }, } var blocks_map = BlockMap.init(allocator); defer blocks_map.deinit(); - var stage1 = std.ArrayList(u16).init(allocator); + var stage1 = std.array_list.Managed(u16).init(allocator); defer stage1.deinit(); - var stage2 = std.ArrayList(u6).init(allocator); + var stage2 = std.array_list.Managed(u6).init(allocator); defer stage2.deinit(); var block: Block = [_]u6{0} ** block_size; @@ -129,18 +130,31 @@ pub fn main() !void { _ = args_iter.skip(); const output_path = args_iter.next() orelse @panic("No output file arg!"); - const compressor = std.compress.flate.deflate.compressor; + var write_buf: [4096]u8 = undefined; var out_file = try std.fs.cwd().createFile(output_path, .{}); defer out_file.close(); - var out_comp = try compressor(.raw, out_file.writer(), .{ .level = .best }); - const writer = out_comp.writer(); - - const endian = builtin.cpu.arch.endian(); - try writer.writeInt(u16, @intCast(stage1.items.len), endian); - for (stage1.items) |i| try writer.writeInt(u16, i, endian); + var writer = out_file.writer(&write_buf); + + try writer.interface.print( + \\//! This file is auto-generated. Do not edit. + \\ + \\pub const s1: [{}]u16 = .{{ + , .{stage1.items.len}); + for (stage1.items) |entry| try writer.interface.print("{}, ", .{entry}); + + try writer.interface.print( + \\ + \\}}; + \\ + \\pub const s2: [{}]u6 = .{{ + , .{stage2.items.len}); + for (stage2.items) |entry| { + try writer.interface.print("{}, ", .{entry}); + } - try writer.writeInt(u16, @intCast(stage2.items.len), endian); - for (stage2.items) |i| try writer.writeInt(u8, i, endian); + try writer.interface.writeAll( + \\}; + ); - try out_comp.flush(); + try writer.interface.flush(); } -- cgit v1.2.3