a
    (ñ»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rÂe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__© ú9E:\soccer\ml_env\Lib\site-packages\html5lib/_tokenizer.pyr    (   s    zHTMLTokenizer.__init__c                 c   sP   t g ƒ| _|  ¡ rL| jjr6td | jj d¡dœV  q| jr
| j ¡ V  q6q
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 rH|turH| |¡ | j ¡ }q"td |¡|ƒ}|tv rˆt| }| j	 t
d dd|idœ¡ �nd|  krœd	ks¦n |d
krÈd}| j	 t
d dd|idœ¡ nÜd|  krÞdk�s>n d|  krödk�s>n d|  k�rdk�s>n d|  k�r*dk�s>n |tg d¢ƒv �rZ| j	 t
d dd|idœ¡ zt|ƒ}W n< t�y¢   |d }td|d? B ƒtd|d@ B ƒ }Y n0 |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*   Z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þÿ r6   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Úcr4   r?   Úvr%   r%   r&   ÚconsumeNumberEntityG   sn    

þÿþ
ÿÿ
þ
þ
ý
ý
üý&
ÿz!HTMLTokenizer.consumeNumberEntityFc           	      C   sÂ  d}| j  ¡ g}|d tv sB|d tddfv sB|d urV||d krV| j  |d ¡ �n|d dk�rd}| | j  ¡ ¡ |d dv r˜d}| | j  ¡ ¡ |r¨|d tv s¸|sÔ|d tv rÔ| j  |d ¡ |  |¡}n4| j	 t
d	 d
dœ¡ | j  | ¡ ¡ dd |¡ }�nf|d tu�rDt d |¡¡�s0�qD| | j  ¡ ¡ �qz$t d |d d… ¡¡}t|ƒ}W n t�y€   d }Y n0 |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 |¡ }n.t| }| j  | ¡ ¡ |d ||d … ¡7 }n4| j	 t
d	 ddœ¡ | j  | ¡ ¡ dd |¡ }|�r”| jd d d  |7  < n*|tv �r¤d}nd}| j	 t
| |dœ¡ d S )Nú&r   ú<ú#Féÿÿÿÿ)ÚxÚXTr'   zexpected-numeric-entityr(   r3   r>   znamed-entity-without-semicolonú=zexpected-named-entityr*   r	   ÚSpaceCharactersÚ
Characters)r   r?   r
   r   rF   r@   r   r   rL   r+   r   r-   rB   ÚentitiesTrieZhas_keys_with_prefixZlongest_prefixÚlenÚKeyErrorr   r   r   )	r!   ÚallowedCharÚfromAttributeÚoutputrI   Ú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)rY   rZ   N)r]   )r!   rY   r%   r%   r&   ÚprocessEntityInAttributeß   s    z&HTMLTokenizer.processEntityInAttributec                 C   sÔ   | j }|d tv r¼|d  t¡|d< |d td krp|d }t|ƒ}t|ƒt|ƒkrh| |ddd… ¡ ||d< |d td kr¼|d rž| 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*   NrP   ÚEndTagr'   zattributes-in-end-tagr(   ÚselfClosingzself-closing-flag-on-end-tag)r   r   Ú	translater   r   ÚattributeMaprW   Úupdater+   r@   r   r   )r!   ÚtokenÚrawr*   r%   r%   r&   ÚemitCurrentTokenä   s(    ÿÿzHTMLTokenizer.emitCurrentTokenc                 C   sÈ   | j  ¡ }|dkr| j| _n¨|dkr.| j| _n–|dkrd| j td ddœ¡ | j td ddœ¡ n`|tu rpdS |t	v rž| j td	 || j  
t	d
¡ dœ¡ n&| j  
d¡}| j td || dœ¡ d
S )NrM   rN   ú r'   úinvalid-codepointr(   rU   FrT   T©rM   rN   ri   )r   r?   ÚentityDataStater   ÚtagOpenStater+   r@   r   r   r
   Ú
charsUntil©r!   r*   Úcharsr%   r%   r&   r      s.    


ÿÿ
ÿ
ÿzHTMLTokenizer.dataStatec                 C   s   |   ¡  | j| _dS ©NT)r]   r   r   r/   r%   r%   r&   rl     s    zHTMLTokenizer.entityDataStatec                 C   sÈ   | j  ¡ }|dkr| j| _n¨|dkr.| j| _n–|tkr:dS |dkrp| j td ddœ¡ | j td d	dœ¡ nT|t	v rž| j td
 || j  
t	d¡ dœ¡ n&| j  
d¡}| j td || dœ¡ dS )NrM   rN   Fri   r'   rj   r(   rU   r7   rT   Trk   )r   r?   ÚcharacterReferenceInRcdatar   ÚrcdataLessThanSignStater   r+   r@   r   r
   rn   ro   r%   r%   r&   ÚrcdataState"  s.    


ÿÿ
ÿ
ÿzHTMLTokenizer.rcdataStatec                 C   s   |   ¡  | j| _dS rq   )r]   rt   r   r/   r%   r%   r&   rr   ?  s    z(HTMLTokenizer.characterReferenceInRcdatac                 C   sˆ   | j  ¡ }|dkr| j| _nh|dkrR| j td ddœ¡ | j td ddœ¡ n2|tkr^dS | j  d	¡}| j td || dœ¡ d
S ©NrN   ri   r'   rj   r(   rU   r7   F)rN   ri   T)	r   r?   ÚrawtextLessThanSignStater   r+   r@   r   r   rn   ro   r%   r%   r&   ÚrawtextStateD  s"    

ÿÿ
ÿzHTMLTokenizer.rawtextStatec                 C   sˆ   | j  ¡ }|dkr| j| _nh|dkrR| j td ddœ¡ | j td ddœ¡ n2|tkr^dS | j  d	¡}| j td || dœ¡ d
S ru   )	r   r?   ÚscriptDataLessThanSignStater   r+   r@   r   r   rn   ro   r%   r%   r&   ÚscriptDataStateV  s"    

ÿÿ
ÿzHTMLTokenizer.scriptDataStatec                 C   sr   | j  ¡ }|tkrdS |dkrL| j td ddœ¡ | j td ddœ¡ n"| j td || j  d¡ dœ¡ dS )	NFri   r'   rj   r(   rU   r7   T)r   r?   r   r+   r@   r   rn   ©r!   r*   r%   r%   r&   ÚplaintextStateh  s    
ÿÿ
ÿzHTMLTokenizer.plaintextStatec                 C   s  | j  ¡ }|dkr| j| _nì|dkr.| j| _nÚ|tv rVtd |g dddœ| _| j| _n²|dkr”| j	 
td dd	œ¡ | j	 
td
 dd	œ¡ | j| _nt|dkrÈ| j	 
td dd	œ¡ | j  |¡ | j| _n@| j	 
td dd	œ¡ | j	 
td
 dd	œ¡ | j  |¡ | j| _dS )Nú!ú/r`   F)r)   r_   r*   rb   ZselfClosingAcknowledgedú>r'   z'expected-tag-name-but-got-right-bracketr(   rU   z<>ú?z'expected-tag-name-but-got-question-markzexpected-tag-namerN   T)r   r?   ÚmarkupDeclarationOpenStater   ÚcloseTagOpenStater   r   r   ÚtagNameStater+   r@   r   rF   ÚbogusCommentStaterz   r%   r%   r&   rm   w  s>    


ý
ÿ
ÿ
ÿzHTMLTokenizer.tagOpenStatec                 C   sÊ   | j  ¡ }|tv r0td |g ddœ| _| j| _n–|dkrX| j td ddœ¡ | j	| _nn|t
u r–| j td ddœ¡ | j td	 d
dœ¡ | j	| _n0| j td dd|idœ¡ | j  |¡ | j| _dS )Nra   F©r)   r_   r*   rb   r~   r'   z*expected-closing-tag-but-got-right-bracketr(   z expected-closing-tag-but-got-eofrU   ú</z!expected-closing-tag-but-got-charr*   r5   T)r   r?   r   r   r   r‚   r   r+   r@   r   r   rF   rƒ   rz   r%   r%   r&   r�   š  s0    
ÿ
ÿ
ÿ
þzHTMLTokenizer.closeTagOpenStatec                 C   s°   | j  ¡ }|tv r| j| _n�|dkr.|  ¡  n~|tu rV| j t	d ddœ¡ | j
| _nV|dkrh| j| _nD|dkrš| j t	d ddœ¡ | jd  d	7  < n| jd  |7  < d
S )Nr~   r'   zeof-in-tag-namer(   r}   ri   rj   r_   r7   T)r   r?   r
   ÚbeforeAttributeNameStater   rh   r   r+   r@   r   r   ÚselfClosingStartTagStater   rz   r%   r%   r&   r‚   ²  s&    


ÿ

ÿzHTMLTokenizer.tagNameStatec                 C   sP   | j  ¡ }|dkr"d| _| j| _n*| j td ddœ¡ | j  |¡ | j	| _dS ©Nr}   r3   rU   rN   r(   T)
r   r?   ÚtemporaryBufferÚrcdataEndTagOpenStater   r+   r@   r   rF   rt   rz   r%   r%   r&   rs   È  s    

z%HTMLTokenizer.rcdataLessThanSignStatec                 C   sX   | j  ¡ }|tv r*|  j|7  _| j| _n*| j td ddœ¡ | j  	|¡ | j
| _dS ©NrU   r…   r(   T)r   r?   r   r‰   ÚrcdataEndTagNameStater   r+   r@   r   rF   rt   rz   r%   r%   r&   rŠ   Ó  s    

z#HTMLTokenizer.rcdataEndTagOpenStatec                 C   s   | j o| j d  ¡ | j ¡ k}| j ¡ }|tv rT|rTtd | jg ddœ| _ | j| _n¨|dkr€|r€td | jg ddœ| _ | j	| _n||dkr´|r´td | jg ddœ| _ |  
¡  | j| _nH|tv rÌ|  j|7  _n0| j td d| j d	œ¡ | j |¡ | j| _d
S ©Nr_   ra   Fr„   r}   r~   rU   r…   r(   T)r   Úlowerr‰   r   r?   r
   r   r†   r   r‡   rh   r   r   r+   r@   rF   rt   ©r!   Zappropriater*   r%   r%   r&   rŒ   Þ  s:    
þ
þ
þ
ÿz#HTMLTokenizer.rcdataEndTagNameStatec                 C   sP   | j  ¡ }|dkr"d| _| j| _n*| j td ddœ¡ | j  |¡ | j	| _dS rˆ   )
r   r?   r‰   ÚrawtextEndTagOpenStater   r+   r@   r   rF   rw   rz   r%   r%   r&   rv   ú  s    

z&HTMLTokenizer.rawtextLessThanSignStatec                 C   sX   | j  ¡ }|tv r*|  j|7  _| j| _n*| j td ddœ¡ | j  	|¡ | j
| _dS r‹   )r   r?   r   r‰   ÚrawtextEndTagNameStater   r+   r@   r   rF   rw   rz   r%   r%   r&   r�     s    

z$HTMLTokenizer.rawtextEndTagOpenStatec                 C   s   | j o| j d  ¡ | j ¡ k}| j ¡ }|tv rT|rTtd | jg ddœ| _ | j| _n¨|dkr€|r€td | jg ddœ| _ | j	| _n||dkr´|r´td | jg ddœ| _ |  
¡  | j| _nH|tv rÌ|  j|7  _n0| j td d| j d	œ¡ | j |¡ | j| _d
S r�   )r   rŽ   r‰   r   r?   r
   r   r†   r   r‡   rh   r   r   r+   r@   rF   rw   r�   r%   r%   r&   r‘     s:    
þ
þ
þ
ÿz$HTMLTokenizer.rawtextEndTagNameStatec                 C   sx   | j  ¡ }|dkr"d| _| j| _nR|dkrJ| j td ddœ¡ | j| _n*| j td ddœ¡ | j  	|¡ | j
| _dS )	Nr}   r3   r|   rU   z<!r(   rN   T)r   r?   r‰   ÚscriptDataEndTagOpenStater   r+   r@   r   ÚscriptDataEscapeStartStaterF   ry   rz   r%   r%   r&   rx   ,  s    


z)HTMLTokenizer.scriptDataLessThanSignStatec                 C   sX   | j  ¡ }|tv r*|  j|7  _| j| _n*| j td ddœ¡ | j  	|¡ | j
| _dS r‹   )r   r?   r   r‰   ÚscriptDataEndTagNameStater   r+   r@   r   rF   ry   rz   r%   r%   r&   r’   :  s    

z'HTMLTokenizer.scriptDataEndTagOpenStatec                 C   s   | j o| j d  ¡ | j ¡ k}| j ¡ }|tv rT|rTtd | jg ddœ| _ | j| _n¨|dkr€|r€td | jg ddœ| _ | j	| _n||dkr´|r´td | jg ddœ| _ |  
¡  | j| _nH|tv rÌ|  j|7  _n0| j td d| j d	œ¡ | j |¡ | j| _d
S r�   )r   rŽ   r‰   r   r?   r
   r   r†   r   r‡   rh   r   r   r+   r@   rF   ry   r�   r%   r%   r&   r”   E  s:    
þ
þ
þ
ÿz'HTMLTokenizer.scriptDataEndTagNameStatec                 C   sJ   | j  ¡ }|dkr2| j td ddœ¡ | j| _n| j  |¡ | j| _dS ©Nú-rU   r(   T)	r   r?   r+   r@   r   ÚscriptDataEscapeStartDashStater   rF   ry   rz   r%   r%   r&   r“   a  s    

z(HTMLTokenizer.scriptDataEscapeStartStatec                 C   sJ   | j  ¡ }|dkr2| j td ddœ¡ | j| _n| j  |¡ | j| _dS r•   )	r   r?   r+   r@   r   ÚscriptDataEscapedDashDashStater   rF   ry   rz   r%   r%   r&   r—   k  s    

z,HTMLTokenizer.scriptDataEscapeStartDashStatec                 C   s¶   | j  ¡ }|dkr2| j td ddœ¡ | j| _n€|dkrD| j| _nn|dkrz| j td ddœ¡ | j td ddœ¡ n8|tkrŒ| j	| _n&| j  
d	¡}| j td || dœ¡ d
S )Nr–   rU   r(   rN   ri   r'   rj   r7   )rN   r–   ri   T)r   r?   r+   r@   r   ÚscriptDataEscapedDashStater   Ú"scriptDataEscapedLessThanSignStater   r   rn   ro   r%   r%   r&   ÚscriptDataEscapedStateu  s(    


ÿÿ

ÿz$HTMLTokenizer.scriptDataEscapedStatec                 C   s¶   | j  ¡ }|dkr2| j td ddœ¡ | j| _n€|dkrD| j| _nn|dkr‚| j td ddœ¡ | j td ddœ¡ | j| _n0|t	kr”| j
| _n| j td |dœ¡ | j| _d	S )
Nr–   rU   r(   rN   ri   r'   rj   r7   T)r   r?   r+   r@   r   r˜   r   rš   r›   r   r   rz   r%   r%   r&   r™   ‰  s&    


ÿÿ

z(HTMLTokenizer.scriptDataEscapedDashStatec                 C   sÖ   | j  ¡ }|dkr*| j td ddœ¡ n¨|dkr<| j| _n–|dkrd| j td ddœ¡ | j| _nn|dkr¢| j td ddœ¡ | j td d	dœ¡ | j| _n0|t	kr´| j
| _n| j td |dœ¡ | j| _d
S )Nr–   rU   r(   rN   r~   ri   r'   rj   r7   T)r   r?   r+   r@   r   rš   r   ry   r›   r   r   rz   r%   r%   r&   r˜   �  s*    


ÿÿ

z,HTMLTokenizer.scriptDataEscapedDashDashStatec                 C   s‚   | j  ¡ }|dkr"d| _| j| _n\|tv rT| j td d| dœ¡ || _| j	| _n*| j td ddœ¡ | j  
|¡ | j| _dS rˆ   )r   r?   r‰   Ú scriptDataEscapedEndTagOpenStater   r   r+   r@   r   Ú scriptDataDoubleEscapeStartStaterF   r›   rz   r%   r%   r&   rš   ³  s    


z0HTMLTokenizer.scriptDataEscapedLessThanSignStatec                 C   sP   | j  ¡ }|tv r"|| _| j| _n*| j td ddœ¡ | j  	|¡ | j
| _dS r‹   )r   r?   r   r‰   Ú scriptDataEscapedEndTagNameStater   r+   r@   r   rF   r›   rz   r%   r%   r&   rœ   Â  s    

z.HTMLTokenizer.scriptDataEscapedEndTagOpenStatec                 C   s   | j o| j d  ¡ | j ¡ k}| j ¡ }|tv rT|rTtd | jg ddœ| _ | j| _n¨|dkr€|r€td | jg ddœ| _ | j	| _n||dkr´|r´td | jg ddœ| _ |  
¡  | j| _nH|tv rÌ|  j|7  _n0| j td d| j d	œ¡ | j |¡ | j| _d
S r�   )r   rŽ   r‰   r   r?   r
   r   r†   r   r‡   rh   r   r   r+   r@   rF   r›   r�   r%   r%   r&   rž   Í  s:    
þ
þ
þ
ÿz.HTMLTokenizer.scriptDataEscapedEndTagNameStatec                 C   s˜   | j  ¡ }|ttdƒB v rR| j td |dœ¡ | j ¡ dkrH| j	| _
q”| j| _
nB|tv r€| j td |dœ¡ |  j|7  _n| j  |¡ | j| _
dS ©N)r}   r~   rU   r(   ÚscriptT)r   r?   r
   rC   r+   r@   r   r‰   rŽ   ÚscriptDataDoubleEscapedStater   r›   r   rF   rz   r%   r%   r&   r�   é  s    


z.HTMLTokenizer.scriptDataDoubleEscapeStartStatec                 C   sÒ   | j  ¡ }|dkr2| j td ddœ¡ | j| _nœ|dkrZ| j td ddœ¡ | j| _nt|dkr�| j td ddœ¡ | j td ddœ¡ n>|tkr¸| j td d	dœ¡ | j	| _n| j td |dœ¡ d
S ©Nr–   rU   r(   rN   ri   r'   rj   r7   úeof-in-script-in-scriptT)
r   r?   r+   r@   r   Ú scriptDataDoubleEscapedDashStater   Ú(scriptDataDoubleEscapedLessThanSignStater   r   rz   r%   r%   r&   r¡   ù  s*    


ÿÿ
ÿ
z*HTMLTokenizer.scriptDataDoubleEscapedStatec                 C   sâ   | j  ¡ }|dkr2| j td ddœ¡ | j| _n¬|dkrZ| j td ddœ¡ | j| _n„|dkr˜| j td ddœ¡ | j td ddœ¡ | j| _nF|t	krÀ| j td d	dœ¡ | j
| _n| j td |dœ¡ | j| _d
S r¢   )r   r?   r+   r@   r   Ú$scriptDataDoubleEscapedDashDashStater   r¥   r¡   r   r   rz   r%   r%   r&   r¤     s.    


ÿÿ
ÿ
z.HTMLTokenizer.scriptDataDoubleEscapedDashStatec                 C   s  | j  ¡ }|dkr*| j td ddœ¡ nÔ|dkrR| j td ddœ¡ | j| _n¬|dkrz| j td ddœ¡ | j| _n„|dkr¸| j td ddœ¡ | j td d	dœ¡ | j| _nF|t	krà| j td d
dœ¡ | j
| _n| j td |dœ¡ | j| _dS )Nr–   rU   r(   rN   r~   ri   r'   rj   r7   r£   T)r   r?   r+   r@   r   r¥   r   ry   r¡   r   r   rz   r%   r%   r&   r¦   %  s2    


ÿÿ
ÿ
z2HTMLTokenizer.scriptDataDoubleEscapedDashDashStatec                 C   sP   | j  ¡ }|dkr8| j td ddœ¡ d| _| j| _n| j  |¡ | j	| _dS )Nr}   rU   r(   r3   T)
r   r?   r+   r@   r   r‰   ÚscriptDataDoubleEscapeEndStater   rF   r¡   rz   r%   r%   r&   r¥   >  s    

z6HTMLTokenizer.scriptDataDoubleEscapedLessThanSignStatec                 C   s˜   | j  ¡ }|ttdƒB v rR| j td |dœ¡ | j ¡ dkrH| j	| _
q”| j| _
nB|tv r€| j td |dœ¡ |  j|7  _n| j  |¡ | j| _
dS rŸ   )r   r?   r
   rC   r+   r@   r   r‰   rŽ   r›   r   r¡   r   rF   rz   r%   r%   r&   r§   I  s    


z,HTMLTokenizer.scriptDataDoubleEscapeEndStatec                 C   s0  | j  ¡ }|tv r$| j  td¡ �n|tv rJ| jd  |dg¡ | j| _nâ|dkr\|  	¡  nÐ|dkrn| j
| _n¾|dv rª| j td dd	œ¡ | jd  |dg¡ | j| _n‚|d
kræ| j td dd	œ¡ | jd  ddg¡ | j| _nF|tu �r| j td dd	œ¡ | j| _n| jd  |dg¡ | j| _dS )NTr*   r3   r~   r}   )ú'ú"rS   rN   r'   ú#invalid-character-in-attribute-namer(   ri   rj   r7   z#expected-attribute-name-but-got-eof)r   r?   r
   rn   r   r   r@   ÚattributeNameStater   rh   r‡   r+   r   r   r   rz   r%   r%   r&   r†   Y  s<    



ÿ
ÿ

ÿ
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}nø|dkrjd}nê|tv r|| j| _nØ|dkrŽ| j	| _nÆ|d	krÌ| j
 td
 ddœ¡ | jd d d  d7  < d}nˆ|dv �r| j
 td
 ddœ¡ | jd d d  |7  < d}nH|tu �r6| 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œ¡  �qÒ�q’|�rà|  ¡  dS )NTFrS   r*   rP   r   r~   r}   ri   r'   rj   r(   r7   ©r¨   r©   rN   rª   zeof-in-attribute-namezduplicate-attribute)r   r?   ÚbeforeAttributeValueStater   r   r   rn   r
   ÚafterAttributeNameStater‡   r+   r@   r   r   r   rc   r   rh   )r!   r*   ZleavingThisStateZ	emitTokenr_   Ú_r%   r%   r&   r«   w  s^    
ÿ

ÿ
þ
ÿ
ÿÿ
z HTMLTokenizer.attributeNameStatec                 C   sD  | j  ¡ }|tv r$| j  td¡ �n|dkr8| j| _�n|dkrJ|  ¡  nö|tv rp| jd  	|dg¡ | j
| _nÐ|dkr‚| j| _n¾|dkr¾| j 	td d	d
œ¡ | jd  	ddg¡ | j
| _n‚|dv rú| j 	td dd
œ¡ | jd  	|dg¡ | j
| _nF|tu �r$| j 	td dd
œ¡ | j| _n| jd  	|dg¡ | j
| _dS )NTrS   r~   r*   r3   r}   ri   r'   rj   r(   r7   r¬   z&invalid-character-after-attribute-namezexpected-end-of-tag-but-got-eof)r   r?   r
   rn   r­   r   rh   r   r   r@   r«   r‡   r+   r   r   r   rz   r%   r%   r&   r®   ­  s@    



ÿ
ÿ

ÿ
z%HTMLTokenizer.afterAttributeNameStatec                 C   sh  | j  ¡ }|tv r$| j  td¡ �n@|dkr8| j| _�n,|dkrX| j| _| j  |¡ �n|dkrj| j| _nú|dkr’| j	 
td ddœ¡ |  ¡  nÒ|d	krÔ| j	 
td d
dœ¡ | jd d d  d7  < | j| _n�|dv �r| j	 
td ddœ¡ | jd d d  |7  < | j| _nL|tu �rB| j	 
td ddœ¡ | j| _n"| jd d d  |7  < | j| _dS )NTr©   rM   r¨   r~   r'   z.expected-attribute-value-but-got-right-bracketr(   ri   rj   r*   rP   r	   r7   )rS   rN   ú`z"equals-in-unquoted-attribute-valuez$expected-attribute-value-but-got-eof)r   r?   r
   rn   ÚattributeValueDoubleQuotedStater   ÚattributeValueUnQuotedStaterF   ÚattributeValueSingleQuotedStater+   r@   r   rh   r   r   r   rz   r%   r%   r&   r­   Í  sF    

ÿ
ÿ

ÿ

ÿ
z'HTMLTokenizer.beforeAttributeValueStatec                 C   s¼   | j  ¡ }|dkr| j| _nœ|dkr0|  d¡ nˆ|dkrj| j td ddœ¡ | jd d d	  d
7  < nN|t	u r’| j td ddœ¡ | j
| _n&| jd d d	  || j  d¡ 7  < dS )Nr©   rM   ri   r'   rj   r(   r*   rP   r	   r7   z#eof-in-attribute-value-double-quote)r©   rM   ri   T©r   r?   ÚafterAttributeValueStater   r^   r+   r@   r   r   r   r   rn   rz   r%   r%   r&   r±   ï  s&    

ÿÿ

ÿz-HTMLTokenizer.attributeValueDoubleQuotedStatec                 C   s¼   | j  ¡ }|dkr| j| _nœ|dkr0|  d¡ nˆ|dkrj| j td ddœ¡ | jd d d	  d
7  < nN|t	u r’| j td ddœ¡ | j
| _n&| jd d d	  || j  d¡ 7  < dS )Nr¨   rM   ri   r'   rj   r(   r*   rP   r	   r7   z#eof-in-attribute-value-single-quote)r¨   rM   ri   Tr´   rz   r%   r%   r&   r³     s&    

ÿÿ

ÿz-HTMLTokenizer.attributeValueSingleQuotedStatec                 C   s  | j  ¡ }|tv r| j| _nð|dkr0|  d¡ nÜ|dkrB|  ¡  nÊ|dv r|| j t	d ddœ¡ | j
d d d	  |7  < n�|d
kr¶| j t	d ddœ¡ | j
d d d	  d7  < nV|tu rÞ| j t	d ddœ¡ | j| _n.| j
d d d	  || j  tdƒtB ¡ 7  < dS )NrM   r~   )r©   r¨   rS   rN   r°   r'   z0unexpected-character-in-unquoted-attribute-valuer(   r*   rP   r	   ri   rj   r7   z eof-in-attribute-value-no-quotes)rM   r~   r©   r¨   rS   rN   r°   ri   T)r   r?   r
   r†   r   r^   rh   r+   r@   r   r   r   r   rn   rC   rz   r%   r%   r&   r²     s4    


ÿÿÿ

ÿ
z)HTMLTokenizer.attributeValueUnQuotedStatec                 C   s¢   | j  ¡ }|tv r| j| _n‚|dkr.|  ¡  np|dkr@| j| _n^|tu rt| j 	t
d ddœ¡ | j  |¡ | j| _n*| 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   r?   r
   r†   r   rh   r‡   r   r+   r@   r   rF   r   rz   r%   r%   r&   rµ   .  s&    



ÿ
ÿz&HTMLTokenizer.afterAttributeValueStatec                 C   sˆ   | j  ¡ }|dkr&d| jd< |  ¡  n^|tu rZ| j td ddœ¡ | j  |¡ | j	| _
n*| j td ddœ¡ | j  |¡ | j| _
dS )Nr~   Trb   r'   z#unexpected-EOF-after-solidus-in-tagr(   z)unexpected-character-after-solidus-in-tag)r   r?   r   rh   r   r+   r@   r   rF   r   r   r†   rz   r%   r%   r&   r‡   B  s     


þ
ÿz&HTMLTokenizer.selfClosingStartTagStatec                 C   sD   | j  d¡}| dd¡}| j td |dœ¡ | j  ¡  | j| _dS )Nr~   ri   r7   ÚCommentr(   T)	r   rn   Úreplacer+   r@   r   r?   r   r   rz   r%   r%   r&   rƒ   T  s    ÿ
zHTMLTokenizer.bogusCommentStatec                 C   s€  | j  ¡ g}|d dkrR| | j  ¡ ¡ |d dkrPtd ddœ| _| j| _dS nò|d dv r¸d}dD ](}| | j  ¡ ¡ |d |vrfd	} q�qf|r¶td
 dd d ddœ| _| j| _dS nŒ|d dk�rD| jd u�rD| jj	j
�rD| jj	j
d j| jj	jk�rDd}dD ].}| | j  ¡ ¡ |d |k�rd	} �q2�q|�rD| j| _dS | j td ddœ¡ |�rt| j  | ¡ ¡ �qZ| j| _dS )NrP   r–   r¶   r3   r(   T)ÚdÚD))ÚoÚO©rJ   ÚC©ÚtÚT©ÚyÚY©ÚpÚP©ÚeÚEFZDoctype)r)   r_   ÚpublicIdÚsystemIdÚcorrectú[)r½   r¹   ÚArÀ   rÎ   rÍ   r'   zexpected-dashes-or-doctype)r   r?   r@   r   r   ÚcommentStartStater   ÚdoctypeStater   ÚtreeZopenElementsÚ	namespaceZdefaultNamespaceÚcdataSectionStater+   rF   r-   rƒ   )r!   rI   ÚmatchedÚexpectedr%   r%   r&   r€   c  sZ    ýÿþý
ÿz(HTMLTokenizer.markupDeclarationOpenStatec                 C   sØ   | j  ¡ }|dkr| j| _n¸|dkrN| j td ddœ¡ | jd  d7  < n†|dkr„| j td d	dœ¡ | j | j¡ | j| _nP|t	u rº| j td d
dœ¡ | j | j¡ | j| _n| jd  |7  < | j
| _dS )Nr–   ri   r'   rj   r(   r*   r7   r~   úincorrect-commentúeof-in-commentT)r   r?   ÚcommentStartDashStater   r+   r@   r   r   r   r   ÚcommentStaterz   r%   r%   r&   rÏ   �  s.    

ÿÿ
ÿ
zHTMLTokenizer.commentStartStatec                 C   sÜ   | j  ¡ }|dkr| j| _n¼|dkrN| j td ddœ¡ | jd  d7  < nŠ|dkr„| j td d	dœ¡ | j | j¡ | j| _nT|t	u rº| j td d
dœ¡ | j | j¡ | j| _n| jd  d| 7  < | j
| _dS )Nr–   ri   r'   rj   r(   r*   õ   -ï¿½r~   rÖ   r×   T)r   r?   ÚcommentEndStater   r+   r@   r   r   r   r   rÙ   rz   r%   r%   r&   rØ   §  s.    

ÿÿ
ÿ
z#HTMLTokenizer.commentStartDashStatec                 C   s¦   | j  ¡ }|dkr| j| _n†|dkrN| j td ddœ¡ | jd  d7  < nT|tu r„| j td ddœ¡ | j | j¡ | j	| _n| jd  || j  
d	¡ 7  < d
S )Nr–   ri   r'   rj   r(   r*   r7   r×   )r–   ri   T)r   r?   ÚcommentEndDashStater   r+   r@   r   r   r   r   rn   rz   r%   r%   r&   rÙ   ¾  s$    

ÿÿ

ÿzHTMLTokenizer.commentStatec                 C   s®   | j  ¡ }|dkr| j| _nŽ|dkrV| j td ddœ¡ | jd  d7  < | j| _nT|t	u rŒ| j td ddœ¡ | j | j¡ | j
| _n| jd  d| 7  < | j| _d	S )
Nr–   ri   r'   rj   r(   r*   rÚ   zeof-in-comment-end-dashT)r   r?   rÛ   r   r+   r@   r   r   rÙ   r   r   rz   r%   r%   r&   rÜ   Ð  s$    

ÿ
ÿ
z!HTMLTokenizer.commentEndDashStatec                 C   s,  | j  ¡ }|dkr*| j | j¡ | j| _nþ|dkrd| j td ddœ¡ | jd  d7  < | j| _nÄ|dkrŒ| j td d	dœ¡ | j	| _nœ|d
kr¾| j td ddœ¡ | jd  |7  < nj|t
u rô| j td ddœ¡ | j | j¡ | j| _n4| j td ddœ¡ | jd  d| 7  < | j| _dS )Nr~   ri   r'   rj   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   r?   r+   r@   r   r   r   r   rÙ   ÚcommentEndBangStater   rz   r%   r%   r&   rÛ   ã  s@    

ÿ
ÿ
ÿÿ
ÿzHTMLTokenizer.commentEndStatec                 C   sà   | j  ¡ }|dkr*| j | j¡ | j| _n²|dkrN| jd  d7  < | j| _nŽ|dkrˆ| j td ddœ¡ | jd  d	7  < | j	| _nT|t
u r¾| j td d
dœ¡ | j | j¡ | j| _n| jd  d| 7  < | j	| _dS )Nr~   r–   r*   z--!ri   r'   rj   r(   u   --!ï¿½zeof-in-comment-end-bang-stateT)r   r?   r+   r@   r   r   r   rÜ   r   rÙ   r   rz   r%   r%   r&   rÝ     s,    


ÿ
ÿ
z!HTMLTokenizer.commentEndBangStatec                 C   sŠ   | j  ¡ }|tv r| j| _nj|tu r\| j td ddœ¡ d| j	d< | j | j	¡ | j
| _n*| j td ddœ¡ | j  |¡ | j| _dS )Nr'   ú!expected-doctype-name-but-got-eofr(   FrÌ   zneed-space-after-doctypeT)r   r?   r
   ÚbeforeDoctypeNameStater   r   r+   r@   r   r   r   rF   rz   r%   r%   r&   rÐ     s     

ÿ

ÿzHTMLTokenizer.doctypeStatec                 C   sÜ   | j  ¡ }|tv rnÄ|dkrT| j td ddœ¡ d| jd< | j | j¡ | j| _n„|dkr†| j td ddœ¡ d	| jd
< | j	| _nR|t
u rÆ| j td ddœ¡ d| jd< | j | j¡ | j| _n|| jd
< | j	| _dS )Nr~   r'   z+expected-doctype-name-but-got-right-bracketr(   FrÌ   ri   rj   r7   r_   rÞ   T)r   r?   r
   r+   r@   r   r   r   r   ÚdoctypeNameStater   rz   r%   r%   r&   rß   *  s4    
ÿ

ÿ

ÿ


z$HTMLTokenizer.beforeDoctypeNameStatec                 C   s  | j  ¡ }|tv r2| jd  t¡| jd< | j| _nØ|dkrh| jd  t¡| jd< | j 	| j¡ | j
| _n¢|dkr¢| j 	td ddœ¡ | jd  d7  < | j| _nh|tu rø| j 	td ddœ¡ d	| jd
< | jd  t¡| jd< | j 	| j¡ | j
| _n| jd  |7  < dS )Nr_   r~   ri   r'   rj   r(   r7   zeof-in-doctype-nameFrÌ   T)r   r?   r
   r   rc   r   ÚafterDoctypeNameStater   r+   r@   r   r   rà   r   rz   r%   r%   r&   rà   D  s0    


ÿ
ÿ

zHTMLTokenizer.doctypeNameStatec                 C   sH  | j  ¡ }|tv r�n.|dkr8| j | j¡ | j| _�n|tu r„d| jd< | j  	|¡ | j t
d ddœ¡ | j | j¡ | j| _nÀ|dv rÆd}d	D ]}| j  ¡ }||vr”d} q´q”|rÄ| j| _dS nD|d
v �r
d}dD ]}| j  ¡ }||vrØd} qøqØ|�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*   r5   )r   r?   r
   r+   r@   r   r   r   r   rF   r   ÚafterDoctypePublicKeywordStateÚafterDoctypeSystemKeywordStateÚbogusDoctypeState)r!   r*   rÔ   rÕ   r%   r%   r&   rá   ]  sT    

ÿ



þ
z#HTMLTokenizer.afterDoctypeNameStatec                 C   s¨   | j  ¡ }|tv r| j| _nˆ|dv rP| j td ddœ¡ | j  |¡ | j| _nT|t	u r�| j td ddœ¡ d| j
d< | j | j
¡ | j| _n| j  |¡ | j| _dS ©	N)r¨   r©   r'   úunexpected-char-in-doctyper(   râ   FrÌ   T)r   r?   r
   Ú"beforeDoctypePublicIdentifierStater   r+   r@   r   rF   r   r   r   rz   r%   r%   r&   rð   �  s&    

ÿ
ÿ

z,HTMLTokenizer.afterDoctypePublicKeywordStatec                 C   sø   | j  ¡ }|tv rnà|dkr0d| jd< | j| _nÄ|dkrLd| jd< | j| _n¨|dkrŒ| j t	d ddœ¡ d	| jd
< | j | j¡ | j
| _nh|tu rÌ| j t	d ddœ¡ d	| jd
< | j | j¡ | j
| _n(| j t	d ddœ¡ d	| jd
< | j| _dS )Nr©   r3   rÊ   r¨   r~   r'   úunexpected-end-of-doctyper(   FrÌ   râ   rô   T)r   r?   r
   r   Ú(doctypePublicIdentifierDoubleQuotedStater   Ú(doctypePublicIdentifierSingleQuotedStater+   r@   r   r   r   rò   rz   r%   r%   r&   rõ   ¤  s:    




ÿ

ÿ

ÿ
z0HTMLTokenizer.beforeDoctypePublicIdentifierStatec                 C   sä   | j  ¡ }|dkr| j| _nÄ|dkrN| j td ddœ¡ | jd  d7  < n’|dkrŽ| j td d	dœ¡ d
| jd< | j | j¡ | j| _nR|t	u rÎ| j td ddœ¡ d
| jd< | j | j¡ | j| _n| jd  |7  < dS )Nr©   ri   r'   rj   r(   rÊ   r7   r~   rö   FrÌ   râ   T©
r   r?   Ú!afterDoctypePublicIdentifierStater   r+   r@   r   r   r   r   rz   r%   r%   r&   r÷   Á  s0    

ÿÿ

ÿ

z6HTMLTokenizer.doctypePublicIdentifierDoubleQuotedStatec                 C   sä   | j  ¡ }|dkr| j| _nÄ|dkrN| j td ddœ¡ | jd  d7  < n’|dkrŽ| j td d	dœ¡ d
| jd< | j | j¡ | j| _nR|t	u rÎ| j td ddœ¡ d
| jd< | j | j¡ | j| _n| jd  |7  < dS )Nr¨   ri   r'   rj   r(   rÊ   r7   r~   rö   FrÌ   râ   Trù   rz   r%   r%   r&   rø   Ù  s0    

ÿÿ

ÿ

z6HTMLTokenizer.doctypePublicIdentifierSingleQuotedStatec                 C   s  | j  ¡ }|tv r| j| _nì|dkr<| j | j¡ | j| _nÌ|dkrn| j t	d ddœ¡ d| jd< | j
| _nš|dkr | j t	d ddœ¡ d| jd< | j| _nh|tu rà| j t	d d	dœ¡ d
| jd< | j | j¡ | j| _n(| j t	d ddœ¡ d
| jd< | j| _dS )Nr~   r©   r'   rô   r(   r3   rË   r¨   râ   FrÌ   T)r   r?   r
   Ú-betweenDoctypePublicAndSystemIdentifiersStater   r+   r@   r   r   r   Ú(doctypeSystemIdentifierDoubleQuotedStateÚ(doctypeSystemIdentifierSingleQuotedStater   rò   rz   r%   r%   r&   rú   ñ  s>    


ÿ

ÿ

ÿ

ÿ
z/HTMLTokenizer.afterDoctypePublicIdentifierStatec                 C   sØ   | j  ¡ }|tv rnÀ|dkr4| j | j¡ | j| _n |dkrPd| jd< | j| _n„|dkrld| jd< | j	| _nh|t
kr¬| j td ddœ¡ d	| jd
< | j | j¡ | j| _n(| j td ddœ¡ d	| jd
< | j| _dS )Nr~   r©   r3   rË   r¨   r'   râ   r(   FrÌ   rô   T)r   r?   r
   r+   r@   r   r   r   rü   rý   r   r   rò   rz   r%   r%   r&   rû     s2    





ÿ

ÿ
z;HTMLTokenizer.betweenDoctypePublicAndSystemIdentifiersStatec                 C   s¨   | j  ¡ }|tv r| j| _nˆ|dv rP| j td ddœ¡ | j  |¡ | j| _nT|t	u r�| j td ddœ¡ d| j
d< | j | j
¡ | j| _n| j  |¡ | j| _dS ró   )r   r?   r
   Ú"beforeDoctypeSystemIdentifierStater   r+   r@   r   rF   r   r   r   rz   r%   r%   r&   rñ   )  s&    

ÿ
ÿ

z,HTMLTokenizer.afterDoctypeSystemKeywordStatec                 C   sø   | j  ¡ }|tv rnà|dkr0d| jd< | j| _nÄ|dkrLd| jd< | j| _n¨|dkrŒ| j t	d ddœ¡ d	| jd
< | j | j¡ | j
| _nh|tu rÌ| j t	d ddœ¡ d	| jd
< | j | j¡ | j
| _n(| j t	d ddœ¡ d	| jd
< | j| _dS )Nr©   r3   rË   r¨   r~   r'   rô   r(   FrÌ   râ   T)r   r?   r
   r   rü   r   rý   r+   r@   r   r   r   rò   rz   r%   r%   r&   rþ   =  s:    




ÿ

ÿ

ÿ
z0HTMLTokenizer.beforeDoctypeSystemIdentifierStatec                 C   sä   | j  ¡ }|dkr| j| _nÄ|dkrN| j td ddœ¡ | jd  d7  < n’|dkrŽ| j td d	dœ¡ d
| jd< | j | j¡ | j| _nR|t	u rÎ| j td ddœ¡ d
| jd< | j | j¡ | j| _n| jd  |7  < dS )Nr©   ri   r'   rj   r(   rË   r7   r~   rö   FrÌ   râ   T©
r   r?   Ú!afterDoctypeSystemIdentifierStater   r+   r@   r   r   r   r   rz   r%   r%   r&   rü   Z  s0    

ÿÿ

ÿ

z6HTMLTokenizer.doctypeSystemIdentifierDoubleQuotedStatec                 C   sä   | j  ¡ }|dkr| j| _nÄ|dkrN| j td ddœ¡ | jd  d7  < n’|dkrŽ| j td d	dœ¡ d
| jd< | j | j¡ | j| _nR|t	u rÎ| j td ddœ¡ d
| jd< | j | j¡ | j| _n| jd  |7  < dS )Nr¨   ri   r'   rj   r(   rË   r7   r~   rö   FrÌ   râ   Trÿ   rz   r%   r%   r&   rý   r  s0    

ÿÿ

ÿ

z6HTMLTokenizer.doctypeSystemIdentifierSingleQuotedStatec                 C   s–   | j  ¡ }|tv rn~|dkr4| j | j¡ | j| _n^|tu rt| j t	d ddœ¡ d| jd< | j | j¡ | j| _n| j t	d ddœ¡ | j
| _dS )	Nr~   r'   râ   r(   FrÌ   rô   T)r   r?   r
   r+   r@   r   r   r   r   r   rò   rz   r%   r%   r&   r   Š  s$    

ÿ

ÿz/HTMLTokenizer.afterDoctypeSystemIdentifierStatec                 C   sZ   | j  ¡ }|dkr*| j | j¡ | j| _n,|tu rV| j  |¡ | j | j¡ | j| _n dS )Nr~   T)	r   r?   r+   r@   r   r   r   r   rF   rz   r%   r%   r&   rò   �  s    


zHTMLTokenizer.bogusDoctypeStatec                 C   sô   g }|  | j d¡¡ |  | j d¡¡ | j ¡ }|tkr>q‚q|dksJJ ‚|d dd … dkrv|d d d… |d< q‚q|  |¡ qd |¡}| d¡}|dkrÎt|ƒD ]}| j  t	d	 d
dœ¡ q¦| 
dd¡}|rè| j  t	d |dœ¡ | j| _dS )Nú]r~   rP   éþÿÿÿz]]r3   ri   r   r'   rj   r(   r7   rU   T)r@   r   rn   r?   r   rB   ÚcountÚranger+   r   r·   r   r   )r!   r*   r?   Z	nullCountr¯   r%   r%   r&   rÓ   «  s2    


ÿ
ÿzHTMLTokenizer.cdataSectionState)N)NF)NÚ__name__Ú
__module__Ú__qualname__Ú__doc__r    r0   rL   r]   r^   rh   r   rl   rt   rr   rw   ry   r{   rm   r�   r‚   rs   rŠ   rŒ   rv   r�   r‘   rx   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   Úsixr   rD   Úcollectionsr   r   Úsysr   Ú	constantsr
   r   r   r   r   r   r   r   r   r   Z_inputstreamr   Z_trier   rV   Údictrd   Úobjectr   r%   r%   r%   r&   Ú<module>   s    