From c3c3c2202cf312842230f7316c69a89c28c60ce9 Mon Sep 17 00:00:00 2001 From: Lucas Faria Mendes Date: Fri, 5 Dec 2025 03:20:38 -0300 Subject: codecrafters submit [skip ci] --- src/parser.zig | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'src/parser.zig') diff --git a/src/parser.zig b/src/parser.zig index de42f31..7289057 100644 --- a/src/parser.zig +++ b/src/parser.zig @@ -26,13 +26,28 @@ pub fn parseArgs(allocator: std.mem.Allocator, cmd_name: []const u8, args_str: ? defer arg_buf.deinit(allocator); while (i < args.len) { - if (args[i] == '\'' or args[i] == '"') { - const quote = args[i]; + if (args[i] == '\'') { i += 1; - while (i < args.len and args[i] != quote) : (i += 1) { + while (i < args.len and args[i] != '\'') : (i += 1) { try arg_buf.append(allocator, args[i]); } if (i < args.len) i += 1; + } else if (args[i] == '"') { + i += 1; + while (i < args.len and args[i] != '"') : (i += 1) { + if (args[i] == '\\' and i + 1 < args.len) { + const next = args[i + 1]; + if (next == '"' or next == '\\') { + i += 1; + try arg_buf.append(allocator, args[i]); + } else { + try arg_buf.append(allocator, args[i]); + } + } else { + try arg_buf.append(allocator, args[i]); + } + } + if (i < args.len) i += 1; } else if (args[i] == '\\' and i + 1 < args.len) { i += 1; try arg_buf.append(allocator, args[i]); -- cgit v1.2.3