Skip to content

Commit

Permalink
Start integrating clawk
Browse files Browse the repository at this point in the history
  • Loading branch information
ruricolist committed Dec 4, 2024
1 parent 3f0dfc4 commit 10c4036
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 37 deletions.
5 changes: 3 additions & 2 deletions scripts/format.lisp
Original file line number Diff line number Diff line change
@@ -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)
Expand Down Expand Up @@ -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))))))))))
36 changes: 1 addition & 35 deletions utils.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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*
Expand Down

0 comments on commit 10c4036

Please sign in to comment.