From 0c393299b0053964ece7e83a40cf18a4c8f4acbf Mon Sep 17 00:00:00 2001 From: Jacob Sandlund Date: Tue, 5 Aug 2025 23:59:30 -0400 Subject: [PATCH] using just `get` --- build.zig.zon | 8 ++++---- src/build/SharedDeps.zig | 20 +++++++++---------- src/build/UnicodeTables.zig | 9 ++++++++- ...ode_build_config.zig => uucode_config.zig} | 4 ++-- src/build/uucode_x.zig | 8 -------- src/font/CodepointResolver.zig | 2 +- src/renderer/cell.zig | 4 ++-- src/unicode/props.zig | 5 +++-- 8 files changed, 29 insertions(+), 31 deletions(-) rename src/build/{uucode_build_config.zig => uucode_config.zig} (78%) delete mode 100644 src/build/uucode_x.zig diff --git a/build.zig.zon b/build.zig.zon index 86ae38786..4027e0252 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -42,12 +42,12 @@ .lazy = true, }, .uucode = .{ - .url = "https://github.com/jacobsandlund/uucode/archive/7d851864a21d1d700d41230762de66f7b7fa5941.tar.gz", - .hash = "uucode-0.0.0-ZZjBPqk4OwDcGSplCRYO-zLKcs3FZ-jQGj9rfSEf6VZr", + .url = "https://github.com/jacobsandlund/uucode/archive/c5300b75cf2a1f11fe00f492875a8db9f8d346f0.tar.gz", + .hash = "uucode-0.0.0-ZZjBPsGrOwBSzsufKmTo-bwSYyjogdt7HW0sBPkE24uc", }, .uucode_x = .{ - .url = "https://github.com/jacobsandlund/uucode.x/archive/779492c4565ed282a7c989ffc7f52cbe060f17a3.tar.gz", - .hash = "uucode_x-0.0.0-5_D0j-gIAAC4SzTTunb6O4sqwj0kojbjV0rm2bj9QgyA", + .url = "https://github.com/jacobsandlund/uucode.x/archive/db7678dd8af009971021f8479fb2ac07db00e698.tar.gz", + .hash = "uucode_x-0.0.0-5_D0jxkhAACi1yTMBn7Rat1telHy82oD65B7ywtj4W4j", }, .zig_wayland = .{ // codeberg ifreund/zig-wayland diff --git a/src/build/SharedDeps.zig b/src/build/SharedDeps.zig index b52482385..c77a8ba0b 100644 --- a/src/build/SharedDeps.zig +++ b/src/build/SharedDeps.zig @@ -21,22 +21,21 @@ uucode_tables_zig: std.Build.LazyPath, pub const LazyPathList = std.ArrayList(std.Build.LazyPath); pub fn init(b: *std.Build, cfg: *const Config) !SharedDeps { - const uucode_x = b.dependency("uucode_x", .{}); - const uucode_x_config = uucode_x.module("uucode.x.config"); + const uucode_tables_zig = blk: { + const uucode = b.dependency("uucode", .{ + .build_config_path = b.path("src/build/uucode_config.zig"), + }); + @import("uucode_x").connectBuild(b.dependency("uucode_x", .{}), uucode); - const uucode = b.dependency("uucode", .{ - .build_config_path = b.path("src/build/uucode_build_config.zig"), - }); - uucode.module("build_config").addImport("uucode.x.config", uucode_x_config); - uucode_x_config.addImport("config.zig", uucode.module("config.zig")); - uucode_x_config.addImport("types.zig", uucode.module("types.zig")); + break :blk uucode.namedLazyPath("tables.zig"); + }; var result: SharedDeps = .{ .config = cfg, .help_strings = try .init(b, cfg), - .unicode_tables = try .init(b), + .unicode_tables = try .init(b, uucode_tables_zig), .framedata = try .init(b), - .uucode_tables_zig = uucode.namedLazyPath("tables.zig"), + .uucode_tables_zig = uucode_tables_zig, // Setup by retarget .options = undefined, @@ -431,7 +430,6 @@ pub fn add( .target = target, .optimize = optimize, .@"tables.zig" = self.uucode_tables_zig, - .x_root_path = b.path("src/build/uucode_x.zig"), })) |dep| { step.root_module.addImport("uucode", dep.module("uucode")); } diff --git a/src/build/UnicodeTables.zig b/src/build/UnicodeTables.zig index 5bba2341b..bb625c3b8 100644 --- a/src/build/UnicodeTables.zig +++ b/src/build/UnicodeTables.zig @@ -9,7 +9,7 @@ exe: *std.Build.Step.Compile, /// The output path for the unicode tables output: std.Build.LazyPath, -pub fn init(b: *std.Build) !UnicodeTables { +pub fn init(b: *std.Build, uucode_tables_zig: std.Build.LazyPath) !UnicodeTables { const exe = b.addExecutable(.{ .name = "unigen", .root_module = b.createModule(.{ @@ -30,6 +30,13 @@ pub fn init(b: *std.Build) !UnicodeTables { ); } + if (b.lazyDependency("uucode", .{ + .target = b.graph.host, + .@"tables.zig" = uucode_tables_zig, + })) |dep| { + exe.root_module.addImport("uucode", dep.module("uucode")); + } + const run = b.addRunArtifact(exe); return .{ .exe = exe, diff --git a/src/build/uucode_build_config.zig b/src/build/uucode_config.zig similarity index 78% rename from src/build/uucode_build_config.zig rename to src/build/uucode_config.zig index 4c87dfdc4..bbc833158 100644 --- a/src/build/uucode_build_config.zig +++ b/src/build/uucode_config.zig @@ -4,9 +4,9 @@ const d = config.default; pub const tables = [_]config.Table{ .{ - .extensions = &.{x.width}, + .extensions = &.{x.wcwidth}, .fields = &.{ - x.width.field("width"), + x.wcwidth.field("wcwidth"), d.field("general_category"), d.field("has_emoji_presentation"), }, diff --git a/src/build/uucode_x.zig b/src/build/uucode_x.zig deleted file mode 100644 index ce305e3cc..000000000 --- a/src/build/uucode_x.zig +++ /dev/null @@ -1,8 +0,0 @@ -const get = @import("get.zig"); -const tableFor = get.tableFor; -const data = get.data; - -pub fn width(cp: u21) u2 { - const table = comptime tableFor("width"); - return data(table, cp).width; -} diff --git a/src/font/CodepointResolver.zig b/src/font/CodepointResolver.zig index ec318abe5..31a688150 100644 --- a/src/font/CodepointResolver.zig +++ b/src/font/CodepointResolver.zig @@ -150,7 +150,7 @@ pub fn getIndex( // we'll do this multiple times if we recurse, but this is a cached function // call higher up (GroupCache) so this should be rare. const p_mode: Collection.PresentationMode = if (p) |v| .{ .explicit = v } else .{ - .default = if (uucode.hasEmojiPresentation(@intCast(cp))) + .default = if (uucode.get("has_emoji_presentation", @intCast(cp))) .emoji else .text, diff --git a/src/renderer/cell.zig b/src/renderer/cell.zig index d72e5965c..708f3b743 100644 --- a/src/renderer/cell.zig +++ b/src/renderer/cell.zig @@ -237,7 +237,7 @@ pub fn constraintWidth(cell_pin: terminal.Pin) u2 { const cp = cell.codepoint(); // If not a Co (Private Use) and not a Dingbats, use grid width. - if (uucode.generalCategory(cp) != .Co and + if (uucode.get("general_category", cp) != .Co and !ziglyph.blocks.isDingbats(cp)) { return cell.gridWidth(); @@ -262,7 +262,7 @@ pub fn constraintWidth(cell_pin: terminal.Pin) u2 { if (isPowerline(prev_cp)) break :prev; // If it's Private Use (Co) use 1 as the width. - if (uucode.generalCategory(prev_cp) == .Co) { + if (uucode.get("general_category", prev_cp) == .Co) { return 1; } } diff --git a/src/unicode/props.zig b/src/unicode/props.zig index 99c57aa0a..f611b9311 100644 --- a/src/unicode/props.zig +++ b/src/unicode/props.zig @@ -2,6 +2,7 @@ const props = @This(); const std = @import("std"); const assert = std.debug.assert; const ziglyph = @import("ziglyph"); +const uucode = @import("uucode"); const lut = @import("lut.zig"); /// The lookup tables for Ghostty. @@ -121,10 +122,10 @@ pub const GraphemeBoundaryClass = enum(u4) { }; pub fn get(cp: u21) Properties { - const zg_width = ziglyph.display_width.codePointWidth(cp, .half); + const wcwidth = if (cp < 0x110000) uucode.get("wcwidth", cp) else 0; return .{ - .width = @intCast(@min(2, @max(0, zg_width))), + .width = @intCast(@min(2, @max(0, wcwidth))), .grapheme_boundary_class = .init(cp), }; }