From eb21de59dbd11e1bc46a552a840b25af582208be Mon Sep 17 00:00:00 2001 From: Robert Günzler Date: Tue, 22 Sep 2026 23:36:51 +0200 Subject: initial feed support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Robert Günzler --- src/main.zig | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/main.zig') 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 -- cgit 1.4.1