about summary refs log tree commit diff
path: root/src/main.zig
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2025-02-19 01:33:07 +0100
committerRobert Günzler <r@gnzler.io>2025-02-19 01:33:07 +0100
commitdeef3b3544774a2af6698aa38c39ba2a1ed4cef1 (patch)
tree7426191a49bf0552ffc22892733063fc051a3e01 /src/main.zig
parent06626590a77dde77c0844a24772397e697421040 (diff)
downloadsite-deef3b3544774a2af6698aa38c39ba2a1ed4cef1.tar.gz
support templating only ref link/name
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig17
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);
     }