diff --git a/scripts/format.lisp b/scripts/format.lisp index 3d55d0b..1dba856 100644 --- a/scripts/format.lisp +++ b/scripts/format.lisp @@ -1,5 +1,6 @@ (defpackage :kiln/scripts/format (:use :cl :alexandria :serapeum :kiln) + (:import-from :clawk) (:import-from :clingon) (:documentation "Use format like awk")) (in-package :kiln/scripts/format) @@ -34,8 +35,8 @@ (let ((list? (clingon:getopt opts :list))) (with-boolean (list?) (let ((formatter (compile nil (eval `(formatter ,control-string))))) - (do-lines (line) - (let ((fields (fields line field-separator))) + (clawk:for-stream-lines (*standard-input*) + (let ((fields (clawk:split nil field-separator))) (:if list? (format t formatter fields) (format t "~?" formatter fields)))))))))) diff --git a/utils.lisp b/utils.lisp index 12722e4..de13f60 100644 --- a/utils.lisp +++ b/utils.lisp @@ -3,7 +3,7 @@ (:use :cl :alexandria :serapeum :named-readtables) (:use-reexport :kiln/os :kiln/tty) (:import-from :cffi) - (:import-from :cl-ppcre) + (:import-from :clawk) (:import-from :kiln/dispatch :invoke-script) (:import-from :kiln/flags :dbg) (:local-nicknames @@ -21,40 +21,6 @@ (in-package :kiln/utils) (in-readtable :interpol-syntax) -(defun walk-lines (fn &optional (source *standard-input*)) - (etypecase source - (null - (walk-lines fn *standard-input*)) - (stream - (fbind fn - (loop for line = (read-line source nil nil) - while line - do (fn line)))) - (string - (with-input-from-string (stream source) - (walk-lines fn stream))))) - -(defmacro do-lines ((line &optional source return) &body body) - `(do-lines-1 (,line ,source ,return) - ,@body)) - -(define-do-macro do-lines-1 ((line source &optional return) &body body) - (with-thunk (body line) - `(walk-lines ,body ,source))) - -(defun fields (string &optional (split-on #'whitespacep)) - (etypecase split-on - (function - (split-sequence-if split-on string)) - ((eql #\Space) - (fields string #'whitespacep)) - (character - (split-sequence split-on string)) - (string - (if (single split-on) - (split-sequence (character split-on) string) - (cl-ppcre:split split-on string))))) - (defun interpolate-escapes (string) (let ((interpol:*inner-delimiters* nil) (*readtable*