From b3bca46c2f0deecbce91600714975cac8357a216 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Thu, 17 Dec 2020 16:23:29 -0800 Subject: Added --list-files --- bpeg.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/bpeg.c b/bpeg.c index c0a2f9b..c26ea48 100644 --- a/bpeg.c +++ b/bpeg.c @@ -29,6 +29,7 @@ static const char *usage = ( " -e --explain explain the matches\n" " -j --json print matches as a list of JSON objects\n" " -i --ignore-case preform matching case-insensitively\n" + " -l --list-files list filenames only\n" " -d --define : define a grammar rule\n" " -D --define-string : define a grammar rule (string-pattern)\n" " -p --pattern provide a pattern (equivalent to bp '\\()')\n" @@ -85,9 +86,11 @@ static int run_match(grammar_t *g, const char *filename, vm_op_t *pattern, unsig if (filename) printf("\033[1;4m%s\033[0m\n", filename); visualize_match(m); + } else if (flags & BPEG_LISTFILES) { + printf("%s\n", filename); } else if (flags & BPEG_JSON) { if (printed_matches > 1) - fprintf(stdout, ",\n"); + printf(",\n"); printf("{\"filename\":\"%s\",", filename ? filename : "-"); printf("\"tree\":{\"rule\":\"text\",\"start\":%d,\"end\":%ld,\"children\":[", 0, f->end - f->contents); @@ -148,6 +151,8 @@ int main(int argc, char *argv[]) flags |= BPEG_JSON; } else if (streq(argv[i], "--ignore-case")) { flags |= BPEG_IGNORECASE; + } else if (streq(argv[i], "--list-files")) { + flags |= BPEG_LISTFILES; } else if (FLAG("--replace") || FLAG("-r")) { file_t *replace_file = spoof_file("", flag); vm_op_t *patref = bpeg_pattern(replace_file, "pattern"); @@ -205,11 +210,12 @@ int main(int argc, char *argv[]) } else if (argv[i][0] == '-' && argv[i][1] && argv[i][1] != '-') { // single-char flags for (char *c = &argv[i][1]; *c; ++c) { switch (*c) { - case 'h': goto flag_help; - case 'v': flags |= BPEG_VERBOSE; break; - case 'e': flags |= BPEG_EXPLAIN; break; - case 'j': flags |= BPEG_JSON; break; - case 'i': flags |= BPEG_IGNORECASE; break; + case 'h': goto flag_help; // -h + case 'v': flags |= BPEG_VERBOSE; break; // -v + case 'e': flags |= BPEG_EXPLAIN; break; // -e + case 'j': flags |= BPEG_JSON; break; // -j + case 'i': flags |= BPEG_IGNORECASE; break; // -i + case 'l': flags |= BPEG_LISTFILES; break; // -l default: printf("Unrecognized flag: -%c\n\n%s\n", *c, usage); return 1; @@ -228,6 +234,12 @@ int main(int argc, char *argv[]) } } + if (((flags & BPEG_JSON) != 0) + ((flags & BPEG_EXPLAIN) != 0) + ((flags & BPEG_LISTFILES) != 0) > 1) { + printf("Please choose no more than one of the flags: -j/--json, -e/--explain, and -l/--list-files.\n" + "They are mutually contradictory.\n"); + return 1; + } + if (isatty(STDOUT_FILENO)) { print_options |= PRINT_COLOR | PRINT_LINE_NUMBERS; } -- cgit v1.2.3