diff options
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | bp.1 | 8 | ||||
| -rw-r--r-- | bpeg.c | 25 |
3 files changed, 30 insertions, 5 deletions
@@ -10,6 +10,8 @@ It's written in pure C with no dependencies. * `-h` `--help` print the usage and quit * `-v` `--verbose` print verbose debugging info * `-i` `--ignore-case` perform a case-insensitive match +* `-e` `--explain` print an explanation of the matches +* `-j` `--json` print matches as JSON objects * `-d` `--define <name>:<def>` define a grammar rule * `-D` `--define-string <name>:<def>` define a grammar rule (string-pattern) * `-p` `--pattern <pat>` provide a pattern (equivalent to `bp '\(<pat>)'`) @@ -7,6 +7,8 @@ bp \- Bruce's Parsing Expression Grammar tool .B bp [\fI-h\fR|\fI--help\fR] [\fI-v\fR|\fI--verbose\fR] +[\fI-e\fR|\fI--explain\fR] +[\fI-j\fR|\fI--json\fR] [\fI-i\fR|\fI--ignore-case\fR \fI<pattern>\fR] [\fI-p\fR|\fI--pattern\fR \fI<pattern>\fR] [\fI-P\fR|\fI--pattern-string\fR \fI<string-pattern>\fR] @@ -23,6 +25,12 @@ bp \- Bruce's Parsing Expression Grammar tool .B \-v\fR, \fB--verbose Print debugging information. +.B \-e\fR, \fB--explain +Print a visual explanation of the matches. + +.B \-j\fR, \fB--json +Print a JSON list of the matches. (Pairs with \fB--verbose\fR for more detail) + .B \-i\fR, \fB--ignore-case Perform pattern matching case-insensitively. @@ -27,6 +27,7 @@ static const char *usage = ( " -h --help print the usage and quit\n" " -v --verbose print verbose debugging info\n" " -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" " -d --define <name>:<def> define a grammar rule\n" " -D --define-string <name>:<def> define a grammar rule (string-pattern)\n" @@ -135,16 +136,17 @@ int main(int argc, char *argv[]) if (streq(argv[i], "--")) { ++i; break; - } else if (streq(argv[i], "--help") || streq(argv[i], "-h")) { + } else if (streq(argv[i], "--help")) { + flag_help: printf("%s\n", usage); return 0; - } else if (streq(argv[i], "--verbose") || streq(argv[i], "-v")) { + } else if (streq(argv[i], "--verbose")) { flags |= BPEG_VERBOSE; - } else if (streq(argv[i], "--explain") || streq(argv[i], "-e")) { + } else if (streq(argv[i], "--explain")) { flags |= BPEG_EXPLAIN; - } else if (streq(argv[i], "--json") || streq(argv[i], "-j")) { + } else if (streq(argv[i], "--json")) { flags |= BPEG_JSON; - } else if (streq(argv[i], "--ignore-case") || streq(argv[i], "-i")) { + } else if (streq(argv[i], "--ignore-case")) { flags |= BPEG_IGNORECASE; } else if (FLAG("--replace") || FLAG("-r")) { file_t *replace_file = spoof_file("<replace argument>", flag); @@ -200,6 +202,19 @@ int main(int argc, char *argv[]) ++npatterns; } else if (FLAG("--mode") || FLAG("-m")) { rule = flag; + } 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; + default: + printf("Unrecognized flag: -%c\n\n%s\n", *c, usage); + return 1; + } + } } else if (argv[i][0] != '-') { if (npatterns > 0) break; file_t *arg_file = spoof_file("<pattern argument>", argv[i]); |
