diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2025-03-03 13:45:30 -0500 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2025-03-03 13:45:30 -0500 |
| commit | f330f06c218a0903530cdc51c0fac245cb51ae75 (patch) | |
| tree | 7e4220790a846cbd05190149edd3a61ce795b752 /stdlib/patterns.c | |
| parent | 80475ad02d6b20d6c667c3be8bc939a83632bd3f (diff) | |
Add `recursive` argument to text:each() and text:map(), plus update docs
Diffstat (limited to 'stdlib/patterns.c')
| -rw-r--r-- | stdlib/patterns.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/stdlib/patterns.c b/stdlib/patterns.c index 226856ba..ad6267f0 100644 --- a/stdlib/patterns.c +++ b/stdlib/patterns.c @@ -1042,7 +1042,7 @@ public Text_t Text$trim(Text_t text, Pattern_t pattern, bool trim_left, bool tri return Text$slice(text, I(first+1), I(last+1)); } -public Text_t Text$map(Text_t text, Pattern_t pattern, Closure_t fn) +public Text_t Text$map(Text_t text, Pattern_t pattern, Closure_t fn, bool recursive) { Text_t ret = EMPTY_TEXT; @@ -1073,6 +1073,8 @@ public Text_t Text$map(Text_t text, Pattern_t pattern, Closure_t fn) }; for (int i = 0; captures[i].occupied; i++) { Text_t capture = Text$slice(text, I(captures[i].index+1), I(captures[i].index+captures[i].length)); + if (recursive) + capture = Text$map(capture, pattern, fn, recursive); Array$insert(&m.captures, &capture, I(0), sizeof(Text_t)); } @@ -1093,7 +1095,7 @@ public Text_t Text$map(Text_t text, Pattern_t pattern, Closure_t fn) return ret; } -public void Text$each(Text_t text, Pattern_t pattern, Closure_t fn) +public void Text$each(Text_t text, Pattern_t pattern, Closure_t fn, bool recursive) { int32_t first_grapheme = Text$get_grapheme(pattern, 0); bool find_first = (first_grapheme != '{' @@ -1120,6 +1122,8 @@ public void Text$each(Text_t text, Pattern_t pattern, Closure_t fn) }; for (int i = 0; captures[i].occupied; i++) { Text_t capture = Text$slice(text, I(captures[i].index+1), I(captures[i].index+captures[i].length)); + if (recursive) + Text$each(capture, pattern, fn, recursive); Array$insert(&m.captures, &capture, I(0), sizeof(Text_t)); } |
