From 4342650ea28bffbcd41905b18350c4b0d478d774 Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Sat, 20 Nov 2021 17:18:09 -0700 Subject: LINES: support trimming the lines TRIMFUN will typically be STRING-TRIM, STRING-LEFT-TRIM or STRING-RIGHT-TRIM. Signed-off-by: Sean Whitton --- src/util.lisp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/util.lisp') diff --git a/src/util.lisp b/src/util.lisp index 0bbf585..704a288 100644 --- a/src/util.lisp +++ b/src/util.lisp @@ -40,10 +40,12 @@ (declare (ignore args)) (values)) -(defun lines (text) +(defun lines (text &optional trimfun (trimchars '(#\Space #\Tab))) (with-input-from-string (stream text) (let (bolp buffer) - (flet ((reset () + (flet ((trim (line) + (if trimfun (funcall trimfun trimchars line) line)) + (reset () (setq bolp t buffer (make-array 0 :fill-pointer 0 :element-type 'character)))) @@ -53,7 +55,7 @@ for char = (read-char stream nil nil) if char if (member char '(#\Return #\Newline) :test #'char=) - collect buffer + collect (trim buffer) and do (reset) (when (char= char #\Return) (when-let ((next (peek-char nil stream nil nil))) @@ -63,7 +65,7 @@ (vector-push-extend char buffer) end else - unless bolp collect buffer end + unless bolp collect (trim buffer) end and do (loop-finish)))))) (defun unlines (lines) -- cgit v1.2.3