hexo테마 hexo로 블로그를 만들면서 테마때문에 꽤 골치를썩음. 일단 요 테마 strict 는 jade 라는 nodejs템플릿 라이브러리를 쓰고있음 그런데 보면 jade는 일정 형식을 가진 소스코드 -> 컴파일 -> html 의 구조를 갖는 템플릿 엔진이었다.
몇번 굴려보고 느낀점은.. 야 이럴거면 그냥 clojure 하지;..
어쩌다보니 그냥 clojure 얘기 클로져 (혹은 다른 lisp, scheme 류) 에서는 이미 저런 시도가 흔하다.
hiccup.core.html link 1
2
3
4
5
6
7
8
9
10
11
12
(html [:div#foo.bar.baz "bang" ])
(html [:ul
(for [x (range 1 4 )]
[:li x])])
클로져의 웹프레임워크 라이브러리중 하나인 lib-noir 를 쓰면 defpage
매크로를 써서 url에 즉시 바인딩 시킬 수 있다.
1
2
3
4
5
(defpage "/test" []
(hic/html [:html
[:head ]
[:body
[:h1 "Hello" ]]]))
지금도 잘 쓰고있는 자바 라이브러리로 stripe 라는게 있다. 앞서 얘기한 재료를 잘 반죽하여 stripe
를 구현할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
(defpartial layout [ & {:keys [script
header
content
footer]}]
(html5
[:head
[:title "my-website" ]
(include-css "/css/reset.css" )
(include-js "/js/main.js" )
`(~@script)]
[:body
[:div#header `(~@header)]
[:div#wrapper `(~@content)]
[:div#tail `(~@footer)]]))
(defpage "/foo/page/select" []
(layout
:script
[[:script "my_website.core.alert_hello('hello');" ]]
:header
[[:h1 "Hello" ]]
:content
[[:table ]]))
결론 물론 php, jsp 등 흔히 server page 라고 부르는 방식으로 만들수고 있고, html을 파싱해다가 원하는 부분만 코드가 개입하도록 할 수도 있다. 요건 개취인듯. 하지만 협업을 포기한다면 (다른데는 모르겠고, 우리나라에서는 반드시 포기해야한다) clojure의 저 접근이 괜찮은듯. jade는 몰라.