From e9673459376b92e5c8be60783b608723af9b23d9 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sat, 12 Sep 2020 01:32:59 -0700 Subject: Tweaks to CLI, bugfix for escape replacements --- bpeg.c | 7 ++----- grammar.c | 1 + vm.c | 1 + 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/bpeg.c b/bpeg.c index 421b238..0d64902 100644 --- a/bpeg.c +++ b/bpeg.c @@ -86,10 +86,7 @@ int main(int argc, char *argv[]) } else if (FLAG("--verbose") || FLAG("-v")) { verbose = 1; } else if (FLAG("--pattern") || FLAG("-p")) { - vm_op_t *p = bpeg_pattern(flag); - check(p, "Pattern failed to compile"); - add_def(g, flag, "pattern", p); - ++npatterns; + rule = flag; } else if (FLAG("--replace") || FLAG("-r")) { vm_op_t *p = bpeg_replacement(bpeg_pattern("pattern"), flag); check(p, "Replacement failed to compile"); @@ -126,7 +123,7 @@ int main(int argc, char *argv[]) } vm_op_t *pattern = lookup(g, rule); - check(pattern != NULL, usage); + check(pattern != NULL, "No such rule: '%s'", rule); if (verbose) { print_pattern(pattern); diff --git a/grammar.c b/grammar.c index 38403d8..84bada7 100644 --- a/grammar.c +++ b/grammar.c @@ -13,6 +13,7 @@ const char *BPEG_BUILTIN_GRAMMAR = ( "replace-all = *&&@replacement &&$$;\n" "find-all = *(matching-line / {&&(\\n/$$)=>});\n" "matching-line = +&@pattern *. $ ?\\n;\n" + "only-matches = *{&&@pattern=>'@1\\n'};\n" // Helper definitions (commonly used) "crlf=\\r\\n;\n" diff --git a/vm.c b/vm.c index dade953..c82832a 100644 --- a/vm.c +++ b/vm.c @@ -377,6 +377,7 @@ void print_match(match_t *m, const char *color, int verbose) printf("\033[0;34m"); for (const char *r = m->name_or_replacement; *r; ) { if (*r == '\\') { + ++r; fputc(unescapechar(r, &r), stdout); continue; } else if (*r != '@') { -- cgit v1.2.3