Konstrukce stromu
Konstrukce stromu
Konstrukce stromu je druhá fáze parsování: spotřebovává tok tokenizéru a vytváří DOM podle algoritmu standardu — včetně jeho proslulých chybových zotavovacích chování. parse_html() obaluje celý pipeline v jednom volání; TreeBuilder vystavuje mechanismus.
Parsování jedním voláním
parse_html() přechází z textu značkování na dokončený strom; parse_fragment() aplikuje algoritmus fragmentu na kontextový prvek. Oba řídí stejné interní TreeBuilder prostřednictvím TreeBuilder.run().
Režimy vkládání a otevřené elementy
InsertionMode modeluje stavový stroj algoritmu, přičemž StackOfOpenElements a TemplateInsertionModeStack sledují stav konstrukce přesně tak, jak to popisuje specifikace.
Obnova po chybě
Nesprávně vnořené formátovací elementy jsou řešeny pomocí run_adoption_agency_algorithm() — algoritmu adoption agency podle standardu — a ActiveFormattingList sleduje aktivní formátovací elementy. get_foster_parent_location() implementuje foster parenting pro nesprávně umístěný obsah tabulky.
Quirks a cizí obsah
determine_quirks_mode() klasifikuje dokumenty podle jejich doctype. SVG a MathML obsah prochází přes adjust_svg_attributes(), adjust_mathml_attributes() a adjust_foreign_attributes(), přičemž integrační body jsou detekovány pomocí is_html_integration_point() a is_mathml_text_integration_point().
Tipy a osvědčené postupy
- Použijte
parse_html(), pokud výslovně nepotřebujete introspekci konstrukčního stavu - Použijte
parse_fragment()s vhodným kontextovým elementem — pravidla parsování fragmentu na něm závisí - Při ladění překvapivých stromů vzniklých špatným značkováním jsou chování adoption agency a foster-parenting obvykle vysvětlením, nikoli chybou
Časté problémy
| Problém | Příčina | Oprava |
|---|---|---|
| Obsah tabulky přesunut mimo tabulku | Podpora přebírání nesprávně umístěného obsahu | Opravit vnoření zdrojového značkování |
| Formátovací značky duplikovány ve výstupu | Rekonstrukce adopční agentury | Očekávané chování standardů při nesprávném vnořování |
| Dokument se vykresluje v režimu quirks | Chybějící nebo zastaralý doctype | Zkontrolujte determine_quirks_mode() na vstupu |
FAQ
Proč chybně vytvořený značkovací kód vytváří platný strom?
Standardní algoritmus definuje zotavení pro každý chybový případ — TreeBuilder implementuje tyto cesty místo vyvolání výjimky.
Co je algoritmus adopční agentury?
Postup standardu pro opravu nesprávně vnořených formátovacích elementů; zveřejněno jako run_adoption_agency_algorithm().
Umí builder zpracovávat SVG a MathML?
Ano — atributy cizího obsahu se upravují pomocí dedikovaných funkcí adjust_*_attributes() s detekcí integračního bodu standardů.
API Reference Shrnutí
| Třída/Metoda | Popis: |
|---|---|
parse_html | Značkování na strom v jednom volání |
parse_fragment | Parsování fragmentového algoritmu |
TreeBuilder.run | Konstrukce běhového stromu |
InsertionMode | Stroj režimu algoritmu |
run_adoption_agency_algorithm | Oprava nesprávného vnoření |
determine_quirks_mode | Klasifikace quirks podle doctype |