트리 구성
트리 구성
트리 구성은 두 번째 파싱 단계입니다: 토크나이저의 스트림을 소비하고 표준 알고리즘에 따라 DOM을 구축합니다 — 유명한 오류 복구 동작을 포함하여. parse_html()는 전체 파이프라인을 한 번의 호출로 감싸고; TreeBuilder는 그 메커니즘을 노출합니다.
원-콜 파싱
parse_html()는 마크업 텍스트에서 완성된 트리로 변환합니다; parse_fragment()는 컨텍스트 요소에 대해 프래그먼트 알고리즘을 적용합니다. 두 경우 모두 TreeBuilder.run()을 통해 동일한 TreeBuilder 내부를 구동합니다.
삽입 모드와 열린 요소들
InsertionMode는 알고리즘의 모드 머신을 모델링하며, StackOfOpenElements와 TemplateInsertionModeStack는 사양이 설명하는 대로 구성 상태를 정확히 추적합니다.
오류 복구
잘못 중첩된 포맷팅 요소는 run_adoption_agency_algorithm() — 표준의 채택 기관 알고리즘 —을 통해 해결되며, ActiveFormattingList은 활성 포맷팅 요소를 추적합니다. get_foster_parent_location()는 잘못 위치한 테이블 콘텐츠에 대한 포스터 양육을 구현합니다.
쿼크와 외부 콘텐츠
determine_quirks_mode()은 문서를 DOCTYPE에 따라 분류합니다. SVG와 MathML 콘텐츠는 adjust_svg_attributes(), adjust_mathml_attributes(), adjust_foreign_attributes()을 통해 라우팅되며, 통합 지점은 is_html_integration_point()와 is_mathml_text_integration_point()에 의해 감지됩니다.
팁 및 모범 사례
- 특별히 construction-state introspection이 필요하지 않은 경우가 아니라면
parse_html()을 사용하십시오. - 올바른 컨텍스트 요소와 함께
parse_fragment()을 사용하세요 — 프래그먼트 파싱 규칙은 이에 의존합니다. - 잘못된 마크업으로 인한 예상치 못한 트리를 디버깅할 때, 채택 기관과 포스터 양육 동작이 보통 원인이며, 버그가 아닙니다.
일반적인 문제들
| 문제 | 원인 | 해결책 |
|---|---|---|
| 테이블 내용이 테이블 외부로 이동함 | 잘못 배치된 콘텐츠에 대한 양육 촉진 | 소스 마크업 중첩 수정 |
| 출력에 서식 태그가 중복됨 | 입양 기관 재구성 | 잘못된 중첩에 대한 기대 표준 동작 |
| 문서가 퀴르크스 모드로 렌더링됩니다 | 누락된 또는 레거시 DOCTYPE | 입력에서 determine_quirks_mode()을 확인하세요 |
FAQ
왜 잘못된 마크업이 유효한 트리를 생성하나요?
표준 알고리즘은 모든 오류 경우에 대한 복구를 정의합니다 — TreeBuilder는 오류를 발생시키는 대신 해당 경로를 구현합니다.
adoption agency 알고리즘이란 무엇입니까?
표준이 제공하는 잘못 중첩된 포맷 요소를 복구하는 절차; run_adoption_agency_algorithm()로 노출됩니다.
빌더가 SVG와 MathML를 처리합니까?
예 — 외부 콘텐츠 속성은 전용 adjust_*_attributes() 함수와 표준 통합 지점 감지를 통해 조정됩니다.
API Reference 요약
| 클래스/메서드 | 설명 |
|---|---|
parse_html | 마크업을 한 번의 호출로 트리로 변환 |
parse_fragment | 조각 알고리즘 파싱 |
TreeBuilder.run | 트리 구축 실행 |
InsertionMode | 알고리즘 모드 머신 |
run_adoption_agency_algorithm | 잘못된 중첩 복구 |
determine_quirks_mode | Doctype 기반 퀴르크스 분류 |