diff options
Diffstat (limited to '')
| -rw-r--r-- | src/inc/meta.feed.txt | 2 | ||||
| -rw-r--r-- | src/main.zig | 20 |
2 files changed, 22 insertions, 0 deletions
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 |