fix: render canonical Ebox inputs in Playground

This commit is contained in:
Kinneyzhang 2026-08-28 16:48:33 +08:00
parent 81957acdf3
commit 2e9a303424
2 changed files with 20 additions and 16 deletions

View File

@ -158,8 +158,10 @@ CANVAS-BACKGROUND fills display space outside generated root lines."
(set (make-local-variable variable) value)
(kill-local-variable variable)))))
(defun ebox-playground--render-to-preview-buffer (buffer node)
"Render NODE into BUFFER with transactional preview display settings."
(defun ebox-playground--render-to-preview-buffer (buffer input)
"Render canonical INPUT into BUFFER with transactional display settings."
(unless (ebox-canonical-input-p input)
(signal 'wrong-type-argument (list 'ebox-canonical-input-p input)))
(with-current-buffer (get-buffer-create buffer)
(let ((snapshot (ebox-playground--preview-display-snapshot))
(published-p nil))
@ -167,21 +169,20 @@ CANVAS-BACKGROUND fills display space outside generated root lines."
(prog1
(progn
(ebox-playground--apply-preview-display-settings
(and (consp node)
(ebox-style-node-specified-value
node :background-color)))
(ebox-render-to-buffer buffer node))
(ebox-style-node-specified-value
input :background-color))
(ebox-render-to-buffer buffer input))
(setq published-p t))
(unless published-p
(ebox-playground--restore-preview-display-snapshot snapshot))))))
(defun ebox-playground--render-node-to-buffer (buffer node viewport-width)
"Render NODE into BUFFER using VIEWPORT-WIDTH.
(defun ebox-playground--render-input-to-buffer (buffer input viewport-width)
"Render canonical INPUT into BUFFER using VIEWPORT-WIDTH.
Visible mounted buffers follow their window through Ebox's viewport controller."
(let ((ebox-viewport-width
(or viewport-width
(ebox-playground--effective-viewport-width))))
(ebox-playground--render-to-preview-buffer buffer node)))
(ebox-playground--render-to-preview-buffer buffer input)))
(defun ebox-playground--static-value-p (value)
"Return non-nil when VALUE is a literal or explicitly quoted form."
@ -256,7 +257,7 @@ Visible mounted buffers follow their window through Ebox's viewport controller."
"Render the default Ebox DSL example into BUFFER-NAME and return its buffer."
(interactive)
(let ((viewport-width (ebox-playground--effective-viewport-width)))
(ebox-playground--render-node-to-buffer
(ebox-playground--render-input-to-buffer
(or buffer-name ebox-playground-buffer-name)
(ebox-playground-view nil viewport-width)
viewport-width)))
@ -266,7 +267,7 @@ Visible mounted buffers follow their window through Ebox's viewport controller."
"Render Ebox DSL FILE into BUFFER-NAME and return its buffer."
(interactive "fEbox DSL file: ")
(let ((viewport-width (ebox-playground--effective-viewport-width)))
(ebox-playground--render-node-to-buffer
(ebox-playground--render-input-to-buffer
(or buffer-name
(format "*Ebox Preview: %s*" (file-name-nondirectory file)))
(ebox-playground-view file viewport-width)

View File

@ -432,7 +432,8 @@
(let ((preview " *ebox-playground-preview-settings-test*"))
(unwind-protect
(progn
(ebox-playground--render-node-to-buffer preview "preview" 240)
(ebox-playground--render-input-to-buffer
preview (ebox-build '(box "preview")) 240)
(with-current-buffer preview
(should truncate-lines)
(should-not (assq 'truncation fringe-indicator-alist))
@ -471,7 +472,7 @@
ebox-playground-directory)))
(unwind-protect
(progn
(ebox-playground--render-node-to-buffer
(ebox-playground--render-input-to-buffer
preview (ebox-playground-view path 720) 720)
(with-current-buffer preview
(should (equal face-remapping-alist
@ -580,9 +581,11 @@
(ert-deftest ebox-playground-fits-a-compact-gui-window ()
"Keep the gallery wide enough to teach Grid without crossing 800 px frames."
(let* ((node (ebox-playground-view))
(gallery-width (plist-get (car (plist-get node :children)) :width))
(rendered (ebox-render node))
(let* ((input (ebox-playground-view))
(root (car (ebox-canonical-input-roots input)))
(gallery-width
(plist-get (car (ebox-box-node-children root)) :width))
(rendered (ebox-render input))
(widths (mapcar #'ebox-string-pixel-width
(ebox-string-lines rendered)))
(maximum (apply #'max widths)))