diff options
| author | Robert Günzler <r@gnzler.io> | 2025-02-19 01:33:07 +0100 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2025-02-19 01:33:07 +0100 |
| commit | deef3b3544774a2af6698aa38c39ba2a1ed4cef1 (patch) | |
| tree | 7426191a49bf0552ffc22892733063fc051a3e01 | |
| parent | 06626590a77dde77c0844a24772397e697421040 (diff) | |
| download | site-deef3b3544774a2af6698aa38c39ba2a1ed4cef1.tar.gz | |
support templating only ref link/name
Signed-off-by: Robert Günzler <r@gnzler.io>
| -rw-r--r-- | src/main.zig | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/main.zig b/src/main.zig index 346dd02..785a182 100644 --- a/src/main.zig +++ b/src/main.zig @@ -98,9 +98,26 @@ fn ref(allocator: std.mem.Allocator, w: std.io.AnyWriter, refname: []const u8) a // XXX: track ref count? } +fn ref_link(allocator: std.mem.Allocator, w: std.io.AnyWriter, refname: []const u8) anyerror!void { + const basename = try std.mem.replaceOwned(u8, allocator, refname, " ", "_"); + defer allocator.free(basename); + const refpathSite = try joinIn(allocator, &.{SITE_PATH}, &.{ basename, ".html" }); + defer allocator.free(refpathSite); + + try w.print("/{s}", .{refpathSite}); +} + +fn ref_name(_: std.mem.Allocator, w: std.io.AnyWriter, refname: []const u8) anyerror!void { + try w.print("{s}", .{refname}); +} + fn template(allocator: std.mem.Allocator, w: std.io.AnyWriter, refname: []const u8) anyerror!void { if (std.mem.startsWith(u8, refname, "/")) { return try portal(allocator, w, refname[1..], false); + } else if (std.mem.startsWith(u8, refname, "@")) { + return try ref_link(allocator, w, refname[1..]); + } else if (std.mem.startsWith(u8, refname, "+")) { + return try ref_name(allocator, w, refname[1..]); } else { return try ref(allocator, w, refname); } |