/
24.txt
88 lines (66 loc) · 5.18 KB
/
24.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
[3] [DFN[[RUBYB[[[開いている要素のスタック]]]@en[stack of open elements]]]]は、
[[HTML構文解析器]]と[[XML構文解析器]]において、(明示的または暗示的な)
[[開始タグ]]が現れ、まだ[[終了タグ]]が現れていない[[要素]]が積まれる[[スタック]]です。
* 仕様書
[REFS[
- [2] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-07-02 23:06:24 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#stack-of-open-elements>'''
- [7] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-07-02 23:06:24 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#parsing-xhtml-documents>
- [8] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-07-02 23:06:24 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#update-a-style-block>
- [11] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-07-02 23:06:24 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#the-object-element>
- [12] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-07-02 23:06:24 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#text-track>
- [13] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-07-02 23:06:24 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#the-applet-element>
]REFS]
* 操作と状態
[4] この[[スタック]]は[RUBYB[下方向]@en[downward]]へと進みます。
最初に追加された[[要素]] ([[根要素]]) は[RUBYB[最上]@en[topmost]]、
最も直近に追加された[[要素]]は[RUBYB[最下方]@en[bottommost]]と呼ばれています。
[5] このスタックには次のような変更操作が行われます。
[FIG(short list)[
- [[節点]]を1つ [[push]]
- [[節点]]をいくつか [[pop]]
- ある位置に[[節点]]を挿入 ([[AAA]])
- ある位置の[[節点]]を削除 ([[AAA]])
]FIG]
[22] このスタックは、末尾、先頭など任意の位置にアクセスがあります。
[6] 初期状態ではこの[[スタック]]は空です。 [[HTML構文解析器]]の場合、一旦[[要素]]が追加されると、
最後まで空にはなりません。
* 現在節点
[16] [[開いている要素のスタック]]の最下方の[[要素]] (最も直近に追加された[[要素]])
のことを[DFN[[RUBYB[[[現在節点]]]@en[current node]]]]といいます [SRC[>>2]]。
[17] [DFN[[RUBYB[[[調整済み現在節点]]]@en[adjusted current node]]]]とは、
[[HTML素片構文解析アルゴリズム]]によって起動された[[構文解析器]]で[[開いている要素のスタック]]の[[要素]]が1つだけの時は[[文脈要素]]、
それ以外の時は[[現在節点]]と同じものです [SRC[>>2]]。
;; [18] [[調整済み現在節点]]は、[[構文解析器]]によって[[外来要素]]に関する処理がなされる際に参照されます。
[[HTML素片構文解析アルゴリズム]] ([CODE(HTMLa)@en[[[innerHTML]]]]) でも[[開いている要素のスタック]]の最上方の[[要素]]は [[HTML]] の [CODE(HTMLe)@en[[[html]]]] [[要素]]ですが、
[[調整済み現在節点]]としてはそのかわりに[[文脈要素]]が使われるので、
[[文脈要素]]が[[外来要素]] ([[SVG]]、[[MathML]]) ならそのように処理されることとなります。
[19] [[現在節点]]は、[[構文解析器]]のあらゆる部分で参照されています。
[20] [[調整済み現在節点]]は、[[構文解析器]]の次の処理で参照されています。
[FIG(list)[
- [[HTML構文解析器]]における [CODE(HTML)@en[[[CDATA]]]] [[区間]]に関する分岐
- [[HTML構文解析器]]における[[木構築発送器]]の分岐
- [[HTML構文解析器]]における[[外来要素]]の[[名前空間]]の決定
]FIG]
;; [21] [[reset the insertion mode appropriately]] でも最上方の [CODE(HTMLe)@en[[[html]]]]
[[要素]]のかわりに[[文脈要素]]が参照されます。 (ただし[[現在節点]]とは限りません。)
* 要素の処理
[10] [[開いている要素のスタック]]から[[要素]]が除去された時に、
[[要素]]固有の処理が実行されることがあります。
[9] そのような[[要素]]固有の処理は、[[開いている要素のスタック]]上にあるかどうかによって分岐することがあります。
[FIG(list)[
- [[update a [CODE(HTMLe)@en[style]] block]] [SRC[>>8]]
- [CODE(HTMLe)@en[[[object]]]] [[要素]]の処理 [SRC[>>11]]
- [[text track]] の処理 [SRC[>>12]]
- [CODE(HTMLe)@en[[[applet]]]] [[要素]]の処理 [SRC[>>13]]
]FIG]
[14] [[HTML]] と [[SVG]] の [CODE(HTMLe)@en[[[script]]]] [[要素]]も[[終了タグ]]時点で特別な動作がありますが、[[EOF]]
や祖先の[[終了タグ]]によって[[開いている要素のスタック]]から除去される場合には動作しないので、
>>9 とは異なります。
[15] [CODE(HTMLe)@en[[[link]]]] [[要素]]の処理など、[[構文解析器]]によるかどうかに関わらず、
[[木]]に[[要素]]が挿入された時点で発生するものも多々あります。
* 歴史
[REFS[
- [1] [CITE[IRC logs: freenode / #whatwg / 20140611]]
( ([TIME[2014-06-12 11:20:51 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140611>
]REFS]