1 |
|
* HTML 4 の規定 |
2 |
|
[2] HTML 4 <IW:HTML4:"struct/text.html#whitespace"> |
3 |
[2] HTML 4 <IW:HTML4:"struct/text.html#whitespace"> |
は、次を[DFN[[RUBYB[[[空白]]] [white space]]文字]]としています。 |
4 |
は、次を[DFN[[RUBYB[[[空白]]] [white space]]文字]]としています。 |
- [[ASCII]] [[間隔]] ([CODE(char)[U+0020]] [CODE(char)[[[SPACE]]]])) |
5 |
- [[ASCII]] [[間隔]] ([CODE(char)[U+0020]] [CODE(char)[[[SPACE]]]])) |
- ASCII [[タブ]] ([CODE(char)[U+0009]] [CODE(char)[HORIZONTAL TAB]]) |
6 |
- ASCII [[タブ]] ([CODE(char)[U+0009]] [CODE(char)[HORIZONTAL TAB]]) |
- ASCII [[改頁]] ([[書式送り]]) ([CODE(char)[U+000C]] [CODE(char)[FORM FEED]]) |
7 |
- ASCII [[改頁]] ([[書式送り]]) ([CODE(char)[U+000C]] [CODE(char)[FORM FEED]]) |
- [[零幅間隔]] ([CODE(char)[U+200C]] [CODE(char)[ZERO-WIDTH SPACE]]) |
8 |
- [[零幅間隔]] ([CODE(char)[U+200C]] [CODE(char)[ZERO-WIDTH SPACE]]) |
- [RUBYB[[[改行]]] [line break]] |
9 |
- [RUBYB[[[改行]]] [line break]] |
-- [[復帰]] ([CODE(char)[U+000D]] [CODE(char)[CARRIAGE RETURN]]) |
10 |
-- [[復帰]] ([CODE(char)[U+000D]] [CODE(char)[CARRIAGE RETURN]]) |
-- 改行 ([[行送り]]) ([CODE(char)[U+000A]] [CODE(char)[LINE FEED]]) |
11 |
-- 改行 ([[行送り]]) ([CODE(char)[U+000A]] [CODE(char)[LINE FEED]]) |
-- 復帰改行組 ([CODE(char)[[[CRLF]]]]) |
12 |
-- 復帰改行組 ([CODE(char)[[[CRLF]]]]) |
|
13 |
|
です。 HTML 4 の[[文書文字集合]]には他にも定義によっては空白文字に属する[[文字]]が色々含まれていますが、 |
14 |
です。 HTML 4 の[[文書文字集合]]には他にも定義によっては空白文字に属する[[文字]]が色々含まれていますが、 |
HTML 4 の空白は上記だけです。 |
15 |
HTML 4 の空白は上記だけです。 |
HTML 4 仕様書は、他の種類の空白の扱いについては規定せず、 |
16 |
HTML 4 仕様書は、他の種類の空白の扱いについては規定せず、 |
[[著者]]は空白制御のためには適切な[[要素]]や[[スタイル]]を使うべき (should) |
17 |
[[著者]]は空白制御のためには適切な[[要素]]や[[スタイル]]を使うべき (should) |
としています。 |
18 |
としています。 |
|
19 |
|
[3] [CODE(HTMLe)[[[pre]]]] 以外の HTML 要素では、 |
20 |
[3] [CODE(HTMLe)[[[pre]]]] 以外の HTML 要素では、 |
空白が「[DFN[語]]」を分離します。 |
21 |
空白が「[DFN[語]]」を分離します。 |
(ここで、語とは、非空白文字の連続体のことです。) |
22 |
(ここで、語とは、非空白文字の連続体のことです。) |
[[UA]] は、[[書式付け]]に際して、その[[言語]]・[[用字系]]および対象[[媒体]]の慣習に従って語を識別し、これを配置するべきです |
23 |
[[UA]] は、[[書式付け]]に際して、その[[言語]]・[[用字系]]および対象[[媒体]]の慣習に従って語を識別し、これを配置するべきです |
(should)。 |
24 |
(should)。 |
|
25 |
|
語間に間隔 ([DFN[[RUBYB[語間] [inter-word]]間隔]]) を挿入すると見た目が向上するかもしれません。 |
26 |
語間に間隔 ([DFN[[RUBYB[語間] [inter-word]]間隔]]) を挿入すると見た目が向上するかもしれません。 |
しかし、間隔の取り方に関する慣習は言語・用字系により種々です。 |
27 |
しかし、間隔の取り方に関する慣習は言語・用字系により種々です。 |
HTML 4 仕様書が挙げている例では、 |
28 |
HTML 4 仕様書が挙げている例では、 |
- [[ラテン文字]]では間隔を挿入する |
29 |
- [[ラテン文字]]では間隔を挿入する |
- [[タイ文字]]では零幅間隔を挿入する |
30 |
- [[タイ文字]]では零幅間隔を挿入する |
-- 注: [[タイ語]]は、日本語や中文のように語間間隔を入れずに表記します。 |
31 |
-- 注: [[タイ語]]は、日本語や中文のように語間間隔を入れずに表記します。 |
だけど零幅間隔を使えば単語境界を機械的に識別できるじゃん! という文脈でよく例になります。 |
32 |
だけど零幅間隔を使えば単語境界を機械的に識別できるじゃん! という文脈でよく例になります。 |
(しかしながら、 [[TIS620]] には零幅間隔はないと思うし、本当に使われているんだか。) |
33 |
(しかしながら、 [[TIS620]] には零幅間隔はないと思うし、本当に使われているんだか。) |
- [[日本語]]や[[中文]]では全く語間間隔を表示しない |
34 |
- [[日本語]]や[[中文]]では全く語間間隔を表示しない |
|
35 |
|
[[原始文書]]中の空白列は、全く異なって[[レンダリング]]されるかもしれないことに注意が必要です。 |
36 |
[[原始文書]]中の空白列は、全く異なって[[レンダリング]]されるかもしれないことに注意が必要です。 |
UA は、原始文書中の空白列をレンダリングするときにはまとめて1つ分の語間間隔にするべきです。 |
37 |
UA は、原始文書中の空白列をレンダリングするときにはまとめて1つ分の語間間隔にするべきです。 |
これは、自然言語情報 ([CODE(HTMLa)[[[lang]]]] 属性や上位プロトコルからの値) |
38 |
これは、自然言語情報 ([CODE(HTMLa)[[[lang]]]] 属性や上位プロトコルからの値) |
が得られないときでも行うことができ、また行うべき |
39 |
が得られないときでも行うことができ、また行うべき |
(can & should) とされています。 |
40 |
(can & should) とされています。 |
空白が重要なときには、 [CODE(HTMLe)[pre]] 要素型を使います。 |
41 |
空白が重要なときには、 [CODE(HTMLe)[pre]] 要素型を使います。 |
|
42 |
|
[4] [[SGML]] の規定や既存 UA 実装の問題から、 |
43 |
[4] [[SGML]] の規定や既存 UA 実装の問題から、 |
[[開始タグ]]直後や[[終了タグ]]直前の空白が表示されることを当てにするべきではありません |
44 |
[[開始タグ]]直後や[[終了タグ]]直前の空白が表示されることを当てにするべきではありません |
(should not)。 |
45 |
(should not)。 |
|
46 |
|
たとえば、 [SAMP(HTML)[I <a>love</a> you.]] |
47 |
たとえば、 [SAMP(HTML)[I <a>love</a> you.]] |
を [SAMP(HTML)[I<a> love </a>you.]] と書いてしまうと、 |
48 |
を [SAMP(HTML)[I<a> love </a>you.]] と書いてしまうと、 |
意図とは異なることが多いでしょう。 |
49 |
意図とは異なることが多いでしょう。 |
|
50 |
|
SGML の問題は、[[記録開始]]や[[記録終了]]の無視に関する規則のことで、 |
51 |
SGML の問題は、[[記録開始]]や[[記録終了]]の無視に関する規則のことで、 |
[[タグ]]の前後に改行があるときに注意が必要です。 |
52 |
[[タグ]]の前後に改行があるときに注意が必要です。 |
詳しくは [CODE(SGML)[[[SGML//空白]]]]を参照。 |
53 |
詳しくは [CODE(SGML)[[[SGML//空白]]]]を参照。 |
|
54 |
|
[[#comment]] |
55 |
[[#comment]] |
|
56 |
|
* XHTML m12n の規定 |
57 |
|
|
58 |
* FORM FEED |
[15] 適合 [[XHTML族利用者エージェント]]は次の規則に従って[[空白]]を処理しなければなりません |
59 |
|
[SRC[XHTML m12n 1.0 FE 3.5]]。 |
60 |
[5] HTML 4 は、 >>2 の通り、 [CODE(char)[U+000C]] |
|
61 |
[CODE(char)[FORM FEED]] ([[改頁]]) を空白の一種としています。 |
- [[空白]]は [[XML 1.0]] の [CODE(ABNF)[[[S]]]] |
62 |
|
と同じ4文字です。 |
63 |
ところが、 HTML 4 の [[SGML宣言]] |
-- [CODE(char)[[[U+0009]]]] [CODE(char)[[[HORIZONTAL TABULATION]]]]]] |
64 |
<http://www.w3.org/TR/html4/sgml/sgmldecl.html> |
-- [CODE(char)[[[U+000A]]]] [CODE(char)[[[LINE FEED]]]]]] |
65 |
は、 [CODE(char)[U+000C]] を [CODE(SGML)[[[UNUSED]]]] |
-- [CODE(char)[[[U+000D]]]] [CODE(char)[[[CARRIAGE RETURN]]]]]] |
66 |
としています。もちろん [CODE(SGML)[[[s]]]] にも含まれません。 |
-- [CODE(char)[[[U+0020]]]] [CODE(char)[[[SPACE]]]]]] |
67 |
|
- [[XML]] [[処理器]]は[[改行]]を[[正規化]]し、 |
68 |
SGML 宣言を信じるとすると、 [CODE(char)[U+000C]] |
[[応用]]に渡します。 |
69 |
は HTML 4 では使用できず、 >>2 の規定は無駄になります。 |
-[[利用者エージェント]]は [[XML]] [[処理器]]から受取ったデータを次のように処理しなければなりません。 |
70 |
|
-- [[ブロック要素]]を囲む[[空白]]はすべて除去するべきです。 |
71 |
[6] ''XHTML 1.0 C.15. White Space Characters in HTML vs. XML'' <http://www.w3.org/TR/xhtml1/#C_15> |
-- [[注釈]]は完全に除去し、[[空白]]の処理に影響させてません。 |
72 |
は、 HTML では [CODE(char)[U+000C]] |
[[注釈]]の両側の[[空白]]は2つの[[空白]]として扱います。 |
73 |
を使えるが、 XHTML では使えないと言っています。 |
-- [CODE(XMLa)[[[xml]]:[[space]]]] が [CODE(XML)[[[preserve]]]] |
74 |
|
であれば[[空白]]は保存しなければならず、[[ブロック]]中の |
75 |
[7] 本文が正しく、 [CODE(char)[U+000C]] が使えたとしても、 |
[CODE(char)[[[LINE FEED]]]] を変換してはなりません。 |
76 |
[CODE(SGML)[s]] には含まれないので、 HTML 文書の本文では >>2 |
-- [CODE(XMLa)[[[xml]]:[[space]]]] が [CODE(XML)[[[preserve]]]] |
77 |
の通りの扱いを受けますが、 SGML 的には空白として使えません |
でなければ、 |
78 |
(例えば[[属性指定]]の間には使えません)。 |
--- [[ブロック要素]]の先頭と末尾の[[空白]]は除去しなければなりません。 |
79 |
|
--- [CODE(char)[[[LINE FEED]]]] は |
80 |
[[#comment]] |
[CODE(char)[[[SPACE]]]], [CODE(char)[[[ZERO-WIDTH SPACE]]]] |
81 |
|
([CODE(char)[[[U+200B]]]]) のいずれかに変換するか、 |
82 |
|
または削除しなければなりません。 |
83 |
* ZWSP |
3通りのいずれを選ぶかは[[利用者エージェント]]依存で、 |
84 |
|
[CODE(char)[[[LINE FEED]]]] の前後の[[用字系]]によります。 |
85 |
[8] [CODE(char)[U+200C]] [CODE(char)[ZERO-WIDTH SPACE]] |
--- [CODE(char)[[[LINE FEED]]]] なしの[[空白]]の列は |
86 |
は >>2 の通り HTML で空白として扱われます。 |
[CODE(char)[[[SPACE]]]] 1文字に置換しなければなりません。 |
87 |
しかし、 SGML 宣言によれば、 [CODE(SGML)[s]] |
--- [CODE(char)[[[LINE FEED]]]] が1つ以上含まれる[[空白]]の列は、 |
88 |
には含まれません。ですから、 HTML 文書の本文では >>2 |
[CODE(char)[[[LINE FEED]]]] が1つだけの時と同じように置換しなければなりません。 |
89 |
の通りの扱いを受けますが、 SGML 的には空白として使えません |
- [[属性値]]における[[空白]]は [[XML 1.0]] |
90 |
(例えば属性指定の間には使えません)。 |
に従って処理します。 |
91 |
|
|
92 |
[[#comment]] |
[17] [[XHTML m12n]] には [CODE(char)[[[LINE FEED]]]] |
93 |
|
の変換方法に関する参考として次の内容の注記があります。 |
94 |
|
|
95 |
* タグ前後の空白 |
- [CODE(char)[[[LINE FEED]]]] の前後の[[文字]]の[[用字系]]が同じであり、 |
96 |
|
[CODE(char)[[[SPACE]]]] が[[語]]分離子として使われるものであるなら、 |
97 |
[9] SGML の規定により、[[開始タグ]]直後と[[終了タグ]]直前の改行は全要素 |
[CODE(char)[[[SPACE]]]] に変換するべきです。 |
98 |
([CODE(HTMLe)[[[pre]]]] や [CODE(HTMLe)[[[textarea]]]] を含みます。) |
([[ラテン文字]]、[[ギリシャ文字]]、[[キリル文字]]など) |
99 |
で例外なく無視されます。 |
- [CODE(char)[[[LINE FEED]]]] の前後の[[文字]]の[[用字系]]が[[表意文字]]系や[[語]]分離子を使わない[[書字方法]]なら、 |
100 |
|
除去するべきです。 ([[中文]]、[[日本語]]など) |
101 |
HTML 4 [CITE[B.3.1 Line breaks]] |
- [CODE(char)[[[LINE FEED]]]] の前後の[[文字]]の[[用字系]]が非[[表意文字]]系で[[語]]分離子を使わないものなら、 |
102 |
<IW:HTML4:"appendix/notes.html#notes-line-breaks"> |
[CODE(char)[[[ZERO-WIDTH SPACE]]]] に変換するか、 |
103 |
|
または除去するべきです。 |
104 |
例 [SRC[HTML 4 B.3.1]]: 次の2段落は同じ内容です。 |
- 前三項の条件に該当しないなら、 [CODE(char)[[[LINE FEED]]]] |
105 |
[PRE(HTML)[ |
は [CODE(char)[[[SPACE]]]] に変換するべきです。 |
106 |
<P>Thomas is watching TV.</P> |
|
107 |
<P> |
なお、 [CODE[COMMON]] [[用字系]] ([[句読点]]など) |
108 |
Thomas is watching TV. |
はもう一方の側と同じ[[用字系]]と考えます。 |
109 |
</P> |
[[文字]]の属する用字系の名前は [[UTR]] #24 にあります。 |
110 |
]PRE] |
|
111 |
|
[16] 仕様書: |
112 |
なお、 [[XHTML]] ではこの規定は適用されません。2つ目の段落の内容は改行を含みます。 |
-[[XHTML m12n]] |
113 |
|
--[CSECTION[3.5. XHTML Family User Agent Conformance]] |
114 |
詳しくは [[SGML//空白]]をご覧下さい。 |
<IW:XHTML1m12n:"conformance.html#s_conform_user_agent"> |
115 |
|
|
116 |
[10] |
[[#comment]] |
117 |
>>9 HTML 4 附属書 B (参考) には[Q[すべての要素で例外なく]]なんて書いてありますが、 |
|
118 |
実際には[[強制空要素]]が例外になりますし、要素が [[DTD]] の[[添加要素指定]]に該当するか否かや改行が |
* FORM FEED |
119 |
[CODE(char)[[[CR]]]] か [CODE(char)[[[LF]]]] か両方かその他かで細かいところが変わってきます。 |
|
120 |
(その他なら無視されません。) |
[5] HTML 4 は、 >>2 の通り、 [CODE(char)[U+000C]] |
121 |
|
[CODE(char)[FORM FEED]] ([[改頁]]) を空白の一種としています。 |
122 |
(XHTML はやっぱりこの問題はありません。 |
|
123 |
[[XML]] では実体を読んだら最初に改行を正規化してしまいますから。) |
ところが、 HTML 4 の [[SGML宣言]] |
124 |
([[名無しさん]]) |
<http://www.w3.org/TR/html4/sgml/sgmldecl.html> |
125 |
|
は、 [CODE(char)[U+000C]] を [CODE(SGML)[[[UNUSED]]]] |
126 |
[[#comment]] |
としています。もちろん [CODE(SGML)[[[s]]]] にも含まれません。 |
127 |
|
|
128 |
|
SGML 宣言を信じるとすると、 [CODE(char)[U+000C]] |
129 |
* メモ |
は HTML 4 では使用できず、 >>2 の規定は無駄になります。 |
130 |
|
|
131 |
[11] |
[6] ''XHTML 1.0 C.15. White Space Characters in HTML vs. XML'' <http://www.w3.org/TR/xhtml1/#C_15> |
132 |
[CITE[Re: HTML での 空白の扱いについて]] <http://groups.google.com/groups?selm=cb68cm%24bte%241%40news.sfc.keio.ac.jp>, |
は、 HTML では [CODE(char)[U+000C]] |
133 |
<mid:cb68cm$bte$1@news.sfc.keio.ac.jp> |
を使えるが、 XHTML では使えないと言っています。 |
134 |
|
|
135 |
([[名無しさん]] [sage]) |
[7] 本文が正しく、 [CODE(char)[U+000C]] が使えたとしても、 |
136 |
|
[CODE(SGML)[s]] には含まれないので、 HTML 文書の本文では >>2 |
137 |
[12] |
の通りの扱いを受けますが、 SGML 的には空白として使えません |
138 |
[[XHTML 1.0]] では、 [[XML 1.0]] |
(例えば[[属性指定]]の間には使えません)。 |
139 |
に従った [[XML]] としての処理の後、 |
|
140 |
[[CSS 2.0]] によって処理すると規定しています。 |
[[#comment]] |
141 |
ただし、 [[CSS 2.0]] は[[ラテン文字]]以外に関する規定がないので将来この部分は修正されるかもしれないとされています。 |
|
142 |
|
|
143 |
仕様書: |
* ZWSP |
144 |
- [[XHTML 1.0]] |
|
145 |
-- [CSECTION[3.2. User Agent Conformance]] |
[8] [CODE(char)[U+200C]] [CODE(char)[ZERO-WIDTH SPACE]] |
146 |
<IW:XHTML10:"uaconf"> |
は >>2 の通り HTML で空白として扱われます。 |
147 |
|
しかし、 SGML 宣言によれば、 [CODE(SGML)[s]] |
148 |
([[名無しさん]] [sage]) |
には含まれません。ですから、 HTML 文書の本文では >>2 |
149 |
|
の通りの扱いを受けますが、 SGML 的には空白として使えません |
150 |
[13] |
(例えば属性指定の間には使えません)。 |
151 |
XHTML 1.0 での予告通り(?) [[XHTML m12n]] |
|
152 |
では説明が細かくなっています。 |
[[#comment]] |
153 |
|
|
154 |
- [[XHTML m12n]] |
|
155 |
-- [CSECTION[3.5. XHTML Family User Agent Conformance]] |
* タグ前後の空白 |
156 |
<IW:XHTMLm12n:"conformance.html#s_conform_user_agent"> |
|
157 |
|
[9] SGML の規定により、[[開始タグ]]直後と[[終了タグ]]直前の改行は全要素 |
158 |
([[名無しさん]] [sage]) |
([CODE(HTMLe)[[[pre]]]] や [CODE(HTMLe)[[[textarea]]]] を含みます。) |
159 |
|
で例外なく無視されます。 |
160 |
[14] |
|
161 |
|
HTML 4 [CITE[B.3.1 Line breaks]] |
162 |
|
<IW:HTML4:"appendix/notes.html#notes-line-breaks"> |
163 |
|
|
164 |
|
例 [SRC[HTML 4 B.3.1]]: 次の2段落は同じ内容です。 |
165 |
|
[PRE(HTML)[ |
166 |
|
<P>Thomas is watching TV.</P> |
167 |
|
<P> |
168 |
|
Thomas is watching TV. |
169 |
|
</P> |
170 |
|
]PRE] |
171 |
|
|
172 |
|
なお、 [[XHTML]] ではこの規定は適用されません。2つ目の段落の内容は改行を含みます。 |
173 |
|
|
174 |
|
詳しくは [[SGML//空白]]をご覧下さい。 |
175 |
|
|
176 |
|
[10] |
177 |
|
>>9 HTML 4 附属書 B (参考) には[Q[すべての要素で例外なく]]なんて書いてありますが、 |
178 |
|
実際には[[強制空要素]]が例外になりますし、要素が [[DTD]] の[[添加要素指定]]に該当するか否かや改行が |
179 |
|
[CODE(char)[[[CR]]]] か [CODE(char)[[[LF]]]] か両方かその他かで細かいところが変わってきます。 |
180 |
|
(その他なら無視されません。) |
181 |
|
|
182 |
|
(XHTML はやっぱりこの問題はありません。 |
183 |
|
[[XML]] では実体を読んだら最初に改行を正規化してしまいますから。) |
184 |
|
([[名無しさん]]) |
185 |
|
|
186 |
|
[[#comment]] |
187 |
|
|
188 |
|
|
189 |
|
* メモ |
190 |
|
|
191 |
|
[11] |
192 |
|
[CITE[Re: HTML での 空白の扱いについて]] <http://groups.google.com/groups?selm=cb68cm%24bte%241%40news.sfc.keio.ac.jp>, |
193 |
|
<mid:cb68cm$bte$1@news.sfc.keio.ac.jp> |
194 |
|
|
195 |
|
([[名無しさん]] [sage]) |
196 |
|
|
197 |
|
[12] |
198 |
|
[[XHTML 1.0]] では、 [[XML 1.0]] |
199 |
|
に従った [[XML]] としての処理の後、 |
200 |
|
[[CSS 2.0]] によって処理すると規定しています。 |
201 |
|
ただし、 [[CSS 2.0]] は[[ラテン文字]]以外に関する規定がないので将来この部分は修正されるかもしれないとされています。 |
202 |
|
|
203 |
|
仕様書: |
204 |
|
- [[XHTML 1.0]] |
205 |
|
-- [CSECTION[3.2. User Agent Conformance]] |
206 |
|
<IW:XHTML10:"uaconf"> |
207 |
|
|
208 |
|
([[名無しさん]] [sage]) |
209 |
|
|
210 |
|
[13] |
211 |
|
XHTML 1.0 での予告通り(?) [[XHTML m12n]] |
212 |
|
では説明が細かくなっています。 |
213 |
|
|
214 |
|
- [[XHTML m12n]] |
215 |
|
-- [CSECTION[3.5. XHTML Family User Agent Conformance]] |
216 |
|
<IW:XHTMLm12n:"conformance.html#s_conform_user_agent"> |
217 |
|
|
218 |
|
([[名無しさん]] [sage]) |
219 |
|
|
220 |
|
[14] |
221 |
>>12-13 |
>>12-13 |
222 |
正確には、 [[XHTML 1.0]] [[FE]] であった |
正確には、 [[XHTML 1.0]] [[FE]] であった |
223 |
[CODE(XMLa)[xml:space]] の部分が |
[CODE(XMLa)[xml:space]] の部分が |
224 |
[[XHTML m12n]] には引き継がれてますが、 |
[[XHTML m12n]] には引き継がれてますが、 |
225 |
[[XHTML 1.0]] [[SE]] ではカットされていますね。 |
[[XHTML 1.0]] [[SE]] ではカットされていますね。 |
226 |
([[名無しさん]] [sage]) |
([[名無しさん]] [sage]) |
227 |
|
|