diff options
Diffstat (limited to 'sub/filter_regex.c')
-rw-r--r-- | sub/filter_regex.c | 28 |
1 files changed, 6 insertions, 22 deletions
diff --git a/sub/filter_regex.c b/sub/filter_regex.c index a5aa03a849..1d29ea1ac1 100644 --- a/sub/filter_regex.c +++ b/sub/filter_regex.c @@ -30,7 +30,7 @@ static bool rf_init(struct sd_filter *ft) MP_TARRAY_GROW(p, p->regexes, p->num_regexes); regex_t *preg = &p->regexes[p->num_regexes]; - int err = regcomp(preg, item, REG_ICASE | REG_EXTENDED | REG_NOSUB); + int err = regcomp(preg, item, REG_ICASE | REG_EXTENDED | REG_NOSUB | REG_NEWLINE); if (err) { char errbuf[512]; regerror(err, preg, errbuf, sizeof(errbuf)); @@ -44,15 +44,7 @@ static bool rf_init(struct sd_filter *ft) if (!p->num_regexes) return false; - char *headers = ft->event_format; - while (headers && headers[0]) { - p->offset += 1; - headers = strchr(headers, ','); - if (headers) - headers += 1; - } - p->offset -= 1; // removes Start/End, adds ReadOrder - + p->offset = sd_ass_fmt_offset(ft->event_format); return true; } @@ -68,19 +60,11 @@ static struct demux_packet *rf_filter(struct sd_filter *ft, struct demux_packet *pkt) { struct priv *p = ft->priv; - char *line = bstrto0(NULL, (bstr){(char *)pkt->buffer, pkt->len}); + char *text = bstrto0(NULL, sd_ass_pkt_text(ft, pkt, p->offset)); bool drop = false; - char *text = line; - for (int n = 0; n < p->offset - 1; n++) { - text = strchr(text, ','); - if (!text) { - MP_WARN(ft, "Malformed event: '%s'\n", line); - text = line; // shouldn't happen; random fallback - break; - } - text = text + 1; - } + if (ft->opts->rf_plain) + sd_ass_to_plaintext(&text, text); for (int n = 0; n < p->num_regexes; n++) { int err = regexec(&p->regexes[n], text, 0, NULL, 0); @@ -94,7 +78,7 @@ static struct demux_packet *rf_filter(struct sd_filter *ft, } } - talloc_free(line); + talloc_free(text); return drop ? NULL : pkt; } |