[Libguestfs] [PATCH] mllib: Add isspace, triml, trimr and trim functions.

Richard W.M. Jones rjones at redhat.com
Thu Jun 16 13:44:19 UTC 2016


---
 mllib/common_utils.ml  | 29 +++++++++++++++++++++++++++++
 mllib/common_utils.mli |  8 ++++++++
 2 files changed, 37 insertions(+)

diff --git a/mllib/common_utils.ml b/mllib/common_utils.ml
index 64bf3d3..34e1285 100644
--- a/mllib/common_utils.ml
+++ b/mllib/common_utils.ml
@@ -49,6 +49,35 @@ module String = struct
       and len = length str in
       len >= sufflen && sub str (len - sufflen) sufflen = suffix
 
+    (* Note OCaml stdlib has an "is_space" function. *)
+    let isspace c =
+      c = ' '
+      (* || c = '\f' *) || c = '\n' || c = '\r' || c = '\t' (* || c = '\v' *)
+
+    let triml ?(test = isspace) str =
+      let i = ref 0 in
+      let n = ref (String.length str) in
+      while !n > 0 && test str.[!i]; do
+        decr n;
+        incr i
+      done;
+      if !i = 0 then str
+      else String.sub str !i !n
+
+    let trimr ?(test = isspace) str =
+      let n = ref (String.length str) in
+      while !n > 0 && test str.[!n-1]; do
+        decr n
+      done;
+      if !n = String.length str then str
+      else String.sub str 0 !n
+
+    (* Note OCaml stdlib has a function with the same name and
+     * different signature.
+     *)
+    let trim ?(test = isspace) str =
+      trimr ~test (triml ~test str)
+
     let rec find s sub =
       let len = length s in
       let sublen = length sub in
diff --git a/mllib/common_utils.mli b/mllib/common_utils.mli
index 5b0b9bb..a04a784 100644
--- a/mllib/common_utils.mli
+++ b/mllib/common_utils.mli
@@ -56,6 +56,14 @@ module String : sig
     (** [is_prefix str prefix] returns true if [prefix] is a prefix of [str]. *)
     val is_suffix : string -> string -> bool
     (** [is_suffix str suffix] returns true if [suffix] is a suffix of [str]. *)
+    val isspace : char -> bool
+    (** Return true if char is a whitespace character. *)
+    val triml : ?test:(char -> bool) -> string -> string
+    (** Trim left. *)
+    val trimr : ?test:(char -> bool) -> string -> string
+    (** Trim right. *)
+    val trim : ?test:(char -> bool) -> string -> string
+    (** Trim left and right. *)
     val find : string -> string -> int
     (** [find str sub] searches for [sub] as a substring of [str].  If
         found it returns the index.  If not found, it returns [-1]. *)
-- 
2.7.4




More information about the Libguestfs mailing list