o
    »ÙøiÙù  ã                   @   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   ú`/home/develop/edictos_py/central_edictos/env/lib/python3.10/site-packages/tinyhtml5/tokenizer.pyÚhas_keys_with_prefix   s
   r   c                 C   sP   | t v r| S tdt| ƒd ƒD ]}| d | … t v r#| d | …   S qt| ƒ‚)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   sb   � t ƒ | _|  ¡ r/| jjrtj| jj d¡dœV  | jjs| jr)| j ¡ V  | js |  ¡ s	dS 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$   Ú_datar1   Ú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*   r2   r   Ú
CHARACTERS)r$   r3   r   r   r   Ú
charactersL   s   zHTMLTokenizer.charactersc                 C   sL  |rt nt}|r
dnd}g }| j ¡ }||v r%| |¡ | j ¡ }||v std |¡|ƒ}|tv r=t| }| jd|d� nXd|  krGdksLn |dkrVd	}| jd|d� n?d
|  kr`dksŠn d|  krkdksŠn d|  krvdksŠn d|  kr�dksŠn |t	g d¢ƒv r‘| jd|d� t
|ƒ}|dkr¤|  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   Ú	characterr2   ÚintÚjoinr   r5   Ú	frozensetÚchrÚunget)r$   Úis_hexÚallowedÚradixÚstackrE   r;   Úreplacementr   r   r   Úconsume_number_entityP   s8   


þÿ
z#HTMLTokenizer.consume_number_entityFc                 C   st  d}| j  ¡ g}|d tddgt¢R v p|d uo||d k}|r)| j  |d ¡ né|d dkrwd}| | j  ¡ ¡ |d dv rId}| | j  ¡ ¡ |d |rPtntv ra| j  |d ¡ |  |¡}n±|  	d	¡ | j  | 
¡ ¡ dd
 |¡› �}n›|d tur“td
 |¡ƒs…n| | j  ¡ ¡ |d tus}ztd
 |d d… ¡ƒ}W n ty¾   |  	d¡ | j  | 
¡ ¡ dd
 |¡› �}Y nTw |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 … ¡› �}|�r$| jd d d  |7  < d S |tv �r+dnd}
| j t|
 |dœ¡ d S )Nú&r   ú<ú#Féÿÿÿÿ)ÚxÚXTzexpected-numeric-entityr:   zexpected-named-entityrD   znamed-entity-without-semicolonú=r)   r   ÚSPACE_CHARACTERSr6   r'   )r   rE   r   r   rJ   r2   r   r
   rP   r5   r-   rG   r   r   r   r   r   r   r#   r*   r   )r$   rL   Úfrom_attributeÚoutputrN   rJ   ÚhexÚentity_nameÚentity_lengthÚ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)rL   rY   N)r_   )r$   rL   r   r   r   Úprocess_entity_in_attributeÌ   s   z)HTMLTokenizer.process_entity_in_attributec                 C   s¸   | j }|d tv rP|d  t¡|d< |d tjkr7|d }t|ƒ}t|ƒt|ƒkr3| |ddd… ¡ ||d< |d tj	krP|d rG|  
d¡ |d rP|  
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)   NrT   zattributes-in-end-tagÚselfClosingzself-closing-flag-on-end-tag)r#   r   Ú	translater	   r   Ú	START_TAGÚdictr   ÚupdateÚEND_TAGr5   r*   r2   r!   r"   )r$   r4   Úrawr)   r   r   r   Úemit_current_tokenÐ   s    

z HTMLTokenizer.emit_current_tokenc                 C   sª   | j  ¡ }|dkr| j| _dS |dkr| j| _dS |dkr)|  d¡ |  d¡ dS |tu r/dS |tv rF| j	 
tj|| j  td¡ dœ¡ dS | j  d¡}|  || ¡ dS )	NrQ   rR   ú úinvalid-codepointFTr'   ©rQ   rR   rj   )r   rE   Úentity_data_stater"   Útag_open_stater5   r7   r   r   r*   r2   r   rX   Úchars_until©r$   r)   r7   r   r   r   r!   ì   s,   
ëí

ðþ
þzHTMLTokenizer.data_statec                 C   ó   |   ¡  | j| _dS ©NT)r_   r!   r"   r/   r   r   r   rm     ó   zHTMLTokenizer.entity_data_statec                 C   sª   | j  ¡ }|dkr| j| _dS |dkr| j| _dS |tu rdS |dkr/|  d¡ |  d¡ dS |tv rF| j	 
tj|| j  td¡ dœ¡ dS | j  d	¡}|  || ¡ dS )
NrQ   rR   Frj   rk   r=   Tr'   rl   )r   rE   Ú$character_reference_in_rc_data_stater"   Úrcdata_less_than_sign_stater   r5   r7   r   r*   r2   r   rX   ro   )r$   r)   Úcharsr   r   r   Úrcdata_state  s,   
êì

òþ
þzHTMLTokenizer.rcdata_statec                 C   rq   rr   )r_   rw   r"   r/   r   r   r   rt   (  rs   z2HTMLTokenizer.character_reference_in_rc_data_statec                 C   óh   | j  ¡ }|dkr| j| _dS |dkr|  d¡ |  d¡ dS |tu r%dS | j  d¡}|  || ¡ dS ©NrR   rj   rk   r=   F)rR   rj   T)r   rE   Úrawtext_less_than_sign_stater"   r5   r7   r   ro   rp   r   r   r   Úrawtext_state-  ó   
	ø

ûzHTMLTokenizer.rawtext_statec                 C   rx   ry   )r   rE   Ú script_data_less_than_sign_stater"   r5   r7   r   ro   rp   r   r   r   Úscript_data_state;  r|   zHTMLTokenizer.script_data_statec                 C   sP   | j  ¡ }|tu rdS |dkr|  d¡ |  d¡ dS |  || j  d¡ ¡ dS )NFrj   rk   r=   T)r   rE   r   r5   r7   ro   ©r$   r)   r   r   r   Úplaintext_stateI  s   


ÿzHTMLTokenizer.plaintext_statec                 C   sØ   | j  ¡ }|dkr| j| _dS |dkr| j| _dS |tv r-tj|g dddœ| _| j	| _dS |dkrA|  
d¡ |  d¡ | j| _dS |dkrV|  
d	¡ | j  |¡ | j| _dS |  
d
¡ |  d¡ | j  |¡ | j| _dS )Nú!ú/F)r(   ra   r)   rb   ÚselfClosingAcknowledgedú>z'expected-tag-name-but-got-right-bracketz<>ú?z'expected-tag-name-but-got-question-markzexpected-tag-namerR   T)r   rE   Úmarkup_declaration_open_stater"   Úclose_tag_open_stater   r   rd   r#   Útag_name_stater5   r7   r!   rJ   Úbogus_comment_stater   r   r   r   rn   T  s>   
ãåûî

ô

ü
zHTMLTokenizer.tag_open_statec                 C   sœ   | j  ¡ }|tv rtj|g ddœ| _| j| _d	S |dkr'|  d¡ | j	| _d	S |t
u r;|  d¡ |  d¡ | j	| _d	S | jd|d� | j  |¡ | j| _d	S )
NF©r(   ra   r)   rb   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   rE   r   r   rg   r#   rˆ   r"   r5   r!   r   r7   rJ   r‰   r   r   r   r   r‡   w  s,   
üô

÷

ýz"HTMLTokenizer.close_tag_open_statec                 C   s¢   | j  ¡ }|tv r| j| _dS |dkr|  ¡  dS |tu r(|  d¡ | j| _dS |dkr2| j	| _dS |dkrF|  d¡ | j
d  d7  < dS | j
d  |7  < dS )	Nr„   zeof-in-tag-namer‚   rj   rk   ra   r=   T)r   rE   r   Úbefore_attribute_name_stater"   ri   r   r5   r!   Úself_closing_start_tag_stater#   r   r   r   r   rˆ   �  s(   
òô

÷ù
ýzHTMLTokenizer.tag_name_statec                 C   óF   | j  ¡ }|dkrd| _| j| _dS |  d¡ | j  |¡ | j| _dS ©Nr‚   r:   rR   T)r   rE   Útemporary_bufferÚrcdata_end_tag_open_stater"   r7   rJ   rw   r   r   r   r   ru   £  ó   

ýz)HTMLTokenizer.rcdata_less_than_sign_statec                 C   óN   | j  ¡ }|tv r|  j|7  _| j| _dS |  d¡ | j  |¡ | j| _dS ©Nr‹   T)	r   rE   r   r‘   Úrcdata_end_tag_name_stater"   r7   rJ   rw   r   r   r   r   r’   ®  ó   

ýz'HTMLTokenizer.rcdata_end_tag_open_statec                 C   óø   | j o| j d  ¡ | j ¡ k}| j ¡ }|tv r*|r*tj| jg ddœ| _ | j| _	dS |dkr@|r@tj| jg ddœ| _ | j
| _	dS |dkrZ|rZtj| jg ddœ| _ |  ¡  | j| _	dS |tv rg|  j|7  _dS |  d| j› �¡ | j |¡ | j| _	dS ©Nra   FrŠ   r‚   r„   r‹   T)r#   Úlowerr‘   r   rE   r   r   rg   r�   r"   rŽ   ri   r!   r   r7   rJ   rw   ©r$   Úappropriater)   r   r   r   r–   ¹  óH   þ
üéüñüúýz'HTMLTokenizer.rcdata_end_tag_name_statec                 C   r�   r�   )r   rE   r‘   Úrawtext_end_tag_open_stater"   r7   rJ   r{   r   r   r   r   rz   ß  r“   z*HTMLTokenizer.rawtext_less_than_sign_statec                 C   r”   r•   )	r   rE   r   r‘   Úrawtext_end_tag_name_stater"   r7   rJ   r{   r   r   r   r   rž   ê  r—   z(HTMLTokenizer.rawtext_end_tag_open_statec                 C   r˜   r™   )r#   rš   r‘   r   rE   r   r   rg   r�   r"   rŽ   ri   r!   r   r7   rJ   r{   r›   r   r   r   rŸ   õ  r�   z(HTMLTokenizer.rawtext_end_tag_name_statec                 C   sd   | j  ¡ }|dkrd| _| j| _dS |dkr!|  d¡ | j| _dS |  d¡ | j  |¡ | j| _dS )Nr‚   r:   r�   z<!rR   T)	r   rE   r‘   Úscript_data_end_tag_open_stater"   r7   Úscript_data_escape_start_staterJ   r~   r   r   r   r   r}     s   
ù

ýz.HTMLTokenizer.script_data_less_than_sign_statec                 C   r”   r•   )	r   rE   r   r‘   Úscript_data_end_tag_name_stater"   r7   rJ   r~   r   r   r   r   r    )  r—   z,HTMLTokenizer.script_data_end_tag_open_statec                 C   r˜   r™   )r#   rš   r‘   r   rE   r   r   rg   r�   r"   rŽ   ri   r!   r   r7   rJ   r~   r›   r   r   r   r¢   4  r�   z,HTMLTokenizer.script_data_end_tag_name_statec                 C   ó@   | j  ¡ }|dkr|  d¡ | j| _dS | j  |¡ | j| _dS ©Nú-T)r   rE   r7   Ú#script_data_escape_start_dash_stater"   rJ   r~   r   r   r   r   r¡   Z  ó   

þz,HTMLTokenizer.script_data_escape_start_statec                 C   r£   r¤   )r   rE   r7   Ú#script_data_escaped_dash_dash_stater"   rJ   r~   r   r   r   r   r¦   d  r§   z1HTMLTokenizer.script_data_escape_start_dash_statec                 C   sŠ   | j  ¡ }|dkr|  d¡ | j| _dS |dkr| j| _dS |dkr.|  d¡ |  d¡ dS |tu r8| j| _dS |  || j  	d¡ ¡ dS )Nr¥   rR   rj   rk   r=   )rR   r¥   rj   T)
r   rE   r7   Úscript_data_escaped_dash_stater"   Ú(script_data_escaped_less_than_sign_stater5   r   r!   ro   r   r   r   r   Úscript_data_escaped_staten  s"   


÷ù

üÿz'HTMLTokenizer.script_data_escaped_statec                 C   sŽ   | j  ¡ }|dkr|  d¡ | j| _dS |dkr| j| _dS |dkr2|  d¡ |  d¡ | j| _dS |tu r<| j	| _dS |  |¡ | j| _dS )Nr¥   rR   rj   rk   r=   T)
r   rE   r7   r¨   r"   rª   r5   r«   r   r!   r   r   r   r   r©   ~  s&   

õ
÷

û
þz,HTMLTokenizer.script_data_escaped_dash_statec                 C   s¤   | j  ¡ }|dkr|  d¡ dS |dkr| j| _dS |dkr)|  d¡ | j| _dS |dkr=|  d¡ |  d¡ | j| _dS |tu rG| j	| _dS |  |¡ | j| _dS )Nr¥   rR   r„   rj   rk   r=   T)
r   rE   r7   rª   r"   r~   r5   r«   r   r!   r   r   r   r   r¨   �  s,   

òô

÷

û
þz1HTMLTokenizer.script_data_escaped_dash_dash_statec                 C   sp   | j  ¡ }|dkrd| _| j| _dS |tv r'|  d|› �¡ || _| j| _dS |  d¡ | j  |¡ | j	| _dS r�   )
r   rE   r‘   Ú&script_data_escaped_end_tag_open_stater"   r   r7   Ú%script_data_double_escape_start_staterJ   r«   r   r   r   r   rª   ¤  s   
	ø
ýz6HTMLTokenizer.script_data_escaped_less_than_sign_statec                 C   sF   | j  ¡ }|tv r|| _| j| _dS |  d¡ | j  |¡ | j| _dS r•   )	r   rE   r   r‘   Ú&script_data_escaped_end_tag_name_stater"   r7   rJ   r«   r   r   r   r   r¬   ³  r“   z4HTMLTokenizer.script_data_escaped_end_tag_open_statec                 C   r˜   r™   )r#   rš   r‘   r   rE   r   r   rg   r�   r"   rŽ   ri   r!   r   r7   rJ   r«   r›   r   r   r   r®   ¾  r�   z4HTMLTokenizer.script_data_escaped_end_tag_name_statec                 C   ó†   | j  ¡ }|ttdƒB v r%|  |¡ | j ¡ dkr| j| _dS | j	| _dS |t
v r7|  |¡ |  j|7  _dS | j  |¡ | j	| _dS ©N)r‚   r„   ÚscriptT)r   rE   r   rH   r7   r‘   rš   Ú script_data_double_escaped_stater"   r«   r   rJ   r   r   r   r   r­   ä  ó   

	ùú
þz3HTMLTokenizer.script_data_double_escape_start_statec                 C   s’   | j  ¡ }|dkr|  d¡ | j| _dS |dkr#|  d¡ | j| _dS |dkr3|  d¡ |  d¡ dS |tu rB|  d¡ | j| _dS |  |¡ dS ©Nr¥   rR   rj   rk   r=   úeof-in-script-in-scriptT)	r   rE   r7   Ú%script_data_double_escaped_dash_stater"   Ú/script_data_double_escaped_less_than_sign_stater5   r   r!   r   r   r   r   r²   ô  s&   

õ
	ø

û

ÿz.HTMLTokenizer.script_data_double_escaped_statec                 C   s¢   | j  ¡ }|dkr|  d¡ | j| _dS |dkr#|  d¡ | j| _dS |dkr7|  d¡ |  d¡ | j| _dS |tu rF|  d¡ | j	| _dS |  |¡ | j| _dS r´   )
r   rE   r7   Ú*script_data_double_escaped_dash_dash_stater"   r·   r5   r²   r   r!   r   r   r   r   r¶     s*   

ó
ö

ú

þz3HTMLTokenizer.script_data_double_escaped_dash_statec                 C   s¸   | j  ¡ }|dkr|  d¡ dS |dkr|  d¡ | j| _dS |dkr.|  d¡ | j| _dS |dkrB|  d¡ |  d¡ | j| _dS |tu rQ|  d¡ | j	| _dS |  |¡ | j| _dS )	Nr¥   rR   r„   rj   rk   r=   rµ   T)
r   rE   r7   r·   r"   r~   r5   r²   r   r!   r   r   r   r   r¸     s0   

ð
ó
ö

ú

þz8HTMLTokenizer.script_data_double_escaped_dash_dash_statec                 C   sF   | j  ¡ }|dkr|  d¡ d| _| j| _dS | j  |¡ | j| _dS )Nr‚   r:   T)r   rE   r7   r‘   Ú#script_data_double_escape_end_stater"   rJ   r²   r   r   r   r   r·   0  s   

þz=HTMLTokenizer.script_data_double_escaped_less_than_sign_statec                 C   r¯   r°   )r   rE   r   rH   r7   r‘   rš   r«   r"   r²   r   rJ   r   r   r   r   r¹   ;  r³   z1HTMLTokenizer.script_data_double_escape_end_statec                 C   s  | j  ¡ }|tv r| j  td¡ dS |tv r&| jd  |dg¡ | j| _dS |dkr0|  	¡  dS |dkr:| j
| _dS |dv rS|  d¡ | jd  |dg¡ | j| _dS |dkrl|  d	¡ | jd  d
dg¡ | j| _dS |tu r{|  d¡ | j| _dS | jd  |dg¡ | j| _dS )NTr)   r:   r„   r‚   )ú'ú"rW   rR   ú#invalid-character-in-attribute-namerj   rk   r=   z#expected-attribute-name-but-got-eof)r   rE   r   ro   r   r#   r2   Úattribute_name_stater"   ri   rŽ   r5   r   r!   r   r   r   r   r�   K  s>   
ëîðò
ö
ú
þ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}nh|dkr4d}na|tv r=| j| _nX|dkrF| j	| _nO|d	kr_|  
d
¡ | jd d d  d7  < d}n6|dv rx|  
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 ]\}}| jd d d |krÉ|  
d¡  nq³|rÐ|  ¡  dS )NTFrW   r)   rT   r   r„   r‚   rj   rk   r=   ©rº   r»   rR   r¼   zeof-in-attribute-namezduplicate-attribute)r   rE   Úbefore_attribute_value_stater"   r   r#   ro   r   Úafter_attribute_name_staterŽ   r5   r   r!   rc   r	   ri   )r$   r)   Úleaving_this_stateÚ
emit_tokenra   Ú_r   r   r   r½   f  sP   

ÿ





ÿ
þz"HTMLTokenizer.attribute_name_statec                 C   s*  | j  ¡ }|tv r| j  td¡ dS |dkr| j| _dS |dkr&|  ¡  dS |tv r:| jd  	|dg¡ | j
| _dS |dkrD| j| _dS |dkr]|  d¡ | jd  	d	dg¡ | j
| _dS |d
v rv|  d¡ | jd  	|dg¡ | j
| _dS |tu r…|  d¡ | j| _dS | jd  	|dg¡ | j
| _dS )NTrW   r„   r)   r:   r‚   rj   rk   r=   r¾   z&invalid-character-after-attribute-namezexpected-end-of-tag-but-got-eof)r   rE   r   ro   r¿   r"   ri   r   r#   r2   r½   rŽ   r5   r   r!   r   r   r   r   rÀ   —  sD   
éëíðò
ö
ú
þz(HTMLTokenizer.after_attribute_name_statec                 C   s>  | j  ¡ }|tv r| j  td¡ dS |dkr| j| _dS |dkr,| j| _| j  |¡ dS |dkr6| j| _dS |dkrE|  	d¡ |  
¡  dS |dkra|  	d¡ | jd	 d
 d  d7  < | j| _dS |dv r}|  	d¡ | jd	 d
 d  |7  < | j| _dS |tu rŒ|  	d¡ | j| _dS | jd	 d
 d  |7  < | j| _dS )NTr»   rQ   rº   r„   z.expected-attribute-value-but-got-right-bracketrj   rk   r)   rT   r   r=   )rW   rR   ú`z"equals-in-unquoted-attribute-valuez$expected-attribute-value-but-got-eof)r   rE   r   ro   Ú#attribute_value_double_quoted_stater"   Úattribute_value_unquoted_staterJ   Ú#attribute_value_single_quoted_stater5   ri   r#   r   r!   r   r   r   r   r¿   ´  sF   
èêíï
ò
ö
ú
þz*HTMLTokenizer.before_attribute_value_statec                 C   ó¬   | j  ¡ }|dkr| j| _dS |dkr|  d¡ dS |dkr2|  d¡ | jd d d  d7  < dS |tu rA|  d	¡ | j| _dS | jd d d  || j  	d
¡ 7  < dS )Nr»   rQ   rj   rk   r)   rT   r   r=   z#eof-in-attribute-value-double-quote)r»   rQ   rj   T©
r   rE   Úafter_attribute_value_stater"   r`   r5   r#   r   r!   ro   r   r   r   r   rÅ   Ò  ó&   
õ

÷
ú
þÿz1HTMLTokenizer.attribute_value_double_quoted_statec                 C   rÈ   )Nrº   rQ   rj   rk   r)   rT   r   r=   z#eof-in-attribute-value-single-quote)rº   rQ   rj   TrÉ   r   r   r   r   rÇ   ã  rË   z1HTMLTokenizer.attribute_value_single_quoted_statec                 C   sø   | j  ¡ }|tv r| j| _dS |dkr|  d¡ dS |dkr$|  ¡  dS |dv r<|  d¡ | jd d d  |7  < dS |dkrT|  d	¡ | jd d d  d
7  < dS |t	u rc|  d¡ | j
| _dS | jd d d  || j  tdƒtB ¡ 7  < dS )NrQ   r„   )r»   rº   rW   rR   rÄ   z0unexpected-character-in-unquoted-attribute-valuer)   rT   r   rj   rk   r=   z eof-in-attribute-value-no-quotes)rQ   r„   r»   rº   rW   rR   rÄ   rj   T)r   rE   r   r�   r"   r`   ri   r5   r#   r   r!   ro   rH   r   r   r   r   rÆ   ô  s<   
î
ðò
õ
	ø
üÿÿÿz,HTMLTokenizer.attribute_value_unquoted_statec                 C   s’   | j  ¡ }|tv r| j| _dS |dkr|  ¡  dS |dkr#| j| _dS |tu r8|  d¡ | j  	|¡ | j
| _dS |  d¡ | j  	|¡ | j| _dS )Nr„   r‚   z$unexpected-eof-after-attribute-valuez*unexpected-character-after-attribute-valueT)r   rE   r   r�   r"   ri   rŽ   r   r5   rJ   r!   r   r   r   r   rÊ     s&   
ôö	ø

ýz)HTMLTokenizer.after_attribute_value_statec                 C   st   | j  ¡ }|dkrd| jd< |  ¡  dS |tu r)|  d¡ | j  |¡ | j| _dS |  d¡ | j  |¡ | j	| _dS )Nr„   Trb   z#unexpected-eof-after-solidus-in-tagz)unexpected-character-after-solidus-in-tag)
r   rE   r#   ri   r   r5   rJ   r!   r"   r�   r   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„   rj   r=   r'   T)
r   ro   Úreplacer*   r2   r   ÚCOMMENTrE   r!   r"   r   r   r   r   r‰   -  s   
z!HTMLTokenizer.bogus_comment_statec                 C   sn  | j  ¡ g}|d dkr(| | j  ¡ ¡ |d dkr'tjddœ| _| j| _dS nx|d rb|d dv rbd}dD ]}| | j  ¡ ¡ |d rJ|d |vrNd} nq6|ratjdd d dd	œ| _| j	| _dS n>|d d
kr | j
d ur | j
jjr | j
jjd j| j
jjkr d}dD ]}| | j  ¡ ¡ |d |kr—d} nqƒ|r | j| _dS |  d¡ |r±| j  | ¡ ¡ |s§| j| _dS )NrT   r¥   r:   r'   TÚdD)ÚoOÚcCÚtTÚyYÚpPÚeEF)r(   ra   ÚpublicIdÚsystemIdÚcorrectú[zCDATA[zexpected-dashes-or-doctype)r   rE   r2   r   rÍ   r#   Úcomment_start_stater"   ÚDOCTYPEÚdoctype_stater    ÚtreeÚopen_elementsÚ	namespaceÚdefault_namespaceÚcdata_section_stater5   rJ   r-   r‰   )r$   rN   ÚmatchedÚexpectedr   r   r   r†   ;  sb   ýþû÷

ÿÿþ
ÿz+HTMLTokenizer.markup_declaration_open_statec                 C   s¼   | j  ¡ }|dkr| j| _d	S |dkr#|  d¡ | jd  d7  < d	S |dkr9|  d¡ | j | j¡ | j| _d	S |t	u rO|  d¡ | j | j¡ | j| _d	S | jd  |7  < | j
| _d	S )
Nr¥   rj   rk   r)   r=   r„   úincorrect-commentúeof-in-commentT)r   rE   Úcomment_start_dash_stater"   r5   r#   r*   r2   r!   r   Úcomment_stater   r   r   r   rÙ   j  s*   
ò
õ
ù
þz!HTMLTokenizer.comment_start_statec                 C   sÂ   | j  ¡ }|dkr| j| _d	S |dkr#|  d¡ | jd  d7  < d	S |dkr9|  d¡ | j | j¡ | j| _d	S |t	u rO|  d¡ | j | j¡ | j| _d	S | jd  d|› �7  < | j
| _d	S )
Nr¥   rj   rk   r)   õ   -ï¿½r„   rã   rä   T)r   rE   Úcomment_end_stater"   r5   r#   r*   r2   r!   r   ræ   r   r   r   r   rå   ~  s*   
ò
õ
ù
þz&HTMLTokenizer.comment_start_dash_statec                 C   s”   | j  ¡ }|dkr| j| _dS |dkr#|  d¡ | jd  d7  < dS |tu r9|  d¡ | j | j¡ | j	| _dS | jd  || j  
d¡ 7  < dS )	Nr¥   rj   rk   r)   r=   rä   )r¥   rj   T)r   rE   Úcomment_end_dash_stater"   r5   r#   r   r*   r2   r!   ro   r   r   r   r   ræ   ’  s"   
ö
ù

þÿzHTMLTokenizer.comment_statec                 C   sž   | j  ¡ }|dkr| j| _dS |dkr'|  d¡ | jd  d7  < | j| _dS |tu r=|  d¡ | j 	| j¡ | j
| _dS | jd  d|› �7  < | j| _dS )Nr¥   rj   rk   r)   rç   zeof-in-comment-end-dashT)r   rE   rè   r"   r5   r#   ræ   r   r*   r2   r!   r   r   r   r   ré   ¢  s"   
õ
ù
þz$HTMLTokenizer.comment_end_dash_statec                 C   sü   | j  ¡ }|dkr| j | j¡ | j| _dS |dkr.|  d¡ | jd  d7  < | j| _dS |dkr=|  d¡ | j	| _dS |dkrQ|  d	¡ | jd  |7  < dS |t
u rg|  d
¡ | j | j¡ | j| _dS |  d¡ | jd  d|› �7  < | j| _dS )Nr„   rj   rk   r)   u   --ï¿½r�   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   rE   r*   r2   r#   r!   r"   r5   ræ   Úcomment_end_bang_stater   r   r   r   r   rè   ³  s6   
í
ñ
ô

÷

ýzHTMLTokenizer.comment_end_statec                 C   sÒ   | j  ¡ }|dkr| j | j¡ | j| _d	S |dkr)| jd  d7  < | j| _d	S |dkrA|  d¡ | jd  d7  < | j	| _d	S |t
u rW|  d¡ | j | j¡ | j| _d	S | jd  d|› �7  < | j	| _d	S )
Nr„   r¥   r)   z--!rj   rk   u   --!ï¿½zeof-in-comment-end-bang-stateT)r   rE   r*   r2   r#   r!   r"   ré   r5   ræ   r   r   r   r   r   rê   Í  s,   
òõ
ù
þz$HTMLTokenizer.comment_end_bang_statec                 C   sv   | j  ¡ }|tv r| j| _dS |tu r*|  d¡ d| jd< | j 	| j¡ | j
| _dS |  d¡ | j  |¡ | j| _dS )Nú!expected-doctype-name-but-got-eofFr×   zneed-space-after-doctypeT)r   rE   r   Úbefore_doctype_name_stater"   r   r5   r#   r*   r2   r!   rJ   r   r   r   r   rÛ   â  s   

÷


ýzHTMLTokenizer.doctype_statec                 C   sÂ   | j  ¡ }|tv r	 d
S |dkr'|  d¡ d| jd< | j | j¡ | j| _d
S |dkr;|  d¡ d| jd< | j	| _d
S |t
u rV|  d	¡ d| jd< | j | j¡ | j| _d
S || jd< | j	| _d
S )Nr„   z+expected-doctype-name-but-got-right-bracketFr×   rj   rk   r=   ra   rë   T)r   rE   r   r5   r#   r*   r2   r!   r"   Údoctype_name_stater   r   r   r   r   rì   ñ  s0   
ï

ô

	ø


þz'HTMLTokenizer.before_doctype_name_statec                 C   sþ   | j  ¡ }|tv r| jd  t¡| jd< | j| _d	S |dkr6| jd  t¡| jd< | j 	| j¡ | j
| _d	S |dkrN|  d¡ | jd  d7  < | j| _d	S |tu rt|  d¡ d| jd< | jd  t¡| jd< | j 	| j¡ | j
| _d	S | jd  |7  < d	S )
Nra   r„   rj   rk   r=   zeof-in-doctype-nameFr×   T)r   rE   r   r#   rc   r	   Úafter_doctype_name_stater"   r*   r2   r!   r5   rí   r   r   r   r   r   rí     s6   
ÿîÿó

÷

ÿÿz HTMLTokenizer.doctype_name_statec                 C   s>  | j  ¡ }|tv r	 dS |dkr| j | j¡ | j| _dS |tu r>d| jd< | j  	|¡ |  
d¡ | j | j¡ | j| _dS |rc|dv rcd}dD ]}| j  ¡ }|rU||vrYd} nqH|rb| j| _dS n$|r‡|dv r‡d}d	D ]}| j  ¡ }|rz||vr~d} nqm|r‡| j| _dS | j  	|¡ | j
d
|d� d| jd< | j| _dS )Nr„   Fr×   úeof-in-doctyperÓ   T)ÚuUÚbBÚlLÚiIrÐ   ÚsS)rÒ   rô   rÑ   rÔ   ÚmMz*expected-space-or-right-bracket-in-doctyperŒ   )r   rE   r   r*   r2   r#   r!   r"   r   rJ   r5   Ú"after_doctype_public_keyword_stateÚ"after_doctype_system_keyword_stateÚbogus_doctype_state)r$   r)   rá   râ   r   r   r   rî   "  sV   
(Ù%Ü

ã
þþ
þ
z&HTMLTokenizer.after_doctype_name_statec                 C   ó–   | j  ¡ }|tv r| j| _dS |dv r$|  d¡ | j  |¡ | j| _dS |tu r?|  d¡ d| jd< | j	 
| j¡ | j| _dS | j  |¡ | j| _dS ©N)rº   r»   úunexpected-char-in-doctyperï   Fr×   T)r   rE   r   Ú&before_doctype_public_identifier_stater"   r5   rJ   r   r#   r*   r2   r!   r   r   r   r   rö   O  ó$   
ô
	ø

þz0HTMLTokenizer.after_doctype_public_keyword_statec                 C   sà   | j  ¡ }|tv r	 dS |dkrd| jd< | j| _dS |dkr*d| jd< | j| _dS |dkrE|  d¡ d| jd< | j 	| j¡ | j
| _dS |tu r`|  d	¡ d| jd< | j 	| j¡ | j
| _dS |  d
¡ d| jd< | j| _dS )Nr»   r:   rÕ   rº   r„   úunexpected-end-of-doctypeFr×   rï   rû   T)r   rE   r   r#   Ú-doctype_public_identifier_double_quoted_stater"   Ú-doctype_public_identifier_single_quoted_stater5   r*   r2   r!   r   rø   r   r   r   r   rü   a  ó8   
ì
ï
ò


÷


ý
z4HTMLTokenizer.before_doctype_public_identifier_statec                 C   óÈ   | j  ¡ }|dkr| j| _dS |dkr#|  d¡ | jd  d7  < dS |dkr>|  d¡ d| jd	< | j | j¡ | j| _dS |t	u rY|  d
¡ d| jd	< | j | j¡ | j| _dS | jd  |7  < dS )Nr»   rj   rk   rÕ   r=   r„   rþ   Fr×   rï   T©
r   rE   Ú%after_doctype_public_identifier_stater"   r5   r#   r*   r2   r!   r   r   r   r   r   rÿ   {  ó,   
ñ
ô

ù

ÿz;HTMLTokenizer.doctype_public_identifier_double_quoted_statec                 C   r  )Nrº   rj   rk   rÕ   r=   r„   rþ   Fr×   rï   Tr  r   r   r   r   r   �  r  z;HTMLTokenizer.doctype_public_identifier_single_quoted_statec                 C   sæ   | j  ¡ }|tv r| j| _d
S |dkr | j | j¡ | j| _d
S |dkr4|  	d¡ d| jd< | j
| _d
S |dkrH|  	d¡ d| jd< | j| _d
S |tu rc|  	d¡ d| jd	< | j | j¡ | j| _d
S |  	d¡ d| jd	< | j| _d
S )Nr„   r»   rû   r:   rÖ   rº   rï   Fr×   T)r   rE   r   Ú3between_doctype_public_and_system_identifiers_stater"   r*   r2   r#   r!   r5   Ú-doctype_system_identifier_double_quoted_stateÚ-doctype_system_identifier_single_quoted_stater   rø   r   r   r   r   r  ¥  s8   
ìï

ó


÷


ý
z3HTMLTokenizer.after_doctype_public_identifier_statec                 C   sÌ   | j  ¡ }|tv r	 d
S |dkr| j | j¡ | j| _d
S |dkr,d| jd< | j| _d
S |dkr;d| jd< | j	| _d
S |t
u rV|  d¡ d| jd< | j | j¡ | j| _d
S |  d	¡ d| jd< | j| _d
S )Nr„   r»   r:   rÖ   rº   rï   Fr×   rû   T)r   rE   r   r*   r2   r#   r!   r"   r  r  r   r5   rø   r   r   r   r   r  ¿  s4   
îñ
ô

÷


ý
zAHTMLTokenizer.between_doctype_public_and_system_identifiers_statec                 C   rù   rú   )r   rE   r   Ú&before_doctype_system_identifier_stater"   r5   rJ   r   r#   r*   r2   r!   r   r   r   r   r÷   ×  rý   z0HTMLTokenizer.after_doctype_system_keyword_statec                 C   sà   | j  ¡ }|tv r	 d
S |dkrd| jd< | j| _d
S |dkr*d| jd< | j| _d
S |dkrE|  d¡ d| jd< | j 	| j¡ | j
| _d
S |tu r`|  d	¡ d| jd< | j 	| j¡ | j
| _d
S |  d¡ d| jd< | j| _d
S )Nr»   r:   rÖ   rº   r„   rû   Fr×   rï   T)r   rE   r   r#   r  r"   r  r5   r*   r2   r!   r   rø   r   r   r   r   r	  é  r  z4HTMLTokenizer.before_doctype_system_identifier_statec                 C   r  )Nr»   rj   rk   rÖ   r=   r„   rþ   Fr×   rï   T©
r   rE   Ú%after_doctype_system_identifier_stater"   r5   r#   r*   r2   r!   r   r   r   r   r   r    r  z;HTMLTokenizer.doctype_system_identifier_double_quoted_statec                 C   r  )Nrº   rj   rk   rÖ   r=   r„   rþ   Fr×   rï   Tr
  r   r   r   r   r    r  z;HTMLTokenizer.doctype_system_identifier_single_quoted_statec                 C   s†   | j  ¡ }|tv r	 dS |dkr| j | j¡ | j| _dS |tu r8|  	d¡ d| jd< | j | j¡ | j| _dS |  	d¡ | j
| _dS )Nr„   rï   Fr×   rû   T)r   rE   r   r*   r2   r#   r!   r"   r   r5   rø   r   r   r   r   r  -  s"   
õ	ø


þz3HTMLTokenizer.after_doctype_system_identifier_statec                 C   s`   | j  ¡ }|dkr| j | j¡ | j| _dS |tu r-| j  |¡ | j | j¡ | j| _dS 	 dS )Nr„   T)	r   rE   r*   r2   r#   r!   r"   r   rJ   r   r   r   r   rø   >  s   
ùÿz!HTMLTokenizer.bogus_doctype_statec                 C   sÚ   g }	 |  | j d¡¡ |  | j d¡¡ | j ¡ }|tu rn!|dks%J ‚|d dd … dkr:|d d d… |d< n|  |¡ qd |¡}| d¡ }d	kr`t|ƒD ]}|  d
¡ qR| 	dd¡}|rg|  
|¡ | j| _dS )NTú]r„   rT   éþÿÿÿz]]r:   rj   r   rk   r=   )r2   r   ro   rE   r   rG   Úcountr   r5   rÌ   r7   r!   r"   )r$   r)   ÚcharÚ
null_countrÃ   r   r   r   rà   L  s,   

ô

z!HTMLTokenizer.cdata_section_stater   )NF)OÚ__name__Ú
__module__Ú__qualname__Ú__doc__r&   r0   r5   r7   rP   r_   r`   ri   r!   rm   rw   rt   r{   r~   r€   rn   r‡   rˆ   ru   r’   r–   rz   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   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    ,	