/
209.txt
73 lines (50 loc) · 3.91 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
[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>
]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]]]]
のようにそれ以外の型を使うこともよくあります。
* 拡張子
[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]]
としては規定せず、 [CODE(MIME)@en[[[text/plain]]]] の仕様に委ねています [SRC[>>5]]。
;; [12] 現実にはこの部分はどの仕様でも明確に規定されていません。
[[HTML]] の [[charset sniffing]] のうち、 [CODE(HTMLe)@en[[[meta]]]]
[[要素]]の処理を除外したものを適用するのが最も妥当でしょうか。
;; [18] [CODE(JS)@en[[[document.open]]]] では入力は[[バイト列]]ではなく[[文字列]]です。
[13] [[文書の文字符号化]]は、[[文書]]の[[復号]]に用いた[[文字符号化]]に設定しなければ[['''なりません''']] [SRC[>>5]]。
;; [14] その具体的なタイミングは規定されていませんが、 [[HTML]]
とは違って途中で[[文字符号化]]が変化することはありませんから、
決定して本体処理を開始する直前が妥当でしょう。
;; [19] [CODE(JS)@en[[[document.open]]]] では [[utf-8]] に設定されます [SRC[>>17]]。