挿入モード

挿入モード (構文解析器)

[1] 挿入モード (insertion mode) は、HTML構文解析器木構築段階における動作モード (構文解析器の状態の一つ) です。 字句化器によって送出された字句は、木構築発送器挿入モードによって決まる処理が適用され、 DOM木の構築が行われます。

目次

  1. 仕様書
  2. 表記
  3. 挿入モードの一覧
  4. 挿入モードの変化

仕様書#

表記#

[3] 挿入モードは、「the "in body" insertion mode」のように引用符で括って表記されます。

挿入モードの一覧#

[4] HTML構文解析器には、次の挿入モードがあります。

[5] 以前は外来内容の処理も挿入モードの一つ ("in foreign content") でしたが、現在は木構築発送器によって分岐する特別な処理手順となっています。

[12] 仕様上は挿入モードではありませんが、 textarea など一部の開始タグの直後では U+000A 文字字句を1つ無視することになっています。実装によってはこれを特別な挿入モードとして、 あるいは木構築発送器の分岐として実現しているかもしれません。

[13] textarea のように original insertion mode挿入モードを保存して "text" 挿入モードに切り替えてから U+000A が無視される場合と、 prelisting のようにそのままの挿入モードU+000A が無視される場合の2パターンあります。

挿入モードの変化#

[6] 通常のHTML構文解析器の初期状態は、 "initial" 挿入モードです >>2

[7] 素片構文解析の場合は、文脈要素に合わせた挿入モードとなります。

[9] 挿入モードは、字句の処理に従い適宜変化していきます。 基本的には、開始タグによって次の挿入モードに (必要なら) 切り替えられ、 終了タグによって元の挿入モードに戻ります。

[8] 仕様書上は、ほとんどの挿入モードは、次の挿入モードへと、状態を持たずに変化します。 終了タグによる元の挿入モードへの復元は、 reset the insertion mode appropriately 手順によって要素の種類をチェックすることで行われます。

[10] しかし "text""in table text" は特別で、 開始タグでこれらの挿入モードに切り替えられた時に元の挿入モードoriginal insertion mode として保存され、 終了タグ挿入モードoriginal insertion mode に切り替えられます。

[11] また template 要素では現在節点だけから挿入モードを決められないので、 stack of template insertion modes挿入モードが保存されていて、 適宜ここから復元されます。

[14] 挿入モードの状態遷移を図示すると、次のようになります。 (主要な遷移と挿入モードのみ表示。)

initialbefore htmlbefore headin headafter headin bodyafter bodyafter after bodyin head noscriptin selectin captionin tablein table bodyin rowin cellin column groupin framesetafter framesetafter after frameset