(修正)Hiccup を JSP 対応させてみたのでメモ

前の記事「Hiccup を JSP 対応させてみたのでメモ - oknknicの日記」はあまりにもあんまり過ぎたので書き直し。

改変内容

Hiccupバージョン:1.0.3
対象ファイル:hiccup/compiler.clj
置き換え対象関数:render-element

(defn- render-element
  "Render an element vector as a HTML element."
  [element]
  (let [[tag attrs content] (normalize-element element)]
    (if (or content (container-tags tag))
      (if (.startsWith tag "%")				;Add for JSP(%)
        (str "<" tag " " (render-html content) " %>")	;Add for JSP(%)
        (str "<" tag (render-attr-map attrs) ">"
           (render-html content)
           "</" tag ">"))
    (str "<" tag (render-attr-map attrs) (end-tag)))))

ビルド

lein jar

利用例

(use :reload 'hiccup.core)

(html [:%= "hoge"])
; -> "<%= hoge %>"

(html ["%@" "page contentType=\"text/html;charset=Shift_JIS\""])
; -> "<%@ page contentType=\"text/html;charset=Shift_JIS\" %>"

(html [:jsp:forward {:page "hoge.jsp"}])
; -> "<jsp:forward page=\"hoge.jsp\" />"

(html [:jsp:forward {:page "hoge.jsp"}
        [:jsp:param {:name "param1" :value "hoge"}]])
; -> "<jsp:forward page=\"hoge.jsp\"><jsp:param name=\"param1\" value=\"hoge\" /></jsp:forward>"

(html [:c:forEach {:var "i" :begin "0" :end "5" :step "1"}
        [:c:out {:value "${i}"}]])
; -> "<c:forEach begin=\"0\" end=\"5\" step=\"1\" var=\"i\"><c:out value=\"${i}\" /></c:forEach>"