mymarkdown

My markdown
git clone https://git.grace.moe/mymarkdown
Log | Files | Refs

commit a17a0b6d592da72750dc2a8b4adfd96bb2db32bc
parent 030761391983961fe6f7218a5d7df909a29869fd
Author: gracefu <81774659+gracefuu@users.noreply.github.com>
Date:   Wed, 21 May 2025 02:47:54 +0800

Improve CLI so you can run and print different versions of the parser

Diffstat:
Msrc/IndentationScanner.zig | 1+
Msrc/main.zig | 110+++++++++++++++++++++++++++++++++++++++++++++----------------------------------
2 files changed, 64 insertions(+), 47 deletions(-)

diff --git a/src/IndentationScanner.zig b/src/IndentationScanner.zig @@ -287,6 +287,7 @@ pub fn indent( /// current indentation level is less than expected. pub fn dedent(it: *IndentationScanner) void { assert(it.peek() == null); + assert(it._expected_indents.len > 1); _ = it._expected_indents.pop(); } diff --git a/src/main.zig b/src/main.zig @@ -2,6 +2,7 @@ const std = @import("std"); const tracy = @import("tracy"); const mymarkdown = @import("mymarkdown"); +const Ast = mymarkdown.Ast; const ArenaAllocator = std.heap.ArenaAllocator; @@ -39,25 +40,44 @@ pub fn main() !void { const arena = arena_instance.allocator(); const args = try std.process.argsAlloc(arena); - const run1, const run2, const run3 = blk: { - var run1, var run2, var run3 = .{ false, false, false }; - for (args) |arg| { - if (std.mem.eql(u8, arg, "--run1")) - run1 = true; - if (std.mem.eql(u8, arg, "--run2")) - run2 = true; - if (std.mem.eql(u8, arg, "--run3")) - run3 = true; - } - break :blk .{ run1, run2, run3 }; - }; + const bench1, const bench2, const bench3, // + const run1, const run2, const run3, // + const print1, const print2, const print3 = + blk: { + var bench1, var bench2, var bench3 = .{ false, false, false }; + var run1, var run2, var run3 = .{ false, false, false }; + var print1, var print2, var print3 = .{ false, false, false }; + for (args) |arg| { + if (std.mem.eql(u8, arg, "--bench1")) + bench1 = true; + if (std.mem.eql(u8, arg, "--bench2")) + bench2 = true; + if (std.mem.eql(u8, arg, "--bench3")) + bench3 = true; + if (std.mem.eql(u8, arg, "--run1")) + run1 = true; + if (std.mem.eql(u8, arg, "--run2")) + run2 = true; + if (std.mem.eql(u8, arg, "--run3")) + run3 = true; + if (std.mem.eql(u8, arg, "--print1")) + print1, run1 = .{ true, true }; + if (std.mem.eql(u8, arg, "--print2")) + print2, run2 = .{ true, true }; + if (std.mem.eql(u8, arg, "--print3")) + print3, run3 = .{ true, true }; + if (std.mem.eql(u8, arg, "--wait")) + std.Thread.sleep(2e9); + } + break :blk .{ bench1, bench2, bench3, run1, run2, run3, print1, print2, print3 }; + }; var input_arraylist = try readInput(gpa, arena); defer input_arraylist.deinit(); const input = input_arraylist.items; for (0..10) |_| { - if (run1) + if (bench1) std.mem.doNotOptimizeAway(blk: { const tracy_frame = tracy.namedFrame("parse 1"); defer tracy_frame.end(); @@ -67,7 +87,7 @@ pub fn main() !void { input, ); }); - if (run2) + if (bench2) std.mem.doNotOptimizeAway(blk: { const tracy_frame = tracy.namedFrame("parse 2"); defer tracy_frame.end(); @@ -77,7 +97,7 @@ pub fn main() !void { input, ); }); - if (run3) + if (bench3) std.mem.doNotOptimizeAway(blk: { const tracy_frame = tracy.namedFrame("parse 3"); defer tracy_frame.end(); @@ -89,8 +109,8 @@ pub fn main() !void { }); } - if (!run1 and !run2 and !run3) { - const ast = blk: { + if (!bench1 and !bench2 and !bench3) { + const ast: Ast = if (run1) blk: { const tracy_frame = tracy.namedFrame("parse 1"); defer tracy_frame.end(); break :blk try mymarkdown.parse( @@ -98,8 +118,8 @@ pub fn main() !void { arena, input, ); - }; - const ast2 = blk: { + } else .empty; + const ast2: Ast = if (run2) blk: { const tracy_frame = tracy.namedFrame("parse 2"); defer tracy_frame.end(); break :blk try mymarkdown.parse2( @@ -107,8 +127,8 @@ pub fn main() !void { arena, input, ); - }; - const ast3 = blk: { + } else .empty; + const ast3: Ast = if (run3) blk: { const tracy_frame = tracy.namedFrame("parse 3"); defer tracy_frame.end(); break :blk try mymarkdown.parse3( @@ -116,11 +136,11 @@ pub fn main() !void { arena, input, ); - }; + } else .empty; var render_arraylist1: std.ArrayList(u8) = .init(gpa); defer render_arraylist1.deinit(); - { + if (run1) { std.debug.print("Rendering 1\n", .{}); const tracy_frame = tracy.namedFrame("check render 1"); defer tracy_frame.end(); @@ -128,7 +148,7 @@ pub fn main() !void { } var render_arraylist2: std.ArrayList(u8) = .init(gpa); defer render_arraylist2.deinit(); - { + if (run2) { std.debug.print("Rendering 2\n", .{}); const tracy_frame = tracy.namedFrame("check render 2"); defer tracy_frame.end(); @@ -136,35 +156,31 @@ pub fn main() !void { } var render_arraylist3: std.ArrayList(u8) = .init(gpa); defer render_arraylist3.deinit(); - { + if (run3) { std.debug.print("Rendering 3\n", .{}); const tracy_frame = tracy.namedFrame("check render 3"); defer tracy_frame.end(); _ = try ast3.renderAst(render_arraylist3.writer(), input); } - std.debug.print("Testing 1 vs 3\n", .{}); - try std.testing.expectEqualStrings(render_arraylist1.items, render_arraylist3.items); - std.debug.print("Testing 2 vs 3\n", .{}); - try std.testing.expectEqualStrings(render_arraylist2.items, render_arraylist3.items); + if (run1 and run3) { + std.debug.print("Testing 1 vs 3\n", .{}); + try std.testing.expectEqualStrings(render_arraylist1.items, render_arraylist3.items); + } + if (run2 and run3) { + std.debug.print("Testing 2 vs 3\n", .{}); + try std.testing.expectEqualStrings(render_arraylist2.items, render_arraylist3.items); + } + if (run1 and run2 and !run3) { + std.debug.print("Testing 1 vs 2\n", .{}); + try std.testing.expectEqualStrings(render_arraylist1.items, render_arraylist2.items); + } - // var bw = std.io.bufferedWriter(std.io.getStdOut().writer()); - // const stdout = bw.writer(); - // { - // const tracy_frame = tracy.namedFrame("render 1"); - // defer tracy_frame.end(); - // _ = try ast.renderAst(stdout, input); - // } - // { - // const tracy_frame = tracy.namedFrame("render 2"); - // defer tracy_frame.end(); - // _ = try ast2.renderAst(stdout, input); - // } - // { - // const tracy_frame = tracy.namedFrame("render 3"); - // defer tracy_frame.end(); - // _ = try ast3.renderAst(stdout, input); - // } - // try bw.flush(); + if (print1) + try std.io.getStdOut().writeAll(render_arraylist1.items); + if (print2) + try std.io.getStdOut().writeAll(render_arraylist2.items); + if (print3) + try std.io.getStdOut().writeAll(render_arraylist3.items); } if (tracy.enable) {