For Gauche 0.9.5


Next: , Previous: , Up: ライブラリモジュール - ユーティリティ   [Contents][Index]

12.52 text.html-lite - シンプルなHTMLドキュメントの構築

Module: text.html-lite

HTML ドキュメントを簡単に構築するための手続きを提供します。 例えば、以下のコードは HTML のテーブルを構築します。

(html:table
  (html:tr (html:th "Item No") (html:th "Quantity"))
  (html:tr (html:td 1) (html:td 120))
  (html:tr (html:td 2) (html:td 30))
  (html:tr (html:td 3) (html:td 215)))

詳細については、以下の html:element の説明を見てください。

このモジュールでは生成されたHTMLドキュメントに関して、 例えばアトリビュートに有効な値が入っているか、要素の内容はDTDを満たしているか、 等のチェックをほとんど行いません。また、HTMLをパーズする関数も提供されません。 それが「lite」の名の由来です。

Function: html-escape
Function: html-escape-string string

HTML に含まれる"安全でない"文字をエスケープします。 html-escape は、現在の入力ポートから文字列を読み込み、 結果を現在の出力ポートへ書き出します。html-escape-stringstring を入力とし、文字列を返します。

Function: html-doctype :key type

HTML ドキュメントの文書型宣言を返します。 type は、以下のいずれかを指定します (デフォルトは:html-4.01-strict です)。

:html-4.01-strict, :html-4.01, :strict

HTML 4.01 Strict DTD

:html-4.01-transitional, :transitional

HTML 4.01 Transitional DTD

:html-4.01-frameset, :frameset

HTML 4.01 Frameset DTD

:xhtml-1.0-strict, :xhtml-1.0

XHTML 1.0 Strict DTD

:xhtml-1.0-transitional

XHTML 1.0 Transitional DTD

:xhtml-1.0-frameset

XHTML 1.0 Frameset DTD

:xhtml-1.1

XHTML 1.1 DTD

Function: html: element args

element の HTML 要素を構築します。現時点では以下の要素が サポートされています。 (HTML 4.01 DTD http://www.w3.org/TR/html4/sgml/dtd.html に定義されている要素です)。

a        abbr       acronym    address     area      b
base     bdo        big        blockquote  body      br
button   caption    cite       code        col       colgroup
dd       del        dfn        div         dl        dt
em       fieldset   form       frame       frameset
h1       h2         h3         h4          h5        h6
head     hr         html       i           iframe    img
input    ins        kbd        label       legend    li
link     map        meta       nofrmaes    noscript  object
ol       optgroup   option     p           param     pre
q        samp       script     select      small     span
strong   style      sub        sup         table     tbody
td       textarea   tfoot      th          thead     title
tr       tt         ul         var

これらの手続きは、テキスト・セグメントのツリーを返すので、 write-tree でポートに書き出したり、tree->string で 文字列に変換したりできます (怠惰なテキスト構築参照)。

要素のアトリビュートは要素の内容に先立つキーワード-値の表記で指定することができます。

(tree->string (html:a :href "http://foo/bar" "foobar"))
  ⇒
  "<a href=\"http://foo/bar\">foobar</a\n>"

(tree->string
  (html:table :width "100%" :cellpading 0 "content here"))
  ⇒
  "<table width=\"100%\" cellpadding=\"0\">content here</table\n>"

属性に与える真偽値は特別な意味を持ちます。 #t が与えられると、属性は値なしでレンダリングされます。 #f が与えられると、属性それ自体がレンダリングされません。

(tree->string (html:table :border #t))
  ⇒ "<table border></table\n>"

(tree->string (html:table :border #f))
  ⇒ "<table></table\n>"

属性の値における特別な文字は、手続きによってエスケープされますが、 要素の内容にある特別な文字はエスケープされません。それをエスケープ するのは呼び出し側の責任です。

内容を持たない HTML 要素に内容を与えると手続きはエラーを通知します。 手続きは、与えられた属性が妥当であるか、与えられた内容がその要素に とって妥当であるかのチェックはしません。

注意: これらの手続は改行を終了タグの>の前に挿入することに注意してくだ さい。つまり、HTMLをレンダリングすると以下のようになります。

<table><tr><td>foo</td
><td>bar</td
></tr
></table
>

終了ダグの後に改行をいれないのは意図的なものです。改行が意味をも つかどうかは外側の文脈に依存するからです。たとえば、<head>要素 の直下にある要素の後に改行を入れてもテキストの内容には影響を与えませんが、 <p>要素中で改行を入れるとそれは内容の一部となってしまいます。

3つ可能性があって、(1) 改行は全く入れない、(2) タグの中だけで改行を入 れる。(3) 安全な場所にのみ改行をいれる。最初の場合はHTMLは一行になり、 正当なHTMLではあるものの、行指向のツールで処理するには不便です。3番目 の場合はレンダリングするのにDTDをちゃんと見るツールが必要になります。 というわけで、ここでは2番目のアプローチを取っています。


Next: , Previous: , Up: ライブラリモジュール - ユーティリティ   [Contents][Index]