blob: fdae7ed73e3daf5040632d17a0db331be42e2f96 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
(in-package :html-jen)
(defparameter *indent* 0)
(defparameter *indent-increment* 2)
(defparameter *yeni-satır* t)
(defgeneric node->html (node stream)
(:documentation "NODE u STREAM e yazar"))
(defun tag-yeni-satır? (tag)
(case tag
((:html :head :body) t)
((:title :p) nil)))
(defmethod node->html :before (node stream)
(loop :for i :from 0 :below *indent*
:do (write-char #\Space stream))
(setf *yeni-satır* nil)
(if (null (props node))
(format stream "<~a>" (tag node))
(loop :initially (format stream "<~a" (tag node))
:for (k v) :on (props node) :by #'cddr
:do (format stream " ~a=\"~a\"" k v)
:finally (write-char #\> stream)))
(when (tag-yeni-satır? (tag node))
(write-char #\Newline stream)
(setf *yeni-satır* t)))
(defmethod node->html (node stream)
(if (null (children node))
(format stream "~a" (value node))
(let ((*indent* (+ *indent* *indent-increment*)))
(loop :for child :in (children node)
:do (node->html child stream)))))
(defmethod node->html :after (node stream)
(unless (null *yeni-satır*)
(loop :for i :from 0 :below *indent*
:do (write-char #\Space stream)))
(format stream "</~a>~%" (tag node))
(setf *yeni-satır* t))
(defparameter bir-node
(node! :html (list (node! :head
(list (node! :title nil nil "başlık"))
nil nil)
(node! :body
(list (node! :p nil '(:color "red") "içerik"))
nil nil))
nil nil))
|