Concurrent Clean : HTML
http://page.freett.com/shelarcy/log/2006/diary_11.html#where_is_stdhtml
shelarcyさんから突っ込みが入っていますが、私がやろうとしているのはそんな繊細なものでもなくて、泥臭いテンプレートライブラリです。でも、そういう泥臭いことをするにもCleanは結構便利だよということは言えるのかも。
-
-
- -
-
ということで、少し形になってきました。下のように __HTMLSTART__ から __HTMLEND__ で囲んだ部分を、HTMLとして扱うプリプロセッサを作っています。CleanのプログラムにHTMLを埋め込んで使います。
ちなみに、この段階で、プリプロセッサの行数は、80行程度です。自作ライブラリを書きながらなので、そっちで行数を稼いでいるところはありますが、それでも短いと思います。
module PageIndex import StdEnv, OptEnv, Html Start w # (f,w) = stdio w f = f --> printHttpHeader ["Content-type: text/html"] --> printHtml page (_,w) = fclose f w = w page = __HTMLSTART__ <HTML> <HEAD> <TITLE>CGI by Clean</TITLE> </HEAD> <BODY> <H1 class="title">HELLO WORLD.</H1> </BODY> </HTML> __HTMLEND__
変換後は、
page = [HtmlText "<HTML>", HtmlText "\n" ,HtmlText "<HEAD>", HtmlText "\n" ,HtmlText "<TITLE>CGI by Clean</TITLE>", HtmlText "\n" ,HtmlText "</HEAD>", HtmlText "\n" ,HtmlText "<BODY>", HtmlText "\n" ,HtmlText "<H1 class=\"title\">HELLO WORLD.</H1>", HtmlText "\n" ,HtmlText "</BODY>", HtmlText "\n" ,HtmlText "</HTML>", HtmlText "\n" ]
となります。
-
-
- -
-
Cleanの式を埋め込む機能を追加しました。
page s = __HTMLSTART__ <HTML> <HEAD> <TITLE>CGI by Clean</TITLE> </HEAD> <BODY> <H1 class="title"><% s %></H1> </BODY> </HTML> __HTMLEND__
JSPな人の「<% %>」とPHPな人の「<? ?>」の両方が使えます。囲んだ中がCleanの式としてそのまま埋め込まれます。
--> printHtml (page (HtmlText "Hello World."))
というように呼び出します。
これで、120行くらい。