#?SuikaWiki/0.9
[2] HTML 4
は、次を[DFN[[RUBYB[[[空白]]] [white space]]文字]]としています。
- [[ASCII]] [[間隔]] ([CODE(char)[U+0020]] [CODE(char)[[[SPACE]]]]))
- ASCII [[タブ]] ([CODE(char)[U+0009]] [CODE(char)[HORIZONTAL TAB]])
- ASCII [[改頁]] ([[書式送り]]) ([CODE(char)[U+000C]] [CODE(char)[FORM FEED]])
- [[零幅間隔]] ([CODE(char)[U+200C]] [CODE(char)[ZERO-WIDTH SPACE]])
- [RUBYB[[[改行]]] [line break]]
-- [[復帰]] ([CODE(char)[U+000D]] [CODE(char)[CARRIAGE RETURN]])
-- 改行 ([[行送り]]) ([CODE(char)[U+000A]] [CODE(char)[LINE FEED]])
-- 復帰改行組 ([CODE(char)[[[CRLF]]]])
です。 HTML 4 の[[文書文字集合]]には他にも定義によっては空白文字に属する[[文字]]が色々含まれていますが、
HTML 4 の空白は上記だけです。
HTML 4 仕様書は、他の種類の空白の扱いについては規定せず、
[[著者]]は空白制御のためには適切な[[要素]]や[[スタイル]]を使うべき (should)
としています。
[3] [CODE(HTMLe)[[[pre]]]] 以外の HTML 要素では、
空白が「[DFN[語]]」を分離します。
(ここで、語とは、非空白文字の連続体のことです。)
[[UA]] は、[[書式付け]]に際して、その[[言語]]・[[用字系]]および対象[[媒体]]の慣習に従って語を識別し、これを配置するべきです
(should)。
語間に間隔 ([DFN[[RUBYB[語間] [inter-word]]間隔]]) を挿入すると見た目が向上するかもしれません。
しかし、間隔の取り方に関する慣習は言語・用字系により種々です。
HTML 4 仕様書が挙げている例では、
- [[ラテン文字]]では間隔を挿入する
- [[タイ文字]]では零幅間隔を挿入する
-- 注: [[タイ語]]は、日本語や中文のように語間間隔を入れずに表記します。
だけど零幅間隔を使えば単語境界を機械的に識別できるじゃん! という文脈でよく例になります。
(しかしながら、 [[TIS620]] には零幅間隔はないと思うし、本当に使われているんだか。)
- [[日本語]]や[[中文]]では全く語間間隔を表示しない
[[原始文書]]中の空白列は、全く異なって[[レンダリング]]されるかもしれないことに注意が必要です。
UA は、原始文書中の空白列をレンダリングするときにはまとめて1つ分の語間間隔にするべきです。
これは、自然言語情報 ([CODE(HTMLa)[[[lang]]]] 属性や上位プロトコルからの値)
が得られないときでも行うことができ、また行うべき
(can & should) とされています。
空白が重要なときには、 [CODE(HTMLe)[pre]] 要素型を使います。
[4] [[SGML]] の規定や既存 UA 実装の問題から、
[[開始タグ]]直後や[[終了タグ]]直前の空白が表示されることを当てにするべきではありません
(should not)。
たとえば、 [SAMP(HTML)[I love you.]]
を [SAMP(HTML)[I love you.]] と書いてしまうと、
意図とは異なることが多いでしょう。
SGML の問題は、[[記録開始]]や[[記録終了]]の無視に関する規則のことで、
[[タグ]]の前後に改行があるときに注意が必要です。
詳しくは [CODE(SGML)[[[SGML//空白]]]]を参照。
[[#comment]]
* FORM FEED
[5] HTML 4 は、 >>2 の通り、 [CODE(char)[U+000C]]
[CODE(char)[FORM FEED]] ([[改頁]]) を空白の一種としています。
ところが、 HTML 4 の [[SGML宣言]]
は、 [CODE(char)[U+000C]] を [CODE(SGML)[[[UNUSED]]]]
としています。もちろん [CODE(SGML)[[[s]]]] にも含まれません。
SGML 宣言を信じるとすると、 [CODE(char)[U+000C]]
は HTML 4 では使用できず、 >>2 の規定は無駄になります。
[6] ''XHTML 1.0 C.15. White Space Characters in HTML vs. XML''
は、 HTML では [CODE(char)[U+000C]]
を使えるが、 XHTML では使えないと言っています。
[7] 本文が正しく、 [CODE(char)[U+000C]] が使えたとしても、
[CODE(SGML)[s]] には含まれないので、 HTML 文書の本文では >>2
の通りの扱いを受けますが、 SGML 的には空白として使えません
(例えば[[属性指定]]の間には使えません)。
[[#comment]]
* ZWSP
[8] [CODE(char)[U+200C]] [CODE(char)[ZERO-WIDTH SPACE]]
は >>2 の通り HTML で空白として扱われます。
しかし、 SGML 宣言によれば、 [CODE(SGML)[s]]
には含まれません。ですから、 HTML 文書の本文では >>2
の通りの扱いを受けますが、 SGML 的には空白として使えません
(例えば属性指定の間には使えません)。
[[#comment]]
* メモ