diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-11-21 10:48:19 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-11-21 10:48:19 +0100 |
| commit | 7c7b8302251e9703b086c9bf5a989982535bc25b (patch) | |
| tree | f6c5d2717f3ea3d8ee99faba07017ce36104b8fd | |
| parent | ddada4509729b0b8dcc394737d7eec588df51040 (diff) | |
Retain text spans during regex matching
| -rw-r--r-- | src/model/styles.rs | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/model/styles.rs b/src/model/styles.rs index a5b9aab3..76c67370 100644 --- a/src/model/styles.rs +++ b/src/model/styles.rs @@ -390,12 +390,19 @@ impl Recipe { return Ok(None); }; - let make = item!(text); + let make = |s| { + let mut content = item!(text)(s); + if let Some(span) = target.span() { + content = content.spanned(span); + } + content + }; + let mut result = vec![]; let mut cursor = 0; - for mat in regex.find_iter(text) { - let start = mat.start(); + for m in regex.find_iter(text) { + let start = m.start(); if cursor < start { result.push(make(text[cursor..start].into())); } @@ -403,11 +410,11 @@ impl Recipe { let transformed = self.transform.apply( world, self.span, - make(mat.as_str().into()).guard(sel), + make(m.as_str().into()).guard(sel), )?; result.push(transformed); - cursor = mat.end(); + cursor = m.end(); } if result.is_empty() { |
