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명명된 문자 참조를 해결

참조

 한국어