Gaucheプログラミング(立読み版)

手軽にHTMLを生成する Slideshow

CGIプログラムなど、HTMLを生成したい場合がしばしばあります。

文字列として書くことがまず考えられますが、他のスクリプト言語と異なりGaucheにはヒアドキュメントがないのでこの方法はやや煩雑です。

例:

 gosh> (print "<tr><td>日</td><td>月</td><td>火</td></tr>")
 <tr><td>日</td><td>月</td><td>火</td></tr>
 #<undef>

Gaucheには手軽にHTMLを生成するためのtext.html-liteライブラリが用意されています。text.html-liteライブラリを使うと、上記の例のHTMLは次の通りに書けます。

(html:tr (html:td "日") (html:td "月") (html:td "火"))

または(list "日" "月" "火")というリストがあったとき、map手続きを使って次の通りにも書けます。

(html:tr (map html:td (list "日" "月" "火"))) ;; html:tdをmapでリストに適用

text.html-liteライブラリで使用できる要素名

一般的にtext.html-liteライブラリでは、

 html:要素名

の書式でHTML要素を記述します。

text.html-liteライブラリで使える要素名は、現時点ではHTML 4.01 DTD http://www.w3.org/TR/html4/sgml/dtd.html で定義されている要素です。

text.html-liteライブラリで記述した“HTML要素のリスト構造”をひとつの文字列に変換する

text.html-liteライブラリで構築したHTMLは要素のリストです。リストとして扱うのではなく一つの文字列に変換するにはtext.treeライブラリのtree->string手続きを使う必要があります。

例:

 gosh> (html:tr (map html:tr (list "日" "月" "火")))
 (#0="<" tr () #1=">" (((#0# tr () #1# ("日") #2="</" tr #3="\n>") (#0# tr () #1# ("月") #2# tr #3#) (#0# tr () #1# ("火") #2# tr #3#))) #2# tr #3#)
 
 gosh> (use text.tree)
 #<undef>
  gosh> (tree->string (html:tr (map html:td (list "日" "月" "火"))))
 "<tr><td>日</td\n><td>月</td\n><td>火</td\n></tr\n>"

文字列に変換するだけではなく現在の出力ポートに出力するにはtext.treeライブラリのwrite-tree手続きを使います。

例:

 gosh> (write-tree (html:tr (map html:td (list "日" "月" "火"))))
 <tr><td>日</td
 ><td>月</td
 ><td>火</td
 ></tr
 >#t
 by えんどうやすゆき

Comment Form:

コメント・トラックバック規約を必ずお読みください。

 

Comments:

2007/04/30 11:50:02 shiro
text.html-liteが返すのは「HTML要素のリスト構造」ではない。
単に、テキストをローコストで構築する方法としてコンスセルを使ってるだけ。

あと、閉じタグの中に改行が入ることについてはよく質問が出ることなんで
説明があったほうがいいと思う。

Trackback URL: http://karetta.jp/trackback/book/011270/011284

Trackbacks:


このサイトについて|ヘルプ|Q&A|個人情報保護|プライバシーポリシー|利用規約|コメント・トラックバック規約|削除規程|広告掲載
Copyright (c) 2005-2007 Time Intermedia Corporation