テキストファイルのDOM構築

テキストファイル

[1] テキストエディター表示編集可能なファイルを一般にテキストファイル (text file) といいます。

[2] 狭義には平文ファイルのことを指します。広義には XMLバイナリデータを含まない PostScript などのファイルも含みます。

仕様書

MIME 型

[3] 平文の場合 text/plain が用いられます。また実際には平文とはいえなくてもテキストファイルであれば text/plain が用いられることがあります。しかし本来はそれ以外の適切な MIME型を用いるべきです。 広義のテキストファイルtext/*MIME型を使うことが多いですが、 image/svg+xmlimage/xbmapplication/xml のようにそれ以外の型を使うこともよくあります。

[20] Webブラウザーは、次の MIME型への navigate で、 テキストファイルとして表示します >>26

拡張子

[4] ファイル名拡張子としては .txt を用いることが多いですが、 広義のテキストファイルはそれぞれの適切な拡張子があることが普通です。

DOM 構築

[6] navigate におけるテキストファイルDOM の構築は、 HTML Standard で規定されています >>5

[7] これは HTML構文解析器HTML文書を使います。

navigate 参照。

[16] かつては document.open で非 HTML の時にも、同じように DOM が構築されていました。

document.open 参照。

[8] HTML構文解析器をまず次のようにしなければなりません >>5, >>17

  1. 字句化器pre 開始タグ字句を emit したものとします。
  2. 字句化器U+000A 文字emit したものとします。
  3. 字句化器PLAINTEXT state に切り替えます。

[9] ここで、構文解析器によって head 要素が挿入されることになりますが、 navigate ではその内容は必要に応じて作成して構いません >>5

[10] 例えば text/plain 関連仕様に従ったレンダリングのための CSS を参照できます。

[15] document.open ではこの規定はありません。

[11] navigate で入力のバイト列からどのように文字列を得るかは、 HTML Standard としては規定せず、 sniffed MIME type の仕様に委ねています >>5

[12] 現実にはこの部分はどの仕様でも明確に規定されていません。 HTMLcharset sniffing のうち、 meta 要素の処理を除外したものを適用するのが最も妥当でしょうか。 sniffed MIME typeCSSWebVTT など文字コードの解釈が規定されている場合はそちらに従うのが正しいですが、 実際の Webブラウザーがそうしているのかどうかは謎です。
[18] document.open では入力はバイト列ではなく文字列です。

[13] 文書の文字符号化は、文書復号に用いた文字符号化に設定しなければなりません >>5

[14] その具体的なタイミングは規定されていませんが、 HTML とは違って途中で文字符号化が変化することはありませんから、 決定して本体処理を開始する直前が妥当でしょう。
[19] document.open では utf-8 に設定されます >>17

歴史

[28] 39042 – Display TXT using mozTXTToHTMLConv (linkify links, uris, urls in text/plain documents) ( 版) https://bugzilla.mozilla.org/show_bug.cgi?id=39042

[29] gecko-dev/mozITXTToHTMLConv.idl at master · mozilla/gecko-dev ( 版) https://github.com/mozilla/gecko-dev/blob/master/netwerk/streamconv/mozITXTToHTMLConv.idl

[30] Ben Bucksch - Projects - Mozilla - TXT->HTML Conversion ( 版) http://www.bucksch.org/1/projects/mozilla/16507/

[31] RFC 5507 - Design Choices When Expanding the DNS ( ()) https://tools.ietf.org/html/rfc5507

[32] Remove processing for document.open()'s type parameter (annevk著, ) https://github.com/whatwg/html/commit/ac52e65a6a37b6c4163de32082a50c7da15c6c96

[33] document.open() doesn't set contentType (document's content type) · Issue #3546 · whatwg/html () https://github.com/whatwg/html/issues/3546

[34] Remove processing for document.open()'s type parameter by annevk · Pull Request #3559 · whatwg/html () https://github.com/whatwg/html/pull/3559