Refactor tree_builder.rs into module directory with 7 files implementing all 23 insertion modes per WHATWG HTML §13.2.6.4 as an explicit state machine. Includes active formatting elements list with Noah's Ark clause, scope checking for all 5 scope types, context-sensitive fragment parsing, and iterative token reprocessing via ProcessResult enum. Code review fixes: fix formatting element end tag truncation bug (save node_id before truncate), replace manual element creation in catch-all StartTag with insert_element_maybe_self_closing, add skip_next_newline for pre/listing/textarea per spec, add QuirksMode to Document with basic DOCTYPE detection, refactor all 23 handlers from Token to &Token to eliminate clone per dispatch, fix self_closing handling for pre/listing/textarea/plaintext, improve golden test 276 fixture coverage and foster-parent test assertion. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
106 lines
3.9 KiB
Plaintext
106 lines
3.9 KiB
Plaintext
LayoutBox node=#1 tag=html box=block
|
||
content: (0, 0, 800, 67.2)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 0 0 0 0
|
||
LayoutBox node=#8 tag=body box=block
|
||
content: (8, 16, 784, 35.2)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 8 8 8 8
|
||
LayoutBox node=#10 tag=p box=block
|
||
content: (8, 16, 784, 19.2)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 16 0 16 0
|
||
inline_context: 1 lines, height=19.2, max_width=161.23349
|
||
line[0]: rect=(8, 16, 161.23349, 19.2) fragments=10
|
||
frag[0]: rect=(8, 17.6, 20.334803, 16) text="She" start=false end=false
|
||
frag[1]: rect=(31.389133, 17.6, 22.472834, 16) text="said" start=false end=false
|
||
frag[2]: rect=(56.9163, 17.6, 4.2173276, 16) text="“" start=true end=true
|
||
frag[3]: rect=(61.13363, 17.6, 27.05433, 16) text="hello" start=true end=true
|
||
frag[4]: rect=(91.24229, 17.6, 2.0558002, 16) text="‘" start=true end=true
|
||
frag[5]: rect=(93.29809, 17.6, 31.447872, 16) text="world" start=true end=true
|
||
frag[6]: rect=(124.74596, 17.6, 2.0558002, 16) text="’" start=true end=true
|
||
frag[7]: rect=(126.80176, 17.6, 4.2173276, 16) text="”" start=true end=true
|
||
frag[8]: rect=(134.07343, 17.6, 11.348018, 16) text="to" start=false end=false
|
||
frag[9]: rect=(148.47578, 17.6, 20.75771, 16) text="me." start=false end=false
|
||
LayoutBox node=#11 tag=anonymous box=anon
|
||
content: (0, -8, 48.9163, 16)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 0 0 0 0
|
||
text: "She said "
|
||
LayoutBox node=#12 tag=q box=inline
|
||
content: (0, -8, 0, 0)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 0 0 0 0
|
||
LayoutBox node=#18 tag=anonymous box=inline
|
||
content: (0, -8, 0, 0)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 0 0 0 0
|
||
LayoutBox node=#19 tag=anonymous box=anon
|
||
content: (0, -8, 4.2173276, 16)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 0 0 0 0
|
||
text: "“"
|
||
LayoutBox node=#13 tag=anonymous box=anon
|
||
content: (0, -8, 30.108662, 16)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 0 0 0 0
|
||
text: "hello "
|
||
LayoutBox node=#14 tag=q box=inline
|
||
content: (0, -8, 0, 0)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 0 0 0 0
|
||
LayoutBox node=#20 tag=anonymous box=inline
|
||
content: (0, -8, 0, 0)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 0 0 0 0
|
||
LayoutBox node=#21 tag=anonymous box=anon
|
||
content: (0, -8, 2.0558002, 16)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 0 0 0 0
|
||
text: "‘"
|
||
LayoutBox node=#15 tag=anonymous box=anon
|
||
content: (0, -8, 31.447872, 16)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 0 0 0 0
|
||
text: "world"
|
||
LayoutBox node=#22 tag=anonymous box=inline
|
||
content: (0, -8, 0, 0)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 0 0 0 0
|
||
LayoutBox node=#23 tag=anonymous box=anon
|
||
content: (0, -8, 2.0558002, 16)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 0 0 0 0
|
||
text: "’"
|
||
LayoutBox node=#24 tag=anonymous box=inline
|
||
content: (0, -8, 0, 0)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 0 0 0 0
|
||
LayoutBox node=#25 tag=anonymous box=anon
|
||
content: (0, -8, 4.2173276, 16)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 0 0 0 0
|
||
text: "”"
|
||
LayoutBox node=#16 tag=anonymous box=anon
|
||
content: (0, -8, 38.21439, 16)
|
||
padding: 0 0 0 0
|
||
border: 0 0 0 0
|
||
margin: 0 0 0 0
|
||
text: " to me."
|