build: generate nerd font attributes during the build

Rather than committing a generated Zig file, build it on
the fly during the build.
This commit is contained in:
Jeffrey C. Ollie
2025-07-06 02:03:34 -05:00
parent dc18f1a2b9
commit db77167fdd
5 changed files with 20 additions and 354 deletions

View File

@ -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

View File

@ -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(

View File

@ -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,
};
}

View File

@ -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}")

View File

@ -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),
},
);