]> git.frustrated-labs.net Git - frustrated-functor.dev.git/commitdiff
start adding markdown parser
authorAlexander Goussas <[email protected]>
Sat, 11 Apr 2026 03:00:32 +0000 (22:00 -0500)
committerAlexander Goussas <[email protected]>
Sat, 11 Apr 2026 03:00:32 +0000 (22:00 -0500)
bin/blog-processor/src/main.zig
bin/blog-processor/src/markdown_parser.zig [new file with mode: 0644]
bin/blog-processor/src/root.zig

index d373604bb8e284304f972bab2fb78b832247efb7..2204cd57e74534cea6e94f136f289b3c816959a7 100644 (file)
@@ -2,26 +2,8 @@ const std = @import("std");
 const blog_processor = @import("blog_processor");
 
 pub fn main() !void {
-    // Prints to stderr, ignoring potential errors.
-    std.debug.print("All your {s} are belong to us.\n", .{"codebase"});
-    try blog_processor.bufferedPrint();
-}
-
-test "simple test" {
-    const gpa = std.testing.allocator;
-    var list: std.ArrayList(i32) = .empty;
-    defer list.deinit(gpa); // Try commenting this out and see if zig detects the memory leak!
-    try list.append(gpa, 42);
-    try std.testing.expectEqual(@as(i32, 42), list.pop());
-}
-
-test "fuzz example" {
-    const Context = struct {
-        fn testOne(context: @This(), input: []const u8) anyerror!void {
-            _ = context;
-            // Try passing `--fuzz` to `zig build test` and see if it manages to fail this test case!
-            try std.testing.expect(!std.mem.eql(u8, "canyoufindme", input));
-        }
-    };
-    try std.testing.fuzz(Context{}, Context.testOne, .{});
+    const alloc = std.heap.page_allocator;
+    var arena = std.heap.ArenaAllocator.init(alloc);
+    const document = "";
+    _ = blog_processor.parse_markdown(document, arena.allocator());
 }
diff --git a/bin/blog-processor/src/markdown_parser.zig b/bin/blog-processor/src/markdown_parser.zig
new file mode 100644 (file)
index 0000000..42dfaa5
--- /dev/null
@@ -0,0 +1,31 @@
+const std = @import("std");
+
+pub const MarkdownDoc = struct {
+    date: []const u8,
+    summary: []const u8,
+    content: []const u8,
+
+    pub fn parse(doc: []const u8, alloc: std.mem.Allocator) @This() {
+        _ = alloc;
+
+        var start = 0;
+        var current = 0;
+
+        while (current < doc.len) {
+            start = current;
+            const c = doc[current];
+            switch (c) {
+                '-' => parse_frontmatter(&start, &current),
+                _ => current += 1,
+            }
+        }
+
+        return MarkdownDoc{};
+    }
+
+    fn parse_frontmatter(
+        start: *u32,
+        current: *u32
+    ) void {
+    }
+};
index 94c7cd01194b2195b8f5c866fa640fc90a07bb76..7d34b613de40b558e3796c334267dddba2072837 100644 (file)
@@ -1,23 +1,11 @@
-//! By convention, root.zig is the root source file when making a library.
 const std = @import("std");
+const md_parser = @import("./markdown_parser.zig");
 
-pub fn bufferedPrint() !void {
-    // Stdout is for the actual output of your application, for example if you
-    // are implementing gzip, then only the compressed bytes should be sent to
-    // stdout, not any debugging messages.
-    var stdout_buffer: [1024]u8 = undefined;
-    var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
-    const stdout = &stdout_writer.interface;
+pub const Entry = struct {
+};
 
-    try stdout.print("Run `zig build test` to run the tests.\n", .{});
-
-    try stdout.flush(); // Don't forget to flush!
-}
-
-pub fn add(a: i32, b: i32) i32 {
-    return a + b;
-}
-
-test "basic add functionality" {
-    try std.testing.expect(add(3, 7) == 10);
+pub fn parse_markdown(md: []const u8, alloc: std.mem.Allocator) std.ArrayList(Entry) {
+    _ = alloc;
+    _ = md;
+    _ =  unreachable;
 }