From 5ca3ff505a36cd4bc23cd94ff0eef7475ef07d4d Mon Sep 17 00:00:00 2001 From: Robert Günzler Date: Wed, 10 Sep 2025 14:37:49 +0200 Subject: support passing anchors through refs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Robert Günzler --- src/gen.zig | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/gen.zig') diff --git a/src/gen.zig b/src/gen.zig index 3ea0bc2..6c7abcf 100644 --- a/src/gen.zig +++ b/src/gen.zig @@ -305,7 +305,7 @@ fn inject(allocator: std.mem.Allocator, w: std.io.AnyWriter, srcpath: []const u8 fn template(allocator: std.mem.Allocator, w: std.io.AnyWriter, refname: []const u8) anyerror!void { switch (refname[0]) { '/' => return try portal(allocator, w, refname[1..], false), - '@' => return try ref_link(allocator, w, refname[1..]), + '$' => return try ref_link(allocator, w, refname[1..]), '+' => return try ref_name(allocator, w, refname[1..]), else => return try ref(allocator, w, refname), } @@ -335,16 +335,19 @@ fn portal(allocator: std.mem.Allocator, w: std.io.AnyWriter, refname: []const u8 } fn ref(allocator: std.mem.Allocator, w: std.io.AnyWriter, refname: []const u8) anyerror!void { - const basename = try std.mem.replaceOwned(u8, allocator, refname, " ", "_"); + const endofref = std.mem.lastIndexOf(u8, refname, "#") orelse refname.len; + + const basename = try std.mem.replaceOwned(u8, allocator, refname[0..endofref], " ", "_"); defer allocator.free(basename); const refpathSite = try fs.join_path_and_filename(allocator, &.{Context.params.SITE_PATH}, &.{ basename, ".html" }); defer allocator.free(refpathSite); try w.print( - \\{[NAME]s} + \\{[NAME]s} , .{ - .NAME = refname, + .NAME = refname[0..endofref], .PATH = refpathSite, + .anchor = if (endofref < refname.len) refname[endofref..] else "", }); // XXX: track ref count? -- cgit 1.4.1