diff options
| author | Juan Manuel Tomás <jtomas1815@gmail.com> | 2025-08-24 19:50:56 -0300 | 
|---|---|---|
| committer | Juan Manuel Tomás <jtomas1815@gmail.com> | 2025-08-24 19:50:56 -0300 | 
| commit | d1816df4c029447f94963355cbdce5c434063ee6 (patch) | |
| tree | e4ff17ff8c2d4159a85bb34f3935f843f6bdce4c | |
| parent | 97f8b6d2a990fe2e93704460fcdf08701616d7e4 (diff) | |
| download | utils-d1816df4c029447f94963355cbdce5c434063ee6.tar.gz utils-d1816df4c029447f94963355cbdce5c434063ee6.zip | |
| -rw-r--r-- | cursor.lisp | 31 | ||||
| -rw-r--r-- | package.lisp | 10 | ||||
| -rw-r--r-- | utils.asd | 5 | 
3 files changed, 44 insertions, 2 deletions
| diff --git a/cursor.lisp b/cursor.lisp new file mode 100644 index 0000000..d3012ab --- /dev/null +++ b/cursor.lisp @@ -0,0 +1,31 @@ +(in-package #:cursor) + +(defclass text () +  ((data :type simple-string :initarg :data :reader data :initform "") +   (index :type (unsigned-byte 44) :initarg :index :accessor index :initform 0))) + +(defun has-data? (cursor) +  (< (index cursor) (length (data cursor)))) + +(defun peek (cursor) +  (char (data cursor) +        (index cursor))) + +(defun advance (cursor) +  (make-instance 'text +                 :data (data cursor) +                 :index (+ (index cursor) 1))) + +(defun distance (from to) +  (- (index to) +     (index from))) + +(defmethod print-object ((obj text) stream) +  (print-unreadable-object (obj stream :type t) +    (let ((str (if (has-data? obj) +                 (format nil "~{~a[4;33m~a[m~a~}" +                         (str:context-window (data obj) +                                             (index obj) +                                             :side-length 10)) +                 "END OF DATA"))) +      (substitute #\↲ #\Newline str)))) diff --git a/package.lisp b/package.lisp index d170039..e6ed7b5 100644 --- a/package.lisp +++ b/package.lisp @@ -1,3 +1,13 @@ +(defpackage #:cursor +  (:use #:cl) +  (:export #:text +           #:index +           #:data +           #:has-data? +           #:peek +           #:advance +           #:distance)) +  (defpackage #:color    (:use #:cl)    (:export #:hsl->rgb)) @@ -1,4 +1,4 @@ -(defsystem #:utils +(defsystem "utils"    :serial nil    :components    ((:file "package") @@ -6,4 +6,5 @@     (:file "char")     (:file "symbol")     (:file "color") -   (:file "str"))) +   (:file "str") +   (:file "cursor"))) | 
