/
736.txt
258 lines (199 loc) · 11.3 KB
/
736.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
[1] [DFN[[CODE(HTMLe)[pre]] 要素]]は、囲まれた文が
[Q[[RUBYB[整形済み] [preformatted]]]]
であることを[[視覚UA]] に伝えます。
[9] 仕様書:
- [[HTML 2.0]]: [[RFC 1866]] 5.5.2. Preformatted Text: PRE
- [[SI 4281]]:1998
-- [CSECTION[6.1.1.2 Pre-formatted segments]]
<http://www.qsm.co.il/Hebrew/si4281e.htm>
- [[HTML 4]]
-- <IW:HTML4:"struct/text.html#edef-PRE">
-- [[厳密DTD]] <IW:HTML4:"sgml/dtd.html#pre.exclusion">
-- [[移行用DTD]] <IW:HTML4:"sgml/loosedtd.html#pre.exclusion">
- [[XHTML 1.0]]: <IW:XHTML1.0:"#prohibitions">
[2]
:[[名前空間名]]:[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]]
:[[局所名]]:[CODE(HTMLe)[pre]]
:[[開始タグ]]:必須
:[[終了タグ]]:必須
:[[内容模型]]:[CODE(SGML)[(%[[inline]];)* -([VAR[除外要素型]])]]
:出現できる文脈:[CODE(SGML)[%[[block]];]] な文脈
(歴史的変遷 <http://suika.fam.cx/www/2004/html/content-pre>)
:[[属性]]:
,属性名 ,属性値 ,既定値 ,説明 ,出典
,[CODE(HTMLa)@en[[[align]]]] , , ,揃え ,[HTML4] 非推奨
,[CODE(HTMLa)@en[[[autohilite]]]] , , , ,非標準 ,[[Microsoft]]
,[CODE(HTMLa)[[[class]]]] , , ,[[級]] ,[HTML4] %[[coreattr]]
,[CODE(HTMLa)@en[[[cols]]]] , , , ,非標準
,[CODE(HTMLa)[[[dir]]]] , , ,[[書字方向]] ,[HTML4] %[[i18n]]
,[CODE(HTMLa)[[[id]]]] , , ,一意識別子 ,[HTML4] %coreattr
,[CODE(HTMLa)[[[lang]]]] , , ,[[自然言語]] ,[HTML4] %i18n
,[CODE(HTMLa)[[[xml]]:lang]] , , ,自然言語 ,[XHTML1]
,[CODE(HTMLa)[[[onclick]]]] , , , ,[HTML4] %[[events]]
,[CODE(HTMLa)[[[ondblclick]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[onkeydown]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[onkeypress]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[onkeyup]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[onmousedown]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[onmouseout]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[onmouseover]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[onmouseup]]]] , , , ,[HTML4] %events
,[CODE(HTMLa)[[[_moz_quote]]]] , , , ,非標準 ,[[Mozilla]]
,[CODE(HTMLa)[[[style]]]] , , ,スタイル情報 ,[HTML4] %coreattr
,[CODE(HTMLa)[[[title]]]] , , ,注釈的題 ,[HTML4] %coreattr
,[CODE(HTMLa)[[[width]]]] ,[CODE(SGML)[[[NUMBER]]]] ,(自動) ,幅 ,"[HTML 2.0], [HTML 4] 非推奨"
,[CODE(HTMLa)@en[[[wrap]]]] , , , ,非標準
,[CODE(XMLa)[[[xmlns]]]] ,[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]] ,== ,[[W3C]] [[勧告]] ,[[XHTML 1]]
[[#comment]]
** 内容模型
[4] 内容としては、基本的に[[行内要素]]を持つことができますが、
- [CODE(HTMLe)[[[img]]]] *
- [CODE(HTMLe)[[[object]]]] *
- [CODE(HTMLe)[[[applet]]]]
- [CODE(HTMLe)[[[big]]]] *
- [CODE(HTMLe)[[[small]]]] *
- [CODE(HTMLe)[[[sub]]]] *
- [CODE(HTMLe)[[[sup]]]] *
- [CODE(HTMLe)[[[font]]]]
- [CODE(HTMLe)[[[basefont]]]]
は除外されています ([[子孫要素]]とできません)。
HTML 4 によれば、この規定は [[HTML 3.2]] と同じで、
固定幅フォントでレンダリングしたときに行の高さと文字の進み幅が一定になるようにするための制約なのだそうです。
[[XHTML 1.0]] にもこの制約は受け継がれています
[SRC[XHTML 1.0 <http://www.w3.org/TR/xhtml1/#prohibitions>]]。
ただし、 [CODE[*]] をつけた要素にしか言及されていません。
残りの移行用要素型はどうでもいいってことですか。
(XHTML 1.0 にも Transitional DTD はあるのにねぇ。)
[5] >>4 の目的の達成のためには、 >>3 の bidi
についての規定が邪魔に思えるのですけどねぇ。
[13] [CODE(HTMLe)[pre]] の内容には各種の[[行内要素]]が使えますが、
UA の性能によっては、正しくレンダリングされないことがあります。
[SRC[RFC 1866 5.5.2.]]
太字でレンダリングした部分で文字幅の計算がずれてまわりと字が重なるとか、
そんなような状況を想定しているのだと思われます。
[[#comment]]
** レンダリング
[3] HTML 4 によれば、
- 視覚 UA は、
-- [[空白]]に手をつけなくてよい (may)
-- [[固定幅]]フォントで文をレンダリングしてもよい (may)
-- 自動語折り返し (word wrap) を無効化してもよい (may)
-- [[bidi]] 処理を無効化してはならない (must not)
- 非視覚 UA は、余分な空白を尊重する必要はない (not required)
[6] >>4 の除外要素があるのは、
固定幅フォントで表示したときに行の高さや文字の幅が一定になるようにするためです。
この動作を著者が[[スタイルシート]]で変えてしまうことは非推奨 (discourage)
です。
[10] RFC 1866 では、 [CODE(HTMLe)[pre]] 要素は固定幅フォントで整形された文章に適当な要素型であると紹介していました。 RFC 1866 には明記こそされていませんが、
固定幅フォントでの表示が適当であると言っていることは自明です。
[11] UA は [CODE(HTMLa)[[[width]]]] 属性値を参考にして適当な文字の大きさと字下げの量を決めることができます。
[SRC[RFC 1866 5.5.2.]]
幅が広ければ左余白を削減するようなことを想定しているようです。
[16]
[CODE(HTMLe)[pre]] の意味は[Q[整形済み文]]であって、[Q[固定幅]]ではありませんが、
歴史的事情を考慮すれば、非固定幅な整形済み文に使用するのは好ましくないでしょう。
[WEAK[(しかしそうなると、非固定幅な整形済み文に使用するべき要素型がなくなってしまいますが・・・。)]]
[19]
[CITE[pre 要素のスタイル定義とマークアップ - 2xup]] <http://2xup.org/log/2006/09/07-0056>
([[名無しさん]] [WEAK[2006-09-07 00:02:14 +00:00]])
[[#comment]]
*** 改行
[12] [CODE(HTMLe)[pre]] 内では、改行を改行 (次の行の先頭への移動)
として扱います。 (表示領域の先頭ではなく、
余白を考慮した行の先頭です。) [SRC[RFC 1866 5.5.2.]]
[14] 古い文書は [CODE(HTMLe)[pre]] の中で [CODE(HTMLe)[[[p]]]]
タグを使っています。 UA
はこれを改行と同じように扱うことが[RUBYB[推奨] [encourage]]されていました。
ただし、 [CODE(HTMLe)[p]] の後に改行が続く時には、
まとめて一つ分の改行とみなすべきとされていました。
[SRC[RFC 1866 5.5.2.]]
[17] '''Bidi''':
[[bidi]] に関しては、[[行]]ごとに bidi 算法を適用して各[[文字]]の表示位置を決定します
[SRC[SI 4281 6.1.1.2]]。
[[#comment]]
*** 水平タブ
[8] かつて、[[水平タブ]]文字 ([CODE(char)[0/9]], [CODE(char)[HORIZONTAL TAB]],
[CODE(char)[[[HTAB]]]]) を [CODE(HTMLe)[pre]]
内で使用することは避けるべきとされていました。
[22]
HTML 2.0 (RFC 1866) では[Q[含める[RUBYB[べきではない] [should not]]]]、
HTML 4 では[Q[[RUBYB[強く非推奨] [strongly discouraged]]]]、
[[ISO-HTML]] では使用不能 (強制的に [CODE(char)[[[SP]]]]
に変換) と、時代が下るにつれ強い表現になっていました。
[23]
UA はタブを8の倍数の[[文字位置]]までの分の間隔として解釈しなければなりません。
しかし実装は一貫していません。 [SRC[RFC 1866 5.5.2.]]
[24]
多くの視覚 UA は、8文字を一タブ幅としています。
ところが、 [[editor]] でタブ幅を好きな幅にすることはよく行われています。
だから、変てこな文書を作ってしまうことになります。 [SRC[HTML 4]]
[9] 多くのブラウザが8タブを採用しているのは事実で、
ブラウザに限らずとも8文字が優勢ですが、そうでなかったり、
設定で変えられる処理系も多々あります。
水平タブ文字は、数ある [[C0]] 制御文字のうちでは、文字自体はかなり安全に
(ほとんど必ず) 伝達してもらえるわずかな文字の一つではありますが、
意図した通りに表示してもらえる確率はかなり低くなりますから、
この判断は妥当だとも思われました。
[25] [[HTML5]] ではこの種の[[レンダリング]]に関わる制約はなくなり、[[CSS]]
など[[レンダリング・モデル]]に解釈を委ねています。 [CODE(HTMLe)@en[[[pre]]]]
[[要素]]の既定の[[レンダリング]]で適用される [CODE(CSS)@en[[[white-space]]: [[pre]]]]
は、 [[CSS 2.1]] によると、[[8タブ]]で[[レンダリング]]されます。
;; <http://www.w3.org/TR/CSS21/text.html#white-space-model>
** 例
[15] 整形済み文の例 [SRC[RFC 1866 5.5.2.]]
[PRE(HTML)[
<PRE>
Line 1.
Line 2 is to the right of line 1. <a href="abc">abc</a>
Line 3 aligns with line 2. <a href="def">def</a>
</PRE>
]PRE]
[7] Shelly の[[詩]]『To a Skylark』 [SRC[HTML 4]]
[PRE(HTML)[
<PRE>
Higher still and higher
From the earth thou springest
Like a cloud of fire;
The blue deep thou wingest,
And singing still dost soar, and soaring ever singest.
</PRE>
]PRE]
レンダリング例:
[PRE[
Higher still and higher
From the earth thou springest
Like a cloud of fire;
The blue deep thou wingest,
And singing still dost soar, and soaring ever singest.
]PRE]
* [CODE(DOMi)@en[HTMLPreElement]] インターフェイス
[31] [DFN[[CODE(DOMi)@en[HTMLPreElement]]]] [[インターフェイス]]は、
[CODE(HTMLe)@en[pre]], [CODE(HTMLe)@en[listing]], [CODE(HTMLe)@en[xmp]]
各[[要素]]の[F[要素インターフェイス]]です。
[32] [CODE(DOMi)@en[HTMLPreElement]] [[インターフェイス]]は、
[CODE(DOMi)@en[HTMLElement]] [[インターフェイス]]を[[継承]]しています。
* [CODE(CSS)@en[white-space: pre]]
@@
[26] [CODE(CSS)@en['[[white-space]]']] [[特性]]の値 [CODE(CSS)@en['[[pre]]']] は・・・
* 歴史
[18]
[[libwww]]は1992年12月11日の1.1版で、当時の[[HTML]]仕様に追加されたばかりの[CODE(HTMLe)@en[[[pre]]]]を実装しました。
;; [CITE@en[Change History for W3C Sample Code Library]]
<http://www.w3.org/Library/User/History.html#z4>
([[名無しさん]] [sage])
[20]
[CITE[EMail Msg <9212141318.AA03936@www3.cern.ch>]] ([CODE[2007-07-02 21:30:38 +09:00]] 版) <http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/453.html>
[21]
[CITE@ja[コードは<pre>でマークアップするべき ...か? - Archiva]] ([TIME[2008-03-09 21:24:10 +09:00]] 版) <http://archiva.jp/web/html-css/sorce_pre_code.html>
[27] [CITE@en[Web Applications 1.0 r5670 Update <br>'s bidi behavior to match WebKit and IE rather than Gecko and Opera.Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10828]]
( ([TIME[2010-11-06 05:06:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5669&to=5670>
[28] [CITE[WWWLibrary_1.1]]
( ([TIME[2003-08-10 20:15:53 +09:00]] 版))
<http://lists.w3.org/Archives/Public/www-talk/1992NovDec/0206.html>
[29] [CITE[IRC logs: freenode / #whatwg / 20141022]]
( ([TIME[2014-10-23 01:36:55 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20141022#l-606>
[30] [CITE@en[Use HTMLPreElement for xmp and listing · whatwg/html@ca31ca2]]
([TIME[2016-04-25 17:08:37 +09:00]] 版)
<https://github.com/whatwg/html/commit/ca31ca2fa10f6205d65db7e81db122237036a736>