aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bpeg.c7
-rw-r--r--grammar.c1
-rw-r--r--vm.c1
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 != '@') {