o
    Ëý°jð, ã                   @   sÚ   d dl mZmZmZ d dlmZ d dlmZm	Z	 d dl
mZ ddlmZ ddlmZ ddlmZmZ dd	lmZmZmZ dd
lmZmZ ddlmZ ddlmZ ddlmZ eeƒZedkraeZne	ZG dd„ deƒZdS )é    )Úabsolute_importÚdivisionÚunicode_literals)Úunichr)ÚdequeÚOrderedDict)Úversion_infoé   )ÚspaceCharacters)Úentities)ÚasciiLettersÚasciiUpper2Lower)ÚdigitsÚ	hexDigitsÚEOF)Ú
tokenTypesÚtagTokenTypes)ÚreplacementCharacters)ÚHTMLInputStream)ÚTrie)é   é   c                       sd  e Zd ZdZd–‡ f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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•„ 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.
    Nc                    sJ   t |fi |¤Ž| _|| _d| _g | _| j| _d| _d | _t	t
| ƒ ¡  d S ©NF)r   ÚstreamÚparserÚ
escapeFlagÚlastFourCharsÚ	dataStateÚstateÚescapeÚcurrentTokenÚsuperr   Ú__init__)Úselfr   r   Úkwargs©Ú	__class__© ú’/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pip/_vendor/html5lib/_tokenizer.pyr#   (   s   zHTMLTokenizer.__init__c                 c   sf   � t g ƒ| _|  ¡ r1| jjrtd | 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.
        Ú
ParseErrorr   ©ÚtypeÚdataN)r   Ú
tokenQueuer   r   Úerrorsr   ÚpopÚpopleft©r$   r(   r(   r)   Ú__iter__7   s   €
ÿÿýzHTMLTokenizer.__iter__c           	      C   sÎ  t }d}|r
t}d}g }| j ¡ }||v r+|tur+| |¡ | j ¡ }||v r+|tustd |¡|ƒ}|tv rJt| }| j	 t
d dd|idœ¡ n†d|  krTd	ksYn |d
krjd}| j	 t
d dd|idœ¡ nfd|  krtd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	 t
d dd|idœ¡ zt|ƒ}W n tyÏ   |d }td|d? B ƒtd|d@ B ƒ }Y nw |dkrå| j	 t
d ddœ¡ | 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:   i   i Ü  iÿ  ú;z numeric-entity-without-semicolonr+   )r   r   r   Úcharr   ÚappendÚintÚjoinr   r.   r   Ú	frozensetÚchrÚ
ValueErrorÚunget)	r$   ÚisHexÚallowedÚradixÚ	charStackÚcr7   rC   Úvr(   r(   r)   ÚconsumeNumberEntityG   s\   


þ
þ
þ	ý$þÿz!HTMLTokenizer.consumeNumberEntityFc           	      C   s´  d}| j  ¡ g}|d tv s!|d tddfv s!|d ur+||d kr+| j  |d ¡ �n|d dkr„d}| | j  ¡ ¡ |d dv rKd}| | j  ¡ ¡ |rS|d tv s[|si|d tv ri| j  |d ¡ |  |¡}nÈ| j	 t
d	 d
dœ¡ | j  | ¡ ¡ dd |¡ }n­|d tur¡t d |¡¡s“n| | j  ¡ ¡ |d tusŠzt d |d d… ¡¡}t|ƒ}W n ty¾   d }Y nw |d u�r|d dkrÕ| j	 t
d	 ddœ¡ |d dkrÿ|rÿ|| tv sï|| tv sï|| dkrÿ| j  | ¡ ¡ dd |¡ }n2t| }| j  | ¡ ¡ |d ||d … ¡7 }n| j	 t
d	 ddœ¡ | j  | ¡ ¡ dd |¡ }|�rC| jd d d  |7  < d S |tv �rKd}nd}| j	 t
| |dœ¡ d S )Nú&r   ú<ú#Féÿÿÿÿ)ÚxÚXTr*   zexpected-numeric-entityr+   r6   rB   znamed-entity-without-semicolonú=zexpected-named-entityr-   r	   ÚSpaceCharactersÚ
Characters)r   rC   r
   r   rJ   rD   r   r   rQ   r.   r   r0   rF   ÚentitiesTrieÚhas_keys_with_prefixÚlongest_prefixÚlenÚKeyErrorr   r   r!   )	r$   ÚallowedCharÚfromAttributeÚoutputrN   ÚhexÚ
entityNameÚentityLengthÚ	tokenTyper(   r(   r)   ÚconsumeEntity�   st   ÿÿý	ÿ
ÿÿ
zHTMLTokenizer.consumeEntityc                 C   s   | j |dd� dS )zIThis method replaces the need for "entityInAttributeValueState".
        T)r`   ra   N)rg   )r$   r`   r(   r(   r)   ÚprocessEntityInAttributeß   s   z&HTMLTokenizer.processEntityInAttributec                 C   sÔ   | j }|d tv r^|d  t¡|d< |d td kr8|d }t|ƒ}t|ƒt|ƒkr4| |ddd… ¡ ||d< |d td kr^|d rO| j 	td d	d
œ¡ |d r^| j 	td d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,   ÚnameÚStartTagr-   NrU   ÚEndTagr*   zattributes-in-end-tagr+   ÚselfClosingzself-closing-flag-on-end-tag)r!   r   Ú	translater   r   ÚattributeMapr^   Úupdater.   rD   r   r   )r$   ÚtokenÚrawr-   r(   r(   r)   ÚemitCurrentTokenä   s(   ÿÿzHTMLTokenizer.emitCurrentTokenc                 C   sÐ   | j  ¡ }|dkr| j| _d
S |dkr| j| _d
S |dkr5| j td ddœ¡ | j td ddœ¡ d
S |tu r;dS |t	v rS| j td	 || j  
t	d
¡ dœ¡ d
S | j  
d¡}| j td || dœ¡ d
S )NrR   rS   ú r*   úinvalid-codepointr+   rZ   FrY   T©rR   rS   rs   )r   rC   ÚentityDataStater   ÚtagOpenStater.   rD   r   r   r
   Ú
charsUntil©r$   r-   Úcharsr(   r(   r)   r      s6   
éëÿÿðÿ	ýÿzHTMLTokenizer.dataStatec                 C   ó   |   ¡  | j| _dS ©NT)rg   r   r   r2   r(   r(   r)   rv     ó   zHTMLTokenizer.entityDataStatec                 C   sÐ   | j  ¡ }|dkr| j| _dS |dkr| j| _dS |tkrdS |dkr;| j td ddœ¡ | j td d	dœ¡ dS |t	v rS| j td
 || j  
t	d¡ dœ¡ dS | j  
d¡}| j td || dœ¡ dS )NrR   rS   Frs   r*   rt   r+   rZ   r;   rY   Tru   )r   rC   ÚcharacterReferenceInRcdatar   ÚrcdataLessThanSignStater   r.   rD   r   r
   rx   ry   r(   r(   r)   ÚrcdataState"  s6   
éëÿÿóÿ	ýÿzHTMLTokenizer.rcdataStatec                 C   r{   r|   )rg   r€   r   r2   r(   r(   r)   r~   ?  r}   z(HTMLTokenizer.characterReferenceInRcdatac                 C   óŒ   | j  ¡ }|dkr| j| _d
S |dkr+| j td ddœ¡ | j td ddœ¡ d
S |tkr1dS | j  d	¡}| j td || dœ¡ d
S ©NrS   rs   r*   rt   r+   rZ   r;   F)rS   rs   T)	r   rC   ÚrawtextLessThanSignStater   r.   rD   r   r   rx   ry   r(   r(   r)   ÚrawtextStateD  ó&   
ôÿÿ	ùÿzHTMLTokenizer.rawtextStatec                 C   r�   r‚   )	r   rC   ÚscriptDataLessThanSignStater   r.   rD   r   r   rx   ry   r(   r(   r)   ÚscriptDataStateV  r…   zHTMLTokenizer.scriptDataStatec                 C   st   | j  ¡ }|tkrdS |dkr'| j td ddœ¡ | j td ddœ¡ dS | j td || j  d¡ dœ¡ dS )	NFrs   r*   rt   r+   rZ   r;   T)r   rC   r   r.   rD   r   rx   ©r$   r-   r(   r(   r)   ÚplaintextStateh  s   
ÿÿþÿzHTMLTokenizer.plaintextStatec                 C   s  | j  ¡ }|dkr| j| _dS |dkr| j| _dS |tv r.td |g dddœ| _| j| _dS |dkrN| j	 
td dd	œ¡ | j	 
td
 dd	œ¡ | j| _dS |dkri| j	 
td dd	œ¡ | j  |¡ | j| _dS | j	 
td dd	œ¡ | j	 
td
 dd	œ¡ | j  |¡ | j| _dS )Nú!ú/rj   F)r,   ri   r-   rl   ÚselfClosingAcknowledgedú>r*   z'expected-tag-name-but-got-right-bracketr+   rZ   z<>ú?z'expected-tag-name-but-got-question-markzexpected-tag-namerS   T)r   rC   ÚmarkupDeclarationOpenStater   ÚcloseTagOpenStater   r   r!   ÚtagNameStater.   rD   r   rJ   ÚbogusCommentStaterˆ   r(   r(   r)   rw   w  sH   
ãåýëÿòÿûÿzHTMLTokenizer.tagOpenStatec                 C   sÐ   | j  ¡ }|tv rtd |g ddœ| _| j| _dS |dkr.| j td ddœ¡ | j	| _dS |t
u rN| j td ddœ¡ | j td	 d
dœ¡ | j	| _dS | j td dd|idœ¡ | j  |¡ | j| _dS )Nrk   F©r,   ri   r-   rl   r�   r*   z*expected-closing-tag-but-got-right-bracketr+   z expected-closing-tag-but-got-eofrZ   ú</z!expected-closing-tag-but-got-charr-   r8   T)r   rC   r   r   r!   r‘   r   r.   rD   r   r   rJ   r’   rˆ   r(   r(   r)   r�   š  s6   
ÿðÿôÿûþzHTMLTokenizer.closeTagOpenStatec                 C   sº   | j  ¡ }|tv r| j| _d
S |dkr|  ¡  d
S |tu r.| j t	d ddœ¡ | j
| _d
S |dkr8| j| _d
S |dkrR| j t	d ddœ¡ | jd  d	7  < d
S | jd  |7  < d
S )Nr�   r*   zeof-in-tag-namer+   r‹   rs   rt   ri   r;   T)r   rC   r
   ÚbeforeAttributeNameStater   rr   r   r.   rD   r   r   ÚselfClosingStartTagStater!   rˆ   r(   r(   r)   r‘   ²  s0   
ðòÿö	øÿýzHTMLTokenizer.tagNameStatec                 C   óR   | j  ¡ }|dkrd| _| j| _dS | j td ddœ¡ | j  |¡ | j	| _dS ©Nr‹   r6   rZ   rS   r+   T)
r   rC   ÚtemporaryBufferÚrcdataEndTagOpenStater   r.   rD   r   rJ   r€   rˆ   r(   r(   r)   r   È  ó   
ýz%HTMLTokenizer.rcdataLessThanSignStatec                 C   óZ   | j  ¡ }|tv r|  j|7  _| j| _dS | j td ddœ¡ | j  	|¡ | j
| _dS ©NrZ   r”   r+   T)r   rC   r   r™   ÚrcdataEndTagNameStater   r.   rD   r   rJ   r€   rˆ   r(   r(   r)   rš   Ó  ó   
ýz#HTMLTokenizer.rcdataEndTagOpenStatec                 C   ó  | j o| j d  ¡ | j ¡ k}| j ¡ }|tv r+|r+td | jg ddœ| _ | j| _d
S |dkrB|rBtd | jg ddœ| _ | j	| _d
S |dkr]|r]td | jg ddœ| _ |  
¡  | j| _d
S |tv rj|  j|7  _d
S | j td d| j d	œ¡ | j |¡ | j| _d
S ©Nri   rk   Fr“   r‹   r�   rZ   r”   r+   T)r!   Úlowerr™   r   rC   r
   r   r•   r   r–   rr   r   r   r.   rD   rJ   r€   ©r$   Úappropriater-   r(   r(   r)   rž   Þ  óB   
þîþóþùüÿz#HTMLTokenizer.rcdataEndTagNameStatec                 C   r—   r˜   )
r   rC   r™   ÚrawtextEndTagOpenStater   r.   rD   r   rJ   r„   rˆ   r(   r(   r)   rƒ   ú  r›   z&HTMLTokenizer.rawtextLessThanSignStatec                 C   rœ   r�   )r   rC   r   r™   ÚrawtextEndTagNameStater   r.   rD   r   rJ   r„   rˆ   r(   r(   r)   r¦     rŸ   z$HTMLTokenizer.rawtextEndTagOpenStatec                 C   r    r¡   )r!   r¢   r™   r   rC   r
   r   r•   r   r–   rr   r   r   r.   rD   rJ   r„   r£   r(   r(   r)   r§     r¥   z$HTMLTokenizer.rawtextEndTagNameStatec                 C   s|   | j  ¡ }|dkrd| _| j| _dS |dkr'| j td ddœ¡ | j| _dS | j td ddœ¡ | j  	|¡ | j
| _dS )	Nr‹   r6   rŠ   rZ   z<!r+   rS   T)r   rC   r™   ÚscriptDataEndTagOpenStater   r.   rD   r   ÚscriptDataEscapeStartStaterJ   r‡   rˆ   r(   r(   r)   r†   ,  s   
ùýz)HTMLTokenizer.scriptDataLessThanSignStatec                 C   rœ   r�   )r   rC   r   r™   ÚscriptDataEndTagNameStater   r.   rD   r   rJ   r‡   rˆ   r(   r(   r)   r¨   :  rŸ   z'HTMLTokenizer.scriptDataEndTagOpenStatec                 C   r    r¡   )r!   r¢   r™   r   rC   r
   r   r•   r   r–   rr   r   r   r.   rD   rJ   r‡   r£   r(   r(   r)   rª   E  r¥   z'HTMLTokenizer.scriptDataEndTagNameStatec                 C   óL   | j  ¡ }|dkr| j td ddœ¡ | j| _dS | j  |¡ | j| _dS ©Nú-rZ   r+   T)	r   rC   r.   rD   r   ÚscriptDataEscapeStartDashStater   rJ   r‡   rˆ   r(   r(   r)   r©   a  ó   
þz(HTMLTokenizer.scriptDataEscapeStartStatec                 C   r«   r¬   )	r   rC   r.   rD   r   ÚscriptDataEscapedDashDashStater   rJ   r‡   rˆ   r(   r(   r)   r®   k  r¯   z,HTMLTokenizer.scriptDataEscapeStartDashStatec                 C   s¾   | j  ¡ }|dkr| j td ddœ¡ | j| _d
S |dkr$| j| _d
S |dkr@| j td ddœ¡ | j td ddœ¡ d
S |tkrJ| j	| _d
S | j  
d	¡}| j td || dœ¡ d
S )Nr­   rZ   r+   rS   rs   r*   rt   r;   )rS   r­   rs   T)r   rC   r.   rD   r   ÚscriptDataEscapedDashStater   Ú"scriptDataEscapedLessThanSignStater   r   rx   ry   r(   r(   r)   ÚscriptDataEscapedStateu  s0   
óõÿÿúýÿz$HTMLTokenizer.scriptDataEscapedStatec                 C   s¾   | j  ¡ }|dkr| j td ddœ¡ | j| _d	S |dkr$| j| _d	S |dkrD| j td ddœ¡ | j td ddœ¡ | j| _d	S |t	krN| j
| _d	S | j td |dœ¡ | j| _d	S )
Nr­   rZ   r+   rS   rs   r*   rt   r;   T)r   rC   r.   rD   r   r°   r   r²   r³   r   r   rˆ   r(   r(   r)   r±   ‰  s.   
óõÿÿûþz(HTMLTokenizer.scriptDataEscapedDashStatec                 C   sà   | j  ¡ }|dkr| j td ddœ¡ d
S |dkr | j| _d
S |dkr5| j td ddœ¡ | j| _d
S |dkrU| j td ddœ¡ | j td d	dœ¡ | j| _d
S |t	kr_| j
| _d
S | j td |dœ¡ | j| _d
S )Nr­   rZ   r+   rS   r�   rs   r*   rt   r;   T)r   rC   r.   rD   r   r²   r   r‡   r³   r   r   rˆ   r(   r(   r)   r°   �  s4   
ðòõÿÿûþz,HTMLTokenizer.scriptDataEscapedDashDashStatec                 C   s†   | j  ¡ }|dkrd| _| j| _dS |tv r,| j td d| dœ¡ || _| j	| _dS | j td ddœ¡ | j  
|¡ | j| _dS r˜   )r   rC   r™   Ú scriptDataEscapedEndTagOpenStater   r   r.   rD   r   Ú scriptDataDoubleEscapeStartStaterJ   r³   rˆ   r(   r(   r)   r²   ³  s   
	øýz0HTMLTokenizer.scriptDataEscapedLessThanSignStatec                 C   sR   | j  ¡ }|tv r|| _| j| _dS | j td ddœ¡ | j  	|¡ | j
| _dS r�   )r   rC   r   r™   Ú scriptDataEscapedEndTagNameStater   r.   rD   r   rJ   r³   rˆ   r(   r(   r)   r´   Â  r›   z.HTMLTokenizer.scriptDataEscapedEndTagOpenStatec                 C   r    r¡   )r!   r¢   r™   r   rC   r
   r   r•   r   r–   rr   r   r   r.   rD   rJ   r³   r£   r(   r(   r)   r¶   Í  r¥   z.HTMLTokenizer.scriptDataEscapedEndTagNameStatec                 C   óž   | j  ¡ }|ttdƒB v r+| j td |dœ¡ | j ¡ dkr%| j	| _
dS | j| _
dS |tv rC| j td |dœ¡ |  j|7  _dS | j  |¡ | j| _
dS ©N)r‹   r�   rZ   r+   ÚscriptT)r   rC   r
   rG   r.   rD   r   r™   r¢   ÚscriptDataDoubleEscapedStater   r³   r   rJ   rˆ   r(   r(   r)   rµ   é  ó   
	ùúþz.HTMLTokenizer.scriptDataDoubleEscapeStartStatec                 C   sÚ   | j  ¡ }|dkr| j td ddœ¡ | j| _d
S |dkr/| j td ddœ¡ | j| _d
S |dkrK| j td ddœ¡ | j td ddœ¡ d
S |tkr`| j td d	dœ¡ | j	| _d
S | j td |dœ¡ d
S ©Nr­   rZ   r+   rS   rs   r*   rt   r;   úeof-in-script-in-scriptT)
r   rC   r.   rD   r   Ú scriptDataDoubleEscapedDashStater   Ú(scriptDataDoubleEscapedLessThanSignStater   r   rˆ   r(   r(   r)   rº   ù  s2   
òõÿÿúÿÿz*HTMLTokenizer.scriptDataDoubleEscapedStatec                 C   sê   | j  ¡ }|dkr| j td ddœ¡ | j| _d
S |dkr/| j td ddœ¡ | j| _d
S |dkrO| j td ddœ¡ | j td ddœ¡ | j| _d
S |t	krd| j td d	dœ¡ | j
| _d
S | j td |dœ¡ | j| _d
S r¼   )r   rC   r.   rD   r   Ú$scriptDataDoubleEscapedDashDashStater   r¿   rº   r   r   rˆ   r(   r(   r)   r¾     s6   
ðóÿÿùÿþz.HTMLTokenizer.scriptDataDoubleEscapedDashStatec                 C   s  | j  ¡ }|dkr| j td ddœ¡ dS |dkr+| j td ddœ¡ | j| _dS |dkr@| j td ddœ¡ | j| _dS |dkr`| j td ddœ¡ | j td d	dœ¡ | j| _dS |t	kru| j td d
dœ¡ | j
| _dS | j td |dœ¡ | j| _dS )Nr­   rZ   r+   rS   r�   rs   r*   rt   r;   r½   T)r   rC   r.   rD   r   r¿   r   r‡   rº   r   r   rˆ   r(   r(   r)   rÀ   %  s<   
íðóÿÿùÿþz2HTMLTokenizer.scriptDataDoubleEscapedDashDashStatec                 C   sR   | j  ¡ }|dkr| j td ddœ¡ d| _| j| _dS | j  |¡ | j	| _dS )Nr‹   rZ   r+   r6   T)
r   rC   r.   rD   r   r™   ÚscriptDataDoubleEscapeEndStater   rJ   rº   rˆ   r(   r(   r)   r¿   >  s   
þz6HTMLTokenizer.scriptDataDoubleEscapedLessThanSignStatec                 C   r·   r¸   )r   rC   r
   rG   r.   rD   r   r™   r¢   r³   r   rº   r   rJ   rˆ   r(   r(   r)   rÁ   I  r»   z,HTMLTokenizer.scriptDataDoubleEscapeEndStatec                 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 rY| j td dd	œ¡ | jd  |dg¡ | j| _dS |d
krx| j td dd	œ¡ | jd  ddg¡ | j| _dS |tu r�| j td dd	œ¡ | j| _dS | jd  |dg¡ | j| _dS )NTr-   r6   r�   r‹   )ú'ú"rX   rS   r*   ú#invalid-character-in-attribute-namer+   rs   rt   r;   z#expected-attribute-name-but-got-eof)r   rC   r
   rx   r   r!   rD   ÚattributeNameStater   rr   r–   r.   r   r   r   rˆ   r(   r(   r)   r•   Y  sJ   
èëíïÿôÿùÿþz&HTMLTokenizer.beforeAttributeNameStatec                 C   sÔ  | j  ¡ }d}d}|dkr| j| _n•|tv r-| jd d d  || j  td¡ 7  < d}nz|dkr4d}ns|tv r=| j| _nj|dkrF| j	| _na|d	kre| j
 td
 ddœ¡ | jd d d  d7  < d}nB|dv r„| j
 td
 ddœ¡ | jd d d  |7  < d}n#|tu r˜| j
 td
 d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á| j
 td
 ddœ¡  nqÅ|rè|  ¡  dS )NTFrX   r-   rU   r   r�   r‹   rs   r*   rt   r+   r;   ©rÂ   rÃ   rS   rÄ   zeof-in-attribute-namezduplicate-attribute)r   rC   ÚbeforeAttributeValueStater   r   r!   rx   r
   ÚafterAttributeNameStater–   r.   rD   r   r   r   rm   r   rr   )r$   r-   ÚleavingThisStateÚ	emitTokenri   Ú_r(   r(   r)   rÅ   w  s`   

ÿ

ÿþÿ
ÿÿýz HTMLTokenizer.attributeNameStatec                 C   sN  | 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rc| j 	td d	d
œ¡ | jd  	ddg¡ | j
| _dS |dv r‚| j 	td dd
œ¡ | jd  	|dg¡ | j
| _dS |tu r—| j 	td dd
œ¡ | j| _dS | jd  	|dg¡ | j
| _dS )NTrX   r�   r-   r6   r‹   rs   r*   rt   r+   r;   rÆ   z&invalid-character-after-attribute-namezexpected-end-of-tag-but-got-eof)r   rC   r
   rx   rÇ   r   rr   r   r!   rD   rÅ   r–   r.   r   r   r   rˆ   r(   r(   r)   rÈ   ­  sP   
æèêíïÿôÿùÿþz%HTMLTokenizer.afterAttributeNameStatec                 C   sn  | 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rK| j	 
td ddœ¡ |  ¡  dS |d	krm| j	 
td d
dœ¡ | jd d d  d7  < | j| _dS |dv r�| j	 
td ddœ¡ | jd d d  |7  < | j| _dS |tu r¤| j	 
td ddœ¡ | j| _dS | jd d d  |7  < | j| _dS )NTrÃ   rR   rÂ   r�   r*   z.expected-attribute-value-but-got-right-bracketr+   rs   rt   r-   rU   r	   r;   )rX   rS   ú`z"equals-in-unquoted-attribute-valuez$expected-attribute-value-but-got-eof)r   rC   r
   rx   ÚattributeValueDoubleQuotedStater   ÚattributeValueUnQuotedStaterJ   ÚattributeValueSingleQuotedStater.   rD   r   rr   r!   r   r   rˆ   r(   r(   r)   rÇ   Í  sV   
äæéëÿïÿôÿùÿþz'HTMLTokenizer.beforeAttributeValueStatec                 C   óÄ   | j  ¡ }|dkr| j| _dS |dkr|  d¡ dS |dkr8| j td ddœ¡ | jd d d	  d
7  < dS |t	u rM| j td ddœ¡ | j
| _dS | jd d d	  || j  d¡ 7  < dS )NrÃ   rR   rs   r*   rt   r+   r-   rU   r	   r;   z#eof-in-attribute-value-double-quote)rÃ   rR   rs   T©r   rC   ÚafterAttributeValueStater   rh   r.   rD   r   r!   r   r   rx   rˆ   r(   r(   r)   rÍ   ï  ó.   
ó
õÿùÿþ
ÿz-HTMLTokenizer.attributeValueDoubleQuotedStatec                 C   rÐ   )NrÂ   rR   rs   r*   rt   r+   r-   rU   r	   r;   z#eof-in-attribute-value-single-quote)rÂ   rR   rs   TrÑ   rˆ   r(   r(   r)   rÏ     rÓ   z-HTMLTokenizer.attributeValueSingleQuotedStatec                 C   s  | j  ¡ }|tv r| j| _dS |dkr|  d¡ dS |dkr$|  ¡  dS |dv rB| j t	d ddœ¡ | j
d d d	  |7  < dS |d
kr`| j t	d ddœ¡ | j
d d d	  d7  < dS |tu ru| j t	d ddœ¡ | j| _dS | j
d d d	  || j  tdƒtB ¡ 7  < dS )NrR   r�   )rÃ   rÂ   rX   rS   rÌ   r*   z0unexpected-character-in-unquoted-attribute-valuer+   r-   rU   r	   rs   rt   r;   z eof-in-attribute-value-no-quotes)rR   r�   rÃ   rÂ   rX   rS   rÌ   rs   T)r   rC   r
   r•   r   rh   rr   r.   rD   r   r!   r   r   rx   rG   rˆ   r(   r(   r)   rÎ     s@   
í
ïñÿõÿùÿþ

ÿz)HTMLTokenizer.attributeValueUnQuotedStatec                 C   sª   | j  ¡ }|tv r| j| _dS |dkr|  ¡  dS |dkr#| j| _dS |tu r>| j 	t
d ddœ¡ | j  |¡ | j| _dS | j 	t
d ddœ¡ | j  |¡ | j| _dS )Nr�   r‹   r*   z$unexpected-EOF-after-attribute-valuer+   z*unexpected-character-after-attribute-valueT)r   rC   r
   r•   r   rr   r–   r   r.   rD   r   rJ   r   rˆ   r(   r(   r)   rÒ   .  s.   
òôöÿüÿz&HTMLTokenizer.afterAttributeValueStatec                 C   sŒ   | j  ¡ }|dkrd| jd< |  ¡  dS |tu r/| j td ddœ¡ | j  |¡ | j	| _
dS | j td ddœ¡ | j  |¡ | j| _
dS )Nr�   Trl   r*   z#unexpected-EOF-after-solidus-in-tagr+   z)unexpected-character-after-solidus-in-tag)r   rC   r!   rr   r   r.   rD   r   rJ   r   r   r•   rˆ   r(   r(   r)   r–   B  s$   

õþüÿz&HTMLTokenizer.selfClosingStartTagStatec                 C   sD   | j  d¡}| dd¡}| j td |dœ¡ | j  ¡  | j| _dS )Nr�   rs   r;   ÚCommentr+   T)	r   rx   Úreplacer.   rD   r   rC   r   r   rˆ   r(   r(   r)   r’   T  s   ÿ
zHTMLTokenizer.bogusCommentStatec                 C   sn  | j  ¡ g}|d dkr)| | j  ¡ ¡ |d dkr(td ddœ| _| j| _dS nq|d dv r\d}dD ]}| | j  ¡ ¡ |d |vrGd	} nq3|r[td
 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 | j td ddœ¡ |r±| j  | ¡ ¡ |s§| j| _dS )NrU   r­   rÔ   r6   r+   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*   zexpected-dashes-or-doctype)r   rC   rD   r   r!   ÚcommentStartStater   ÚdoctypeStater   ÚtreeÚopenElementsÚ	namespaceÚdefaultNamespaceÚcdataSectionStater.   rJ   r0   r’   )r$   rN   ÚmatchedÚexpectedr(   r(   r)   r�   c  s`   ýþýú
ÿþÿÿz(HTMLTokenizer.markupDeclarationOpenStatec                 C   sà   | j  ¡ }|dkr| j| _dS |dkr)| j td ddœ¡ | jd  d7  < dS |dkrE| j td d	dœ¡ | j | j¡ | j| _dS |t	u ra| j td d
dœ¡ | j | j¡ | j| _dS | jd  |7  < | j
| _dS )Nr­   rs   r*   rt   r+   r-   r;   r�   úincorrect-commentúeof-in-commentT)r   rC   ÚcommentStartDashStater   r.   rD   r   r!   r   r   ÚcommentStaterˆ   r(   r(   r)   rî   �  s6   
ïÿóÿ	øÿþzHTMLTokenizer.commentStartStatec                 C   sä   | j  ¡ }|dkr| j| _dS |dkr)| j td ddœ¡ | jd  d7  < dS |dkrE| j td d	dœ¡ | j | j¡ | j| _dS |t	u ra| j td d
dœ¡ | j | j¡ | j| _dS | jd  d| 7  < | j
| _dS )Nr­   rs   r*   rt   r+   r-   õ   -ï¿½r�   r÷   rø   T)r   rC   ÚcommentEndStater   r.   rD   r   r!   r   r   rú   rˆ   r(   r(   r)   rù   §  s6   
ïÿóÿ	øÿþz#HTMLTokenizer.commentStartDashStatec                 C   s¬   | j  ¡ }|dkr| j| _d
S |dkr)| j td ddœ¡ | jd  d7  < d
S |tu rE| j td ddœ¡ | j | j¡ | j	| _d
S | jd  || j  
d	¡ 7  < d
S )Nr­   rs   r*   rt   r+   r-   r;   rø   )r­   rs   T)r   rC   ÚcommentEndDashStater   r.   rD   r   r!   r   r   rx   rˆ   r(   r(   r)   rú   ¾  s*   
ôÿ	øÿþ
ÿzHTMLTokenizer.commentStatec                 C   s´   | j  ¡ }|dkr| j| _d	S |dkr-| j td ddœ¡ | jd  d7  < | j| _d	S |t	u rI| j td ddœ¡ | j | j¡ | j
| _d	S | jd  d| 7  < | j| _d	S )
Nr­   rs   r*   rt   r+   r-   rû   zeof-in-comment-end-dashT)r   rC   rü   r   r.   rD   r   r!   rú   r   r   rˆ   r(   r(   r)   rý   Ð  s*   
óÿ	øÿþz!HTMLTokenizer.commentEndDashStatec                 C   s6  | j  ¡ }|dkr| j | j¡ | j| _dS |dkr4| j td ddœ¡ | jd  d7  < | j| _dS |dkrI| j td d	dœ¡ | j	| _dS |d
krc| j td ddœ¡ | jd  |7  < dS |t
u r| j td ddœ¡ | j | j¡ | j| _dS | j td ddœ¡ | jd  d| 7  < | j| _dS )Nr�   rs   r*   rt   r+   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   rC   r.   rD   r!   r   r   r   rú   ÚcommentEndBangStater   rˆ   r(   r(   r)   rü   ã  sJ   
èÿíÿñÿõÿüÿzHTMLTokenizer.commentEndStatec                 C   sè   | j  ¡ }|dkr| j | j¡ | j| _dS |dkr)| jd  d7  < | j| _dS |dkrG| j td ddœ¡ | jd  d	7  < | j	| _dS |t
u rc| j td d
dœ¡ | j | j¡ | j| _dS | jd  d| 7  < | j	| _dS )Nr�   r­   r-   z--!rs   r*   rt   r+   u   --!ï¿½zeof-in-comment-end-bang-stateT)r   rC   r.   rD   r!   r   r   rý   r   rú   r   rˆ   r(   r(   r)   rþ     s4   
ðóÿ	øÿþz!HTMLTokenizer.commentEndBangStatec                 C   sŽ   | j  ¡ }|tv r| j| _dS |tu r0| j td ddœ¡ d| j	d< | j | j	¡ | j
| _dS | j td ddœ¡ | j  |¡ | j| _dS )Nr*   ú!expected-doctype-name-but-got-eofr+   Frë   zneed-space-after-doctypeT)r   rC   r
   ÚbeforeDoctypeNameStater   r   r.   rD   r   r!   r   rJ   rˆ   r(   r(   r)   rï     s$   
õÿ
üÿzHTMLTokenizer.doctypeStatec                 C   sæ   | j  ¡ }|tv r	 dS |dkr-| j td ddœ¡ d| jd< | j | j¡ | j| _dS |dkrG| j td ddœ¡ d	| jd
< | j	| _dS |t
u rh| j td ddœ¡ d| jd< | j | j¡ | j| _dS || jd
< | j	| _dS )Nr�   r*   z+expected-doctype-name-but-got-right-bracketr+   Frë   rs   rt   r;   ri   rÿ   T)r   rC   r
   r.   rD   r   r!   r   r   ÚdoctypeNameStater   rˆ   r(   r(   r)   r   *  s<   
ìÿ
òÿ

÷ÿ

þz$HTMLTokenizer.beforeDoctypeNameStatec                 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rT| j 	td ddœ¡ | jd  d7  < | j| _dS |tu r€| j 	td ddœ¡ d	| jd
< | jd  t¡| jd< | j 	| j¡ | j
| _dS | jd  |7  < dS )Nri   r�   rs   r*   rt   r+   r;   zeof-in-doctype-nameFrë   T)r   rC   r
   r!   rm   r   ÚafterDoctypeNameStater   r.   rD   r   r   r  r   rˆ   r(   r(   r)   r  D  s8   
îòÿ
÷ÿ
ÿzHTMLTokenizer.doctypeNameStatec                 C   sH  | j  ¡ }|tv r	 dS |dkr| j | j¡ | j| _dS |tu rDd| jd< | j  	|¡ | j t
d ddœ¡ | j | j¡ | j| _dS |dv red}d	D ]}| j  ¡ }||vr[d} nqL|rd| j| _dS n |d
v r…d}dD ]}| j  ¡ }||vr|d} nqm|r…| j| _dS | j  	|¡ | j t
d dd|idœ¡ d| jd< | j| _dS )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   )r   rC   r
   r.   rD   r!   r   r   r   rJ   r   ÚafterDoctypePublicKeywordStateÚafterDoctypeSystemKeywordStateÚbogusDoctypeState)r$   r-   rõ   rö   r(   r(   r)   r  ]  s`   
.Ó+Ö
ÿ$Þ
þþ
þþ
z#HTMLTokenizer.afterDoctypeNameStatec                 C   ó®   | j  ¡ }|tv r| j| _dS |dv r*| j td ddœ¡ | j  |¡ | j| _dS |t	u rK| j td ddœ¡ d| j
d< | j | j
¡ | j| _dS | j  |¡ | j| _dS ©	N)rÂ   rÃ   r*   úunexpected-char-in-doctyper+   r  Frë   T)r   rC   r
   Ú"beforeDoctypePublicIdentifierStater   r.   rD   r   rJ   r   r!   r   rˆ   r(   r(   r)   r  �  ó,   
òÿ
÷ÿ
þz,HTMLTokenizer.afterDoctypePublicKeywordStatec                 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rK| j t	d ddœ¡ d	| jd
< | j | j¡ | j
| _dS |tu rl| j t	d ddœ¡ d	| jd
< | j | j¡ | j
| _dS | j t	d ddœ¡ d	| jd
< | j| _dS )NrÃ   r6   ré   rÂ   r�   r*   úunexpected-end-of-doctyper+   Frë   r  r  T)r   rC   r
   r!   Ú(doctypePublicIdentifierDoubleQuotedStater   Ú(doctypePublicIdentifierSingleQuotedStater.   rD   r   r   r   r  rˆ   r(   r(   r)   r  ¤  óD   
é
ì
ïÿ
õÿ
üÿ
z0HTMLTokenizer.beforeDoctypePublicIdentifierStatec                 C   óì   | j  ¡ }|dkr| j| _dS |dkr)| j td ddœ¡ | jd  d7  < dS |dkrJ| j td d	dœ¡ d
| jd< | j | j¡ | j| _dS |t	u rk| j td ddœ¡ d
| jd< | j | j¡ | j| _dS | jd  |7  < dS )NrÃ   rs   r*   rt   r+   ré   r;   r�   r  Frë   r  T©
r   rC   Ú!afterDoctypePublicIdentifierStater   r.   rD   r   r!   r   r   rˆ   r(   r(   r)   r  Á  ó8   
îÿòÿ
	øÿ
ÿz6HTMLTokenizer.doctypePublicIdentifierDoubleQuotedStatec                 C   r  )NrÂ   rs   r*   rt   r+   ré   r;   r�   r  Frë   r  Tr  rˆ   r(   r(   r)   r  Ù  r   z6HTMLTokenizer.doctypePublicIdentifierSingleQuotedStatec                 C   s  | j  ¡ }|tv r| j| _dS |dkr | j | j¡ | j| _dS |dkr:| j t	d ddœ¡ d| jd< | j
| _dS |dkrT| j t	d ddœ¡ d| jd< | j| _dS |tu ru| j t	d d	dœ¡ d
| jd< | j | j¡ | j| _dS | j t	d ddœ¡ d
| jd< | j| _dS )Nr�   rÃ   r*   r  r+   r6   rê   rÂ   r  Frë   T)r   rC   r
   Ú-betweenDoctypePublicAndSystemIdentifiersStater   r.   rD   r!   r   r   Ú(doctypeSystemIdentifierDoubleQuotedStateÚ(doctypeSystemIdentifierSingleQuotedStater   r  rˆ   r(   r(   r)   r  ñ  sH   
èëÿ
ðÿ
õÿ
üÿ
z/HTMLTokenizer.afterDoctypePublicIdentifierStatec                 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
kr\| j td ddœ¡ d	| jd
< | j | j¡ | j| _dS | j td ddœ¡ d	| jd
< | j| _dS )Nr�   rÃ   r6   rê   rÂ   r*   r  r+   Frë   r  T)r   rC   r
   r.   rD   r!   r   r   r"  r#  r   r   r  rˆ   r(   r(   r)   r!    s<   
ìï
ò
õÿ
üÿ
z;HTMLTokenizer.betweenDoctypePublicAndSystemIdentifiersStatec                 C   r  r  )r   rC   r
   Ú"beforeDoctypeSystemIdentifierStater   r.   rD   r   rJ   r   r!   r   rˆ   r(   r(   r)   r  )  r  z,HTMLTokenizer.afterDoctypeSystemKeywordStatec                 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rK| j t	d ddœ¡ d	| jd
< | j | j¡ | j
| _dS |tu rl| j t	d ddœ¡ d	| jd
< | j | j¡ | j
| _dS | j t	d ddœ¡ d	| jd
< | j| _dS )NrÃ   r6   rê   rÂ   r�   r*   r  r+   Frë   r  T)r   rC   r
   r!   r"  r   r#  r.   rD   r   r   r   r  rˆ   r(   r(   r)   r$  =  r  z0HTMLTokenizer.beforeDoctypeSystemIdentifierStatec                 C   r  )NrÃ   rs   r*   rt   r+   rê   r;   r�   r  Frë   r  T©
r   rC   Ú!afterDoctypeSystemIdentifierStater   r.   rD   r   r!   r   r   rˆ   r(   r(   r)   r"  Z  r   z6HTMLTokenizer.doctypeSystemIdentifierDoubleQuotedStatec                 C   r  )NrÂ   rs   r*   rt   r+   rê   r;   r�   r  Frë   r  Tr%  rˆ   r(   r(   r)   r#  r  r   z6HTMLTokenizer.doctypeSystemIdentifierSingleQuotedStatec                 C   sž   | j  ¡ }|tv r	 dS |dkr| j | j¡ | j| _dS |tu r>| j t	d ddœ¡ d| jd< | j | j¡ | j| _dS | j t	d ddœ¡ | j
| _dS )	Nr�   r*   r  r+   Frë   r  T)r   rC   r
   r.   rD   r!   r   r   r   r   r  rˆ   r(   r(   r)   r&  Š  s*   
óöÿ
ýÿz/HTMLTokenizer.afterDoctypeSystemIdentifierStatec                 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   rC   r.   rD   r!   r   r   r   rJ   rˆ   r(   r(   r)   r  �  s   
ùÿzHTMLTokenizer.bogusDoctypeStatec                 C   sò   g }	 |  | j d¡¡ |  | j d¡¡ | j ¡ }|tkrn!|dks%J ‚|d dd … dkr:|d d d… |d< n|  |¡ qd |¡}| d¡}|d	krft|ƒD ]}| j  t	d
 ddœ¡ qR| 
dd¡}|rs| j  t	d |dœ¡ | j| _dS )NTú]r�   rU   éþÿÿÿz]]r6   rs   r   r*   rt   r+   r;   rZ   )rD   r   rx   rC   r   rF   ÚcountÚranger.   r   rÕ   r   r   )r$   r-   rC   Ú	nullCountrË   r(   r(   r)   rô   «  s6   

ô


ÿÿzHTMLTokenizer.cdataSectionState)Nr   )NÚ__name__Ú
__module__Ú__qualname__Ú__doc__r#   r3   rQ   rg   rh   rr   r   rv   r€   r~   r„   r‡   r‰   rw   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  rô   Ú__classcell__r(   r(   r&   r)   r      s–    
HP#

6 "-3r   N) Ú
__future__r   r   r   Úpip._vendor.sixr   rH   Úcollectionsr   r   Úsysr   Ú	constantsr
   r   r   r   r   r   r   r   r   r   Ú_inputstreamr   Ú_trier   r[   Údictrn   Úobjectr   r(   r(   r(   r)   Ú<module>   s"    