a
    ¥Q•hàù  ã                   @   sŠ   d dl mZ d dlmZ d dlmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZ ddlmZ eeeƒƒZdd„ Zd	d
„ ZG dd„ dƒZdS )é    )Úbisect_left)Údeque)Úhtml5é   )	ÚEOFÚTokenÚascii_lettersÚascii_upper_to_lowerÚdigitsÚ	hexdigitsÚreplacement_charactersÚspace_charactersÚtag_token_types)ÚHTMLInputStreamc                 C   s4   | t v rdS tt| ƒ }tt ƒkr&dS t|  | ¡S )NTF)Úentitiesr   Úentity_keysÚlenÚ
startswith©ÚprefixÚi© r   úL/var/www/sistema_ama/venv/lib/python3.9/site-packages/tinyhtml5/tokenizer.pyÚhas_keys_with_prefix   s
    r   c                 C   sT   | t v r| S tdt| ƒd ƒD ](}| d | … t v r| d | …   S qt| ƒ‚d S )Nr   )r   Úranger   ÚKeyErrorr   r   r   r   Úlongest_prefix   s    r   c                   @   sl  e Zd ZdZdšdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zd›dd„Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<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•„ ZLd–d—„ ZMd˜d™„ ZNdS )œÚHTMLTokenizerzHTML tokenizer.Nc                 K   s*   t |fi |¤Ž| _|| _| j| _d | _d S )N)r   ÚstreamÚparserÚ
data_stateÚstateÚcurrent_token)Úselfr   r   Úkwargsr   r   r   Ú__init__)   s    zHTMLTokenizer.__init__c                 c   sN   t g ƒ| _|  ¡ rJ| jjr4tj| jj d¡dœV  q| jr
| j ¡ V  q4q
dS )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.

        r   ©ÚtypeÚdataN)	r   Útoken_queuer!   r   Úerrorsr   ÚPARSE_ERRORÚpopÚpopleft©r#   r   r   r   Ú__iter__1   s    
þ
zHTMLTokenizer.__iter__c                 K   s(   t j|dœ}|r||d< | j |¡ dS )z%Add a parse error to the token queue.r&   ÚdatavarsN)r   r+   r)   Úappend)r#   Ú_datar0   Útokenr   r   r   Úparse_errorE   s    zHTMLTokenizer.parse_errorc                 C   s   | j  tj|dœ¡ dS )z+Add a characters string to the token queue.r&   N)r)   r1   r   Ú
CHARACTERS)r#   r2   r   r   r   Ú
charactersL   s    zHTMLTokenizer.charactersc                 C   sT  |rt nt}|rdnd}g }| j ¡ }||v rD| |¡ | j ¡ }q&td |¡|ƒ}|tv rtt| }| jd|d� n¼d|  krˆdks’n |dkr¦d	}| jd|d� nŠd
|  kr¼dk�sn d|  krÔdk�sn d|  krìdk�sn d|  k�rdk�sn |t	g d¢ƒv �r(| jd|d� t
|ƒ}|dk�rP|  d¡ | j |¡ |S )zªReturn either U+FFFD or the character based on the representation.

        It also discards ";" if present. If not present self.parse_error is
        invoked.

        é   é
   Ú z$illegal-codepoint-for-numeric-entity)Úintegeri Ø  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;   ú;z numeric-entity-without-semicolon)r   r
   r   Ú	characterr1   ÚintÚjoinr   r4   Ú	frozensetÚchrÚunget)r#   Zis_hexÚallowedÚradixÚstackrD   r:   Úreplacementr   r   r   Úconsume_number_entityP   sJ    

ÿÿ
þþ
ý
ý
üÿ

z#HTMLTokenizer.consume_number_entityFc                 C   s€  d}| j  ¡ g}|d tddgt¢R v p:|d uo:||d k}|rT| j  |d ¡ �nÞ|d dkròd}| | j  ¡ ¡ |d dv r”d}| | j  ¡ ¡ |d |r¢tntv rÄ| j  |d ¡ |  |¡}n*|  	d	¡ | j  | 
¡ ¡ dd
 |¡› �}�n@|d tu�r&td
 |¡ƒ�s�q&| | j  ¡ ¡ qòztd
 |d d… ¡ƒ}W n> t�y~   |  	d¡ | j  | 
¡ ¡ dd
 |¡› �}Y n´0 |d dk�r˜|  	d¡ t|ƒ}|| tv �pÆ|| tv �pÆ|| dk}	|d dk�r|�r|	�r| j  | 
¡ ¡ dd
 |¡› �}n.| j  | 
¡ ¡ t| › d
 ||d … ¡› �}|�rT| jd d d  |7  < n(|tv �rbdnd}
| j t|
 |dœ¡ d S )Nú&r   ú<ú#Féÿÿÿÿ)ÚxÚXTzexpected-numeric-entityr9   zexpected-named-entityrC   znamed-entity-without-semicolonú=r(   r   ÚSPACE_CHARACTERSr5   r&   )r   rD   r   r   rI   r1   r   r
   rN   r4   r,   rF   r   r   r   r   r   r   r"   r)   r   )r#   rJ   Úfrom_attributeÚoutputrL   rI   ÚhexÚentity_nameZentity_lengthZallowed_characterr'   r   r   r   Úconsume_entity…   s\    þ



ÿ
ýzHTMLTokenizer.consume_entityc                 C   s   | j |dd� dS )z5Replace the need for entity_in_attribute_value_state.T)rJ   rW   N)r[   )r#   rJ   r   r   r   Úprocess_entity_in_attributeÌ   s    z)HTMLTokenizer.process_entity_in_attributec                 C   s¸   | j }|d tv r |d  t¡|d< |d tjkrn|d }t|ƒ}t|ƒt|ƒkrf| |ddd… ¡ ||d< |d tj	kr |d rŽ|  
d¡ |d r |  
d¡ | j |¡ | j| _dS )	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'   Únamer(   NrR   zattributes-in-end-tagÚselfClosingzself-closing-flag-on-end-tag)r"   r   Ú	translater	   r   Ú	START_TAGÚdictr   ÚupdateÚEND_TAGr4   r)   r1   r    r!   )r#   r3   Úrawr(   r   r   r   Úemit_current_tokenÐ   s     

z HTMLTokenizer.emit_current_tokenc                 C   s¢   | j  ¡ }|dkr| j| _n‚|dkr.| j| _np|dkrL|  d¡ |  d¡ nR|tu rXdS |tv r„| j	 
tj|| j  td¡ dœ¡ n| j  d¡}|  || ¡ dS )	NrO   rP   ú úinvalid-codepointFTr&   ©rO   rP   rf   )r   rD   Úentity_data_stater!   Útag_open_stater4   r6   r   r   r)   r1   r   rV   Úchars_until©r#   r(   r6   r   r   r   r    ì   s$    



þ
zHTMLTokenizer.data_statec                 C   s   |   ¡  | j| _dS ©NT)r[   r    r!   r.   r   r   r   ri     s    zHTMLTokenizer.entity_data_statec                 C   s¢   | j  ¡ }|dkr| j| _n‚|dkr.| j| _np|tu r:dS |dkrX|  d¡ |  d¡ nF|tv r„| j	 
tj|| j  td¡ dœ¡ n| j  d	¡}|  || ¡ dS )
NrO   rP   Frf   rg   r<   Tr&   rh   )r   rD   Ú$character_reference_in_rc_data_stater!   Úrcdata_less_than_sign_stater   r4   r6   r   r)   r1   r   rV   rk   )r#   r(   Úcharsr   r   r   Úrcdata_state  s$    



þ
zHTMLTokenizer.rcdata_statec                 C   s   |   ¡  | j| _dS rm   )r[   rq   r!   r.   r   r   r   rn   (  s    z2HTMLTokenizer.character_reference_in_rc_data_statec                 C   sd   | j  ¡ }|dkr| j| _nD|dkr:|  d¡ |  d¡ n&|tu rFdS | j  d¡}|  || ¡ dS ©NrP   rf   rg   r<   F)rP   rf   T)r   rD   Úrawtext_less_than_sign_stater!   r4   r6   r   rk   rl   r   r   r   Úrawtext_state-  s    


zHTMLTokenizer.rawtext_statec                 C   sd   | j  ¡ }|dkr| j| _nD|dkr:|  d¡ |  d¡ n&|tu rFdS | j  d¡}|  || ¡ dS rr   )r   rD   Ú script_data_less_than_sign_stater!   r4   r6   r   rk   rl   r   r   r   Úscript_data_state;  s    


zHTMLTokenizer.script_data_statec                 C   sN   | j  ¡ }|tu rdS |dkr4|  d¡ |  d¡ n|  || j  d¡ ¡ dS )NFrf   rg   r<   T)r   rD   r   r4   r6   rk   ©r#   r(   r   r   r   Úplaintext_stateI  s    

zHTMLTokenizer.plaintext_statec                 C   sÎ   | j  ¡ }|dkr| j| _n®|dkr.| j| _nœ|tv rTtj|g dddœ| _| j	| _nv|dkrz|  
d¡ |  d¡ | j| _nP|dkr¢|  
d	¡ | j  |¡ | j| _n(|  
d
¡ |  d¡ | j  |¡ | j| _dS )Nú!ú/F)r'   r]   r(   r^   ÚselfClosingAcknowledgedú>z'expected-tag-name-but-got-right-bracketz<>ú?z'expected-tag-name-but-got-question-markzexpected-tag-namerP   T)r   rD   Úmarkup_declaration_open_stater!   Úclose_tag_open_stater   r   r`   r"   Útag_name_stater4   r6   r    rI   Úbogus_comment_staterw   r   r   r   rj   T  s4    


û







zHTMLTokenizer.tag_open_statec                 C   s–   | j  ¡ }|tv r.tj|g ddœ| _| j| _nd|dkrJ|  d¡ | j	| _nH|t
u rp|  d¡ |  d¡ | j	| _n"| jd|d� | j  |¡ | j| _d	S )
NF©r'   r]   r(   r^   r|   z*expected-closing-tag-but-got-right-bracketz expected-closing-tag-but-got-eofú</z!expected-closing-tag-but-got-char©r(   T)r   rD   r   r   rc   r"   r€   r!   r4   r    r   r6   rI   r�   rw   r   r   r   r   w  s&    
ü





z"HTMLTokenizer.close_tag_open_statec                 C   s˜   | j  ¡ }|tv r| j| _nx|dkr.|  ¡  nf|tu rJ|  d¡ | j| _nJ|dkr\| j	| _n8|dkr‚|  d¡ | j
d  d7  < n| j
d  |7  < dS )	Nr|   zeof-in-tag-namerz   rf   rg   r]   r<   T)r   rD   r   Úbefore_attribute_name_stater!   re   r   r4   r    Úself_closing_start_tag_stater"   rw   r   r   r   r€   �  s    






zHTMLTokenizer.tag_name_statec                 C   sD   | j  ¡ }|dkr"d| _| j| _n|  d¡ | j  |¡ | j| _dS ©Nrz   r9   rP   T)r   rD   Útemporary_bufferÚrcdata_end_tag_open_stater!   r6   rI   rq   rw   r   r   r   ro   £  s    


z)HTMLTokenizer.rcdata_less_than_sign_statec                 C   sL   | j  ¡ }|tv r*|  j|7  _| j| _n|  d¡ | j  |¡ | j| _dS ©Nrƒ   T)	r   rD   r   rˆ   Úrcdata_end_tag_name_stater!   r6   rI   rq   rw   r   r   r   r‰   ®  s    


z'HTMLTokenizer.rcdata_end_tag_open_statec                 C   sð   | j o| j d  ¡ | j ¡ k}| j ¡ }|tv rR|rRtj| jg ddœ| _ | j| _	nš|dkr||r|tj| jg ddœ| _ | j
| _	np|dkr®|r®tj| jg ddœ| _ |  ¡  | j| _	n>|tv rÆ|  j|7  _n&|  d| j› �¡ | j |¡ | j| _	dS ©Nr]   Fr‚   rz   r|   rƒ   T)r"   Úlowerrˆ   r   rD   r   r   rc   r…   r!   r†   re   r    r   r6   rI   rq   ©r#   Zappropriater(   r   r   r   r‹   ¹  s@    þ
ü
ü
ü
z'HTMLTokenizer.rcdata_end_tag_name_statec                 C   sD   | j  ¡ }|dkr"d| _| j| _n|  d¡ | j  |¡ | j| _dS r‡   )r   rD   rˆ   Úrawtext_end_tag_open_stater!   r6   rI   rt   rw   r   r   r   rs   ß  s    


z*HTMLTokenizer.rawtext_less_than_sign_statec                 C   sL   | j  ¡ }|tv r*|  j|7  _| j| _n|  d¡ | j  |¡ | j| _dS rŠ   )	r   rD   r   rˆ   Úrawtext_end_tag_name_stater!   r6   rI   rt   rw   r   r   r   r�   ê  s    


z(HTMLTokenizer.rawtext_end_tag_open_statec                 C   sð   | j o| j d  ¡ | j ¡ k}| j ¡ }|tv rR|rRtj| jg ddœ| _ | j| _	nš|dkr||r|tj| jg ddœ| _ | j
| _	np|dkr®|r®tj| jg ddœ| _ |  ¡  | j| _	n>|tv rÆ|  j|7  _n&|  d| j› �¡ | j |¡ | j| _	dS rŒ   )r"   r�   rˆ   r   rD   r   r   rc   r…   r!   r†   re   r    r   r6   rI   rt   rŽ   r   r   r   r�   õ  s@    þ
ü
ü
ü
z(HTMLTokenizer.rawtext_end_tag_name_statec                 C   s`   | j  ¡ }|dkr"d| _| j| _n:|dkr>|  d¡ | j| _n|  d¡ | j  |¡ | j| _dS )Nrz   r9   ry   z<!rP   T)	r   rD   rˆ   Úscript_data_end_tag_open_stater!   r6   Úscript_data_escape_start_staterI   rv   rw   r   r   r   ru     s    




z.HTMLTokenizer.script_data_less_than_sign_statec                 C   sL   | j  ¡ }|tv r*|  j|7  _| j| _n|  d¡ | j  |¡ | j| _dS rŠ   )	r   rD   r   rˆ   Úscript_data_end_tag_name_stater!   r6   rI   rv   rw   r   r   r   r‘   )  s    


z,HTMLTokenizer.script_data_end_tag_open_statec                 C   sð   | j o| j d  ¡ | j ¡ k}| j ¡ }|tv rR|rRtj| jg ddœ| _ | j| _	nš|dkr||r|tj| jg ddœ| _ | j
| _	np|dkr®|r®tj| jg ddœ| _ |  ¡  | j| _	n>|tv rÆ|  j|7  _n&|  d| j› �¡ | j |¡ | j| _	dS rŒ   )r"   r�   rˆ   r   rD   r   r   rc   r…   r!   r†   re   r    r   r6   rI   rv   rŽ   r   r   r   r“   4  s@    þ
ü
ü
ü
z,HTMLTokenizer.script_data_end_tag_name_statec                 C   s>   | j  ¡ }|dkr&|  d¡ | j| _n| j  |¡ | j| _dS ©Nú-T)r   rD   r6   Ú#script_data_escape_start_dash_stater!   rI   rv   rw   r   r   r   r’   Z  s    


z,HTMLTokenizer.script_data_escape_start_statec                 C   s>   | j  ¡ }|dkr&|  d¡ | j| _n| j  |¡ | j| _dS r”   )r   rD   r6   Ú#script_data_escaped_dash_dash_stater!   rI   rv   rw   r   r   r   r–   d  s    


z1HTMLTokenizer.script_data_escape_start_dash_statec                 C   s‚   | j  ¡ }|dkr&|  d¡ | j| _nX|dkr8| j| _nF|dkrV|  d¡ |  d¡ n(|tu rh| j| _n|  || j  	d¡ ¡ dS )Nr•   rP   rf   rg   r<   )rP   r•   rf   T)
r   rD   r6   Úscript_data_escaped_dash_stater!   Ú(script_data_escaped_less_than_sign_stater4   r   r    rk   rw   r   r   r   Úscript_data_escaped_staten  s    





z'HTMLTokenizer.script_data_escaped_statec                 C   s†   | j  ¡ }|dkr&|  d¡ | j| _n\|dkr8| j| _nJ|dkr^|  d¡ |  d¡ | j| _n$|tu rp| j	| _n|  |¡ | j| _dS )Nr•   rP   rf   rg   r<   T)
r   rD   r6   r—   r!   r™   r4   rš   r   r    rw   r   r   r   r˜   ~  s    








z,HTMLTokenizer.script_data_escaped_dash_statec                 C   sš   | j  ¡ }|dkr|  d¡ nx|dkr0| j| _nf|dkrL|  d¡ | j| _nJ|dkrr|  d¡ |  d¡ | j| _n$|tu r„| j	| _n|  |¡ | j| _dS )Nr•   rP   r|   rf   rg   r<   T)
r   rD   r6   r™   r!   rv   r4   rš   r   r    rw   r   r   r   r—   �  s"    








z1HTMLTokenizer.script_data_escaped_dash_dash_statec                 C   sl   | j  ¡ }|dkr"d| _| j| _nF|tv rJ|  d|› �¡ || _| j| _n|  d¡ | j  |¡ | j	| _dS r‡   )
r   rD   rˆ   Ú&script_data_escaped_end_tag_open_stater!   r   r6   Ú%script_data_double_escape_start_staterI   rš   rw   r   r   r   r™   ¤  s    



z6HTMLTokenizer.script_data_escaped_less_than_sign_statec                 C   sD   | j  ¡ }|tv r"|| _| j| _n|  d¡ | j  |¡ | j| _dS rŠ   )	r   rD   r   rˆ   Ú&script_data_escaped_end_tag_name_stater!   r6   rI   rš   rw   r   r   r   r›   ³  s    


z4HTMLTokenizer.script_data_escaped_end_tag_open_statec                 C   sð   | j o| j d  ¡ | j ¡ k}| j ¡ }|tv rR|rRtj| jg ddœ| _ | j| _	nš|dkr||r|tj| jg ddœ| _ | j
| _	np|dkr®|r®tj| jg ddœ| _ |  ¡  | j| _	n>|tv rÆ|  j|7  _n&|  d| j› �¡ | j |¡ | j| _	dS rŒ   )r"   r�   rˆ   r   rD   r   r   rc   r…   r!   r†   re   r    r   r6   rI   rš   rŽ   r   r   r   r�   ¾  s@    þ
ü
ü
ü
z4HTMLTokenizer.script_data_escaped_end_tag_name_statec                 C   s€   | j  ¡ }|ttdƒB v rF|  |¡ | j ¡ dkr<| j| _q|| j	| _n6|t
v rh|  |¡ |  j|7  _n| j  |¡ | j	| _dS ©N)rz   r|   ÚscriptT)r   rD   r   rG   r6   rˆ   r�   Ú script_data_double_escaped_stater!   rš   r   rI   rw   r   r   r   rœ   ä  s    




z3HTMLTokenizer.script_data_double_escape_start_statec                 C   sŠ   | j  ¡ }|dkr&|  d¡ | j| _n`|dkrB|  d¡ | j| _nD|dkr`|  d¡ |  d¡ n&|tu r||  d¡ | j| _n
|  |¡ dS ©Nr•   rP   rf   rg   r<   úeof-in-script-in-scriptT)	r   rD   r6   Ú%script_data_double_escaped_dash_stater!   Ú/script_data_double_escaped_less_than_sign_stater4   r   r    rw   r   r   r   r    ô  s    








z.HTMLTokenizer.script_data_double_escaped_statec                 C   sš   | j  ¡ }|dkr&|  d¡ | j| _np|dkrB|  d¡ | j| _nT|dkrh|  d¡ |  d¡ | j| _n.|tu r„|  d¡ | j	| _n|  |¡ | j| _dS r¡   )
r   rD   r6   Ú*script_data_double_escaped_dash_dash_stater!   r¤   r4   r    r   r    rw   r   r   r   r£     s"    










z3HTMLTokenizer.script_data_double_escaped_dash_statec                 C   s®   | j  ¡ }|dkr|  d¡ nŒ|dkr:|  d¡ | j| _np|dkrV|  d¡ | j| _nT|dkr||  d¡ |  d¡ | j| _n.|tu r˜|  d¡ | j	| _n|  |¡ | j| _dS )	Nr•   rP   r|   rf   rg   r<   r¢   T)
r   rD   r6   r¤   r!   rv   r4   r    r   r    rw   r   r   r   r¥     s&    










z8HTMLTokenizer.script_data_double_escaped_dash_dash_statec                 C   sD   | j  ¡ }|dkr,|  d¡ d| _| j| _n| j  |¡ | j| _dS )Nrz   r9   T)r   rD   r6   rˆ   Ú#script_data_double_escape_end_stater!   rI   r    rw   r   r   r   r¤   0  s    


z=HTMLTokenizer.script_data_double_escaped_less_than_sign_statec                 C   s€   | j  ¡ }|ttdƒB v rF|  |¡ | j ¡ dkr<| j| _q|| j	| _n6|t
v rh|  |¡ |  j|7  _n| j  |¡ | j	| _dS rž   )r   rD   r   rG   r6   rˆ   r�   rš   r!   r    r   rI   rw   r   r   r   r¦   ;  s    




z1HTMLTokenizer.script_data_double_escape_end_statec                 C   s  | j  ¡ }|tv r"| j  td¡ nâ|tv rH| jd  |dg¡ | j| _n¼|dkrZ|  	¡  nª|dkrl| j
| _n˜|dv rœ|  d¡ | jd  |dg¡ | j| _nh|dkrÌ|  d	¡ | jd  d
dg¡ | j| _n8|tu rè|  d¡ | j| _n| jd  |dg¡ | j| _dS )NTr(   r9   r|   rz   )ú'ú"rU   rP   ú#invalid-character-in-attribute-namerf   rg   r<   z#expected-attribute-name-but-got-eof)r   rD   r   rk   r   r"   r1   Úattribute_name_stater!   re   r†   r4   r   r    rw   r   r   r   r…   K  s0    









z)HTMLTokenizer.before_attribute_name_statec                 C   s²  | j  ¡ }d}d}|dkr&| j| _�n|tv r\| jd d d  || j  td¡ 7  < d}nÒ|dkrjd}nÄ|tv r|| j| _n²|dkrŽ| j	| _n |d	krÀ|  
d
¡ | jd d d  d7  < d}nn|dv rò|  
d¡ | jd d d  |7  < d}n<|tu �r|  
d¡ | j| _n| jd d d  |7  < d}|�r®| jd d d  t¡| jd d d< | jd d d… D ]2\}}| jd d d |k�rl|  
d¡  �q �ql|�r®|  ¡  dS )NTFrU   r(   rR   r   r|   rz   rf   rg   r<   ©r§   r¨   rP   r©   zeof-in-attribute-namezduplicate-attribute)r   rD   Úbefore_attribute_value_stater!   r   r"   rk   r   Úafter_attribute_name_stater†   r4   r   r    r_   r	   re   )r#   r(   Zleaving_this_stateZ
emit_tokenr]   Ú_r   r   r   rª   f  sN    
ÿ






ÿ

z"HTMLTokenizer.attribute_name_statec                 C   s  | j  ¡ }|tv r"| j  td¡ nô|dkr4| j| _nâ|dkrF|  ¡  nÐ|tv rl| jd  	|dg¡ | j
| _nª|dkr~| j| _n˜|dkr®|  d¡ | jd  	d	dg¡ | j
| _nh|d
v rÞ|  d¡ | jd  	|dg¡ | j
| _n8|tu rú|  d¡ | j| _n| jd  	|dg¡ | j
| _dS )NTrU   r|   r(   r9   rz   rf   rg   r<   r«   z&invalid-character-after-attribute-namezexpected-end-of-tag-but-got-eof)r   rD   r   rk   r¬   r!   re   r   r"   r1   rª   r†   r4   r   r    rw   r   r   r   r­   —  s4    










z(HTMLTokenizer.after_attribute_name_statec                 C   s2  | j  ¡ }|tv r$| j  td¡ �n
|dkr6| j| _nø|dkrT| j| _| j  |¡ nÚ|dkrf| j| _nÈ|dkr‚|  	d¡ |  
¡  n¬|dkr¸|  	d¡ | jd	 d
 d  d7  < | j| _nv|dv rî|  	d¡ | jd	 d
 d  |7  < | j| _n@|tu �r|  	d¡ | j| _n"| jd	 d
 d  |7  < | j| _dS )NTr¨   rO   r§   r|   z.expected-attribute-value-but-got-right-bracketrf   rg   r(   rR   r   r<   )rU   rP   ú`z"equals-in-unquoted-attribute-valuez$expected-attribute-value-but-got-eof)r   rD   r   rk   Ú#attribute_value_double_quoted_stater!   Úattribute_value_unquoted_staterI   Ú#attribute_value_single_quoted_stater4   re   r"   r   r    rw   r   r   r   r¬   ´  s6    











z*HTMLTokenizer.before_attribute_value_statec                 C   s¤   | j  ¡ }|dkr| j| _n„|dkr0|  d¡ np|dkr^|  d¡ | jd d d  d7  < nB|tu rz|  d	¡ | j| _n&| jd d d  || j  	d
¡ 7  < dS )Nr¨   rO   rf   rg   r(   rR   r   r<   z#eof-in-attribute-value-double-quote)r¨   rO   rf   T©
r   rD   Úafter_attribute_value_stater!   r\   r4   r"   r   r    rk   rw   r   r   r   r°   Ò  s    




ÿz1HTMLTokenizer.attribute_value_double_quoted_statec                 C   s¤   | j  ¡ }|dkr| j| _n„|dkr0|  d¡ np|dkr^|  d¡ | jd d d  d7  < nB|tu rz|  d	¡ | j| _n&| jd d d  || j  	d
¡ 7  < dS )Nr§   rO   rf   rg   r(   rR   r   r<   z#eof-in-attribute-value-single-quote)r§   rO   rf   Tr³   rw   r   r   r   r²   ã  s    




ÿz1HTMLTokenizer.attribute_value_single_quoted_statec                 C   sì   | j  ¡ }|tv r| j| _nÌ|dkr0|  d¡ n¸|dkrB|  ¡  n¦|dv rp|  d¡ | jd d d  |7  < nx|dkrž|  d	¡ | jd d d  d
7  < nJ|t	u rº|  d¡ | j
| _n.| jd d d  || j  tdƒtB ¡ 7  < dS )NrO   r|   )r¨   r§   rU   rP   r¯   z0unexpected-character-in-unquoted-attribute-valuer(   rR   r   rf   rg   r<   z eof-in-attribute-value-no-quotes)rO   r|   r¨   r§   rU   rP   r¯   rf   T)r   rD   r   r…   r!   r\   re   r4   r"   r   r    rk   rG   rw   r   r   r   r±   ô  s0    






ÿÿÿz,HTMLTokenizer.attribute_value_unquoted_statec                 C   sŠ   | j  ¡ }|tv r| j| _nj|dkr.|  ¡  nX|dkr@| j| _nF|tu rh|  d¡ | j  	|¡ | j
| _n|  d¡ | j  	|¡ | j| _dS )Nr|   rz   z$unexpected-eof-after-attribute-valuez*unexpected-character-after-attribute-valueT)r   rD   r   r…   r!   re   r†   r   r4   rI   r    rw   r   r   r   r´     s    






z)HTMLTokenizer.after_attribute_value_statec                 C   sp   | j  ¡ }|dkr&d| jd< |  ¡  nF|tu rN|  d¡ | j  |¡ | j| _n|  d¡ | j  |¡ | j	| _dS )Nr|   Tr^   z#unexpected-eof-after-solidus-in-tagz)unexpected-character-after-solidus-in-tag)
r   rD   r"   re   r   r4   rI   r    r!   r…   rw   r   r   r   r†     s    





z*HTMLTokenizer.self_closing_start_tag_statec                 C   sB   | j  d¡}| dd¡}| j tj|dœ¡ | j  ¡  | j| _	dS )Nr|   rf   r<   r&   T)
r   rk   Úreplacer)   r1   r   ÚCOMMENTrD   r    r!   rw   r   r   r   r�   -  s    
z!HTMLTokenizer.bogus_comment_statec                 C   s‚  | j  ¡ g}|d dkrR| | j  ¡ ¡ |d dkrNtjddœ| _| j| _dS �n |d rÆ|d dv rÆd}dD ]0}| | j  ¡ ¡ |d r–|d |vrnd} q qn|rÄtjdd d dd	œ| _| j	| _dS nŒ|d d
k�rR| j
d u�rR| j
jj�rR| j
jjd j| j
jjk�rRd}dD ].}| | j  ¡ ¡ |d |k�rd} �q@�q|�rR| j| _dS |  d¡ |�rv| j  | ¡ ¡ �q\| j| _dS )NrR   r•   r9   r&   TZdD)ZoOÚcCÚtTÚyYÚpPÚeEF)r'   r]   ÚpublicIdÚsystemIdÚcorrectú[zCDATA[zexpected-dashes-or-doctype)r   rD   r1   r   r¶   r"   Úcomment_start_stater!   ÚDOCTYPEÚdoctype_stater   ÚtreeÚopen_elementsÚ	namespaceÚdefault_namespaceÚcdata_section_stater4   rI   r,   r�   )r#   rL   ÚmatchedÚexpectedr   r   r   r~   ;  s\    ûÿþÿý

z+HTMLTokenizer.markup_declaration_open_statec                 C   s´   | j  ¡ }|dkr| j| _n”|dkrB|  d¡ | jd  d7  < nn|dkrl|  d¡ | j | j¡ | j| _nD|t	u r–|  d¡ | j | j¡ | j| _n| jd  |7  < | j
| _d	S )
Nr•   rf   rg   r(   r<   r|   úincorrect-commentúeof-in-commentT)r   rD   Úcomment_start_dash_stater!   r4   r"   r)   r1   r    r   Úcomment_staterw   r   r   r   rÀ   j  s"    






z!HTMLTokenizer.comment_start_statec                 C   sº   | j  ¡ }|dkr| j| _nš|dkrB|  d¡ | jd  d7  < nt|dkrl|  d¡ | j | j¡ | j| _nJ|t	u r–|  d¡ | j | j¡ | j| _n | jd  d|› �7  < | j
| _d	S )
Nr•   rf   rg   r(   õ   -ï¿½r|   rÊ   rË   T)r   rD   Úcomment_end_stater!   r4   r"   r)   r1   r    r   rÍ   rw   r   r   r   rÌ   ~  s"    






z&HTMLTokenizer.comment_start_dash_statec                 C   sŽ   | j  ¡ }|dkr| j| _nn|dkrB|  d¡ | jd  d7  < nH|tu rl|  d¡ | j | j¡ | j	| _n| jd  || j  
d¡ 7  < dS )	Nr•   rf   rg   r(   r<   rË   )r•   rf   T)r   rD   Úcomment_end_dash_stater!   r4   r"   r   r)   r1   r    rk   rw   r   r   r   rÍ   ’  s    





ÿzHTMLTokenizer.comment_statec                 C   s˜   | j  ¡ }|dkr| j| _nx|dkrJ|  d¡ | jd  d7  < | j| _nJ|tu rt|  d¡ | j 	| j¡ | j
| _n | jd  d|› �7  < | j| _dS )Nr•   rf   rg   r(   rÎ   zeof-in-comment-end-dashT)r   rD   rÏ   r!   r4   r"   rÍ   r   r)   r1   r    rw   r   r   r   rÐ   ¢  s    





z$HTMLTokenizer.comment_end_dash_statec                 C   sò   | j  ¡ }|dkr*| j | j¡ | j| _nÄ|dkrX|  d¡ | jd  d7  < | j| _n–|dkrt|  d¡ | j	| _nz|dkrš|  d	¡ | jd  |7  < nT|t
u rÄ|  d
¡ | j | j¡ | j| _n*|  d¡ | jd  d|› �7  < | j| _dS )Nr|   rf   rg   r(   u   --ï¿½ry   z,unexpected-bang-after-double-dash-in-commentr•   z,unexpected-dash-after-double-dash-in-commentzeof-in-comment-double-dashzunexpected-char-in-commentz--T)r   rD   r)   r1   r"   r    r!   r4   rÍ   Úcomment_end_bang_stater   rw   r   r   r   rÏ   ³  s,    









zHTMLTokenizer.comment_end_statec                 C   sÊ   | j  ¡ }|dkr*| j | j¡ | j| _nœ|dkrN| jd  d7  < | j| _nx|dkr||  d¡ | jd  d7  < | j	| _nJ|t
u r¦|  d¡ | j | j¡ | j| _n | jd  d|› �7  < | j	| _d	S )
Nr|   r•   r(   z--!rf   rg   u   --!ï¿½zeof-in-comment-end-bang-stateT)r   rD   r)   r1   r"   r    r!   rÐ   r4   rÍ   r   rw   r   r   r   rÑ   Í  s$    






z$HTMLTokenizer.comment_end_bang_statec                 C   sr   | j  ¡ }|tv r| j| _nR|tu rP|  d¡ d| jd< | j 	| j¡ | j
| _n|  d¡ | j  |¡ | j| _dS )Nú!expected-doctype-name-but-got-eofFr¾   zneed-space-after-doctypeT)r   rD   r   Úbefore_doctype_name_stater!   r   r4   r"   r)   r1   r    rI   rw   r   r   r   rÂ   â  s    





zHTMLTokenizer.doctype_statec                 C   s¸   | j  ¡ }|tv rn |dkrH|  d¡ d| jd< | j | j¡ | j| _nl|dkrn|  d¡ d| jd< | j	| _nF|t
u r¢|  d	¡ d| jd< | j | j¡ | j| _n|| jd< | j	| _d
S )Nr|   z+expected-doctype-name-but-got-right-bracketFr¾   rf   rg   r<   r]   rÒ   T)r   rD   r   r4   r"   r)   r1   r    r!   Údoctype_name_stater   rw   r   r   r   rÓ   ñ  s(    










z'HTMLTokenizer.before_doctype_name_statec                 C   sö   | j  ¡ }|tv r2| jd  t¡| jd< | j| _nÀ|dkrh| jd  t¡| jd< | j 	| j¡ | j
| _nŠ|dkr–|  d¡ | jd  d7  < | j| _n\|tu rà|  d¡ d| jd< | jd  t¡| jd< | j 	| j¡ | j
| _n| jd  |7  < d	S )
Nr]   r|   rf   rg   r<   zeof-in-doctype-nameFr¾   T)r   rD   r   r"   r_   r	   Úafter_doctype_name_stater!   r)   r1   r    r4   rÔ   r   rw   r   r   r   rÔ     s.    
ÿ
ÿ




ÿ
z HTMLTokenizer.doctype_name_statec                 C   s@  | j  ¡ }|tv r�n&|dkr8| j | j¡ | j| _�n|tu rxd| jd< | j  	|¡ |  
d¡ | j | j¡ | j| _nÄ|rÂ|dv rÂd}dD ]"}| j  ¡ }|r¦||vrŒd} q°qŒ|rÀ| j| _dS nN|�r|dv �rd}d	D ]"}| j  ¡ }|rô||vrÚd} qþqÚ|�r| j| _dS | j  	|¡ | j
d
|d� d| jd< | j| _dS )Nr|   Fr¾   úeof-in-doctyperº   T)ZuUZbBZlLZiIr·   ÚsS)r¹   r×   r¸   r»   ZmMz*expected-space-or-right-bracket-in-doctyper„   )r   rD   r   r)   r1   r"   r    r!   r   rI   r4   Ú"after_doctype_public_keyword_stateÚ"after_doctype_system_keyword_stateÚbogus_doctype_state)r#   r(   rÈ   rÉ   r   r   r   rÕ   "  sJ    






z&HTMLTokenizer.after_doctype_name_statec                 C   s�   | j  ¡ }|tv r| j| _np|dv rD|  d¡ | j  |¡ | j| _nH|tu rx|  d¡ d| jd< | j	 
| j¡ | j| _n| j  |¡ | j| _dS ©N)r§   r¨   úunexpected-char-in-doctyperÖ   Fr¾   T)r   rD   r   Ú&before_doctype_public_identifier_stater!   r4   rI   r   r"   r)   r1   r    rw   r   r   r   rØ   O  s    






z0HTMLTokenizer.after_doctype_public_keyword_statec                 C   sÔ   | j  ¡ }|tv rn¼|dkr0d| jd< | j| _n |dkrLd| jd< | j| _n„|dkr€|  d¡ d| jd< | j 	| j¡ | j
| _nP|tu r´|  d	¡ d| jd< | j 	| j¡ | j
| _n|  d
¡ d| jd< | j| _dS )Nr¨   r9   r¼   r§   r|   úunexpected-end-of-doctypeFr¾   rÖ   rÜ   T)r   rD   r   r"   Ú-doctype_public_identifier_double_quoted_stater!   Ú-doctype_public_identifier_single_quoted_stater4   r)   r1   r    r   rÚ   rw   r   r   r   rÝ   a  s.    












z4HTMLTokenizer.before_doctype_public_identifier_statec                 C   sÀ   | j  ¡ }|dkr| j| _n |dkrB|  d¡ | jd  d7  < nz|dkrv|  d¡ d| jd	< | j | j¡ | j| _nF|t	u rª|  d
¡ d| jd	< | j | j¡ | j| _n| jd  |7  < dS )Nr¨   rf   rg   r¼   r<   r|   rÞ   Fr¾   rÖ   T©
r   rD   Ú%after_doctype_public_identifier_stater!   r4   r"   r)   r1   r    r   rw   r   r   r   rß   {  s$    








z;HTMLTokenizer.doctype_public_identifier_double_quoted_statec                 C   sÀ   | j  ¡ }|dkr| j| _n |dkrB|  d¡ | jd  d7  < nz|dkrv|  d¡ d| jd	< | j | j¡ | j| _nF|t	u rª|  d
¡ d| jd	< | j | j¡ | j| _n| jd  |7  < dS )Nr§   rf   rg   r¼   r<   r|   rÞ   Fr¾   rÖ   Trá   rw   r   r   r   rà   �  s$    








z;HTMLTokenizer.doctype_public_identifier_single_quoted_statec                 C   sÜ   | j  ¡ }|tv r| j| _n¼|dkr<| j | j¡ | j| _nœ|dkrb|  	d¡ d| jd< | j
| _nv|dkrˆ|  	d¡ d| jd< | j| _nP|tu r¼|  	d¡ d| jd	< | j | j¡ | j| _n|  	d¡ d| jd	< | j| _d
S )Nr|   r¨   rÜ   r9   r½   r§   rÖ   Fr¾   T)r   rD   r   Ú3between_doctype_public_and_system_identifiers_stater!   r)   r1   r"   r    r4   Ú-doctype_system_identifier_double_quoted_stateÚ-doctype_system_identifier_single_quoted_stater   rÚ   rw   r   r   r   râ   ¥  s.    













z3HTMLTokenizer.after_doctype_public_identifier_statec                 C   sÀ   | j  ¡ }|tv rn¨|dkr4| j | j¡ | j| _nˆ|dkrPd| jd< | j| _nl|dkrld| jd< | j	| _nP|t
u r |  d¡ d| jd< | j | j¡ | j| _n|  d	¡ d| jd< | j| _d
S )Nr|   r¨   r9   r½   r§   rÖ   Fr¾   rÜ   T)r   rD   r   r)   r1   r"   r    r!   rä   rå   r   r4   rÚ   rw   r   r   r   rã   ¿  s*    










zAHTMLTokenizer.between_doctype_public_and_system_identifiers_statec                 C   s�   | j  ¡ }|tv r| j| _np|dv rD|  d¡ | j  |¡ | j| _nH|tu rx|  d¡ d| jd< | j	 
| j¡ | j| _n| j  |¡ | j| _dS rÛ   )r   rD   r   Ú&before_doctype_system_identifier_stater!   r4   rI   r   r"   r)   r1   r    rw   r   r   r   rÙ   ×  s    






z0HTMLTokenizer.after_doctype_system_keyword_statec                 C   sÔ   | j  ¡ }|tv rn¼|dkr0d| jd< | j| _n |dkrLd| jd< | j| _n„|dkr€|  d¡ d| jd< | j 	| j¡ | j
| _nP|tu r´|  d	¡ d| jd< | j 	| j¡ | j
| _n|  d¡ d| jd< | j| _d
S )Nr¨   r9   r½   r§   r|   rÜ   Fr¾   rÖ   T)r   rD   r   r"   rä   r!   rå   r4   r)   r1   r    r   rÚ   rw   r   r   r   ræ   é  s.    












z4HTMLTokenizer.before_doctype_system_identifier_statec                 C   sÀ   | j  ¡ }|dkr| j| _n |dkrB|  d¡ | jd  d7  < nz|dkrv|  d¡ d| jd	< | j | j¡ | j| _nF|t	u rª|  d
¡ d| jd	< | j | j¡ | j| _n| jd  |7  < dS )Nr¨   rf   rg   r½   r<   r|   rÞ   Fr¾   rÖ   T©
r   rD   Ú%after_doctype_system_identifier_stater!   r4   r"   r)   r1   r    r   rw   r   r   r   rä     s$    








z;HTMLTokenizer.doctype_system_identifier_double_quoted_statec                 C   sÀ   | j  ¡ }|dkr| j| _n |dkrB|  d¡ | jd  d7  < nz|dkrv|  d¡ d| jd	< | j | j¡ | j| _nF|t	u rª|  d
¡ d| jd	< | j | j¡ | j| _n| jd  |7  < dS )Nr§   rf   rg   r½   r<   r|   rÞ   Fr¾   rÖ   Trç   rw   r   r   r   rå     s$    








z;HTMLTokenizer.doctype_system_identifier_single_quoted_statec                 C   s~   | j  ¡ }|tv rnf|dkr4| j | j¡ | j| _nF|tu rh|  	d¡ d| jd< | j | j¡ | j| _n|  	d¡ | j
| _dS )Nr|   rÖ   Fr¾   rÜ   T)r   rD   r   r)   r1   r"   r    r!   r   r4   rÚ   rw   r   r   r   rè   -  s    





z3HTMLTokenizer.after_doctype_system_identifier_statec                 C   sZ   | j  ¡ }|dkr*| j | j¡ | j| _n,|tu rV| j  |¡ | j | j¡ | j| _n dS )Nr|   T)	r   rD   r)   r1   r"   r    r!   r   rI   rw   r   r   r   rÚ   >  s    


z!HTMLTokenizer.bogus_doctype_statec                 C   sÜ   g }|  | j d¡¡ |  | j d¡¡ | j ¡ }|tu r>q‚q|dksJJ ‚|d dd … dkrv|d d d… |d< q‚q|  |¡ qd |¡}| d¡ }dkrÂt|ƒD ]}|  d	¡ q¦| 	dd
¡}|rÐ|  
|¡ | j| _dS )Nú]r|   rR   éþÿÿÿz]]r9   rf   r   rg   r<   T)r1   r   rk   rD   r   rF   Úcountr   r4   rµ   r6   r    r!   )r#   r(   ÚcharZ
null_countr®   r   r   r   rÇ   L  s(    


z!HTMLTokenizer.cdata_section_state)N)NF)OÚ__name__Ú
__module__Ú__qualname__Ú__doc__r%   r/   r4   r6   rN   r[   r\   re   r    ri   rq   rn   rt   rv   rx   rj   r   r€   ro   r‰   r‹   rs   r�   r�   ru   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Ý   rß   rà   râ   rã   rÙ   ræ   rä   rå   rè   rÚ   rÇ   r   r   r   r   r   &   s˜   
5
G#&&&

&1/-r   N)Úbisectr   Úcollectionsr   Úhtml.entitiesr   r   Ú	constantsr   r   r   r	   r
   r   r   r   r   Úinputstreamr   ÚtupleÚsortedr   r   r   r   r   r   r   r   Ú<module>   s   ,	