···23882388 | "trim_right", [ Value.String s; Value.String cs ] ->
23892389 Value.String (trim_side ~left:false cs s)
23902390 | "trim_space", [ Value.String s ] -> Value.String (String.trim s)
23912391+ | "trim_prefix", [ Value.String s; Value.String pre ] ->
23922392+ let n = String.length s in
23932393+ let pn = String.length pre in
23942394+ if pn <= n && String.sub s 0 pn = pre then
23952395+ Value.String (String.sub s pn (n - pn))
23962396+ else Value.String s
23972397+ | "trim_suffix", [ Value.String s; Value.String suf ] ->
23982398+ let n = String.length s in
23992399+ let sn = String.length suf in
24002400+ if sn <= n && String.sub s (n - sn) sn = suf then
24012401+ Value.String (String.sub s 0 (n - sn))
24022402+ else Value.String s
23912403 | "replace", [ Value.String s; Value.String old_; Value.String new_ ] ->
23922404 Value.String
23932405 (Astring.String.concat ~sep:new_ (Astring.String.cuts ~sep:old_ s))