diff options
author | Juan Manuel Tomás <jtomas1815@gmail.com> | 2025-06-10 13:57:22 -0300 |
---|---|---|
committer | Juan Manuel Tomás <jtomas1815@gmail.com> | 2025-06-10 13:57:22 -0300 |
commit | da008e637b5bff56fed8dfbacc2adabc4bca18b1 (patch) | |
tree | 0d0207034812652c5d7d6c90d45334c918e87e4d /input.lisp | |
parent | dcff69e9d6334c57faa5a690c449f12969a6526f (diff) | |
download | monparser-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.lisp | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -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[1;33m~a[m~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 "[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))) + (format stream "[4;33m¬[m")) + (when (< end (length (input-data obj))) + (format stream "..."))))) |