/
209.txt
162 lines (130 loc) · 8.29 KB
/
209.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
[1] [[テキストエディター]]で表示・編集可能な[[ファイル]]を一般に[DFN[[RUBYB[テキストファイル]@en[text file]]]]といいます。
[2] 狭義には[[平文]]の[[ファイル]]のことを指します。広義には [[XML]] や[[バイナリデータ]]を含まない [[PostScript]]
などの[[ファイル]]も含みます。
* 仕様書
[REFS[
- [5] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#read-text>
- [17] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#script-created-parser>
- [26] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-09-30 22:54:01 +09:00]] 版) <https://html.spec.whatwg.org/#navigate>
]REFS]
* MIME 型
[3] [[平文]]の場合 [CODE(MIME)@en[[[text/plain]]]] が用いられます。また実際には[[平文]]とはいえなくても[[テキストファイル]]であれば
[CODE(MIME)@en[[[text/plain]]]] が用いられることがあります。しかし本来はそれ以外の適切な [[MIME型]]を用いるべきです。
広義の[[テキストファイル]]は [CODE(MIME)@en[[[text/*]]]] の[[MIME型]]を使うことが多いですが、
[CODE(MIME)@en[[[image/svg+xml]]]] や [CODE(MIME)@en[[[image/xbm]]]]、[CODE(MIME)@en[[[application/xml]]]]
のようにそれ以外の型を使うこともよくあります。
[20] [[Webブラウザー]]は、次の [[MIME型]]への [[navigate]] で、
[[テキストファイル]]として表示します [SRC[>>26]]。
[FIG(list)[
- [[JavaScript MIME型]]
- [[JSON MIME型]] ([[明示的対応JSON型]]を除く。)
- [CODE(MIME)@en[[[text/cache-manifest]]]]
- [CODE(MIME)@en[[[text/css]]]]
- [CODE(MIME)@en[[[text/plain]]]]
- [CODE(MIME)@en[[[text/vtt]]]]
]FIG]
[HISTORY[
[21] かつての [[HTML Standard]] では、 [CODE(MIME)@en[[[text/plain]]]] だけが該当するとされていました。
2015年9月に実態を踏まえて拡充されました [SRC[>>27]]。
[22] [[Gecko]] は次の [[MIME型]]を[[テキストファイル]]として扱います [SRC[>>218, >>219]]
([TIME[2015-05-07T12:35:07.100Z]]):
[FIG(short list)[
- [CODE(MIME)@en[[[text/plain]]]]
- [CODE(MIME)@en[[[text/css]]]]
- [CODE(MIME)@en[[[text/cache-manifest]]]]
- [CODE(MIME)@en[[[application/javascript]]]]
- [CODE(MIME)@en[[[application/x-javascript]]]]
- [CODE(MIME)@en[[[text/ecmascript]]]]
- [CODE(MIME)@en[[[application/ecmascript]]]]
- [CODE(MIME)@en[[[text/javascript]]]]
- [CODE(MIME)@en[[[application/json]]]]
]FIG]
[24] [[Chrome]] は次の [[MIME型]]を[[テキストファイル]]として扱います [SRC[>>23]]。
[FIG(list)[
- [CODE(MIME)@en[[[application/json]]]]
- [CODE(MIME)@en[[[application/atom+xml]]]]
- [CODE(MIME)@en[[[application/rss+xml]]]]
- [CODE(MIME)@en[[[text/*]]]] のうち、未対応の一覧に含まれないもの
- [CODE(MIME)@en[[[application/*]]]] のうち、 [CODE[[[+json]]]] で終わるもの
- [[スクリプトの媒体型]]
-- [CODE(MIME)@en[[[text/ecmascript]]]]
-- [CODE(MIME)@en[[[application/javascript]]]]
-- [CODE(MIME)@en[[[application/ecmascript]]]]
-- [CODE(MIME)@en[[[application/x-javascript]]]]
-- [CODE(MIME)@en[[[text/javascript1.1]]]]
-- [CODE(MIME)@en[[[text/javascript1.2]]]]
-- [CODE(MIME)@en[[[text/javascript1.3]]]]
-- [CODE(MIME)@en[[[text/jscript]]]]
-- [CODE(MIME)@en[[[text/livescript]]]]
]FIG]
[25] 未対応のテキスト型とは次のもので、そのまま表示されることを[[利用者]]が想定しないだろうとの注釈があります [SRC[>>23]]。
[FIG(list short)[
- [CODE(MIME)@en[[[text/calendar]]]]
- [CODE(MIME)@en[[[text/x-calendar]]]]
- [CODE(MIME)@en[[[text/x-vcalendar]]]]
- [CODE(MIME)@en[[[text/vcalendar]]]]
- [CODE(MIME)@en[[[text/vcard]]]]
- [CODE(MIME)@en[[[text/x-vcard]]]]
- [CODE(MIME)@en[[[text/directory]]]]
- [CODE(MIME)@en[[[text/ldif]]]]
- [CODE(MIME)@en[[[text/qif]]]]
- [CODE(MIME)@en[[[text/x-qif]]]]
- [CODE(MIME)@en[[[text/x-csv]]]]
- [CODE(MIME)@en[[[text/x-vcf]]]]
- [CODE(MIME)@en[[[text/rtf]]]]
- [CODE(MIME)@en[[[text/comma-separated-values]]]]
- [CODE(MIME)@en[[[text/csv]]]]
- [CODE(MIME)@en[[[text/tab-separated-values]]]]
- [CODE(MIME)@en[[[text/tsv]]]]
- [CODE(MIME)@en[[[text/ofx]]]]
- [CODE(MIME)@en[[[text/vnd.sun.j2me.app-descriptor]]]]
]FIG]
]HISTORY]
[REFS[
- [218] [CITE@en[gecko-dev/nsContentDLF.cpp at master · mozilla/gecko-dev]] ([TIME[2015-05-07 21:34:16 +09:00]] 版) <https://github.com/mozilla/gecko-dev/blob/master/layout/build/nsContentDLF.cpp#L54>
- [219] [CITE@en[gecko-dev/nsContentUtils.cpp at master · mozilla/gecko-dev]] ([TIME[2015-05-07 21:34:38 +09:00]] 版) <https://github.com/mozilla/gecko-dev/blob/master/dom/base/nsContentUtils.cpp#L3470>
- [220] [CITE[Issue 7192 - chromium - CSS files served for download, instead of displaying in browser - An open-source project to help move the web forward. - Google Project Hosting]] ([TIME[2015-05-07 21:52:46 +09:00]] 版) <https://code.google.com/p/chromium/issues/detail?id=7192>
- [23] [CITE[mime_util.cc - Code Search]] ([TIME[2015-05-07 22:06:51 +09:00]] 版) <https://code.google.com/p/chromium/codesearch#chromium/src/components/mime_util/mime_util.cc>
]REFS]
* 拡張子
[4] [[ファイル名]]の[[拡張子]]としては [DFN[[CODE(file)@en[[[.txt]]]]]] を用いることが多いですが、
広義の[[テキストファイル]]はそれぞれの適切な[[拡張子]]があることが普通です。
* DOM 構築
[6] [[navigate]] における[[テキストファイル]]の [[DOM]] の構築は、
[[HTML Standard]] で規定されています [SRC[>>5]]。
[7] これは [[HTML構文解析器]]と [[HTML文書]]を使います。
;; [[navigate]] 参照。
[16] [CODE(JS)@en[[[document.open]]]] で非 [[HTML]] の時にも、同じように
[[DOM]] が構築されます。
;; [CODE(JS)@en[[[document.open]]]] 参照。
[8] [[HTML構文解析器]]をまず次のようにしなければ[['''なりません''']] [SRC[>>5, >>17]]。
[FIG(steps)[
= [[字句化器]]が [CODE(HTMLe)@en[[[pre]]]] [[開始タグ]]字句を [[emit]] したものとします。
= [[字句化器]]が [CODE(char)[[[U+000A]]]] [[文字]]を [[emit]] したものとします。
= [[字句化器]]を [[PLAINTEXT state]] に切り替えます。
]FIG]
[9] ここで、[[構文解析器]]によって [CODE(HTMLe)@en[[[head]]]]
[[要素]]が挿入されることになりますが、
[[navigate]] ではその[[内容]]は必要に応じて作成して構いません [SRC[>>5]]。
[EG[
[10] 例えば [CODE(MIME)@en[[[text/plain]]]] 関連仕様に従ったレンダリングのための
[[CSS]] を参照できます。
]EG]
;; [15] [CODE(JS)@en[[[document.open]]]] ではこの規定はありません。
[11] [[navigate]] で入力の[[バイト列]]からどのように[[文字列]]を得るかは、 [[HTML Standard]]
としては規定せず、 [[sniffed MIME type]] の仕様に委ねています [SRC[>>5]]。
;; [12] 現実にはこの部分はどの仕様でも明確に規定されていません。
[[HTML]] の [[charset sniffing]] のうち、 [CODE(HTMLe)@en[[[meta]]]]
[[要素]]の処理を除外したものを適用するのが最も妥当でしょうか。
[[sniffed MIME type]] が [[CSS]] や [[WebVTT]] など[[文字コード]]の解釈が規定されている場合はそちらに従うのが正しいですが、
実際の [[Webブラウザー]]がそうしているのかどうかは謎です。
;; [18] [CODE(JS)@en[[[document.open]]]] では入力は[[バイト列]]ではなく[[文字列]]です。
[13] [[文書の文字符号化]]は、[[文書]]の[[復号]]に用いた[[文字符号化]]に設定しなければ[['''なりません''']] [SRC[>>5]]。
;; [14] その具体的なタイミングは規定されていませんが、 [[HTML]]
とは違って途中で[[文字符号化]]が変化することはありませんから、
決定して本体処理を開始する直前が妥当でしょう。
;; [19] [CODE(JS)@en[[[document.open]]]] では [[utf-8]] に設定されます [SRC[>>17]]。
* 歴史
[REFS[
- [27] [CITE@en[Fix #124: make more types follow text/plain navigate logic · whatwg/html@f94f3c4]] ([TIME[2015-10-01 00:37:17 +09:00]] 版) <https://github.com/whatwg/html/commit/f94f3c4595fbc5fecb747ef52f46cdc5f2b3feec>
]REFS]