Blame


1 6b4d9ef2 2020-11-09 op (in-package #:phos/ui)
2 6b4d9ef2 2020-11-09 op
3 6b4d9ef2 2020-11-09 op (defgeneric render (obj frame)
4 6b4d9ef2 2020-11-09 op (:documentation "Render OBJ in the ltk FRAME"))
5 6b4d9ef2 2020-11-09 op
6 6b4d9ef2 2020-11-09 op (defmethod render ((l list) f)
7 6b4d9ef2 2020-11-09 op (dolist (el l)
8 6b4d9ef2 2020-11-09 op (render el f)))
9 6b4d9ef2 2020-11-09 op
10 6b4d9ef2 2020-11-09 op (defmethod render ((title gemtext:title) f)
11 6b4d9ef2 2020-11-09 op (with-slots ((text phos/gemtext:text)
12 6b4d9ef2 2020-11-09 op (level phos/gemtext:level))
13 6b4d9ef2 2020-11-09 op title
14 6b4d9ef2 2020-11-09 op (let ((w (make-instance 'label
15 6b4d9ef2 2020-11-09 op :master f
16 6b4d9ef2 2020-11-09 op :text (format nil "#(level ~a) ~a" level text))))
17 6b4d9ef2 2020-11-09 op (pack w :side :top))))
18 6b4d9ef2 2020-11-09 op
19 6b4d9ef2 2020-11-09 op (defmethod render ((link gemtext:link) f)
20 6b4d9ef2 2020-11-09 op (with-slots ((text phos/gemtext:text)
21 6b4d9ef2 2020-11-09 op (url phos/gemtext:url))
22 6b4d9ef2 2020-11-09 op link
23 6b4d9ef2 2020-11-09 op (let ((w (make-instance 'button
24 6b4d9ef2 2020-11-09 op :master f
25 6b4d9ef2 2020-11-09 op :text (format nil "~a" (or text url)))))
26 6b4d9ef2 2020-11-09 op (pack w :side :top))))
27 6b4d9ef2 2020-11-09 op
28 6b4d9ef2 2020-11-09 op (defmethod render ((item gemtext:item) f)
29 6b4d9ef2 2020-11-09 op (with-slots ((text phos/gemtext:text)) item
30 6b4d9ef2 2020-11-09 op (let ((w (make-instance 'label
31 6b4d9ef2 2020-11-09 op :master f
32 6b4d9ef2 2020-11-09 op :text (format nil "* ~a" text))))
33 6b4d9ef2 2020-11-09 op (pack w :side :top))))
34 6b4d9ef2 2020-11-09 op
35 6b4d9ef2 2020-11-09 op (defmethod render ((par gemtext:paragraph) f)
36 6b4d9ef2 2020-11-09 op (with-slots ((text phos/gemtext:text)) par
37 6b4d9ef2 2020-11-09 op (let ((w (make-instance 'label
38 6b4d9ef2 2020-11-09 op :master f
39 6b4d9ef2 2020-11-09 op :text text)))
40 6b4d9ef2 2020-11-09 op (pack w :side :top))))
41 6b4d9ef2 2020-11-09 op
42 6b4d9ef2 2020-11-09 op (defmethod render ((v gemtext:verbatim) f)
43 6b4d9ef2 2020-11-09 op (with-slots ((text phos/gemtext:text)
44 6b4d9ef2 2020-11-09 op (alt phos/gemtext:alt))
45 6b4d9ef2 2020-11-09 op v
46 6b4d9ef2 2020-11-09 op (let ((w (make-instance 'label
47 6b4d9ef2 2020-11-09 op :master f
48 6b4d9ef2 2020-11-09 op :text (format nil "```~a~%~a~&```"
49 6b4d9ef2 2020-11-09 op (or alt "")
50 6b4d9ef2 2020-11-09 op text))))
51 6b4d9ef2 2020-11-09 op (pack w :side :top))))
52 6b4d9ef2 2020-11-09 op
53 6b4d9ef2 2020-11-09 op (defun render-page (page)
54 6b4d9ef2 2020-11-09 op (with-ltk ()
55 6b4d9ef2 2020-11-09 op (let ((frame (make-instance 'frame)))
56 6b4d9ef2 2020-11-09 op (pack frame)
57 6b4d9ef2 2020-11-09 op (render page frame))))
58 6b4d9ef2 2020-11-09 op
59 6b4d9ef2 2020-11-09 op (defvar doc (with-open-file (stream #P"~/quicklisp/local-projects/phos/test.gmi")
60 6b4d9ef2 2020-11-09 op (gemtext:parse stream)))
61 6b4d9ef2 2020-11-09 op
62 6b4d9ef2 2020-11-09 op ;; (render-page doc)