mes: Add string-trim, string-trim-right, string-trim-both.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 29 Apr 2018 16:24:29 +0000 (18:24 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 29 Apr 2018 16:24:29 +0000 (18:24 +0200)
* module/srfi/srfi-13.mes (string-trim, string-trimn-right,
  string-trim-both): New function.
* tests/srfi-13.test ("string-trim"): Test it.
  ("string-trim-right"):
  ("string-trim-both"):

module/srfi/srfi-13.mes
tests/srfi-13.test

index 01765d4007b6aab0bb8832a573c924be94739f99..85db85e9b7a69ea0927581456e0cca89efd0cb4b 100644 (file)
@@ -25,6 +25,7 @@
 ;;; Code:
 
 (mes-use-module (srfi srfi-1))
+(mes-use-module (srfi srfi-14))
 
 (define (string-copy s)
   (list->string (string->list s)))
                           (or (match (cdr start) (cdr needle) (1+ n))
                               (loop (cdr string) (1+ i)))
                           (loop (cdr string) (1+ i))))))))))
+
+(define (string-trim string . pred)
+  (list->string
+   (if (pair? pred) (error "string-trim: not supported: PRED=" pred)
+       (let loop ((lst (string->list string)))
+         (if (or (null? lst)
+                 (not (char-whitespace? (car lst)))) lst
+                 (loop (cdr lst)))))))
+
+(define (string-trim-right string . pred)
+  (list->string
+   (reverse!
+    (if (pair? pred) (error "string-trim-right: not supported: PRED=" pred)
+        (let loop ((lst (reverse (string->list string))))
+          (if (or (null? lst)
+                  (not (char-whitespace? (car lst)))) lst
+                  (loop (cdr lst))))))))
+
+(define (string-trim-both string . pred)
+  ((compose string-trim string-trim-right) string))
+
index d7f5f892d83e72c34b408c1527aabb1b92577519..f9394db8a823c7481df313cc53a66fc47e97f563 100755 (executable)
@@ -68,4 +68,13 @@ exit $?
 (pass-if-not "string-contains not"
              (string-contains "fuba" "bar"))
 
+(pass-if-equal "string-trim" "foo  "
+             (string-trim "  foo  "))
+
+(pass-if-equal "string-trim-right" "  foo"
+             (string-trim-right "  foo  "))
+
+(pass-if-equal "string-trim-both" "foo"
+             (string-trim-both "  foo  "))
+
 (result 'report)