diff options
author | kdx <kikoodx@paranoici.org> | 2024-03-08 10:47:15 +0100 |
---|---|---|
committer | kdx <kikoodx@paranoici.org> | 2024-03-08 10:47:15 +0100 |
commit | 65c6a3a1e827ea1d1795cec55e214d311665d882 (patch) | |
tree | 053fcc859e288ddb42b1e2cbf185542a34cbe894 | |
parent | 666604670ef4cf6eb0d0f54956d32d08c61e80af (diff) | |
download | gallery-gen-65c6a3a1e827ea1d1795cec55e214d311665d882.tar.gz |
let me cook
-rwxr-xr-x | run.sh | 8 | ||||
-rw-r--r-- | src/main.zig | 12 | ||||
-rw-r--r-- | src/template.zig | 60 |
3 files changed, 71 insertions, 9 deletions
@@ -1,7 +1,7 @@ #!/bin/sh -zig build +zig build || exit 1 CWD="$(pwd)" -cd ~/projects/kdx.re/gallery -"$CWD"/zig-out/bin/gallery-gen -cd .. +cd ~/projects/kdx.re/gallery || exit 1 +"$CWD"/zig-out/bin/gallery-gen || exit 1 +cd .. || exit 1 make diff --git a/src/main.zig b/src/main.zig index 26344f1..4803f7e 100644 --- a/src/main.zig +++ b/src/main.zig @@ -46,13 +46,17 @@ pub fn main() !void { } for (images, 0..) |img, i| { - var file = try std.fs.cwd().createFile(img.path(.html), .{}); - defer file.close(); - try template.write( - file.writer().any(), + try template.writeToFile( img, if (i == images.len - 1) null else images[i + 1], if (i == 0) null else images[i - 1], + .regular, + ); + try template.writeToFile( + img, + if (i == images.len - 1) null else images[i + 1], + if (i == 0) null else images[i - 1], + .large, ); } } diff --git a/src/template.zig b/src/template.zig index 38dd9fb..d6a80e5 100644 --- a/src/template.zig +++ b/src/template.zig @@ -27,16 +27,52 @@ const template2 = \\</html> ; +const Size = enum { + regular, + large, + + fn prefix(self: Size) []const u8 { + return switch (self) { + .regular => "", + .large => "large.", + }; + } +}; + +pub fn writeToFile( + image: Image, + previous: ?Image, + next: ?Image, + size: Size, +) !void { + var buf: [1024]u8 = undefined; + const prefix = size.prefix(); + const html_path = image.path(.html); + const path = buf[0 .. prefix.len + html_path.len]; + @memcpy(path[0..prefix.len], prefix); + @memcpy(path[prefix.len..path.len], html_path); + var file = try std.fs.cwd().createFile(path, .{}); + defer file.close(); + try write( + file.writer().any(), + image, + previous, + next, + size, + ); +} + pub fn write( writer: std.io.AnyWriter, image: Image, previous: ?Image, next: ?Image, + size: Size, ) !void { try writer.print(template0, .{ image.name(), image.name() }); try prevnext(writer, previous, next); try writer.print(template1, .{image.path(null)}); - try prevnext(writer, previous, next); + try sizeselect(writer, image, size); _ = try writer.write(template2); } @@ -56,3 +92,25 @@ fn prevnext(writer: std.io.AnyWriter, previous: ?Image, next: ?Image) !void { else _ = try writer.write(" </p>"); } + +fn sizelink(writer: std.io.AnyWriter, image: Image, size: Size) !void { + try writer.print("<a href=\"/gallery/{s}{s}\">", .{ + size.prefix(), + image.name(), + }); +} + +fn sizeselect(writer: std.io.AnyWriter, image: Image, size: Size) !void { + switch (size) { + .large => { + _ = try writer.write(" <p>"); + try sizelink(writer, image, .regular); + _ = try writer.write("small</a> | large</p>"); + }, + .regular => { + _ = try writer.write(" <p>small | "); + try sizelink(writer, image, .large); + _ = try writer.write("large</a></p>"); + }, + } +} |