summaryrefslogtreecommitdiff
path: root/input.lisp
diff options
context:
space:
mode:
authorJuan Manuel Tomás <jtomas1815@gmail.com>2025-06-10 13:57:22 -0300
committerJuan Manuel Tomás <jtomas1815@gmail.com>2025-06-10 13:57:22 -0300
commitda008e637b5bff56fed8dfbacc2adabc4bca18b1 (patch)
tree0d0207034812652c5d7d6c90d45334c918e87e4d /input.lisp
parentdcff69e9d6334c57faa5a690c449f12969a6526f (diff)
downloadmonparser-da008e637b5bff56fed8dfbacc2adabc4bca18b1.tar.gz
monparser-da008e637b5bff56fed8dfbacc2adabc4bca18b1.zip
Add better reporting and new features
Units report expected results on end of input. Opposite parser helps with the complexity explosion on unit parsers. Input and error printing has context.
Diffstat (limited to 'input.lisp')
-rw-r--r--input.lisp17
1 files changed, 12 insertions, 5 deletions
diff --git a/input.lisp b/input.lisp
index 55a72cb..5d6a162 100644
--- a/input.lisp
+++ b/input.lisp
@@ -28,10 +28,17 @@
(values line column)))
(defmethod print-object ((obj parser-input) stream)
- (let ((context-length 10))
+ (let ((context-length 20))
(let ((begin (max (- (input-cursor obj) context-length) 0))
(end (min (+ (input-cursor obj) context-length) (length (input-data obj)))))
- (format stream "...~a~a~a..."
- (substitute #\¶ #\Newline (subseq (input-data obj) begin (input-cursor obj)))
- (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 (< 0 begin)
+ (format stream "..."))
+ (format stream "~a"
+ (substitute #\↲ #\Newline (subseq (input-data obj) begin (input-cursor obj))))
+ (if (< (input-cursor obj) (length (input-data obj)))
+ (format stream "~a~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)))
+ (format stream "¬"))
+ (when (< end (length (input-data obj)))
+ (format stream "...")))))