diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2021-01-20 15:23:57 -0800 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2021-01-20 15:23:57 -0800 |
| commit | b4c8a33a0cbf4938b53458ded4d46efc6e8820ab (patch) | |
| tree | b5823b03aa1d6ab8dc5dc92cd543ca77c1c0b3c2 /pattern.c | |
| parent | 3c38aef78c637f933da7111bc55b77d94a824afa (diff) | |
Tweaked `..` syntax to make it more flexible (now: `.. % skip pat`)
Diffstat (limited to 'pattern.c')
| -rw-r--r-- | pattern.c | 19 |
1 files changed, 14 insertions, 5 deletions
@@ -146,6 +146,19 @@ pat_t *chain_together(file_t *f, pat_t *first, pat_t *second) chain->end = second->end; chain->args.multiple.first = first; chain->args.multiple.second = second; + + // If `first` is an UPTO operator (..) or contains one, then let it know + // that `second` is what it's up *to*. + for (pat_t *p = first; p; ) { + if (p->type == BP_UPTO) { + p->args.multiple.first = second; + break; + } else if (p->type == BP_CAPTURE) { + p = p->args.capture.capture_pat; + } else if (p->type == BP_EQUAL || p->type == BP_NOT_EQUAL) { + p = p->args.pat; + } else break; + } return chain; } @@ -199,12 +212,8 @@ static pat_t *_bp_simplepattern(file_t *f, const char *str) // Any char (dot) case '.': { if (*str == '.') { // ".." - pat_t *upto = new_pat(f, start, BP_UPTO_AND); + pat_t *upto = new_pat(f, start, BP_UPTO); ++str; - pat_t *till = bp_simplepattern(f, str); - upto->args.multiple.first = till; - if (till) - str = till->end; if (matchchar(&str, '%')) { pat_t *skip = bp_simplepattern(f, str); if (!skip) |
