From: Alexander Goussas Date: Sat, 11 Apr 2026 03:00:32 +0000 (-0500) Subject: start adding markdown parser X-Git-Tag: v0.0.1~15 X-Git-Url: http://git.frustrated-labs.net/?a=commitdiff_plain;h=ac8441e7603ed011e2ecdd61535fffef50f3e412;p=frustrated-functor.dev.git start adding markdown parser --- diff --git a/bin/blog-processor/src/main.zig b/bin/blog-processor/src/main.zig index d373604..2204cd5 100644 --- a/bin/blog-processor/src/main.zig +++ b/bin/blog-processor/src/main.zig @@ -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 index 0000000..42dfaa5 --- /dev/null +++ b/bin/blog-processor/src/markdown_parser.zig @@ -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, ¤t), + _ => current += 1, + } + } + + return MarkdownDoc{}; + } + + fn parse_frontmatter( + start: *u32, + current: *u32 + ) void { + } +}; diff --git a/bin/blog-processor/src/root.zig b/bin/blog-processor/src/root.zig index 94c7cd0..7d34b61 100644 --- a/bin/blog-processor/src/root.zig +++ b/bin/blog-processor/src/root.zig @@ -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; }