o
    g}”eð, ã                   @   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ÚparserZ
escapeFlagZlastFourCharsÚ	dataStateÚstateÚescapeÚcurrentTokenÚsuperr   Ú__init__)Úselfr   r   Úkwargs©Ú	__class__© úh/Users/abhinavbhinder/Documents/map/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þÿ r8   i   i Ü  iÿ  ú;z numeric-entity-without-semicolonr)   )r   r   r   Úcharr   ÚappendÚintÚjoinr   r,   r   Ú	frozensetÚchrÚ
ValueErrorÚunget)	r"   ZisHexÚallowedÚradixÚ	charStackÚcr5   rA   Úvr&   r&   r'   ÚconsumeNumberEntityG   sr   


þ
þÿ
þÿÿþþýýüý$þÿ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)   r4   r@   znamed-entity-without-semicolonú=zexpected-named-entityr+   r	   ÚSpaceCharactersÚ
Characters)r   rA   r
   r   rH   rB   r   r   rN   r,   r   r.   rD   ÚentitiesTrieZhas_keys_with_prefixZlongest_prefixÚlenÚKeyErrorr   r   r   )	r"   ÚallowedCharÚfromAttributeÚoutputrK   ÚhexZ
entityNameZentityLengthZ	tokenTyper&   r&   r'   ÚconsumeEntity�   s‚   ÿ
ÿÿ
ÿÿý	ÿ
ÿ
ÿ
þ
ýÿ
zHTMLTokenizer.consumeEntityc                 C   s   | j |dd� dS )zIThis method replaces the need for "entityInAttributeValueState".
        T)r[   r\   N)r_   )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+   NrR   ÚEndTagr(   zattributes-in-end-tagr)   ÚselfClosingzself-closing-flag-on-end-tag)r   r   Ú	translater   r   ÚattributeMaprY   Úupdater,   rB   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 )NrO   rP   ú r(   úinvalid-codepointr)   rW   FrV   T©rO   rP   rk   )r   rA   ÚentityDataStater   ÚtagOpenStater,   rB   r   r   r
   Ú
charsUntil©r"   r+   Úcharsr&   r&   r'   r      s6   
éëÿÿðÿ	ýÿzHTMLTokenizer.dataStatec                 C   ó   |   ¡  | j| _dS ©NT)r_   r   r   r0   r&   r&   r'   rn     ó   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 )NrO   rP   Frk   r(   rl   r)   rW   r9   rV   Trm   )r   rA   ÚcharacterReferenceInRcdatar   ÚrcdataLessThanSignStater   r,   rB   r   r
   rp   rq   r&   r&   r'   ÚrcdataState"  s6   
éëÿÿóÿ	ýÿzHTMLTokenizer.rcdataStatec                 C   rs   rt   )r_   rx   r   r0   r&   r&   r'   rv   ?  ru   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 ©NrP   rk   r(   rl   r)   rW   r9   F)rP   rk   T)	r   rA   ÚrawtextLessThanSignStater   r,   rB   r   r   rp   rq   r&   r&   r'   ÚrawtextStateD  ó&   
ôÿÿ	ùÿzHTMLTokenizer.rawtextStatec                 C   ry   rz   )	r   rA   ÚscriptDataLessThanSignStater   r,   rB   r   r   rp   rq   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 )	NFrk   r(   rl   r)   rW   r9   T)r   rA   r   r,   rB   r   rp   ©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ú!ú/rb   F)r*   ra   r+   rd   ÚselfClosingAcknowledgedú>r(   z'expected-tag-name-but-got-right-bracketr)   rW   z<>ú?z'expected-tag-name-but-got-question-markzexpected-tag-namerP   T)r   rA   ÚmarkupDeclarationOpenStater   ÚcloseTagOpenStater   r   r   ÚtagNameStater,   rB   r   rH   ÚbogusCommentStater€   r&   r&   r'   ro   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 )Nrc   F©r*   ra   r+   rd   r…   r(   z*expected-closing-tag-but-got-right-bracketr)   z expected-closing-tag-but-got-eofrW   ú</z!expected-closing-tag-but-got-charr+   r6   T)r   rA   r   r   r   r‰   r   r,   rB   r   r   rH   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ƒ   rk   rl   ra   r9   T)r   rA   r
   ÚbeforeAttributeNameStater   rj   r   r,   rB   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ƒ   r4   rW   rP   r)   T)
r   rA   ÚtemporaryBufferÚrcdataEndTagOpenStater   r,   rB   r   rH   rx   r€   r&   r&   r'   rw   È  ó   
ýz%HTMLTokenizer.rcdataLessThanSignStatec                 C   óZ   | j  ¡ }|tv r|  j|7  _| j| _dS | j td ddœ¡ | j  	|¡ | j
| _dS ©NrW   rŒ   r)   T)r   rA   r   r‘   ÚrcdataEndTagNameStater   r,   rB   r   rH   rx   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 ©Nra   rc   Fr‹   rƒ   r…   rW   rŒ   r)   T)r   Úlowerr‘   r   rA   r
   r   r�   r   rŽ   rj   r   r   r,   rB   rH   rx   ©r"   Zappropriater+   r&   r&   r'   r–   Þ  óB   
þîþóþùüÿz#HTMLTokenizer.rcdataEndTagNameStatec                 C   r�   r�   )
r   rA   r‘   ÚrawtextEndTagOpenStater   r,   rB   r   rH   r|   r€   r&   r&   r'   r{   ú  r“   z&HTMLTokenizer.rawtextLessThanSignStatec                 C   r”   r•   )r   rA   r   r‘   ÚrawtextEndTagNameStater   r,   rB   r   rH   r|   r€   r&   r&   r'   r�     r—   z$HTMLTokenizer.rawtextEndTagOpenStatec                 C   r˜   r™   )r   rš   r‘   r   rA   r
   r   r�   r   rŽ   rj   r   r   r,   rB   rH   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ƒ   r4   r‚   rW   z<!r)   rP   T)r   rA   r‘   ÚscriptDataEndTagOpenStater   r,   rB   r   ÚscriptDataEscapeStartStaterH   r   r€   r&   r&   r'   r~   ,  s   
ùýz)HTMLTokenizer.scriptDataLessThanSignStatec                 C   r”   r•   )r   rA   r   r‘   ÚscriptDataEndTagNameStater   r,   rB   r   rH   r   r€   r&   r&   r'   rŸ   :  r—   z'HTMLTokenizer.scriptDataEndTagOpenStatec                 C   r˜   r™   )r   rš   r‘   r   rA   r
   r   r�   r   rŽ   rj   r   r   r,   rB   rH   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ú-rW   r)   T)	r   rA   r,   rB   r   ÚscriptDataEscapeStartDashStater   rH   r   r€   r&   r&   r'   r    a  ó   
þz(HTMLTokenizer.scriptDataEscapeStartStatec                 C   r¢   r£   )	r   rA   r,   rB   r   ÚscriptDataEscapedDashDashStater   rH   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¤   rW   r)   rP   rk   r(   rl   r9   )rP   r¤   rk   T)r   rA   r,   rB   r   ÚscriptDataEscapedDashStater   Ú"scriptDataEscapedLessThanSignStater   r   rp   rq   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¤   rW   r)   rP   rk   r(   rl   r9   T)r   rA   r,   rB   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¤   rW   r)   rP   r…   rk   r(   rl   r9   T)r   rA   r,   rB   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   rA   r‘   Ú scriptDataEscapedEndTagOpenStater   r   r,   rB   r   Ú scriptDataDoubleEscapeStartStaterH   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   rA   r   r‘   Ú scriptDataEscapedEndTagNameStater   r,   rB   r   rH   rª   r€   r&   r&   r'   r«   Â  r“   z.HTMLTokenizer.scriptDataEscapedEndTagOpenStatec                 C   r˜   r™   )r   rš   r‘   r   rA   r
   r   r�   r   rŽ   rj   r   r   r,   rB   rH   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…   rW   r)   ÚscriptT)r   rA   r
   rE   r,   rB   r   r‘   rš   ÚscriptDataDoubleEscapedStater   rª   r   rH   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¤   rW   r)   rP   rk   r(   rl   r9   úeof-in-script-in-scriptT)
r   rA   r,   rB   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   rA   r,   rB   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¤   rW   r)   rP   r…   rk   r(   rl   r9   r´   T)r   rA   r,   rB   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ƒ   rW   r)   r4   T)
r   rA   r,   rB   r   r‘   ÚscriptDataDoubleEscapeEndStater   rH   r±   r€   r&   r&   r'   r¶   >  s   
þz6HTMLTokenizer.scriptDataDoubleEscapedLessThanSignStatec                 C   r®   r¯   )r   rA   r
   rE   r,   rB   r   r‘   rš   rª   r   r±   r   rH   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+   r4   r…   rƒ   )ú'ú"rU   rP   r(   ú#invalid-character-in-attribute-namer)   rk   rl   r9   z#expected-attribute-name-but-got-eof)r   rA   r
   rp   r   r   rB   ÚattributeNameStater   rj   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 )NTFrU   r+   rR   r   r…   rƒ   rk   r(   rl   r)   r9   ©r¹   rº   rP   r»   zeof-in-attribute-namezduplicate-attribute)r   rA   ÚbeforeAttributeValueStater   r   r   rp   r
   ÚafterAttributeNameStaterŽ   r,   rB   r   r   r   re   r   rj   )r"   r+   ZleavingThisStateZ	emitTokenra   Ú_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 )NTrU   r…   r+   r4   rƒ   rk   r(   rl   r)   r9   r½   z&invalid-character-after-attribute-namezexpected-end-of-tag-but-got-eof)r   rA   r
   rp   r¾   r   rj   r   r   rB   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º   rO   r¹   r…   r(   z.expected-attribute-value-but-got-right-bracketr)   rk   rl   r+   rR   r	   r9   )rU   rP   ú`z"equals-in-unquoted-attribute-valuez$expected-attribute-value-but-got-eof)r   rA   r
   rp   ÚattributeValueDoubleQuotedStater   ÚattributeValueUnQuotedStaterH   ÚattributeValueSingleQuotedStater,   rB   r   rj   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º   rO   rk   r(   rl   r)   r+   rR   r	   r9   z#eof-in-attribute-value-double-quote)rº   rO   rk   T©r   rA   ÚafterAttributeValueStater   r`   r,   rB   r   r   r   r   rp   r€   r&   r&   r'   rÂ   ï  ó.   
ó
õÿùÿþ
ÿz-HTMLTokenizer.attributeValueDoubleQuotedStatec                 C   rÅ   )Nr¹   rO   rk   r(   rl   r)   r+   rR   r	   r9   z#eof-in-attribute-value-single-quote)r¹   rO   rk   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 )NrO   r…   )rº   r¹   rU   rP   rÁ   r(   z0unexpected-character-in-unquoted-attribute-valuer)   r+   rR   r	   rk   rl   r9   z eof-in-attribute-value-no-quotes)rO   r…   rº   r¹   rU   rP   rÁ   rk   T)r   rA   r
   r�   r   r`   rj   r,   rB   r   r   r   r   rp   rE   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   rA   r
   r�   r   rj   rŽ   r   r,   rB   r   rH   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…   Trd   r(   z#unexpected-EOF-after-solidus-in-tagr)   z)unexpected-character-after-solidus-in-tag)r   rA   r   rj   r   r,   rB   r   rH   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…   rk   r9   ÚCommentr)   T)	r   rp   Úreplacer,   rB   r   rA   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 )NrR   r¤   rÉ   r4   r)   T)ÚdÚD))ÚoÚO©rL   ÚC©ÚtÚT©ÚyÚY©ÚpÚP©ÚeÚEFÚDoctype)r*   ra   ÚpublicIdÚsystemIdÚcorrectú[)rÐ   rÌ   ÚArÓ   râ   rá   r(   zexpected-dashes-or-doctype)r   rA   rB   r   r   ÚcommentStartStater   ÚdoctypeStater   ÚtreeÚopenElementsÚ	namespaceÚdefaultNamespaceÚcdataSectionStater,   rH   r.   rŠ   )r"   rK   ÚmatchedÚexpectedr&   r&   r'   r‡   c  sd   ýþýúÿþýþÿÿ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¤   rk   r(   rl   r)   r+   r9   r…   úincorrect-commentúeof-in-commentT)r   rA   ÚcommentStartDashStater   r,   rB   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¤   rk   r(   rl   r)   r+   õ   -ï¿½r…   rì   rí   T)r   rA   ÚcommentEndStater   r,   rB   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¤   rk   r(   rl   r)   r+   r9   rí   )r¤   rk   T)r   rA   ÚcommentEndDashStater   r,   rB   r   r   r   r   rp   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¤   rk   r(   rl   r)   r+   rð   zeof-in-comment-end-dashT)r   rA   rñ   r   r,   rB   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…   rk   r(   rl   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   rA   r,   rB   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--!rk   r(   rl   r)   u   --!ï¿½zeof-in-comment-end-bang-stateT)r   rA   r,   rB   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   rA   r
   ÚbeforeDoctypeNameStater   r   r,   rB   r   r   r   rH   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à   rk   rl   r9   ra   rô   T)r   rA   r
   r,   rB   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 )Nra   r…   rk   r(   rl   r)   r9   zeof-in-doctype-nameFrà   T)r   rA   r
   r   re   r   ÚafterDoctypeNameStater   r,   rB   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+   r6   )r   rA   r
   r,   rB   r   r   r   r   rH   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   rA   r
   Ú"beforeDoctypePublicIdentifierStater   r,   rB   r   rH   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º   r4   rÞ   r¹   r…   r(   úunexpected-end-of-doctyper)   Frà   rø   r  T)r   rA   r
   r   Ú(doctypePublicIdentifierDoubleQuotedStater   Ú(doctypePublicIdentifierSingleQuotedStater,   rB   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º   rk   r(   rl   r)   rÞ   r9   r…   r  Frà   rø   T©
r   rA   Ú!afterDoctypePublicIdentifierStater   r,   rB   r   r   r   r   r€   r&   r&   r'   r  Á  ó8   
îÿòÿ
	øÿ
ÿz6HTMLTokenizer.doctypePublicIdentifierDoubleQuotedStatec                 C   r  )Nr¹   rk   r(   rl   r)   rÞ   r9   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)   r4   rß   r¹   rø   Frà   T)r   rA   r
   Ú-betweenDoctypePublicAndSystemIdentifiersStater   r,   rB   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º   r4   rß   r¹   r(   rø   r)   Frà   r  T)r   rA   r
   r,   rB   r   r   r   r  r  r   r   r  r€   r&   r&   r'   r    s<   
ìï
ò
õÿ
üÿ
z;HTMLTokenizer.betweenDoctypePublicAndSystemIdentifiersStatec                 C   r	  r
  )r   rA   r
   Ú"beforeDoctypeSystemIdentifierStater   r,   rB   r   rH   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º   r4   rß   r¹   r…   r(   r  r)   Frà   rø   T)r   rA   r
   r   r  r   r  r,   rB   r   r   r   r  r€   r&   r&   r'   r  =  r  z0HTMLTokenizer.beforeDoctypeSystemIdentifierStatec                 C   r  )Nrº   rk   r(   rl   r)   rß   r9   r…   r  Frà   rø   T©
r   rA   Ú!afterDoctypeSystemIdentifierStater   r,   rB   r   r   r   r   r€   r&   r&   r'   r  Z  r  z6HTMLTokenizer.doctypeSystemIdentifierDoubleQuotedStatec                 C   r  )Nr¹   rk   r(   rl   r)   rß   r9   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   rA   r
   r,   rB   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   rA   r,   rB   r   r   r   r   rH   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…   rR   éþÿÿÿz]]r4   rk   r   r(   rl   r)   r9   rW   )rB   r   rp   rA   r   rD   ÚcountÚranger,   r   rÊ   r   r   )r"   r+   rA   Z	nullCountrÀ   r&   r&   r'   ré   «  s6   

ô


ÿÿzHTMLTokenizer.cdataSectionState)Nr   )NÚ__name__Ú
__module__Ú__qualname__Ú__doc__r!   r1   rN   r_   r`   rj   r   rn   rx   rv   r|   r   r�   ro   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é   Ú__classcell__r&   r&   r$   r'   r      s–    
HP#

6 "-3r   N) Ú
__future__r   r   r   Úpip._vendor.sixr   rF   Úcollectionsr   r   Úsysr   Ú	constantsr
   r   r   r   r   r   r   r   r   r   Ú_inputstreamr   Z_trier   rX   Údictrf   Úobjectr   r&   r&   r&   r'   Ú<module>   s"    