diff --git a/embddr/common.scm b/embddr/common.scm index e469478..47d3dff 100644 --- a/embddr/common.scm +++ b/embddr/common.scm @@ -16,6 +16,7 @@ string-c-radix->number has-duplicates? find-duplicates insert-between + string-replace-text make-mux-selectors)) (else @@ -174,3 +175,18 @@ lst (cons* (car lst) x (insert-between (cdr lst) x)))) + +;;; Racket-like string-replace +(define* (string-replace-text str from to #:key (all #t)) + (let ((flen (string-length from)) + (tlen (string-length to))) + (let replace ((str str) (idx 0)) + (if (>= idx (string-length str)) + str + (let ((occ (string-contains str from idx))) + (if occ + (let ((str (string-replace str to occ (+ occ flen)))) + (if all + (replace str (+ occ tlen 1)) + str)) + str))))))