From db77167fddd43a058faf4fe7f2b1476b954a2a67 Mon Sep 17 00:00:00 2001 From: "Jeffrey C. Ollie" Date: Sun, 6 Jul 2025 02:03:34 -0500 Subject: [PATCH] build: generate nerd font attributes during the build Rather than committing a generated Zig file, build it on the fly during the build. --- nix/package.nix | 2 + src/build/SharedDeps.zig | 14 ++ src/font/nerd_font_attributes.zig | 349 ------------------------------ src/font/nerd_font_codegen.py | 4 +- src/renderer/generic.zig | 5 +- 5 files changed, 20 insertions(+), 354 deletions(-) delete mode 100644 src/font/nerd_font_attributes.zig diff --git a/nix/package.nix b/nix/package.nix index 08dfd710b..38a67306d 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -12,6 +12,7 @@ pkg-config, zig_0_14, pandoc, + python3, revision ? "dirty", optimize ? "Debug", enableX11 ? true, @@ -79,6 +80,7 @@ in blueprint-compiler libxml2 # for xmllint gettext + python3 # for generating nerd font attributes ] ++ lib.optionals enableWayland [ wayland-scanner diff --git a/src/build/SharedDeps.zig b/src/build/SharedDeps.zig index 0aab5ecf8..1be592aba 100644 --- a/src/build/SharedDeps.zig +++ b/src/build/SharedDeps.zig @@ -502,6 +502,20 @@ pub fn add( // Fonts { + const generate_nerd_font_attributes = b.addSystemCommand(&.{ + "python", + }); + generate_nerd_font_attributes.addFileArg(b.path("src/font/nerd_font_codegen.py")); + generate_nerd_font_attributes.setStdIn(.{ .lazy_path = b.path("vendor/nerd-fonts/font-patcher.py") }); + const nerd_font_attributes_source = generate_nerd_font_attributes.captureStdOut(); + const nerd_font_attributes_module = b.addModule("nerd-font-attributes", .{ + .root_source_file = nerd_font_attributes_source, + .target = target, + .optimize = optimize, + }); + + step.root_module.addImport("nerd-font-attributes", nerd_font_attributes_module); + // JetBrains Mono const jb_mono = b.dependency("jetbrains_mono", .{}); step.root_module.addAnonymousImport( diff --git a/src/font/nerd_font_attributes.zig b/src/font/nerd_font_attributes.zig deleted file mode 100644 index dfb11c5a5..000000000 --- a/src/font/nerd_font_attributes.zig +++ /dev/null @@ -1,349 +0,0 @@ -//! This is a generated file, produced by nerd_font_codegen.py -//! DO NOT EDIT BY HAND! -//! -//! This file provides info extracted from the nerd fonts patcher script, -//! specifying the scaling/positioning attributes of various glyphs. - -const Constraint = @import("face.zig").RenderOptions.Constraint; - -/// Get the a constraints for the provided codepoint. -pub fn getConstraint(cp: u21) Constraint { - return switch (cp) { - 0x2500...0x259f, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .center, - .align_vertical = .center, - .pad_left = -0.02, - .pad_right = -0.02, - .pad_top = -0.01, - .pad_bottom = -0.01, - }, - 0x2630, - => .{ - .size_horizontal = .cover, - .size_vertical = .fit, - .align_horizontal = .center, - .align_vertical = .center, - .pad_left = 0.1, - .pad_right = 0.1, - .pad_top = 0.01, - .pad_bottom = 0.01, - }, - 0x276c...0x2771, - => .{ - .size_horizontal = .cover, - .size_vertical = .fit, - .align_horizontal = .center, - .align_vertical = .center, - }, - 0xe0b0, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .start, - .align_vertical = .center, - .pad_left = -0.06, - .pad_right = -0.06, - .pad_top = -0.01, - .pad_bottom = -0.01, - .max_xy_ratio = 0.7, - }, - 0xe0b1, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .start, - .align_vertical = .center, - .max_xy_ratio = 0.7, - }, - 0xe0b2, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .end, - .align_vertical = .center, - .pad_left = -0.06, - .pad_right = -0.06, - .pad_top = -0.01, - .pad_bottom = -0.01, - .max_xy_ratio = 0.7, - }, - 0xe0b3, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .end, - .align_vertical = .center, - .max_xy_ratio = 0.7, - }, - 0xe0b4, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .start, - .align_vertical = .center, - .pad_left = -0.06, - .pad_right = -0.06, - .pad_top = -0.01, - .pad_bottom = -0.01, - .max_xy_ratio = 0.59, - }, - 0xe0b5, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .start, - .align_vertical = .center, - .max_xy_ratio = 0.5, - }, - 0xe0b6, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .end, - .align_vertical = .center, - .pad_left = -0.06, - .pad_right = -0.06, - .pad_top = -0.01, - .pad_bottom = -0.01, - .max_xy_ratio = 0.59, - }, - 0xe0b7, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .end, - .align_vertical = .center, - .max_xy_ratio = 0.5, - }, - 0xe0b8, - 0xe0bc, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .start, - .align_vertical = .center, - .pad_left = -0.05, - .pad_right = -0.05, - .pad_top = -0.01, - .pad_bottom = -0.01, - }, - 0xe0b9, - 0xe0bd, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .start, - .align_vertical = .center, - }, - 0xe0ba, - 0xe0be, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .end, - .align_vertical = .center, - .pad_left = -0.05, - .pad_right = -0.05, - .pad_top = -0.01, - .pad_bottom = -0.01, - }, - 0xe0bb, - 0xe0bf, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .end, - .align_vertical = .center, - }, - 0xe0c0, - 0xe0c8, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .start, - .align_vertical = .center, - .pad_left = -0.05, - .pad_right = -0.05, - .pad_top = -0.01, - .pad_bottom = -0.01, - }, - 0xe0c1, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .start, - .align_vertical = .center, - }, - 0xe0c2, - 0xe0ca, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .end, - .align_vertical = .center, - .pad_left = -0.05, - .pad_right = -0.05, - .pad_top = -0.01, - .pad_bottom = -0.01, - }, - 0xe0c3, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .end, - .align_vertical = .center, - }, - 0xe0c4, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .start, - .align_vertical = .center, - .pad_left = 0.03, - .pad_right = 0.03, - .pad_top = 0.01, - .pad_bottom = 0.01, - .max_xy_ratio = 0.86, - }, - 0xe0c5, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .end, - .align_vertical = .center, - .pad_left = 0.03, - .pad_right = 0.03, - .pad_top = 0.01, - .pad_bottom = 0.01, - .max_xy_ratio = 0.86, - }, - 0xe0c6, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .start, - .align_vertical = .center, - .pad_left = 0.03, - .pad_right = 0.03, - .pad_top = 0.01, - .pad_bottom = 0.01, - .max_xy_ratio = 0.78, - }, - 0xe0c7, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .end, - .align_vertical = .center, - .pad_left = 0.03, - .pad_right = 0.03, - .pad_top = 0.01, - .pad_bottom = 0.01, - .max_xy_ratio = 0.78, - }, - 0xe0cc, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .start, - .align_vertical = .center, - .pad_left = -0.02, - .pad_right = -0.02, - .pad_top = -0.01, - .pad_bottom = -0.01, - .max_xy_ratio = 0.85, - }, - 0xe0cd, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .start, - .align_vertical = .center, - .max_xy_ratio = 0.865, - }, - 0xe0ce, - 0xe0d0...0xe0d1, - => .{ - .size_horizontal = .cover, - .size_vertical = .cover, - .align_horizontal = .start, - .align_vertical = .center, - }, - 0xe0cf, - 0xe0d3, - 0xe0d5, - => .{ - .size_horizontal = .cover, - .size_vertical = .cover, - .align_horizontal = .center, - .align_vertical = .center, - }, - 0xe0d2, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .start, - .align_vertical = .center, - .pad_left = -0.02, - .pad_right = -0.02, - .pad_top = -0.01, - .pad_bottom = -0.01, - .max_xy_ratio = 0.7, - }, - 0xe0d4, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .end, - .align_vertical = .center, - .pad_left = -0.02, - .pad_right = -0.02, - .pad_top = -0.01, - .pad_bottom = -0.01, - .max_xy_ratio = 0.7, - }, - 0xe0d6, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .start, - .align_vertical = .center, - .pad_left = -0.05, - .pad_right = -0.05, - .pad_top = -0.01, - .pad_bottom = -0.01, - .max_xy_ratio = 0.7, - }, - 0xe0d7, - => .{ - .size_horizontal = .stretch, - .size_vertical = .stretch, - .align_horizontal = .end, - .align_vertical = .center, - .pad_left = -0.05, - .pad_right = -0.05, - .pad_top = -0.01, - .pad_bottom = -0.01, - .max_xy_ratio = 0.7, - }, - 0x23fb...0x23fe, - 0x2665, - 0x26a1, - 0x2b58, - 0xe000...0xe0a9, - 0xe4fa...0xe7ef, - 0xea60...0xec1e, - 0xed00...0xf847, - 0xf0001...0xf1af0, - => .{ - .size_horizontal = .fit, - .size_vertical = .fit, - .align_horizontal = .center, - .align_vertical = .center, - }, - else => .none, - }; -} diff --git a/src/font/nerd_font_codegen.py b/src/font/nerd_font_codegen.py index 52d70ac01..9d0606de9 100644 --- a/src/font/nerd_font_codegen.py +++ b/src/font/nerd_font_codegen.py @@ -244,10 +244,8 @@ if __name__ == "__main__": //! This file provides info extracted from the nerd fonts patcher script, //! specifying the scaling/positioning attributes of various glyphs. -const Constraint = @import("face.zig").RenderOptions.Constraint; - /// Get the a constraints for the provided codepoint. -pub fn getConstraint(cp: u21) Constraint { +pub fn getConstraint(comptime T: type, cp: u21) T { return switch (cp) {""") print(generate_zig_switch_arms(patch_set)) print(" else => .none,\n };\n}") diff --git a/src/renderer/generic.zig b/src/renderer/generic.zig index 829563075..dea8c145e 100644 --- a/src/renderer/generic.zig +++ b/src/renderer/generic.zig @@ -25,8 +25,9 @@ const Allocator = std.mem.Allocator; const ArenaAllocator = std.heap.ArenaAllocator; const Terminal = terminal.Terminal; const Health = renderer.Health; +const Constraint = @import("../font/face.zig").RenderOptions.Constraint; -const getConstraint = @import("../font/nerd_font_attributes.zig").getConstraint; +const getConstraint = @import("nerd-font-attributes").getConstraint; const FileType = @import("../file_type.zig").FileType; @@ -3027,7 +3028,7 @@ pub fn Renderer(comptime GraphicsAPI: type) type { .thicken = self.config.font_thicken, .thicken_strength = self.config.font_thicken_strength, .cell_width = cell.gridWidth(), - .constraint = getConstraint(cp), + .constraint = getConstraint(Constraint, cp), .constraint_width = constraintWidth(cell_pin), }, );