text.html-lite
- シンプルなHTMLドキュメントの構築 ¶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」の名の由来です。
{text.html-lite
}
HTML に含まれる"安全でない"文字をエスケープします。
html-escape
は、現在の入力ポートから文字列を読み込み、
結果を現在の出力ポートへ書き出します。html-escape-string
は
string を入力とし、文字列を返します。
{text.html-lite
}
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
{text.html-lite
}
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 noframes 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
で
文字列に変換したりできます
(text.tree
- 怠惰なテキスト構築参照)。
要素のアトリビュートは要素の内容に先立つキーワード-値の表記で指定することができます。
(tree->string (html:a :href "http://foo/bar" "foobar")) ⇒ "<a href=\"http://foo/bar\">foobar</a\n>" (tree->string (html:table :width "100%" :cellpadding 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番目のアプローチを取っています。