From 557f1deb2b1a18ede48950b5421b71f662ea309d Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Thu, 2 Jun 2022 21:45:47 -0400 Subject: Clean up parsing a little --- bin/qf.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) (limited to 'bin') diff --git a/bin/qf.c b/bin/qf.c index 98c897ce..0a79307e 100644 --- a/bin/qf.c +++ b/bin/qf.c @@ -54,37 +54,31 @@ static void push(struct Line line) { } static void parse(struct Line line) { - char *text = line.text; - size_t sep = strcspn(text, ":"); - if (!text[sep]) { + line.path = strsep(&line.text, ":"); + if (!line.text) { line.type = Text; + line.text = line.path; if (lines.len) line.path = lines.ptr[lines.len-1].path; push(line); return; } - line.path = text; - text[sep] = '\0'; - line.text = &text[sep+1]; - if ( - !lines.len || - !lines.ptr[lines.len-1].path || - strcmp(line.path, lines.ptr[lines.len-1].path) - ) { - if (lines.len) { - push((struct Line) { .type = Text, .text = " " }); - } + struct Line prev = {0}; + if (lines.len) prev = lines.ptr[lines.len-1]; + if (!prev.path || strcmp(line.path, prev.path)) { + if (lines.len) push((struct Line) { .type = Text, .text = " " }); line.type = File; push(line); } char *rest; line.nr = strtoul(line.text, &rest, 10); - line.type = Match; - if (rest != line.text && rest[0] == ':') { + if (rest > line.text && rest[0] == ':') { line.type = Match; line.text = &rest[1]; - } else if (rest != line.text && rest[0] == '-') { + } else if (rest > line.text && rest[0] == '-') { line.type = Context; line.text = &rest[1]; + } else { + line.type = Text; } push(line); } -- cgit 1.4.1