Noah's Ark

活性書式付け要素のリスト (HTML)

[25] 活性書式付け要素のリスト (list of active formatting elements) は、 HTML構文解析器において開始タグ終了タグが正常に入れ子関係になっていない時に、 木構造を保ちつつ著者の意図したレンダリングを実現するために書式付け要素を開き直したりするためのリストです。 AAA と共にHTML構文解析器の歴史的暗部の一つです。

仕様書

活性書式付け要素のリスト

[16] 活性書式付け要素のリスト (list of active formatting elements) は、 >>1 HTML構文解析器を構成するリストの1つです。

[17] XML構文解析器にはこのリストはありません。

[19] このリストには、 要素マーカー (marker) と呼ばれる目印が push により追加されたり、 pop によって除去されたりします。初期状態ではこのリストは空です。

[20] マーカーは、複数個含まれることがあります。

[18] 同じ要素が複数回含まれることはありません。

[21] 要素は、多妻ノアの方舟 (>>8) によって末尾以外から除去されたり、 clear によって一度に複数個除去されたりすることもあります。 AAA によっても除去されることがあります。再構築によって他の要素に置き換えられることもあります。

書式付け要素

[3] HTML構文解析器における要素分類 (category) の1つである書式付け (formatting) >>2 は、 活性書式付け要素のリストに追加され得る要素を表しています。

[23] これらの要素以外の要素活性書式付け要素のリストに追加されることはありません。

[4] 次のHTML要素が含まれています >>2

[24] 活性書式付け要素のリスト外来要素が追加されることはありません。

[6] JSON 形式の一覧が >>5 にあります。

[7] 将来的にこのリストに含まれる要素が増えたり減ったりする可能性は低いと思われます。

ノアの方舟

[8] 活性書式付け要素のリストに新たに要素が追加 (push onto the list of active formatting elements) される際、ノアの方舟 (Noah's Ark) 条項によるチェックが行われます >>1

[9] すなわち、新たに追加する要素と同じものが既に3つ活性書式付け要素のリストに含まれている (マーカーがある場合、そのマーカー以後に3つ含まれている) 場合には、 最古の要素をリストから削除します >>1

[12] 旧約聖書ノアの方舟動物の雌雄一対ずつが選ばれる話ですが、 HTML では要素ごとに3つずつが残されますので、 多妻ノアの方舟 (polyamorous Noah's Ark) とも呼ばれます >>1, >>13

[10] ここで同じ要素であるとは、各要素の元となった字句タグ名属性、 それに名前空間が等しいことをいいます。属性が同じであるとは、 属性名属性値名前空間が等しいことをいいます。 一方のみに設定された属性があると等しくありません。 >>1

[11] 構文解析の途中でスクリプトによって要素が編集されたとしても、 構文解析器要素を作った時点の状態に基づき判断されます。
[15] 多妻ノアの方舟条項は、 AAA による指数的要素の増殖を防ぐために導入されました >>13, >>14

歴史

メモ

[22] 手順6で rewind に戻る例 <!DOCTYPE HTML><p><b><i><u></p> <p>X

[26] Editorial: button doesn't insert a marker, template does (#1036) · whatwg/html@f66348e ( 版) <https://github.com/whatwg/html/commit/f66348ee863408c1888b0e455bf93317ae632954>