diff options
Diffstat (limited to 'input.lisp')
-rw-r--r-- | input.lisp | 43 |
1 files changed, 0 insertions, 43 deletions
diff --git a/input.lisp b/input.lisp deleted file mode 100644 index e464d0e..0000000 --- a/input.lisp +++ /dev/null @@ -1,43 +0,0 @@ -(in-package #:monparser) - -(defclass parser-input () - ((cursor :initarg :cursor :accessor input-cursor :initform 0) - (data :initarg :data :reader input-data :initform nil))) - -(defun has-data? (input) - (< (input-cursor input) (length (input-data input)))) - -(defun peek (input) - (char (input-data input) - (input-cursor input))) - -(defun advance (input) - (make-instance 'parser-input - :data (input-data input) - :cursor (+ (input-cursor input) 1))) - -(defun line-and-column (input) - (let ((line 1) (column 1)) - (dotimes (i (input-cursor input)) - (let ((c (char (input-data input) i))) - (case c - (#\Newline - (incf line) - (setf column 1)) - (t (incf column))))) - (values line column))) - -(defmethod print-object ((obj parser-input) stream) - (let ((context-length 20)) - (let ((begin (max (- (input-cursor obj) context-length) 0)) - (end (min (+ (input-cursor obj) context-length) (length (input-data obj))))) - (when (< 0 begin) - (format stream "...")) - (format stream "~a" - (substitute #\↲ #\Newline (subseq (input-data obj) begin (input-cursor obj)))) - (when (< (input-cursor obj) (length (input-data obj))) - (format stream "[4;33m~a[m~a" - (substitute #\↲ #\Newline (subseq (input-data obj) (input-cursor obj) (1+ (input-cursor obj)))) - (substitute #\↲ #\Newline (subseq (input-data obj) (1+ (input-cursor obj)) end)))) - (when (< end (length (input-data obj))) - (format stream "..."))))) |