HEX
Server: nginx/1.28.3
System: Linux lightweb-s1 5.15.0-173-generic #183-Ubuntu SMP Fri Mar 6 13:29:34 UTC 2026 x86_64
User: dawonefr-98 (1071)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/html5lib/__pycache__/_tokenizer.cpython-310.pyc
o

V=�^�,�@s�ddlmZmZmZddlmZddlmZm	Z	ddl
mZddlm
Z
ddlmZddlmZmZdd	lmZmZmZdd
lmZmZddlmZddlmZdd
lmZee�ZedkraeZne	ZGdd�de�ZdS)�)�absolute_import�division�unicode_literals)�unichr)�deque�OrderedDict)�version_info�)�spaceCharacters)�entities)�asciiLetters�asciiUpper2Lower)�digits�	hexDigits�EOF)�
tokenTypes�
tagTokenTypes)�replacementCharacters)�HTMLInputStream)�Trie)��csdeZdZdZd��fdd�	Zdd�Zdd�Zd�d
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zd<d=�Z d>d?�Z!d@dA�Z"dBdC�Z#dDdE�Z$dFdG�Z%dHdI�Z&dJdK�Z'dLdM�Z(dNdO�Z)dPdQ�Z*dRdS�Z+dTdU�Z,dVdW�Z-dXdY�Z.dZd[�Z/d\d]�Z0d^d_�Z1d`da�Z2dbdc�Z3ddde�Z4dfdg�Z5dhdi�Z6djdk�Z7dldm�Z8dndo�Z9dpdq�Z:drds�Z;dtdu�Z<dvdw�Z=dxdy�Z>dzd{�Z?d|d}�Z@d~d�ZAd�d��ZBd�d��ZCd�d��ZDd�d��ZEd�d��ZFd�d��ZGd�d��ZHd�d��ZId�d��ZJd�d��ZKd�d��ZL�ZMS)��
HTMLTokenizera	 This class takes care of tokenizing HTML.

    * self.currentToken
      Holds the token that is currently being processed.

    * self.state
      Holds a reference to the method to be invoked... XXX

    * self.stream
      Points to HTMLInputStream object.
    NcsJt|fi|��|_||_d|_g|_|j|_d|_d|_t	t
|���dS�NF)r�stream�parser�
escapeFlag�
lastFourChars�	dataState�state�escape�currentToken�superr�__init__)�selfrr�kwargs��	__class__��5/usr/lib/python3/dist-packages/html5lib/_tokenizer.pyr#(szHTMLTokenizer.__init__ccsf�tg�|_|��r1|jjrtd|jj�d�d�V|jjs|jr+|j��V|js"|��s
dSdS)z� This is where the magic happens.

        We do our usually processing through the states and when we have a token
        to return we yield the token which pauses processing until the next token
        is requested.
        �
ParseErrorr��type�dataN)r�
tokenQueuerr�errorsr�pop�popleft�r$r(r(r)�__iter__7s�
���zHTMLTokenizer.__iter__c	Cs�t}d}|r
t}d}g}|j��}||vr+|tur+|�|�|j��}||vr+|tustd�|�|�}|tvrJt|}|j	�t
ddd|id��n�d|krTd	ksYn|d
krjd}|j	�t
ddd|id��nfd|krtd
ks�nd|krdks�nd|kr�dks�nd|kr�dks�n|tgd��vr�|j	�t
ddd|id��zt|�}Wnt
y�|d}td|d?B�td|d@B�}Ynw|dkr�|j	�t
ddd��|j�|�|S)z�This function returns either U+FFFD or the character based on the
        decimal or hexadecimal representation. It also discards ";" if present.
        If not present self.tokenQueue.append({"type": tokenTypes["ParseError"]}) is invoked.
        �
��r*z$illegal-codepoint-for-numeric-entity�	charAsInt�r,r-�datavarsi�i�����r	�����i�i�)#�i��i��i��i��i��i��i��i��i��i��i��i��i��i��i��i��i��i��i��	i��	i��
i��
i��i��i��i��i��
i��
i��i��i��i��i��r:ii�i��;z numeric-entity-without-semicolonr+)rrr�charr�append�int�joinrr.r�	frozenset�chr�
ValueError�unget)	r$�isHex�allowed�radix�	charStack�cr7rC�vr(r(r)�consumeNumberEntityGs\


�
�
�	�$��z!HTMLTokenizer.consumeNumberEntityFc	Cs�d}|j��g}|dtvs!|dtddfvs!|dur+||dkr+|j�|d��n|ddkr�d}|�|j���|ddvrKd}|�|j���|rS|dtvs[|si|dtvri|j�|d�|�|�}n�|j	�t
d	d
d��|j�|���dd�|�}n�|dtur�t
�d�|��s�n|�|j���|dtus�zt
�d�|dd���}t|�}Wnty�d}Ynw|du�r|dd
kr�|j	�t
d	dd��|dd
kr�|r�||tvs�||tvs�||dkr�|j�|���dd�|�}n2t|}|j�|���|d�||d��7}n|j	�t
d	dd��|j�|���dd�|�}|�rC|jddd|7<dS|tv�rKd}nd}|j	�t
||d��dS)N�&r�<�#F���)�x�XTr*zexpected-numeric-entityr+r6rBznamed-entity-without-semicolon�=zexpected-named-entityr-r	�SpaceCharacters�
Characters)rrCr
rrJrDrrrQr.rr0rF�entitiesTrie�has_keys_with_prefix�longest_prefix�len�KeyErrorrrr!)	r$�allowedChar�
fromAttribute�outputrN�hex�
entityName�entityLength�	tokenTyper(r(r)�
consumeEntity�st���	�
��
zHTMLTokenizer.consumeEntitycCs|j|dd�dS)zIThis method replaces the need for "entityInAttributeValueState".
        T)r`raN)rg)r$r`r(r(r)�processEntityInAttribute�sz&HTMLTokenizer.processEntityInAttributecCs�|j}|dtvr^|d�t�|d<|dtdkr8|d}t|�}t|�t|�kr4|�|ddd��||d<|dtdkr^|drO|j�	tdd	d
��|dr^|j�	tddd
��|j�	|�|j
|_dS)
z�This method is a generic handler for emitting the tags. It also sets
        the state to "data" because that's what's needed after a token has been
        emitted.
        r,�name�StartTagr-NrU�EndTagr*zattributes-in-end-tagr+�selfClosingzself-closing-flag-on-end-tag)r!r�	translater
r�attributeMapr^�updater.rDrr)r$�token�rawr-r(r(r)�emitCurrentToken�s(��zHTMLTokenizer.emitCurrentTokencCs�|j��}|dkr|j|_d
S|dkr|j|_d
S|dkr5|j�tddd��|j�tddd��d
S|tur;dS|t	vrS|j�td	||j�
t	d
�d��d
S|j�
d�}|j�td||d��d
S)NrRrS�r*�invalid-codepointr+rZFrYT�rRrSrs)rrC�entityDataStater�tagOpenStater.rDrrr
�
charsUntil�r$r-�charsr(r(r)rs6
������	��zHTMLTokenizer.dataStatecC�|��|j|_dS�NT)rgrrr2r(r(r)rv�zHTMLTokenizer.entityDataStatecCs�|j��}|dkr|j|_dS|dkr|j|_dS|tkrdS|dkr;|j�tddd��|j�tdd	d��dS|t	vrS|j�td
||j�
t	d�d��dS|j�
d�}|j�td||d��dS)
NrRrSFrsr*rtr+rZr;rYTru)rrC�characterReferenceInRcdatar�rcdataLessThanSignStaterr.rDrr
rxryr(r(r)�rcdataState"s6
������	��zHTMLTokenizer.rcdataStatecCr{r|)rgr�rr2r(r(r)r~?r}z(HTMLTokenizer.characterReferenceInRcdatacC�|j��}|dkr|j|_d
S|dkr+|j�tddd��|j�tddd��d
S|tkr1dS|j�d	�}|j�td||d��d
S�NrSrsr*rtr+rZr;F)rSrsT)	rrC�rawtextLessThanSignStaterr.rDrrrxryr(r(r)�rawtextStateD�&

���	��zHTMLTokenizer.rawtextStatecCr�r�)	rrC�scriptDataLessThanSignStaterr.rDrrrxryr(r(r)�scriptDataStateVr�zHTMLTokenizer.scriptDataStatecCst|j��}|tkrdS|dkr'|j�tddd��|j�tddd��dS|j�td||j�d�d��dS)	NFrsr*rtr+rZr;T)rrCrr.rDrrx�r$r-r(r(r)�plaintextStatehs
����zHTMLTokenizer.plaintextStatecCs|j��}|dkr|j|_dS|dkr|j|_dS|tvr.td|gddd�|_|j|_dS|dkrN|j	�
tddd	��|j	�
td
dd	��|j|_dS|dkri|j	�
tdd
d	��|j�|�|j
|_dS|j	�
tddd	��|j	�
td
dd	��|j�|�|j|_dS)N�!�/rjF)r,rir-rl�selfClosingAcknowledged�>r*z'expected-tag-name-but-got-right-bracketr+rZz<>�?z'expected-tag-name-but-got-question-markzexpected-tag-namerST)rrC�markupDeclarationOpenStater�closeTagOpenStaterrr!�tagNameStater.rDrrJ�bogusCommentStater�r(r(r)rwwsH
���������zHTMLTokenizer.tagOpenStatecCs�|j��}|tvrtd|gdd�|_|j|_dS|dkr.|j�tddd��|j	|_dS|t
urN|j�tddd��|j�td	d
d��|j	|_dS|j�tddd|id
��|j�|�|j|_dS)NrkF�r,rir-rlr�r*z*expected-closing-tag-but-got-right-bracketr+z expected-closing-tag-but-got-eofrZ�</z!expected-closing-tag-but-got-charr-r8T)
rrCrrr!r�rr.rDrrrJr�r�r(r(r)r��s6
���
����zHTMLTokenizer.closeTagOpenStatecCs�|j��}|tvr|j|_d
S|dkr|��d
S|tur.|j�t	ddd��|j
|_d
S|dkr8|j|_d
S|dkrR|j�t	ddd��|jdd	7<d
S|jd|7<d
S)Nr�r*zeof-in-tag-namer+r�rsrtrir;T)
rrCr
�beforeAttributeNameStaterrrrr.rDrr�selfClosingStartTagStater!r�r(r(r)r��s0
����	���zHTMLTokenizer.tagNameStatecC�R|j��}|dkrd|_|j|_dS|j�tddd��|j�|�|j	|_dS�Nr�r6rZrSr+T)
rrC�temporaryBuffer�rcdataEndTagOpenStaterr.rDrrJr�r�r(r(r)r��
�z%HTMLTokenizer.rcdataLessThanSignStatecC�Z|j��}|tvr|j|7_|j|_dS|j�tddd��|j�	|�|j
|_dS�NrZr�r+T)rrCrr��rcdataEndTagNameStaterr.rDrrJr�r�r(r(r)r���
�z#HTMLTokenizer.rcdataEndTagOpenStatecC�|jo|jd��|j��k}|j��}|tvr+|r+td|jgdd�|_|j|_d
S|dkrB|rBtd|jgdd�|_|j	|_d
S|dkr]|r]td|jgdd�|_|�
�|j|_d
S|tvrj|j|7_d
S|j
�tdd|jd	��|j�|�|j|_d
S�NrirkFr�r�r�rZr�r+T)r!�lowerr�rrCr
rr�rr�rrrrr.rDrJr��r$�appropriater-r(r(r)r���B
��������z#HTMLTokenizer.rcdataEndTagNameStatecCr�r�)
rrCr��rawtextEndTagOpenStaterr.rDrrJr�r�r(r(r)r��r�z&HTMLTokenizer.rawtextLessThanSignStatecCr�r�)rrCrr��rawtextEndTagNameStaterr.rDrrJr�r�r(r(r)r�r�z$HTMLTokenizer.rawtextEndTagOpenStatecCr�r�)r!r�r�rrCr
rr�rr�rrrrr.rDrJr�r�r(r(r)r�r�z$HTMLTokenizer.rawtextEndTagNameStatecCs||j��}|dkrd|_|j|_dS|dkr'|j�tddd��|j|_dS|j�tddd��|j�	|�|j
|_dS)	Nr�r6r�rZz<!r+rST)rrCr��scriptDataEndTagOpenStaterr.rDr�scriptDataEscapeStartStaterJr�r�r(r(r)r�,s
��z)HTMLTokenizer.scriptDataLessThanSignStatecCr�r�)rrCrr��scriptDataEndTagNameStaterr.rDrrJr�r�r(r(r)r�:r�z'HTMLTokenizer.scriptDataEndTagOpenStatecCr�r�)r!r�r�rrCr
rr�rr�rrrrr.rDrJr�r�r(r(r)r�Er�z'HTMLTokenizer.scriptDataEndTagNameStatecC�L|j��}|dkr|j�tddd��|j|_dS|j�|�|j|_dS�N�-rZr+T)	rrCr.rDr�scriptDataEscapeStartDashStaterrJr�r�r(r(r)r�a�
�z(HTMLTokenizer.scriptDataEscapeStartStatecCr�r�)	rrCr.rDr�scriptDataEscapedDashDashStaterrJr�r�r(r(r)r�kr�z,HTMLTokenizer.scriptDataEscapeStartDashStatecCs�|j��}|dkr|j�tddd��|j|_d
S|dkr$|j|_d
S|dkr@|j�tddd��|j�tddd��d
S|tkrJ|j	|_d
S|j�
d	�}|j�td||d��d
S)Nr�rZr+rSrsr*rtr;)rSr�rsT)rrCr.rDr�scriptDataEscapedDashStater�"scriptDataEscapedLessThanSignStaterrrxryr(r(r)�scriptDataEscapedStateus0
�������z$HTMLTokenizer.scriptDataEscapedStatecCs�|j��}|dkr|j�tddd��|j|_d	S|dkr$|j|_d	S|dkrD|j�tddd��|j�tddd��|j|_d	S|t	krN|j
|_d	S|j�td|d��|j|_d	S)
Nr�rZr+rSrsr*rtr;T)rrCr.rDrr�rr�r�rrr�r(r(r)r��s.
������z(HTMLTokenizer.scriptDataEscapedDashStatecCs�|j��}|dkr|j�tddd��d
S|dkr |j|_d
S|dkr5|j�tddd��|j|_d
S|dkrU|j�tddd��|j�tdd	d��|j|_d
S|t	kr_|j
|_d
S|j�td|d��|j|_d
S)Nr�rZr+rSr�rsr*rtr;T)rrCr.rDrr�rr�r�rrr�r(r(r)r��s4
�������z,HTMLTokenizer.scriptDataEscapedDashDashStatecCs�|j��}|dkrd|_|j|_dS|tvr,|j�tdd|d��||_|j	|_dS|j�tddd��|j�
|�|j|_dSr�)rrCr�� scriptDataEscapedEndTagOpenStaterrr.rDr� scriptDataDoubleEscapeStartStaterJr�r�r(r(r)r��s
	��z0HTMLTokenizer.scriptDataEscapedLessThanSignStatecCsR|j��}|tvr||_|j|_dS|j�tddd��|j�	|�|j
|_dSr�)rrCrr�� scriptDataEscapedEndTagNameStaterr.rDrrJr�r�r(r(r)r��r�z.HTMLTokenizer.scriptDataEscapedEndTagOpenStatecCr�r�)r!r�r�rrCr
rr�rr�rrrrr.rDrJr�r�r(r(r)r��r�z.HTMLTokenizer.scriptDataEscapedEndTagNameStatecC�|j��}|ttd�Bvr+|j�td|d��|j��dkr%|j	|_
dS|j|_
dS|tvrC|j�td|d��|j|7_dS|j�
|�|j|_
dS�N)r�r�rZr+�scriptT)rrCr
rGr.rDrr�r��scriptDataDoubleEscapedStaterr�rrJr�r(r(r)r���
	���z.HTMLTokenizer.scriptDataDoubleEscapeStartStatecCs�|j��}|dkr|j�tddd��|j|_d
S|dkr/|j�tddd��|j|_d
S|dkrK|j�tddd��|j�tddd��d
S|tkr`|j�tdd	d��|j	|_d
S|j�td|d��d
S�Nr�rZr+rSrsr*rtr;�eof-in-script-in-scriptT)
rrCr.rDr� scriptDataDoubleEscapedDashStater�(scriptDataDoubleEscapedLessThanSignStaterrr�r(r(r)r��s2
�������z*HTMLTokenizer.scriptDataDoubleEscapedStatecCs�|j��}|dkr|j�tddd��|j|_d
S|dkr/|j�tddd��|j|_d
S|dkrO|j�tddd��|j�tddd��|j|_d
S|t	krd|j�tdd	d��|j
|_d
S|j�td|d��|j|_d
Sr�)rrCr.rDr�$scriptDataDoubleEscapedDashDashStaterr�r�rrr�r(r(r)r�s6
�������z.HTMLTokenizer.scriptDataDoubleEscapedDashStatecCs|j��}|dkr|j�tddd��dS|dkr+|j�tddd��|j|_dS|dkr@|j�tddd��|j|_dS|dkr`|j�tddd��|j�tdd	d��|j|_dS|t	kru|j�tdd
d��|j
|_dS|j�td|d��|j|_dS)Nr�rZr+rSr�rsr*rtr;r�T)rrCr.rDrr�rr�r�rrr�r(r(r)r�%s<
��������z2HTMLTokenizer.scriptDataDoubleEscapedDashDashStatecCsR|j��}|dkr|j�tddd��d|_|j|_dS|j�|�|j	|_dS)Nr�rZr+r6T)
rrCr.rDrr��scriptDataDoubleEscapeEndStaterrJr�r�r(r(r)r�>s
�z6HTMLTokenizer.scriptDataDoubleEscapedLessThanSignStatecCr�r�)rrCr
rGr.rDrr�r�r�rr�rrJr�r(r(r)r�Ir�z,HTMLTokenizer.scriptDataDoubleEscapeEndStatecCs:|j��}|tvr|j�td�dS|tvr&|jd�|dg�|j|_dS|dkr0|�	�dS|dkr:|j
|_dS|dvrY|j�tddd	��|jd�|dg�|j|_dS|d
krx|j�tddd	��|jd�ddg�|j|_dS|t
ur�|j�tdd
d	��|j|_dS|jd�|dg�|j|_dS)NTr-r6r�r�)�'�"rXrSr*�#invalid-character-in-attribute-namer+rsrtr;z#expected-attribute-name-but-got-eof)rrCr
rxrr!rD�attributeNameStaterrrr�r.rrrr�r(r(r)r�YsJ
�����
�����z&HTMLTokenizer.beforeAttributeNameStatecCs�|j��}d}d}|dkr|j|_n�|tvr-|jddd||j�td�7<d}nz|dkr4d}ns|tvr=|j|_nj|dkrF|j	|_na|d	kre|j
�td
dd��|jdddd
7<d}nB|dvr�|j
�td
dd��|jddd|7<d}n#|t
ur�|j
�td
dd��|j|_n|jddd|7<d}|r�|jddd�t�|jddd<|jddd�D]\}}|jddd|kr�|j
�td
dd��nq�|r�|��dS)NTFrXr-rUrr�r�rsr*rtr+r;�r�r�rSr�zeof-in-attribute-namezduplicate-attribute)rrC�beforeAttributeValueStaterrr!rxr
�afterAttributeNameStater�r.rDrrrrmr
rr)r$r-�leavingThisState�	emitTokenri�_r(r(r)r�ws`

�

���
���z HTMLTokenizer.attributeNameStatecCsN|j��}|tvr|j�td�dS|dkr|j|_dS|dkr&|��dS|tvr:|jd�	|dg�|j
|_dS|dkrD|j|_dS|dkrc|j�	t
dd	d
��|jd�	ddg�|j
|_dS|dvr�|j�	t
dd
d
��|jd�	|dg�|j
|_dS|tur�|j�	t
ddd
��|j|_dS|jd�	|dg�|j
|_dS)NTrXr�r-r6r�rsr*rtr+r;r�z&invalid-character-after-attribute-namezexpected-end-of-tag-but-got-eof)rrCr
rxr�rrrrr!rDr�r�r.rrrr�r(r(r)r��sP
������
�����z%HTMLTokenizer.afterAttributeNameStatecCsn|j��}|tvr|j�td�dS|dkr|j|_dS|dkr,|j|_|j�|�dS|dkr6|j|_dS|dkrK|j	�
tddd��|��dS|d	krm|j	�
tdd
d��|j
ddd
d7<|j|_dS|dvr�|j	�
tddd��|j
ddd
|7<|j|_dS|tur�|j	�
tddd��|j|_dS|j
ddd
|7<|j|_dS)NTr�rRr�r�r*z.expected-attribute-value-but-got-right-bracketr+rsrtr-rUr	r;)rXrS�`z"equals-in-unquoted-attribute-valuez$expected-attribute-value-but-got-eof)rrCr
rx�attributeValueDoubleQuotedStater�attributeValueUnQuotedStaterJ�attributeValueSingleQuotedStater.rDrrrr!rrr�r(r(r)r��sV
�������
�����z'HTMLTokenizer.beforeAttributeValueStatecC��|j��}|dkr|j|_d
S|dkr|�d�d
S|dkr8|j�tddd��|jddd	d
7<d
S|t	urM|j�tddd��|j
|_d
S|jddd	||j�d�7<d
S)Nr�rRrsr*rtr+r-rUr	r;z#eof-in-attribute-value-double-quote)r�rRrsT�rrC�afterAttributeValueStaterrhr.rDrr!rrrxr�r(r(r)r���.
�
�����
�z-HTMLTokenizer.attributeValueDoubleQuotedStatecCr�)Nr�rRrsr*rtr+r-rUr	r;z#eof-in-attribute-value-single-quote)r�rRrsTr�r�r(r(r)r�r�z-HTMLTokenizer.attributeValueSingleQuotedStatecCs|j��}|tvr|j|_dS|dkr|�d�dS|dkr$|��dS|dvrB|j�t	ddd��|j
ddd	|7<dS|d
kr`|j�t	ddd��|j
ddd	d7<dS|turu|j�t	dd
d��|j|_dS|j
ddd	||j�
td�tB�7<dS)NrRr�)r�r�rXrSr�r*z0unexpected-character-in-unquoted-attribute-valuer+r-rUr	rsrtr;z eof-in-attribute-value-no-quotes)rRr�r�r�rXrSr�rsT)rrCr
r�rrhrrr.rDrr!rrrxrGr�r(r(r)r�s@
�
��������

�z)HTMLTokenizer.attributeValueUnQuotedStatecCs�|j��}|tvr|j|_dS|dkr|��dS|dkr#|j|_dS|tur>|j�	t
ddd��|j�|�|j|_dS|j�	t
ddd��|j�|�|j|_dS)Nr�r�r*z$unexpected-EOF-after-attribute-valuer+z*unexpected-character-after-attribute-valueT)
rrCr
r�rrrr�rr.rDrrJrr�r(r(r)r�.s.
�
�����z&HTMLTokenizer.afterAttributeValueStatecCs�|j��}|dkrd|jd<|��dS|tur/|j�tddd��|j�|�|j	|_
dS|j�tddd��|j�|�|j|_
dS)Nr�Trlr*z#unexpected-EOF-after-solidus-in-tagr+z)unexpected-character-after-solidus-in-tag)rrCr!rrrr.rDrrJrrr�r�r(r(r)r�Bs$

����z&HTMLTokenizer.selfClosingStartTagStatecCsD|j�d�}|�dd�}|j�td|d��|j��|j|_dS)Nr�rsr;�Commentr+T)	rrx�replacer.rDrrCrrr�r(r(r)r�Ts�
zHTMLTokenizer.bogusCommentStatecCsn|j��g}|ddkr)|�|j���|ddkr(tddd�|_|j|_dSnq|ddvr\d}dD]}|�|j���|d|vrGd	}nq3|r[td
ddddd�|_|j|_dSn>|ddkr�|jdur�|jj	j
r�|jj	j
dj|jj	jkr�d}d
D]}|�|j���|d|kr�d	}nq}|r�|j
|_dS|j�tddd��|r�|j�|���|s�|j|_dS)NrUr�r�r6r+T)�d�D))�o�O�rO�C��t�T��y�Y��p�P��e�EF�Doctype)r,ri�publicId�systemId�correct�[)r�r��Ar�r�r�r*zexpected-dashes-or-doctype)rrCrDrr!�commentStartStater�doctypeStater�tree�openElements�	namespace�defaultNamespace�cdataSectionStater.rJr0r�)r$rN�matched�expectedr(r(r)r�cs`����
����z(HTMLTokenizer.markupDeclarationOpenStatecCs�|j��}|dkr|j|_dS|dkr)|j�tddd��|jdd7<dS|dkrE|j�tdd	d��|j�|j�|j|_dS|t	ura|j�tdd
d��|j�|j�|j|_dS|jd|7<|j
|_dS)Nr�rsr*rtr+r-r;r��incorrect-comment�eof-in-commentT)rrC�commentStartDashStaterr.rDrr!rr�commentStater�r(r(r)r��s6
����	���zHTMLTokenizer.commentStartStatecCs�|j��}|dkr|j|_dS|dkr)|j�tddd��|jdd7<dS|dkrE|j�tdd	d��|j�|j�|j|_dS|t	ura|j�tdd
d��|j�|j�|j|_dS|jdd|7<|j
|_dS)Nr�rsr*rtr+r-�-�r�r�r�T)rrC�commentEndStaterr.rDrr!rrr�r�r(r(r)r��s6
����	���z#HTMLTokenizer.commentStartDashStatecCs�|j��}|dkr|j|_d
S|dkr)|j�tddd��|jdd7<d
S|turE|j�tddd��|j�|j�|j	|_d
S|jd||j�
d	�7<d
S)Nr�rsr*rtr+r-r;r�)r�rsT)rrC�commentEndDashStaterr.rDrr!rrrxr�r(r(r)r��s*

��	���
�zHTMLTokenizer.commentStatecCs�|j��}|dkr|j|_d	S|dkr-|j�tddd��|jdd7<|j|_d	S|t	urI|j�tddd��|j�|j�|j
|_d	S|jdd|7<|j|_d	S)
Nr�rsr*rtr+r-r�zeof-in-comment-end-dashT)rrCr�rr.rDrr!r�rrr�r(r(r)r��s*
��	���z!HTMLTokenizer.commentEndDashStatecCs6|j��}|dkr|j�|j�|j|_dS|dkr4|j�tddd��|jdd7<|j|_dS|dkrI|j�tdd	d��|j	|_dS|d
krc|j�tddd��|jd|7<dS|t
ur|j�tddd��|j�|j�|j|_dS|j�tdd
d��|jdd|7<|j|_dS)Nr�rsr*rtr+r-u--�r�z,unexpected-bang-after-double-dash-in-commentr�z,unexpected-dash-after-double-dash-in-commentzeof-in-comment-double-dashzunexpected-char-in-commentz--T)rrCr.rDr!rrrr��commentEndBangStaterr�r(r(r)r��sJ
����������zHTMLTokenizer.commentEndStatecCs�|j��}|dkr|j�|j�|j|_dS|dkr)|jdd7<|j|_dS|dkrG|j�tddd��|jdd	7<|j	|_dS|t
urc|j�tdd
d��|j�|j�|j|_dS|jdd|7<|j	|_dS)Nr�r�r-z--!rsr*rtr+u--!�zeof-in-comment-end-bang-stateT)rrCr.rDr!rrr�rr�rr�r(r(r)r�s4
���	���z!HTMLTokenizer.commentEndBangStatecCs�|j��}|tvr|j|_dS|tur0|j�tddd��d|j	d<|j�|j	�|j
|_dS|j�tddd��|j�|�|j|_dS)Nr*�!expected-doctype-name-but-got-eofr+Fr�zneed-space-after-doctypeT)rrCr
�beforeDoctypeNameStaterrr.rDrr!rrJr�r(r(r)r�s$
��
��zHTMLTokenizer.doctypeStatecCs�|j��}|tvr	dS|dkr-|j�tddd��d|jd<|j�|j�|j|_dS|dkrG|j�tddd��d	|jd
<|j	|_dS|t
urh|j�tddd��d|jd<|j�|j�|j|_dS||jd
<|j	|_dS)
Nr�r*z+expected-doctype-name-but-got-right-bracketr+Fr�rsrtr;rir�T)rrCr
r.rDrr!rr�doctypeNameStaterr�r(r(r)r*s<
��
��

��

�z$HTMLTokenizer.beforeDoctypeNameStatecCs|j��}|tvr|jd�t�|jd<|j|_dS|dkr6|jd�t�|jd<|j�	|j�|j
|_dS|dkrT|j�	tddd��|jdd7<|j|_dS|t
ur�|j�	tddd��d	|jd
<|jd�t�|jd<|j�	|j�|j
|_dS|jd|7<dS)Nrir�rsr*rtr+r;zeof-in-doctype-nameFr�T)rrCr
r!rmr
�afterDoctypeNameStaterr.rDrrrrr�r(r(r)rDs8
���
��
�zHTMLTokenizer.doctypeNameStatecCsH|j��}|tvr	dS|dkr|j�|j�|j|_dS|turDd|jd<|j�	|�|j�t
ddd��|j�|j�|j|_dS|dvred}d	D]}|j��}||vr[d}nqL|rd|j|_dSn |d
vr�d}dD]}|j��}||vr|d}nqm|r�|j|_dS|j�	|�|j�t
ddd
|id��d|jd<|j
|_dS)Nr�Fr�r*�eof-in-doctyper+r�T))�u�U)�b�B)�l�L)�i�Ir���s�S)r�rr�r�)�m�Mz*expected-space-or-right-bracket-in-doctyper-r8)rrCr
r.rDr!rrrrJr�afterDoctypePublicKeywordState�afterDoctypeSystemKeywordState�bogusDoctypeState)r$r-r�r�r(r(r)r]s`
.�+�
�$�
��
��
z#HTMLTokenizer.afterDoctypeNameStatecC�|j��}|tvr|j|_dS|dvr*|j�tddd��|j�|�|j|_dS|t	urK|j�tddd��d|j
d<|j�|j
�|j|_dS|j�|�|j|_dS�	N)r�r�r*�unexpected-char-in-doctyper+rFr�T)rrCr
�"beforeDoctypePublicIdentifierStaterr.rDrrJrr!rr�r(r(r)r��,
��
��
�z,HTMLTokenizer.afterDoctypePublicKeywordStatecCs|j��}|tvr	d
S|dkrd|jd<|j|_d
S|dkr*d|jd<|j|_d
S|dkrK|j�t	ddd��d	|jd
<|j�|j�|j
|_d
S|turl|j�t	ddd��d	|jd
<|j�|j�|j
|_d
S|j�t	ddd��d	|jd
<|j|_d
S)Nr�r6r�r�r�r*�unexpected-end-of-doctyper+Fr�rrT)
rrCr
r!�(doctypePublicIdentifierDoubleQuotedStater�(doctypePublicIdentifierSingleQuotedStater.rDrrrrr�r(r(r)r��D
�
�
��
��
��
z0HTMLTokenizer.beforeDoctypePublicIdentifierStatecC��|j��}|dkr|j|_d
S|dkr)|j�tddd��|jdd7<d
S|dkrJ|j�tdd	d��d
|jd<|j�|j�|j|_d
S|t	urk|j�tddd��d
|jd<|j�|j�|j|_d
S|jd|7<d
S)Nr�rsr*rtr+r�r;r�rFr�rT�
rrC�!afterDoctypePublicIdentifierStaterr.rDrr!rrr�r(r(r)r��8
����
	��
�z6HTMLTokenizer.doctypePublicIdentifierDoubleQuotedStatecCr)Nr�rsr*rtr+r�r;r�rFr�rTrr�r(r(r)r�r z6HTMLTokenizer.doctypePublicIdentifierSingleQuotedStatecCs|j��}|tvr|j|_dS|dkr |j�|j�|j|_dS|dkr:|j�t	ddd��d|jd<|j
|_dS|dkrT|j�t	ddd��d|jd<|j|_dS|turu|j�t	dd	d��d
|jd<|j�|j�|j|_dS|j�t	ddd��d
|jd<|j
|_dS)
Nr�r�r*rr+r6r�r�rFr�T)rrCr
�-betweenDoctypePublicAndSystemIdentifiersStaterr.rDr!rr�(doctypeSystemIdentifierDoubleQuotedState�(doctypeSystemIdentifierSingleQuotedStaterrr�r(r(r)r�sH
���
��
��
��
z/HTMLTokenizer.afterDoctypePublicIdentifierStatecCs�|j��}|tvr	dS|dkr|j�|j�|j|_dS|dkr,d|jd<|j|_dS|dkr;d|jd<|j	|_dS|t
kr\|j�tddd��d	|jd
<|j�|j�|j|_dS|j�tddd��d	|jd
<|j|_dS)
Nr�r�r6r�r�r*rr+Fr�rT)
rrCr
r.rDr!rrr"r#rrrr�r(r(r)r!s<
��
�
��
��
z;HTMLTokenizer.betweenDoctypePublicAndSystemIdentifiersStatecCrr)rrCr
�"beforeDoctypeSystemIdentifierStaterr.rDrrJrr!rr�r(r(r)r)rz,HTMLTokenizer.afterDoctypeSystemKeywordStatecCs|j��}|tvr	dS|dkrd|jd<|j|_dS|dkr*d|jd<|j|_dS|dkrK|j�t	ddd��d	|jd
<|j�|j�|j
|_dS|turl|j�t	ddd��d	|jd
<|j�|j�|j
|_dS|j�t	ddd��d	|jd
<|j|_dS)
Nr�r6r�r�r�r*rr+Fr�rT)
rrCr
r!r"rr#r.rDrrrrr�r(r(r)r$=rz0HTMLTokenizer.beforeDoctypeSystemIdentifierStatecCr)Nr�rsr*rtr+r�r;r�rFr�rT�
rrC�!afterDoctypeSystemIdentifierStaterr.rDrr!rrr�r(r(r)r"Zr z6HTMLTokenizer.doctypeSystemIdentifierDoubleQuotedStatecCr)Nr�rsr*rtr+r�r;r�rFr�rTr%r�r(r(r)r#rr z6HTMLTokenizer.doctypeSystemIdentifierSingleQuotedStatecCs�|j��}|tvr	dS|dkr|j�|j�|j|_dS|tur>|j�t	ddd��d|jd<|j�|j�|j|_dS|j�t	ddd��|j
|_dS)	Nr�r*rr+Fr�rT)rrCr
r.rDr!rrrrrr�r(r(r)r&�s*
���
��z/HTMLTokenizer.afterDoctypeSystemIdentifierStatecCs`|j��}|dkr|j�|j�|j|_dS|tur-|j�|�|j�|j�|j|_dS	dS)Nr�T)	rrCr.rDr!rrrrJr�r(r(r)r�s
��zHTMLTokenizer.bogusDoctypeStatecCs�g}	|�|j�d��|�|j�d��|j��}|tkrn!|dks%J�|ddd�dkr:|ddd�|d<n|�|�qd�|�}|�d�}|d	krft|�D]
}|j�t	d
dd��qR|�
dd
�}|rs|j�t	d|d��|j|_dS)NT�]r�rU���z]]r6rsrr*rtr+r;rZ)
rDrrxrCrrF�count�ranger.rr�rr)r$r-rC�	nullCountr�r(r(r)r��s6

�


��zHTMLTokenizer.cdataSectionState)Nr)N�__name__�
__module__�__qualname__�__doc__r#r3rQrgrhrrrrvr�r~r�r�r�rwr�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrr!rr$r"r#r&rr��
__classcell__r(r(r&r)rs�
HP#

6 "-3rN) �
__future__rrr�sixrrH�collectionsrr�sysr�	constantsr
rrr
rrrrrr�_inputstreamr�_trierr[�dictrn�objectrr(r(r(r)�<module>s"