aboutsummaryrefslogtreecommitdiff
path: root/builtins
diff options
context:
space:
mode:
Diffstat (limited to 'builtins')
-rw-r--r--builtins/text.c21
-rw-r--r--builtins/text.h1
2 files changed, 22 insertions, 0 deletions
diff --git a/builtins/text.c b/builtins/text.c
index be304184..7316dabc 100644
--- a/builtins/text.c
+++ b/builtins/text.c
@@ -1904,6 +1904,27 @@ public Text_t Text$replace(Text_t text, Pattern_t pattern, Text_t replacement, P
return ret;
}
+public Text_t Text$trim(Text_t text, Pattern_t pattern, bool trim_left, bool trim_right)
+{
+ int64_t first = 0, last = text.length-1;
+ if (trim_left) {
+ int64_t match_len = match(text, pattern, 0, 0, NULL, 0);
+ if (match_len > 0)
+ first = match_len;
+ }
+
+ if (trim_right) {
+ for (int64_t i = text.length-1; i >= first; i--) {
+ int64_t match_len = match(text, pattern, i, 0, NULL, 0);
+ if (match_len > 0 && i + match_len == text.length)
+ last = i-1;
+ // else
+ // break;
+ }
+ }
+ return Text$slice(text, I(first+1), I(last+1));
+}
+
public Text_t Text$map(Text_t text, Pattern_t pattern, closure_t fn)
{
Text_t ret = {.length=0};
diff --git a/builtins/text.h b/builtins/text.h
index eff01dbe..cb8f08ba 100644
--- a/builtins/text.h
+++ b/builtins/text.h
@@ -36,6 +36,7 @@ Text_t Text$quoted(Text_t str, bool colorize);
Text_t Text$replace(Text_t str, Pattern_t pat, Text_t replacement, Pattern_t backref_pat, bool recursive);
Text_t Text$replace_all(Text_t text, Table_t replacements, Pattern_t backref_pat, bool recursive);
Array_t Text$split(Text_t text, Pattern_t pattern);
+Text_t Text$trim(Text_t text, Pattern_t pattern, bool trim_left, bool trim_right);
Int_t Text$find(Text_t text, Pattern_t pattern, Int_t i, int64_t *match_length);
Array_t Text$find_all(Text_t text, Pattern_t pattern);
bool Text$has(Text_t text, Pattern_t pattern);