diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2020-09-12 01:32:59 -0700 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2020-09-12 01:32:59 -0700 |
| commit | e9673459376b92e5c8be60783b608723af9b23d9 (patch) | |
| tree | 76c7d9f4456507453af2e6742561762132defcfc | |
| parent | 5c047efcb7f92de36df102dd164345d988f64567 (diff) | |
Tweaks to CLI, bugfix for escape replacements
| -rw-r--r-- | bpeg.c | 7 | ||||
| -rw-r--r-- | grammar.c | 1 | ||||
| -rw-r--r-- | vm.c | 1 |
3 files changed, 4 insertions, 5 deletions
@@ -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); @@ -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" @@ -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 != '@') { |
