1
0
mirror of https://codeberg.org/cage/tinmop/ synced 2025-03-03 10:07:36 +01:00

- fixed rendering of text: all text is now rearranged to fit the

window.
This commit is contained in:
cage 2021-04-20 20:28:04 +02:00
parent 2f3e3c3e4a
commit 0cd1f77c7f

View File

@ -294,21 +294,21 @@
(defmethod text->rendered-lines-rows (window (text complex-string)) (defmethod text->rendered-lines-rows (window (text complex-string))
text) text)
(defgeneric collect-lines-from-ir (object)) (defgeneric collect-lines-from-ir (object window))
(defmethod collect-lines-from-ir ((object gemini-parser:with-lines)) (defmethod collect-lines-from-ir ((object gemini-parser:with-lines) (window message-window))
(let ((colorized-lines (colorize-lines (gemini-parser:lines object)))) (let ((colorized-lines (colorize-lines (%fit-lines window (gemini-parser:lines object)))))
(loop for i in colorized-lines (loop for i in colorized-lines
collect collect
(make-instance 'line (make-instance 'line
:normal-text i)))) :normal-text i))))
(defmethod text->rendered-lines-rows (window (text gemini-parser:quoted-lines)) (defmethod text->rendered-lines-rows (window (text gemini-parser:quoted-lines))
(collect-lines-from-ir text)) (collect-lines-from-ir text window))
(defmethod text->rendered-lines-rows (window (text gemini-parser:header-line)) (defmethod text->rendered-lines-rows (window (text gemini-parser:header-line))
(let* ((group-id (gemini-parser:group-id text)) (let* ((group-id (gemini-parser:group-id text))
(lines (collect-lines-from-ir text)) (lines (collect-lines-from-ir text window))
(res (mapcar (lambda (a) (res (mapcar (lambda (a)
(let ((line (row-add-original-object a text))) (let ((line (row-add-original-object a text)))
(row-add-group-id line group-id))) (row-add-group-id line group-id)))
@ -316,15 +316,18 @@
res)) res))
(defmethod text->rendered-lines-rows (window (text gemini-parser:unordered-list-line)) (defmethod text->rendered-lines-rows (window (text gemini-parser:unordered-list-line))
(collect-lines-from-ir text)) (collect-lines-from-ir text window))
(defmethod text->rendered-lines-rows (window (text gemini-parser:link-line)) (defmethod text->rendered-lines-rows (window (text gemini-parser:link-line))
(let ((res (collect-lines-from-ir text))) (let ((res (collect-lines-from-ir text window)))
(row-add-original-object res text) (row-add-original-object res text)
res)) ; even if row-add-original-object returns the modified line explicit returns for clarity res)) ; even if row-add-original-object returns the modified line explicit returns for clarity
(defmethod text->rendered-lines-rows (window (text string)) (defun %fit-text (window text)
(labels ((fit-lines (lines) (let ((lines (split-lines text)))
(%fit-lines window lines)))
(defun %fit-lines (window lines)
(let ((res ())) (let ((res ()))
(loop for line in lines do (loop for line in lines do
(cond (cond
@ -337,16 +340,17 @@
(win-width-no-border window)) (win-width-no-border window))
do do
(push fitted-line res))))) (push fitted-line res)))))
(reverse res)))) (reverse res)))
(let* ((lines (split-lines text))
(fitted-lines (fit-lines lines)) (defmethod text->rendered-lines-rows (window (text string))
(let* ((fitted-lines (%fit-text window text))
(new-rows (colorize-lines fitted-lines))) (new-rows (colorize-lines fitted-lines)))
(mapcar (lambda (text-line) (mapcar (lambda (text-line)
(if (typep text-line 'line) (if (typep text-line 'line)
text-line text-line
(make-instance 'line (make-instance 'line
:normal-text text-line))) :normal-text text-line)))
new-rows)))) new-rows)))
(defun remove-invisible-rows (rows) (defun remove-invisible-rows (rows)
(remove-if #'row-invisible-p rows)) (remove-if #'row-invisible-p rows))