HTML 토크나이저
HTML 토크나이저
Tokenizer는 HTML 구문의 첫 단계이며, 마크업 텍스트를 표준 정의 토큰 스트림으로 변환합니다. 이는 공개 API이므로, 트리보다 토큰에 관심 있는 도구들 — linters, sanitizer pre-passes, syntax highlighters — 가 스트림을 직접 사용할 수 있습니다.
마크업 토큰화
Tokenizer.tokenize()는 전체 입력을 처리하고; Tokenizer.tokenize_fragment()는 조각 토큰화 규칙을 적용합니다. 두 경우 모두 표준 토큰 어휘를 출력합니다.
토큰 클래스
각 토큰은 타입이 지정된 객체입니다: StartTagToken와 EndTagToken는 태그(속성 포함)를 위해, CharacterToken는 텍스트를 위해, CommentToken, DoctypeToken, 그리고 EofToken는 입력 종료를 표시합니다.
Tokenizer 상태
TokenizerState 모델은 표준 상태 머신—사양이 명명한 동일한 상태—을 모델링하고 Tokenizer.set_state()은 조각 및 컨텍스트 민감 호출자가 올바른 상태에서 시작하도록 합니다.
문자 참조
이름이 지정된 및 숫자 문자 참조는 resolve_named_char_ref(), resolve_numeric_char_ref(), find_named_char_ref_match()를 통해 해결됩니다 — 전체 이름-참조 테이블이며, 단축 하위 집합이 아닙니다.
팁 및 모범 사례
- 특정 요소 내부에 나타날 콘텐츠를 토큰화할 때 올바른 초기 상태와 함께
tokenize_fragment()을 사용하십시오. - 예외를 통해 iterator를 소진하는 대신
EofToken을 최종 신호로 간주하십시오. - 정화기에서는 트리가 구축되기 전에 토큰 수준에서
StartTagToken속성을 검사하십시오.
일반적인 문제
| 문제 | 원인 | 수정 |
|---|---|---|
| 스크립트/스타일 내용이 마크업으로 토크나이즈됩니다 | 컨텍스트의 초기 상태가 잘못되었습니다 | 적절한 TokenizerState을(를) set_state()을(를) 통해 설정하십시오. |
| 엔티티가 해석되지 않은 것처럼 보입니다 | 참조 해석 없이 원시 텍스트를 소비합니다 | char-ref 해결 함수 사용 |
| Fragment 출력이 전체 파싱과 다릅니다 | Fragment 규칙은 의도적으로 다릅니다 | 전체 문서에 tokenize() 사용 |
FAQ
트리를 구축하지 않고 토크나이저를 사용할 수 있나요?
예 — 토큰 스트림은 공개된 독립형 출력입니다.
토크나이저 상태가 표준 상태인가요?
TokenizerState은(는) 사양의 상태 머신을 반영하며 set_state()을(를) 통해 설정할 수 있습니다.
명명된 문자 참조는 어떻게 처리되나요?
resolve_named_char_ref()와 find_named_char_ref_match()을 사용하여 전체 명명된 참조 테이블에 대해 처리합니다.
API Reference 요약
| 클래스/메서드 | 설명 |
|---|---|
Tokenizer.tokenize | 전체 입력을 토큰화 |
Tokenizer.tokenize_fragment | 프래그먼트 규칙에 따라 토큰화 |
Tokenizer.set_state | 초기 토크나이저 상태를 설정합니다. |
StartTagToken | 속성이 포함된 시작 태그 토큰 |
TokenizerState | 표준 상태 머신 상태 |
resolve_named_char_ref | 명명된 문자 참조를 해결 |