a
    hbòfð, ã                   @   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ÚparserÚ
escapeFlagÚlastFourCharsÚ	dataStateÚstateÚescapeÚcurrentTokenÚsuperr   Ú__init__)Úselfr   r   Úkwargs©Ú	__class__© ú\/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pip/_vendor/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,   Ú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þÿ r9   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Úcr6   rB   Ú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*   r5   rA   znamed-entity-without-semicolonú=zexpected-named-entityr,   r	   ÚSpaceCharactersÚ
Characters)r   rB   r
   r   rI   rC   r   r   rP   r-   r   r/   rE   ÚentitiesTrieÚhas_keys_with_prefixÚlongest_prefixÚlenÚKeyErrorr   r   r    )	r#   ÚallowedCharÚfromAttributeÚoutputrM   ÚhexÚ
entityNameÚentityLengthÚ	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)rf   )r#   r_   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,   NrT   ÚEndTagr)   zattributes-in-end-tagr*   ÚselfClosingzself-closing-flag-on-end-tag)r    r   Ú	translater   r   ÚattributeMapr]   Úupdater-   rC   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 )NrQ   rR   ú r)   úinvalid-codepointr*   rY   FrX   T©rQ   rR   rr   )r   rB   ÚentityDataStater   ÚtagOpenStater-   rC   r   r   r
   Ú
charsUntil©r#   r,   Úcharsr'   r'   r(   r      s.    


ÿÿ
ÿ
ÿzHTMLTokenizer.dataStatec                 C   s   |   ¡  | j| _dS ©NT)rf   r   r   r1   r'   r'   r(   ru     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 )NrQ   rR   Frr   r)   rs   r*   rY   r:   rX   Trt   )r   rB   ÚcharacterReferenceInRcdatar   ÚrcdataLessThanSignStater   r-   rC   r   r
   rw   rx   r'   r'   r(   ÚrcdataState"  s.    


ÿÿ
ÿ
ÿzHTMLTokenizer.rcdataStatec                 C   s   |   ¡  | j| _dS rz   )rf   r}   r   r1   r'   r'   r(   r{   ?  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 ©NrR   rr   r)   rs   r*   rY   r:   F)rR   rr   T)	r   rB   ÚrawtextLessThanSignStater   r-   rC   r   r   rw   rx   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 r~   )	r   rB   ÚscriptDataLessThanSignStater   r-   rC   r   r   rw   rx   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 )	NFrr   r)   rs   r*   rY   r:   T)r   rB   r   r-   rC   r   rw   ©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ú!ú/ri   F)r+   rh   r,   rk   ÚselfClosingAcknowledgedú>r)   z'expected-tag-name-but-got-right-bracketr*   rY   z<>ú?z'expected-tag-name-but-got-question-markzexpected-tag-namerR   T)r   rB   ÚmarkupDeclarationOpenStater   ÚcloseTagOpenStater   r   r    ÚtagNameStater-   rC   r   rI   ÚbogusCommentStaterƒ   r'   r'   r(   rv   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 )Nrj   F©r+   rh   r,   rk   rˆ   r)   z*expected-closing-tag-but-got-right-bracketr*   z expected-closing-tag-but-got-eofrY   ú</z!expected-closing-tag-but-got-charr,   r7   T)r   rB   r   r   r    rŒ   r   r-   rC   r   r   rI   r�   rƒ   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†   rr   rs   rh   r:   T)r   rB   r
   ÚbeforeAttributeNameStater   rq   r   r-   rC   r   r   ÚselfClosingStartTagStater    rƒ   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†   r5   rY   rR   r*   T)
r   rB   ÚtemporaryBufferÚrcdataEndTagOpenStater   r-   rC   r   rI   r}   rƒ   r'   r'   r(   r|   È  s    

z%HTMLTokenizer.rcdataLessThanSignStatec                 C   sX   | j  ¡ }|tv r*|  j|7  _| j| _n*| j td ddœ¡ | j  	|¡ | j
| _dS ©NrY   r�   r*   T)r   rB   r   r“   ÚrcdataEndTagNameStater   r-   rC   r   rI   r}   rƒ   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 ©Nrh   rj   FrŽ   r†   rˆ   rY   r�   r*   T)r    Úlowerr“   r   rB   r
   r   r�   r   r‘   rq   r   r   r-   rC   rI   r}   ©r#   Ú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   rB   r“   ÚrawtextEndTagOpenStater   r-   rC   r   rI   r€   rƒ   r'   r'   r(   r   ú  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   rB   r   r“   ÚrawtextEndTagNameStater   r-   rC   r   rI   r€   rƒ   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   rB   r
   r   r�   r   r‘   rq   r   r   r-   rC   rI   r€   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†   r5   r…   rY   z<!r*   rR   T)r   rB   r“   ÚscriptDataEndTagOpenStater   r-   rC   r   ÚscriptDataEscapeStartStaterI   r‚   rƒ   r'   r'   r(   r�   ,  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   rB   r   r“   ÚscriptDataEndTagNameStater   r-   rC   r   rI   r‚   rƒ   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   rB   r
   r   r�   r   r‘   rq   r   r   r-   rC   rI   r‚   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ú-rY   r*   T)	r   rB   r-   rC   r   ÚscriptDataEscapeStartDashStater   rI   r‚   rƒ   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   rB   r-   rC   r   ÚscriptDataEscapedDashDashStater   rI   r‚   rƒ   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¡   rY   r*   rR   rr   r)   rs   r:   )rR   r¡   rr   T)r   rB   r-   rC   r   ÚscriptDataEscapedDashStater   Ú"scriptDataEscapedLessThanSignStater   r   rw   rx   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¡   rY   r*   rR   rr   r)   rs   r:   T)r   rB   r-   rC   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œ¡ 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¡   rY   r*   rR   rˆ   rr   r)   rs   r:   T)r   rB   r-   rC   r   r¥   r   r‚   r¦   r   r   rƒ   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   rB   r“   Ú scriptDataEscapedEndTagOpenStater   r   r-   rC   r   Ú scriptDataDoubleEscapeStartStaterI   r¦   rƒ   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   rB   r   r“   Ú scriptDataEscapedEndTagNameStater   r-   rC   r   rI   r¦   rƒ   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   rB   r
   r   r�   r   r‘   rq   r   r   r-   rC   rI   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ˆ   rY   r*   ÚscriptT)r   rB   r
   rF   r-   rC   r   r“   r˜   ÚscriptDataDoubleEscapedStater   r¦   r   rI   rƒ   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¡   rY   r*   rR   rr   r)   rs   r:   úeof-in-script-in-scriptT)
r   rB   r-   rC   r   Ú scriptDataDoubleEscapedDashStater   Ú(scriptDataDoubleEscapedLessThanSignStater   r   rƒ   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   rB   r-   rC   r   Ú$scriptDataDoubleEscapedDashDashStater   r°   r¬   r   r   rƒ   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¡   rY   r*   rR   rˆ   rr   r)   rs   r:   r®   T)r   rB   r-   rC   r   r°   r   r‚   r¬   r   r   rƒ   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†   rY   r*   r5   T)
r   rB   r-   rC   r   r“   ÚscriptDataDoubleEscapeEndStater   rI   r¬   rƒ   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   rB   r
   rF   r-   rC   r   r“   r˜   r¦   r   r¬   r   rI   rƒ   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,   r5   rˆ   r†   )ú'ú"rW   rR   r)   ú#invalid-character-in-attribute-namer*   rr   rs   r:   z#expected-attribute-name-but-got-eof)r   rB   r
   rw   r   r    rC   ÚattributeNameStater   rq   r‘   r-   r   r   r   rƒ   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 )NTFrW   r,   rT   r   rˆ   r†   rr   r)   rs   r*   r:   ©r³   r´   rR   rµ   zeof-in-attribute-namezduplicate-attribute)r   rB   ÚbeforeAttributeValueStater   r   r    rw   r
   ÚafterAttributeNameStater‘   r-   rC   r   r   r   rl   r   rq   )r#   r,   ÚleavingThisStateÚ	emitTokenrh   Ú_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 )NTrW   rˆ   r,   r5   r†   rr   r)   rs   r*   r:   r·   z&invalid-character-after-attribute-namezexpected-end-of-tag-but-got-eof)r   rB   r
   rw   r¸   r   rq   r   r    rC   r¶   r‘   r-   r   r   r   rƒ   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´   rQ   r³   rˆ   r)   z.expected-attribute-value-but-got-right-bracketr*   rr   rs   r,   rT   r	   r:   )rW   rR   ú`z"equals-in-unquoted-attribute-valuez$expected-attribute-value-but-got-eof)r   rB   r
   rw   ÚattributeValueDoubleQuotedStater   ÚattributeValueUnQuotedStaterI   ÚattributeValueSingleQuotedStater-   rC   r   rq   r    r   r   rƒ   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´   rQ   rr   r)   rs   r*   r,   rT   r	   r:   z#eof-in-attribute-value-double-quote)r´   rQ   rr   T©r   rB   ÚafterAttributeValueStater   rg   r-   rC   r   r    r   r   rw   rƒ   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³   rQ   rr   r)   rs   r*   r,   rT   r	   r:   z#eof-in-attribute-value-single-quote)r³   rQ   rr   TrÁ   rƒ   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 )NrQ   rˆ   )r´   r³   rW   rR   r½   r)   z0unexpected-character-in-unquoted-attribute-valuer*   r,   rT   r	   rr   rs   r:   z eof-in-attribute-value-no-quotes)rQ   rˆ   r´   r³   rW   rR   r½   rr   T)r   rB   r
   r�   r   rg   rq   r-   rC   r   r    r   r   rw   rF   rƒ   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   rB   r
   r�   r   rq   r‘   r   r-   rC   r   rI   r   rƒ   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ˆ   Trk   r)   z#unexpected-EOF-after-solidus-in-tagr*   z)unexpected-character-after-solidus-in-tag)r   rB   r    rq   r   r-   rC   r   rI   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ˆ   rr   r:   ÚCommentr*   T)	r   rw   Úreplacer-   rC   r   rB   r   r   rƒ   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 )NrT   r¡   rÃ   r5   r*   T)ÚdÚD))ÚoÚO©rN   ÚC©ÚtÚT©ÚyÚY©ÚpÚP©ÚeÚEFÚDoctype)r+   rh   ÚpublicIdÚsystemIdÚcorrectú[)rÊ   rÆ   ÚArÍ   rÜ   rÛ   r)   zexpected-dashes-or-doctype)r   rB   rC   r   r    ÚcommentStartStater   ÚdoctypeStater   ÚtreeÚopenElementsÚ	namespaceÚdefaultNamespaceÚcdataSectionStater-   rI   r/   r�   )r#   rM   Ú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¡   rr   r)   rs   r*   r,   r:   rˆ   úincorrect-commentúeof-in-commentT)r   rB   ÚcommentStartDashStater   r-   rC   r   r    r   r   ÚcommentStaterƒ   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¡   rr   r)   rs   r*   r,   õ   -ï¿½rˆ   ræ   rç   T)r   rB   ÚcommentEndStater   r-   rC   r   r    r   r   ré   rƒ   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¡   rr   r)   rs   r*   r,   r:   rç   )r¡   rr   T)r   rB   ÚcommentEndDashStater   r-   rC   r   r    r   r   rw   rƒ   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¡   rr   r)   rs   r*   r,   rê   zeof-in-comment-end-dashT)r   rB   rë   r   r-   rC   r   r    ré   r   r   rƒ   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ˆ   rr   r)   rs   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   rB   r-   rC   r    r   r   r   ré   ÚcommentEndBangStater   rƒ   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--!rr   r)   rs   r*   u   --!ï¿½zeof-in-comment-end-bang-stateT)r   rB   r-   rC   r    r   r   rì   r   ré   r   rƒ   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   rB   r
   ÚbeforeDoctypeNameStater   r   r-   rC   r   r    r   rI   rƒ   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Ú   rr   rs   r:   rh   rî   T)r   rB   r
   r-   rC   r   r    r   r   ÚdoctypeNameStater   rƒ   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 )Nrh   rˆ   rr   r)   rs   r*   r:   zeof-in-doctype-nameFrÚ   T)r   rB   r
   r    rl   r   ÚafterDoctypeNameStater   r-   rC   r   r   rð   r   rƒ   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,   r7   )r   rB   r
   r-   rC   r    r   r   r   rI   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   rB   r
   Ú"beforeDoctypePublicIdentifierStater   r-   rC   r   rI   r   r    r   rƒ   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´   r5   rØ   r³   rˆ   r)   úunexpected-end-of-doctyper*   FrÚ   rò   r  T)r   rB   r
   r    Ú(doctypePublicIdentifierDoubleQuotedStater   Ú(doctypePublicIdentifierSingleQuotedStater-   rC   r   r   r   r  rƒ   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´   rr   r)   rs   r*   rØ   r:   rˆ   r  FrÚ   rò   T©
r   rB   Ú!afterDoctypePublicIdentifierStater   r-   rC   r   r    r   r   rƒ   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³   rr   r)   rs   r*   rØ   r:   rˆ   r  FrÚ   rò   Tr	  rƒ   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*   r5   rÙ   r³   rò   FrÚ   T)r   rB   r
   Ú-betweenDoctypePublicAndSystemIdentifiersStater   r-   rC   r    r   r   Ú(doctypeSystemIdentifierDoubleQuotedStateÚ(doctypeSystemIdentifierSingleQuotedStater   r  rƒ   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´   r5   rÙ   r³   r)   rò   r*   FrÚ   r  T)r   rB   r
   r-   rC   r    r   r   r  r  r   r   r  rƒ   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   rB   r
   Ú"beforeDoctypeSystemIdentifierStater   r-   rC   r   rI   r   r    r   rƒ   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´   r5   rÙ   r³   rˆ   r)   r  r*   FrÚ   rò   T)r   rB   r
   r    r  r   r  r-   rC   r   r   r   r  rƒ   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´   rr   r)   rs   r*   rÙ   r:   rˆ   r  FrÚ   rò   T©
r   rB   Ú!afterDoctypeSystemIdentifierStater   r-   rC   r   r    r   r   rƒ   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³   rr   r)   rs   r*   rÙ   r:   rˆ   r  FrÚ   rò   Tr  rƒ   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   rB   r
   r-   rC   r    r   r   r   r   r  rƒ   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   rB   r-   rC   r    r   r   r   rI   rƒ   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ˆ   rT   éþÿÿÿz]]r5   rr   r   r)   rs   r*   r:   rY   T)rC   r   rw   rB   r   rE   ÚcountÚranger-   r   rÄ   r   r   )r#   r,   rB   Ú	nullCountr¼   r'   r'   r(   rã   «  s2    


ÿ
ÿzHTMLTokenizer.cdataSectionState)N)NF)NÚ__name__Ú
__module__Ú__qualname__Ú__doc__r"   r2   rP   rf   rg   rq   r   ru   r}   r{   r€   r‚   r„   rv   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   rG   Úcollectionsr   r   Úsysr   Ú	constantsr
   r   r   r   r   r   r   r   r   r   Ú_inputstreamr   Ú_trier   rZ   Údictrm   Úobjectr   r'   r'   r'   r(   Ú<module>   s    