diff --git a/org/dialog.org b/org/dialog.org index c00998f..959e86d 100644 --- a/org/dialog.org +++ b/org/dialog.org @@ -309,14 +309,7 @@ Remove a toast from the list. #:toast-variant #:render-toast #:dismiss-toast - #:*toasts* - ;; Tests - #:dialog-create - #:dialog-size-small - #:dialog-size-medium - #:dialog-push-pop - #:toast-create - #:toast-dismiss)) + #:*toasts*)) #+END_SRC #+BEGIN_SRC lisp :tangle ../src/components/dialog.lisp :noweb no diff --git a/org/framebuffer.org b/org/framebuffer.org index e8a5baf..ee2dee5 100644 --- a/org/framebuffer.org +++ b/org/framebuffer.org @@ -201,14 +201,16 @@ See =docs/plans/2026-05-11-rendering-pipeline.md= for full implementation plan. :bold bold :italic italic :underline underline :link-url link-url))))) -(defmethod draw-text ((fb framebuffer-backend) x y string fg bg &rest attrs) +(defmethod draw-text ((fb framebuffer-backend) x y string fg bg + &key bold italic underline reverse dim blink + (link-url nil link-url-p) + &allow-other-keys) + (declare (ignore reverse dim blink link-url-p)) (loop for i from 0 below (length string) do (%set-cell fb (+ x i) y (char string i) :fg fg :bg bg - :bold (getf attrs :bold) - :italic (getf attrs :italic) - :underline (getf attrs :underline) - :link-url (getf attrs :link-url)))) + :bold bold :italic italic :underline underline + :link-url link-url))) (defmethod draw-rect ((fb framebuffer-backend) x y w h &key fg bg style) (declare (ignore style)) diff --git a/org/mouse.org b/org/mouse.org index 38c6a18..1e95b7a 100644 --- a/org/mouse.org +++ b/org/mouse.org @@ -60,8 +60,10 @@ module adds: (defun hit-test (root x y) (labels ((recurse (node) - (when (and (slot-boundp node 'x) (slot-boundp node 'y) - (slot-boundp node 'width) (slot-boundp node 'height)) + (when (and (slot-exists-p node 'x) (slot-boundp node 'x) + (slot-exists-p node 'y) (slot-boundp node 'y) + (slot-exists-p node 'width) (slot-boundp node 'width) + (slot-exists-p node 'height) (slot-boundp node 'height)) (let ((nx (slot-value node 'x)) (ny (slot-value node 'y)) (nw (slot-value node 'width)) @@ -152,8 +154,10 @@ module adds: (is-true (typep m 'mouse-mixin)))) (def-test mouse-hit-test-point () + "hit-test returns nil when no component has position slots bound" (let ((obj (make-instance 'mouse-mixin))) - (is-true t))) ;; placeholder + (is-false (hit-test obj 0 0)) + (is-false (hit-test obj 100 100)))) (def-test selection-set-and-get () (setf cl-tty.mouse::*selection* (make-selection :text "hello")) diff --git a/src/components/dialog-package.lisp b/src/components/dialog-package.lisp index 0eccb0c..093964b 100644 --- a/src/components/dialog-package.lisp +++ b/src/components/dialog-package.lisp @@ -22,11 +22,4 @@ #:toast-variant #:render-toast #:dismiss-toast - #:*toasts* - ;; Tests - #:dialog-create - #:dialog-size-small - #:dialog-size-medium - #:dialog-push-pop - #:toast-create - #:toast-dismiss)) + #:*toasts*)) diff --git a/src/components/markdown-package.lisp b/src/components/markdown-package.lisp index ca97c8c..ce65b20 100644 --- a/src/components/markdown-package.lisp +++ b/src/components/markdown-package.lisp @@ -3,63 +3,9 @@ (defpackage :cl-tty.markdown (:use :cl) (:export - ;; Data structures - #:make-md-node - #:md-node-p - #:md-node-text - ;; Parsing - #:parse-blocks - #:parse-inline - ;; Highlighting - #:*syntax-highlighters* - #:highlight-code - ;; Diff - #:classify-diff-line - ;; Rendering - #:render-md - #:render-md-node - #:render-markdown - #:render-inline - ;; Styles - #:apply-style - #:apply-styles - ;; Tests (exported test symbols for ASDF integration) - #:heading-parsing - #:heading-levels - #:heading-with-inline-formatting - #:paragraph-parsing - #:paragraph-multi-line - #:bold-parsing - #:italic-parsing - #:bold-italic-combined - #:inline-code-parsing - #:link-parsing - #:code-block-parsing - #:code-block-unknown-language - #:blockquote-parsing - #:list-item-parsing - #:ordered-list-parsing - #:thematic-break-parsing - #:highlight-lisp-keyword - #:highlight-lisp-builtin - #:highlight-unknown-language - #:highlight-comment - #:classify-diff-added - #:classify-diff-removed - #:classify-diff-hunk - #:classify-diff-context - #:render-heading-output - #:render-paragraph-output - #:render-thematic-break-output - #:render-code-block-output - #:render-diff-block-output - #:markdown-integration - #:render-markdown-string - ;; Internal (for testability) - #:classify-line - #:split-string-into-lines - #:find-closing-marker - #:string-prefix-p - #:tokenize-line - #:apply-highlight-token - #:apply-highlight-style)) + #:make-md-node #:md-node-p #:md-node-text + #:parse-blocks #:parse-inline + #:*syntax-highlighters* #:highlight-code + #:classify-diff-line #:render-md #:render-md-node + #:render-markdown #:render-inline + #:apply-style #:apply-styles)) diff --git a/src/components/mouse.lisp b/src/components/mouse.lisp index 9a6aee0..4361f11 100644 --- a/src/components/mouse.lisp +++ b/src/components/mouse.lisp @@ -17,8 +17,10 @@ (defun hit-test (root x y) (labels ((recurse (node) - (when (and (slot-boundp node 'x) (slot-boundp node 'y) - (slot-boundp node 'width) (slot-boundp node 'height)) + (when (and (slot-exists-p node 'x) (slot-boundp node 'x) + (slot-exists-p node 'y) (slot-boundp node 'y) + (slot-exists-p node 'width) (slot-boundp node 'width) + (slot-exists-p node 'height) (slot-boundp node 'height)) (let ((nx (slot-value node 'x)) (ny (slot-value node 'y)) (nw (slot-value node 'width)) diff --git a/src/rendering/framebuffer.lisp b/src/rendering/framebuffer.lisp index e091198..d4d3929 100644 --- a/src/rendering/framebuffer.lisp +++ b/src/rendering/framebuffer.lisp @@ -75,14 +75,16 @@ :bold bold :italic italic :underline underline :link-url link-url))))) -(defmethod draw-text ((fb framebuffer-backend) x y string fg bg &rest attrs) +(defmethod draw-text ((fb framebuffer-backend) x y string fg bg + &key bold italic underline reverse dim blink + (link-url nil link-url-p) + &allow-other-keys) + (declare (ignore reverse dim blink link-url-p)) (loop for i from 0 below (length string) do (%set-cell fb (+ x i) y (char string i) :fg fg :bg bg - :bold (getf attrs :bold) - :italic (getf attrs :italic) - :underline (getf attrs :underline) - :link-url (getf attrs :link-url)))) + :bold bold :italic italic :underline underline + :link-url link-url))) (defmethod draw-rect ((fb framebuffer-backend) x y w h &key fg bg style) (declare (ignore style)) diff --git a/tests/mouse-tests.lisp b/tests/mouse-tests.lisp index 7d3a90f..336163b 100644 --- a/tests/mouse-tests.lisp +++ b/tests/mouse-tests.lisp @@ -9,8 +9,10 @@ (is-true (typep m 'mouse-mixin)))) (def-test mouse-hit-test-point () + "hit-test returns nil when no component has position slots bound" (let ((obj (make-instance 'mouse-mixin))) - (is-true t))) ;; placeholder + (is-false (hit-test obj 0 0)) + (is-false (hit-test obj 100 100)))) (def-test selection-set-and-get () (setf cl-tty.mouse::*selection* (make-selection :text "hello"))