about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--site/feed.txt3
-rw-r--r--src/inc/meta.feed.txt2
-rw-r--r--src/main.zig20
3 files changed, 25 insertions, 0 deletions
diff --git a/site/feed.txt b/site/feed.txt
new file mode 100644
index 0000000..2c16196
--- /dev/null
+++ b/site/feed.txt
@@ -0,0 +1,3 @@
+2025-05-14 | a post about porta | /site/porta.html
+2024-01-01 | about me           | /site/about.html
+
diff --git a/src/inc/meta.feed.txt b/src/inc/meta.feed.txt
new file mode 100644
index 0000000..0cf2019
--- /dev/null
+++ b/src/inc/meta.feed.txt
@@ -0,0 +1,2 @@
+2025-05-14 | a post about porta | {[$porta]}
+2024-01-01 | about me           | {[$about]}
diff --git a/src/main.zig b/src/main.zig
index 1c62501..219bf1d 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -167,6 +167,9 @@ const Builder = struct {
         if (std.mem.startsWith(u8, source_stem, "meta.tilde")) {
             return try self.metaTilde(io, gpa);
         }
+        if (std.mem.startsWith(u8, source_stem, "meta.feed")) {
+            return try self.metaFeed(io, gpa);
+        }
 
         // target file
         const target_path = try std.fmt.allocPrint(gpa, "{s}.html", .{source_stem});
@@ -387,6 +390,23 @@ const Builder = struct {
         try self.finalize(gpa, target_fd);
         log.debug("{s}: done", .{self.source.path});
     }
+
+    // TODO: could also be a generic way to allow arbitrary templated files
+    fn metaFeed(self: *Builder, io: Io, gpa: Allocator) !void {
+        const source_stem = std.fs.path.basename(self.source.path)[5..]; // trim "meta."
+        log.debug("meta.feed : {s}", .{source_stem});
+
+        const target_fd = try self.target_dir.createFile(io, source_stem, .{ .lock = .exclusive });
+        defer target_fd.close(io);
+        if (try targetExists(io, gpa, target_fd, self.root_dir)) return;
+
+        var buffer: [BUFFER_SIZE]u8 = undefined;
+        var writer = target_fd.writer(io, &buffer);
+
+        try self.inject(io, gpa, self.source, &writer.interface);
+        try self.finalize(gpa, target_fd);
+        log.debug("{s}: done", .{self.source.path});
+    }
 };
 
 // helpers