3
ûâdeð, ã               @   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                sF   t |f|Ž| _|| _d| _g | _| j| _d| _d | _t	t
| ƒjƒ  d S )NF)r   ÚstreamÚparserÚ
escapeFlagÚlastFourCharsÚ	dataStateÚstateÚescapeÚcurrentTokenÚsuperr   Ú__init__)Úselfr   r   Úkwargs)Ú	__class__© ú>/tmp/pip-build-red6nood/pip/pip/_vendor/html5lib/_tokenizer.pyr"   (   s    zHTMLTokenizer.__init__c             c   s\   t g ƒ| _xL| jƒ rVx&| jjr:td | jjjdƒdœV  qW x| jrR| jjƒ V  q>W qW 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jƒ }x(||krJ|tk	rJ|j|ƒ | jjƒ }q$W tdj|ƒ|ƒ}|tkrŒt| }| j	jt
d dd|idœƒ �nld|  kožd	kn  s¬|d
krÐd}| j	jt
d dd|idœƒ �n(d|  koâdkn  �s�d|  koüdkn  �s�d|  k�odkn  �s�d|  k�o4dkn  �s�|tddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d
g#ƒk�r¬| j	jt
d dd|idœƒ yt|ƒ}W n> tk
�rö   |d6 }td|d? B ƒtd7|d8@ B ƒ }Y nX |d9k�r$| j	jt
d d:d;œƒ | j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ÿß  iÿÿ u   ï¿½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þÿ i   i Ü  iÿ  ú;z numeric-entity-without-semicolon)r)   r*   )r   r   r   Úcharr   ÚappendÚintÚjoinr   r+   r   Ú	frozensetÚchrÚ
ValueErrorÚunget)	r#   ÚisHexÚallowedÚradixÚ	charStackÚcr3   r<   Úvr&   r&   r'   ÚconsumeNumberEntityG   s`    

&

z!HTMLTokenizer.consumeNumberEntityFc       	      C   sÈ  d}| j jƒ g}|d tksB|d tddfksB|d k	rV||d krV| j j|d ƒ �n"|d dk�rd}|j| j jƒ ƒ |d dkr˜d	}|j| j jƒ ƒ |r¨|d tksº| rÖ|d tkrÖ| j j|d ƒ | j|ƒ}n4| j	jt
d
 ddœƒ | j j|jƒ ƒ ddj|ƒ }�njx8|d tk	�rFtjdj|ƒƒ�s2P |j| j jƒ ƒ �qW y$tjdj|d d… ƒƒ}t|ƒ}W n tk
�r†   d }Y nX |d k	�rD|d dk�r¶| j	jt
d
 ddœƒ |d dk�r|�r|| tk�sô|| tk�sô|| dk�r| j j|jƒ ƒ ddj|ƒ }n.t| }| j j|jƒ ƒ |dj||d … ƒ7 }n4| j	jt
d
 ddœƒ | j j|jƒ ƒ ddj|ƒ }|�rš| jd d d  |7  < n*|tk�rªd}nd}| j	jt
| |dœƒ d S )Nú&r   ú<ú#Fr	   ÚxÚXTr(   zexpected-numeric-entity)r)   r*   r2   r;   znamed-entity-without-semicolonú=zexpected-named-entityr*   ÚSpaceCharactersÚ
Characterséÿÿÿÿ)rN   rO   rS   rS   rS   rS   rS   rS   rS   rS   )r   r<   r
   r   rC   r=   r   r   rJ   r+   r   r-   r?   ÚentitiesTrieÚhas_keys_with_prefixÚlongest_prefixÚlenÚKeyErrorr   r   r    )	r#   ÚallowedCharÚfromAttributeÚoutputrG   ÚhexÚ
entityNameÚentityLengthÚ	tokenTyper&   r&   r'   ÚconsumeEntity�   sf    





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kr¼|d jtƒ|d< |d td krp|d }t|ƒ}t|ƒt|ƒkrh|j|ddd… ƒ ||d< |d td kr¼|d rž| jj	td d	d
œƒ |d r¼| jj	td dd
œƒ | j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*   Nr	   ÚEndTagr(   zattributes-in-end-tag)r)   r*   ÚselfClosingzself-closing-flag-on-end-tagrS   )r    r   Ú	translater   r   ÚattributeMaprW   Úupdater+   r=   r   r   )r#   ÚtokenÚrawr*   r&   r&   r'   ÚemitCurrentTokenä   s$    

zHTMLTokenizer.emitCurrentTokenc             C   sÈ   | j jƒ }|dkr| j| _n¨|dkr.| j| _n–|dkrd| jjtd ddœƒ | jjtd ddœƒ n`|tkrpdS |t	krž| jjtd	 || j j
t	d
ƒ dœƒ n&| j j
dƒ}| jjtd || dœƒ d
S )NrK   rL   ú r(   zinvalid-codepoint)r)   r*   rR   FrQ   T)rK   rL   rl   )r   r<   ÚentityDataStater   ÚtagOpenStater+   r=   r   r   r
   Ú
charsUntil)r#   r*   Úcharsr&   r&   r'   r      s&    



zHTMLTokenizer.dataStatec             C   s   | j ƒ  | j| _dS )NT)r`   r   r   )r#   r&   r&   r'   rm     s    zHTMLTokenizer.entityDataStatec             C   sÈ   | j jƒ }|dkr| j| _n¨|dkr.| j| _n–|tkr:dS |dkrp| jjtd ddœƒ | jjtd d	dœƒ nT|t	krž| jjtd
 || j j
t	dƒ dœƒ n&| j j
dƒ}| jjtd || dœƒ dS )NrK   rL   Frl   r(   zinvalid-codepoint)r)   r*   rR   u   ï¿½rQ   T)rK   rL   rl   )r   r<   ÚcharacterReferenceInRcdatar   ÚrcdataLessThanSignStater   r+   r=   r   r
   ro   )r#   r*   rp   r&   r&   r'   ÚrcdataState"  s&    



zHTMLTokenizer.rcdataStatec             C   s   | j ƒ  | j| _dS )NT)r`   rs   r   )r#   r&   r&   r'   rq   ?  s    z(HTMLTokenizer.characterReferenceInRcdatac             C   sˆ   | j jƒ }|dkr| j| _nh|dkrR| jjtd ddœƒ | jjtd ddœƒ n2|tkr^dS | j jd
ƒ}| jjtd || dœƒ d	S )NrL   rl   r(   zinvalid-codepoint)r)   r*   rR   u   ï¿½FT)rL   rl   )	r   r<   ÚrawtextLessThanSignStater   r+   r=   r   r   ro   )r#   r*   rp   r&   r&   r'   ÚrawtextStateD  s    


zHTMLTokenizer.rawtextStatec             C   sˆ   | j jƒ }|dkr| j| _nh|dkrR| jjtd ddœƒ | jjtd ddœƒ n2|tkr^dS | j jd
ƒ}| jjtd || dœƒ d	S )NrL   rl   r(   zinvalid-codepoint)r)   r*   rR   u   ï¿½FT)rL   rl   )	r   r<   ÚscriptDataLessThanSignStater   r+   r=   r   r   ro   )r#   r*   rp   r&   r&   r'   ÚscriptDataStateV  s    


zHTMLTokenizer.scriptDataStatec             C   sr   | j jƒ }|tkrdS |dkrL| jjtd ddœƒ | jjtd ddœƒ n"| jjtd || j jdƒ dœƒ dS )	NFrl   r(   zinvalid-codepoint)r)   r*   rR   u   ï¿½T)r   r<   r   r+   r=   r   ro   )r#   r*   r&   r&   r'   ÚplaintextStateh  s    

zHTMLTokenizer.plaintextStatec             C   s  | j jƒ }|dkr| j| _nì|dkr.| j| _nÚ|tkrVtd |g dddœ| _| j| _n²|dkr”| j	j
td dd	œƒ | j	j
td
 dd	œƒ | j| _nt|dkrÈ| j	j
td dd	œƒ | j j|ƒ | j| _n@| j	j
td dd	œƒ | j	j
td
 dd	œƒ | j j|ƒ | j| _dS )Nú!ú/rc   F)r)   rb   r*   re   ÚselfClosingAcknowledgedú>r(   z'expected-tag-name-but-got-right-bracket)r)   r*   rR   z<>ú?z'expected-tag-name-but-got-question-markzexpected-tag-namerL   T)r   r<   ÚmarkupDeclarationOpenStater   ÚcloseTagOpenStater   r   r    ÚtagNameStater+   r=   r   rC   ÚbogusCommentState)r#   r*   r&   r&   r'   rn   w  s6    









zHTMLTokenizer.tagOpenStatec             C   sÊ   | j jƒ }|tkr0td |g ddœ| _| j| _n–|dkrX| jjtd ddœƒ | j	| _nn|t
kr–| jjtd ddœƒ | jjtd	 d
dœƒ | j	| _n0| jjtd dd|idœƒ | j j|ƒ | j| _dS )Nrd   F)r)   rb   r*   re   r|   r(   z*expected-closing-tag-but-got-right-bracket)r)   r*   z expected-closing-tag-but-got-eofrR   z</z!expected-closing-tag-but-got-charr*   )r)   r*   r4   T)r   r<   r   r   r    r€   r   r+   r=   r   r   rC   r�   )r#   r*   r&   r&   r'   r   š  s(    





zHTMLTokenizer.closeTagOpenStatec             C   s°   | j jƒ }|tkr| j| _n�|dkr.| jƒ  n~|tkrV| jjt	d ddœƒ | j
| _nV|dkrh| j| _nD|dkrš| jjt	d ddœƒ | jd  d	7  < n| jd  |7  < d
S )Nr|   r(   zeof-in-tag-name)r)   r*   rz   rl   zinvalid-codepointrb   u   ï¿½T)r   r<   r
   ÚbeforeAttributeNameStater   rk   r   r+   r=   r   r   ÚselfClosingStartTagStater    )r#   r*   r&   r&   r'   r€   ²  s"    






zHTMLTokenizer.tagNameStatec             C   sP   | j jƒ }|dkr"d| _| j| _n*| jjtd ddœƒ | j j|ƒ | j	| _dS )Nrz   r2   rR   rL   )r)   r*   T)
r   r<   ÚtemporaryBufferÚrcdataEndTagOpenStater   r+   r=   r   rC   rs   )r#   r*   r&   r&   r'   rr   È  s    

z%HTMLTokenizer.rcdataLessThanSignStatec             C   sX   | j jƒ }|tkr*|  j|7  _| j| _n*| jjtd ddœƒ | j j	|ƒ | j
| _dS )NrR   z</)r)   r*   T)r   r<   r   r„   ÚrcdataEndTagNameStater   r+   r=   r   rC   rs   )r#   r*   r&   r&   r'   r…   Ó  s    

z#HTMLTokenizer.rcdataEndTagOpenStatec             C   s   | j o| j d jƒ | jjƒ k}| jjƒ }|tk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
ƒ  | j| _nH|tkrÌ|  j|7  _n0| jjtd d| j d	œƒ | jj|ƒ | j| _d
S )Nrb   rd   F)r)   rb   r*   re   rz   r|   rR   z</)r)   r*   T)r    Úlowerr„   r   r<   r
   r   r‚   r   rƒ   rk   r   r   r+   r=   rC   rs   )r#   Úappropriater*   r&   r&   r'   r†   Þ  s2    



z#HTMLTokenizer.rcdataEndTagNameStatec             C   sP   | j jƒ }|dkr"d| _| j| _n*| jjtd ddœƒ | j j|ƒ | j	| _dS )Nrz   r2   rR   rL   )r)   r*   T)
r   r<   r„   ÚrawtextEndTagOpenStater   r+   r=   r   rC   ru   )r#   r*   r&   r&   r'   rt   ú  s    

z&HTMLTokenizer.rawtextLessThanSignStatec             C   sX   | j jƒ }|tkr*|  j|7  _| j| _n*| jjtd ddœƒ | j j	|ƒ | j
| _dS )NrR   z</)r)   r*   T)r   r<   r   r„   ÚrawtextEndTagNameStater   r+   r=   r   rC   ru   )r#   r*   r&   r&   r'   r‰     s    

z$HTMLTokenizer.rawtextEndTagOpenStatec             C   s   | j o| j d jƒ | jjƒ k}| jjƒ }|tk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
ƒ  | j| _nH|tkrÌ|  j|7  _n0| jjtd d| j d	œƒ | jj|ƒ | j| _d
S )Nrb   rd   F)r)   rb   r*   re   rz   r|   rR   z</)r)   r*   T)r    r‡   r„   r   r<   r
   r   r‚   r   rƒ   rk   r   r   r+   r=   rC   ru   )r#   rˆ   r*   r&   r&   r'   rŠ     s2    



z$HTMLTokenizer.rawtextEndTagNameStatec             C   sx   | j jƒ }|dkr"d| _| j| _nR|dkrJ| jjtd ddœƒ | j| _n*| jjtd ddœƒ | j j	|ƒ | j
| _dS )	Nrz   r2   ry   rR   z<!)r)   r*   rL   T)r   r<   r„   ÚscriptDataEndTagOpenStater   r+   r=   r   ÚscriptDataEscapeStartStaterC   rw   )r#   r*   r&   r&   r'   rv   ,  s    


z)HTMLTokenizer.scriptDataLessThanSignStatec             C   sX   | j jƒ }|tkr*|  j|7  _| j| _n*| jjtd ddœƒ | j j	|ƒ | j
| _dS )NrR   z</)r)   r*   T)r   r<   r   r„   ÚscriptDataEndTagNameStater   r+   r=   r   rC   rw   )r#   r*   r&   r&   r'   r‹   :  s    

z'HTMLTokenizer.scriptDataEndTagOpenStatec             C   s   | j o| j d jƒ | jjƒ k}| jjƒ }|tk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
ƒ  | j| _nH|tkrÌ|  j|7  _n0| jjtd d| j d	œƒ | jj|ƒ | j| _d
S )Nrb   rd   F)r)   rb   r*   re   rz   r|   rR   z</)r)   r*   T)r    r‡   r„   r   r<   r
   r   r‚   r   rƒ   rk   r   r   r+   r=   rC   rw   )r#   rˆ   r*   r&   r&   r'   r�   E  s2    



z'HTMLTokenizer.scriptDataEndTagNameStatec             C   sJ   | j jƒ }|dkr2| jjtd ddœƒ | j| _n| j j|ƒ | j| _dS )Nú-rR   )r)   r*   T)	r   r<   r+   r=   r   ÚscriptDataEscapeStartDashStater   rC   rw   )r#   r*   r&   r&   r'   rŒ   a  s    

z(HTMLTokenizer.scriptDataEscapeStartStatec             C   sJ   | j jƒ }|dkr2| jjtd ddœƒ | j| _n| j j|ƒ | j| _dS )NrŽ   rR   )r)   r*   T)	r   r<   r+   r=   r   ÚscriptDataEscapedDashDashStater   rC   rw   )r#   r*   r&   r&   r'   r�   k  s    

z,HTMLTokenizer.scriptDataEscapeStartDashStatec             C   s¶   | j jƒ }|dkr2| jjtd ddœƒ | j| _n€|dkrD| j| _nn|dkrz| jjtd ddœƒ | jjtd ddœƒ n8|tkrŒ| j	| _n&| j j
d
ƒ}| jjtd || dœƒ d	S )NrŽ   rR   )r)   r*   rL   rl   r(   zinvalid-codepointu   ï¿½T)rL   rŽ   rl   )r   r<   r+   r=   r   ÚscriptDataEscapedDashStater   Ú"scriptDataEscapedLessThanSignStater   r   ro   )r#   r*   rp   r&   r&   r'   ÚscriptDataEscapedStateu  s"    




z$HTMLTokenizer.scriptDataEscapedStatec             C   s¶   | j jƒ }|dkr2| jjtd ddœƒ | j| _n€|dkrD| j| _nn|dkr‚| jjtd ddœƒ | jjtd ddœƒ | j| _n0|t	kr”| j
| _n| jjtd |dœƒ | j| _d	S )
NrŽ   rR   )r)   r*   rL   rl   r(   zinvalid-codepointu   ï¿½T)r   r<   r+   r=   r   r�   r   r’   r“   r   r   )r#   r*   r&   r&   r'   r‘   ‰  s"    






z(HTMLTokenizer.scriptDataEscapedDashStatec             C   sÖ   | j jƒ }|dkr*| jjtd ddœƒ n¨|dkr<| j| _n–|dkrd| jjtd ddœƒ | j| _nn|dkr¢| jjtd ddœƒ | jjtd d	dœƒ | j| _n0|t	kr´| j
| _n| jjtd |dœƒ | j| _d
S )NrŽ   rR   )r)   r*   rL   r|   rl   r(   zinvalid-codepointu   ï¿½T)r   r<   r+   r=   r   r’   r   rw   r“   r   r   )r#   r*   r&   r&   r'   r�   �  s&    






z,HTMLTokenizer.scriptDataEscapedDashDashStatec             C   s‚   | j jƒ }|dkr"d| _| j| _n\|tkrT| jjtd d| dœƒ || _| j	| _n*| jjtd ddœƒ | j j
|ƒ | j| _dS )Nrz   r2   rR   rL   )r)   r*   T)r   r<   r„   Ú scriptDataEscapedEndTagOpenStater   r   r+   r=   r   Ú scriptDataDoubleEscapeStartStaterC   r“   )r#   r*   r&   r&   r'   r’   ³  s    


z0HTMLTokenizer.scriptDataEscapedLessThanSignStatec             C   sP   | j jƒ }|tkr"|| _| j| _n*| jjtd ddœƒ | j j	|ƒ | j
| _dS )NrR   z</)r)   r*   T)r   r<   r   r„   Ú scriptDataEscapedEndTagNameStater   r+   r=   r   rC   r“   )r#   r*   r&   r&   r'   r”   Â  s    

z.HTMLTokenizer.scriptDataEscapedEndTagOpenStatec             C   s   | j o| j d jƒ | jjƒ k}| jjƒ }|tk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
ƒ  | j| _nH|tkrÌ|  j|7  _n0| jjtd d| j d	œƒ | jj|ƒ | j| _d
S )Nrb   rd   F)r)   rb   r*   re   rz   r|   rR   z</)r)   r*   T)r    r‡   r„   r   r<   r
   r   r‚   r   rƒ   rk   r   r   r+   r=   rC   r“   )r#   rˆ   r*   r&   r&   r'   r–   Í  s2    



z.HTMLTokenizer.scriptDataEscapedEndTagNameStatec             C   s˜   | j jƒ }|ttdƒB krR| jjtd |dœƒ | jjƒ dkrH| j	| _
q”| j| _
nB|tkr€| jjtd |dœƒ |  j|7  _n| j j|ƒ | j| _
dS )Nrz   r|   rR   )r)   r*   ÚscriptT)rz   r|   )r   r<   r
   r@   r+   r=   r   r„   r‡   ÚscriptDataDoubleEscapedStater   r“   r   rC   )r#   r*   r&   r&   r'   r•   é  s    


z.HTMLTokenizer.scriptDataDoubleEscapeStartStatec             C   sÒ   | j jƒ }|dkr2| jjtd ddœƒ | j| _nœ|dkrZ| jjtd ddœƒ | j| _nt|dkr�| jjtd ddœƒ | jjtd ddœƒ n>|tkr¸| jjtd d	dœƒ | j	| _n| jjtd |dœƒ d
S )NrŽ   rR   )r)   r*   rL   rl   r(   zinvalid-codepointu   ï¿½zeof-in-script-in-scriptT)
r   r<   r+   r=   r   Ú scriptDataDoubleEscapedDashStater   Ú(scriptDataDoubleEscapedLessThanSignStater   r   )r#   r*   r&   r&   r'   r˜   ù  s$    





z*HTMLTokenizer.scriptDataDoubleEscapedStatec             C   sâ   | j jƒ }|dkr2| jjtd ddœƒ | j| _n¬|dkrZ| jjtd ddœƒ | j| _n„|dkr˜| jjtd ddœƒ | jjtd ddœƒ | j| _nF|t	krÀ| jjtd d	dœƒ | j
| _n| jjtd |dœƒ | j| _d
S )NrŽ   rR   )r)   r*   rL   rl   r(   zinvalid-codepointu   ï¿½zeof-in-script-in-scriptT)r   r<   r+   r=   r   Ú$scriptDataDoubleEscapedDashDashStater   rš   r˜   r   r   )r#   r*   r&   r&   r'   r™     s(    







z.HTMLTokenizer.scriptDataDoubleEscapedDashStatec             C   s  | j jƒ }|dkr*| jjtd ddœƒ nÔ|dkrR| jjtd ddœƒ | j| _n¬|dkrz| jjtd ddœƒ | j| _n„|dkr¸| jjtd ddœƒ | jjtd d	dœƒ | j| _nF|t	krà| jjtd d
dœƒ | j
| _n| jjtd |dœƒ | j| _dS )NrŽ   rR   )r)   r*   rL   r|   rl   r(   zinvalid-codepointu   ï¿½zeof-in-script-in-scriptT)r   r<   r+   r=   r   rš   r   rw   r˜   r   r   )r#   r*   r&   r&   r'   r›   %  s,    







z2HTMLTokenizer.scriptDataDoubleEscapedDashDashStatec             C   sP   | j jƒ }|dkr8| jjtd ddœƒ d| _| j| _n| j j|ƒ | j	| _dS )Nrz   rR   )r)   r*   r2   T)
r   r<   r+   r=   r   r„   ÚscriptDataDoubleEscapeEndStater   rC   r˜   )r#   r*   r&   r&   r'   rš   >  s    

z6HTMLTokenizer.scriptDataDoubleEscapedLessThanSignStatec             C   s˜   | j jƒ }|ttdƒB krR| jjtd |dœƒ | jjƒ dkrH| j	| _
q”| j| _
nB|tkr€| jjtd |dœƒ |  j|7  _n| j j|ƒ | j| _
dS )Nrz   r|   rR   )r)   r*   r—   T)rz   r|   )r   r<   r
   r@   r+   r=   r   r„   r‡   r“   r   r˜   r   rC   )r#   r*   r&   r&   r'   rœ   I  s    


z,HTMLTokenizer.scriptDataDoubleEscapeEndStatec             C   s0  | j jƒ }|tkr$| j jtdƒ �n|tkrJ| jd j|dgƒ | j| _nâ|dkr\| j	ƒ  nÐ|dkrn| j
| _n¾|dkrª| jjtd
 ddœƒ | jd j|dgƒ | j| _n‚|dkræ| jjtd
 ddœƒ | jd jddgƒ | j| _nF|tk�r| jjtd
 ddœƒ | j| _n| jd j|dgƒ | j| _dS )NTr*   r2   r|   rz   ú'ú"rP   rL   r(   z#invalid-character-in-attribute-name)r)   r*   rl   zinvalid-codepointu   ï¿½z#expected-attribute-name-but-got-eof)r�   rž   rP   rL   )r   r<   r
   ro   r   r    r=   ÚattributeNameStater   rk   rƒ   r+   r   r   r   )r#   r*   r&   r&   r'   r‚   Y  s6    










z&HTMLTokenizer.beforeAttributeNameStatec             C   sæ  | j jƒ }d}d}|dkr&| j| _�n0|tkr^| jd d d  || j jtdƒ 7  < d}� nø|dkrld}nê|tkr~| j| _nØ|dkr�| j	| _nÆ|d	krÎ| j
jtd
 ddœƒ | jd d d  d7  < d}nˆ|dk�r| j
jtd
 ddœƒ | jd d d  |7  < d}nH|tk�r8| j
jtd
 ddœƒ | j| _n| jd d d  |7  < d}|�râ| jd d d jtƒ| jd d d< xP| jd d d… D ]:\}}| jd d d |k�r–| j
jtd
 ddœƒ P �q–W |�râ| jƒ  dS )NTFrP   r*   r	   r   r|   rz   rl   r(   zinvalid-codepoint)r)   r*   u   ï¿½r�   rž   rL   z#invalid-character-in-attribute-namezeof-in-attribute-namezduplicate-attributerS   rS   )r�   rž   rL   rS   rS   rS   rS   rS   rS   )r   r<   ÚbeforeAttributeValueStater   r   r    ro   r
   ÚafterAttributeNameStaterƒ   r+   r=   r   r   r   rf   r   rk   )r#   r*   ÚleavingThisStateÚ	emitTokenrb   Ú_r&   r&   r'   rŸ   w  sR    








&
z HTMLTokenizer.attributeNameStatec             C   sF  | j jƒ }|tkr$| j jtdƒ �n|dkr8| j| _�n
|dkrJ| jƒ  nø|tkrp| jd j	|dgƒ | j
| _nÒ|dkr‚| j| _nÀ|dkr¾| jj	td d	d
œƒ | jd j	ddgƒ | j
| _n„|dk� rü| jj	td dd
œƒ | jd j	|dgƒ | j
| _nF|tk�r&| jj	td dd
œƒ | j| _n| jd j	|dgƒ | j
| _dS )NTrP   r|   r*   r2   rz   rl   r(   zinvalid-codepoint)r)   r*   u   ï¿½r�   rž   rL   z&invalid-character-after-attribute-namezexpected-end-of-tag-but-got-eof)r�   rž   rL   )r   r<   r
   ro   r    r   rk   r   r    r=   rŸ   rƒ   r+   r   r   r   )r#   r*   r&   r&   r'   r¡   ­  s:    











z%HTMLTokenizer.afterAttributeNameStatec             C   sj  | j jƒ }|tkr$| j jtdƒ �nB|dkr8| j| _�n.|dkrX| j| _| j j|ƒ �n|dkrl| j| _� nú|dkr”| j	j
td ddœƒ | jƒ  nÒ|d	krÖ| j	j
td d
dœƒ | jd d d  d7  < | j| _n�|dk�r| j	j
td ddœƒ | jd d d  |7  < | j| _nL|tk�rD| j	j
td ddœƒ | j| _n"| jd d d  |7  < | j| _dS )NTrž   rK   r�   r|   r(   z.expected-attribute-value-but-got-right-bracket)r)   r*   rl   zinvalid-codepointr*   r	   u   ï¿½rP   rL   ú`z"equals-in-unquoted-attribute-valuez$expected-attribute-value-but-got-eofrS   )rP   rL   r¥   rS   rS   )r   r<   r
   ro   ÚattributeValueDoubleQuotedStater   ÚattributeValueUnQuotedStaterC   ÚattributeValueSingleQuotedStater+   r=   r   rk   r    r   r   )r#   r*   r&   r&   r'   r    Í  s>    










z'HTMLTokenizer.beforeAttributeValueStatec             C   s¼   | j jƒ }|dkr| j| _nœ|dkr0| jdƒ nˆ|dkrj| jjtd ddœƒ | jd d d  d	7  < nN|t	kr’| jjtd d
dœƒ | j
| _n&| jd d d  || j jdƒ 7  < dS )Nrž   rK   rl   r(   zinvalid-codepoint)r)   r*   r*   r	   u   ï¿½z#eof-in-attribute-value-double-quoteTrS   rS   )rž   rK   rl   )r   r<   ÚafterAttributeValueStater   ra   r+   r=   r   r    r   r   ro   )r#   r*   r&   r&   r'   r¦   ï  s     




z-HTMLTokenizer.attributeValueDoubleQuotedStatec             C   s¼   | j jƒ }|dkr| j| _nœ|dkr0| jdƒ nˆ|dkrj| jjtd ddœƒ | jd d d  d	7  < nN|t	kr’| jjtd d
dœƒ | j
| _n&| jd d d  || j jdƒ 7  < dS )Nr�   rK   rl   r(   zinvalid-codepoint)r)   r*   r*   r	   u   ï¿½z#eof-in-attribute-value-single-quoteTrS   rS   )r�   rK   rl   )r   r<   r©   r   ra   r+   r=   r   r    r   r   ro   )r#   r*   r&   r&   r'   r¨     s     




z-HTMLTokenizer.attributeValueSingleQuotedStatec             C   s  | j jƒ }|tkr| j| _� nð|dkr2| jdƒ nÜ|dkrD| jƒ  nÊ|dkr~| jjt	d d	d
œƒ | j
d d d  |7  < n�|dkr¸| jjt	d dd
œƒ | j
d d d  d7  < nV|tkrà| jjt	d dd
œƒ | j| _n.| j
d d d  || j jtdƒtB ƒ 7  < dS )NrK   r|   rž   r�   rP   rL   r¥   r(   z0unexpected-character-in-unquoted-attribute-value)r)   r*   r*   r	   rl   zinvalid-codepointu   ï¿½z eof-in-attribute-value-no-quotesT)rž   r�   rP   rL   r¥   rS   rS   rS   )rK   r|   rž   r�   rP   rL   r¥   rl   )r   r<   r
   r‚   r   ra   rk   r+   r=   r   r    r   r   ro   r@   )r#   r*   r&   r&   r'   r§     s,    





z)HTMLTokenizer.attributeValueUnQuotedStatec             C   s¢   | j jƒ }|tkr| j| _n‚|dkr.| jƒ  np|dkr@| j| _n^|tkrt| jj	t
d ddœƒ | j j|ƒ | j| _n*| jj	t
d ddœƒ | j j|ƒ | j| _dS )Nr|   rz   r(   z$unexpected-EOF-after-attribute-value)r)   r*   z*unexpected-character-after-attribute-valueT)r   r<   r
   r‚   r   rk   rƒ   r   r+   r=   r   rC   r   )r#   r*   r&   r&   r'   r©   .  s"    






z&HTMLTokenizer.afterAttributeValueStatec             C   sˆ   | j jƒ }|dkr&d| jd< | jƒ  n^|tkrZ| jjtd ddœƒ | j j|ƒ | j	| _
n*| jjtd ddœƒ | j j|ƒ | j| _
dS )Nr|   Tre   r(   z#unexpected-EOF-after-solidus-in-tag)r)   r*   z)unexpected-character-after-solidus-in-tag)r   r<   r    rk   r   r+   r=   r   rC   r   r   r‚   )r#   r*   r&   r&   r'   rƒ   B  s    





z&HTMLTokenizer.selfClosingStartTagStatec             C   sD   | j jdƒ}|jddƒ}| jjtd |dœƒ | j jƒ  | j| _dS )Nr|   rl   u   ï¿½ÚComment)r)   r*   T)	r   ro   Úreplacer+   r=   r   r<   r   r   )r#   r*   r&   r&   r'   r�   T  s    
zHTMLTokenizer.bogusCommentStatec             C   sˆ  | j jƒ g}|d dkrT|j| j jƒ ƒ |d dkrPtd ddœ| _| j| _dS � nô|d dkr¼d}x.d&D ]&}|j| j jƒ ƒ |d' |krjd}P qjW |rºtd dd d ddœ| _| j| _dS nŒ|d( dk�rH| jd k	�rH| jj	j
�rH| jj	j
d) j| jj	jk�rHd}x2d*D ]*}|j| j jƒ ƒ |d+ |k�rd}P �qW |�rH| j| _dS | jjtd ddœƒ x|�rz| j j|jƒ ƒ �q`W | j| _dS ),Nr	   rŽ   rª   r2   )r)   r*   TÚdÚDÚoÚOrH   ÚCÚtÚTÚyÚYÚpÚPÚeÚEFÚDoctype)r)   rb   ÚpublicIdÚsystemIdÚcorrectú[ÚAr(   zexpected-dashes-or-doctyperS   rS   rS   )r¬   r­   ©r®   r¯   ©rH   r°   ©r±   r²   ©r³   r´   ©rµ   r¶   ©r·   r¸   )r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rS   rS   rS   )r°   r­   r¾   r²   r¾   r½   rS   )r   r<   r=   r   r    ÚcommentStartStater   ÚdoctypeStater   ÚtreeÚopenElementsÚ	namespaceÚdefaultNamespaceÚcdataSectionStater+   rC   r-   r�   )r#   rG   ÚmatchedÚexpectedr&   r&   r'   r~   c  sR    


z(HTMLTokenizer.markupDeclarationOpenStatec             C   sØ   | j jƒ }|dkr| j| _n¸|dkrN| jjtd ddœƒ | jd  d7  < n†|dkr„| jjtd d	dœƒ | jj| jƒ | j| _nP|t	krº| jjtd d
dœƒ | jj| jƒ | j| _n| jd  |7  < | j
| _dS )NrŽ   rl   r(   zinvalid-codepoint)r)   r*   r*   u   ï¿½r|   zincorrect-commentzeof-in-commentT)r   r<   ÚcommentStartDashStater   r+   r=   r   r    r   r   ÚcommentState)r#   r*   r&   r&   r'   rÅ   �  s(    






zHTMLTokenizer.commentStartStatec             C   sÜ   | j jƒ }|dkr| j| _n¼|dkrN| jjtd ddœƒ | jd  d7  < nŠ|dkr„| jjtd d	dœƒ | jj| jƒ | j| _nT|t	krº| jjtd d
dœƒ | jj| jƒ | j| _n| jd  d| 7  < | j
| _dS )NrŽ   rl   r(   zinvalid-codepoint)r)   r*   r*   u   -ï¿½r|   zincorrect-commentzeof-in-commentT)r   r<   ÚcommentEndStater   r+   r=   r   r    r   r   rÏ   )r#   r*   r&   r&   r'   rÎ   §  s(    






z#HTMLTokenizer.commentStartDashStatec             C   s¦   | j jƒ }|dkr| j| _n†|dkrN| jjtd ddœƒ | jd  d7  < nT|tkr„| jjtd ddœƒ | jj| jƒ | j	| _n| jd  || j j
d
ƒ 7  < d	S )NrŽ   rl   r(   zinvalid-codepoint)r)   r*   r*   u   ï¿½zeof-in-commentT)rŽ   rl   )r   r<   ÚcommentEndDashStater   r+   r=   r   r    r   r   ro   )r#   r*   r&   r&   r'   rÏ   ¾  s    




zHTMLTokenizer.commentStatec             C   s®   | j jƒ }|dkr| j| _nŽ|dkrV| jjtd ddœƒ | jd  d7  < | j| _nT|t	krŒ| jjtd ddœƒ | jj| jƒ | j
| _n| jd  d| 7  < | j| _d	S )
NrŽ   rl   r(   zinvalid-codepoint)r)   r*   r*   u   -ï¿½zeof-in-comment-end-dashT)r   r<   rÐ   r   r+   r=   r   r    rÏ   r   r   )r#   r*   r&   r&   r'   rÑ   Ð  s     





z!HTMLTokenizer.commentEndDashStatec             C   s,  | j jƒ }|dkr*| jj| jƒ | j| _nþ|dkrd| jjtd ddœƒ | jd  d7  < | j| _nÄ|dkrŒ| jjtd d	dœƒ | j	| _nœ|d
kr¾| jjtd ddœƒ | jd  |7  < nj|t
krô| jjtd ddœƒ | jj| jƒ | j| _n4| jjtd ddœƒ | jd  d| 7  < | j| _dS )Nr|   rl   r(   zinvalid-codepoint)r)   r*   r*   u   --ï¿½ry   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   )r#   r*   r&   r&   r'   rÐ   ã  s6    









zHTMLTokenizer.commentEndStatec             C   sà   | j jƒ }|dkr*| jj| jƒ | j| _n²|dkrN| jd  d7  < | j| _nŽ|dkrˆ| jjtd ddœƒ | jd  d	7  < | j	| _nT|t
kr¾| jjtd d
dœƒ | jj| jƒ | j| _n| jd  d| 7  < | j	| _dS )Nr|   rŽ   r*   z--!rl   r(   zinvalid-codepoint)r)   r*   u   --!ï¿½zeof-in-comment-end-bang-stateT)r   r<   r+   r=   r    r   r   rÑ   r   rÏ   r   )r#   r*   r&   r&   r'   rÒ     s(    






z!HTMLTokenizer.commentEndBangStatec             C   sŠ   | j jƒ }|tkr| j| _nj|tkr\| jjtd ddœƒ d| j	d< | jj| j	ƒ | j
| _n*| jjtd ddœƒ | j j|ƒ | j| _dS )Nr(   z!expected-doctype-name-but-got-eof)r)   r*   Fr¼   zneed-space-after-doctypeT)r   r<   r
   ÚbeforeDoctypeNameStater   r   r+   r=   r   r    r   rC   )r#   r*   r&   r&   r'   rÆ     s    





zHTMLTokenizer.doctypeStatec             C   sÜ   | j jƒ }|tkrnÄ|dkrT| jjtd ddœƒ d| jd< | jj| jƒ | j| _n„|dkr†| jjtd ddœƒ d	| jd
< | j	| _nR|t
krÆ| jjtd ddœƒ d| jd< | jj| jƒ | j| _n|| jd
< | j	| _dS )Nr|   r(   z+expected-doctype-name-but-got-right-bracket)r)   r*   Fr¼   rl   zinvalid-codepointu   ï¿½rb   z!expected-doctype-name-but-got-eofT)r   r<   r
   r+   r=   r   r    r   r   ÚdoctypeNameStater   )r#   r*   r&   r&   r'   rÓ   *  s.    










z$HTMLTokenizer.beforeDoctypeNameStatec             C   s  | j jƒ }|tkr2| jd jtƒ| jd< | j| _nØ|dkrh| jd jtƒ| jd< | jj	| jƒ | j
| _n¢|dkr¢| jj	td ddœƒ | jd  d7  < | j| _nh|tkrø| jj	td ddœƒ d	| jd
< | jd jtƒ| jd< | jj	| jƒ | j
| _n| jd  |7  < dS )Nrb   r|   rl   r(   zinvalid-codepoint)r)   r*   u   ï¿½zeof-in-doctype-nameFr¼   T)r   r<   r
   r    rf   r   ÚafterDoctypeNameStater   r+   r=   r   r   rÔ   r   )r#   r*   r&   r&   r'   rÔ   D  s,    







zHTMLTokenizer.doctypeNameStatec             C   sR  | j jƒ }|tkr�n8|dkr8| jj| jƒ | j| _�n|tkr†d| jd< | j j	|ƒ | jjt
d ddœƒ | jj| jƒ | j| _� nÈ|d!krÊd	}x$d'D ]}| j jƒ }||kr˜d}P q˜W |rÈ| j| _d	S nJ|d(k�rd	}x(d.D ] }| j jƒ }||k� rÞd}P � qÞW |�r| j| _d	S | j j	|ƒ | jjt
d dd|id œƒ d| jd< | j| _d	S )/Nr|   Fr¼   r(   zeof-in-doctype)r)   r*   rµ   r¶   TÚuÚUÚbÚBÚlÚLÚiÚIrH   r°   ÚsÚSr³   r´   r±   r²   r·   r¸   ÚmÚMz*expected-space-or-right-bracket-in-doctyper*   )r)   r*   r4   )rµ   r¶   ©rÖ   r×   ©rØ   rÙ   ©rÚ   rÛ   ©rÜ   rÝ   ©rH   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   rC   r   ÚafterDoctypePublicKeywordStateÚafterDoctypeSystemKeywordStateÚbogusDoctypeState)r#   r*   rÌ   rÍ   r&   r&   r'   rÕ   ]  sT    







z#HTMLTokenizer.afterDoctypeNameStatec             C   s¨   | j jƒ }|tkr| j| _nˆ|d
krP| jjtd ddœƒ | j j|ƒ | j| _nT|t	kr�| jjtd ddœƒ d| j
d< | jj| j
ƒ | j| _n| j j|ƒ | j| _d	S )Nr�   rž   r(   zunexpected-char-in-doctype)r)   r*   zeof-in-doctypeFr¼   T)r�   rž   )r   r<   r
   Ú"beforeDoctypePublicIdentifierStater   r+   r=   r   rC   r   r    r   )r#   r*   r&   r&   r'   rì   �  s"    






z,HTMLTokenizer.afterDoctypePublicKeywordStatec             C   sø   | j jƒ }|tkrnà|dkr0d| jd< | j| _nÄ|dkrLd| jd< | j| _n¨|dkrŒ| jjt	d ddœƒ d	| jd
< | jj| jƒ | j
| _nh|tkrÌ| jjt	d ddœƒ d	| jd
< | jj| jƒ | j
| _n(| jjt	d ddœƒ d	| jd
< | j| _dS )Nrž   r2   rº   r�   r|   r(   zunexpected-end-of-doctype)r)   r*   Fr¼   zeof-in-doctypezunexpected-char-in-doctypeT)r   r<   r
   r    Ú(doctypePublicIdentifierDoubleQuotedStater   Ú(doctypePublicIdentifierSingleQuotedStater+   r=   r   r   r   rî   )r#   r*   r&   r&   r'   rï   ¤  s4    












z0HTMLTokenizer.beforeDoctypePublicIdentifierStatec             C   sä   | j jƒ }|dkr| j| _nÄ|dkrN| jjtd ddœƒ | jd  d7  < n’|dkrŽ| jjtd d	dœƒ d
| jd< | jj| jƒ | j| _nR|t	krÎ| jjtd ddœƒ d
| jd< | jj| jƒ | j| _n| jd  |7  < dS )Nrž   rl   r(   zinvalid-codepoint)r)   r*   rº   u   ï¿½r|   zunexpected-end-of-doctypeFr¼   zeof-in-doctypeT)
r   r<   Ú!afterDoctypePublicIdentifierStater   r+   r=   r   r    r   r   )r#   r*   r&   r&   r'   rð   Á  s*    








z6HTMLTokenizer.doctypePublicIdentifierDoubleQuotedStatec             C   sä   | j jƒ }|dkr| j| _nÄ|dkrN| jjtd ddœƒ | jd  d7  < n’|dkrŽ| jjtd d	dœƒ d
| jd< | jj| jƒ | j| _nR|t	krÎ| jjtd ddœƒ d
| jd< | jj| jƒ | j| _n| jd  |7  < dS )Nr�   rl   r(   zinvalid-codepoint)r)   r*   rº   u   ï¿½r|   zunexpected-end-of-doctypeFr¼   zeof-in-doctypeT)
r   r<   rò   r   r+   r=   r   r    r   r   )r#   r*   r&   r&   r'   rñ   Ù  s*    








z6HTMLTokenizer.doctypePublicIdentifierSingleQuotedStatec             C   s  | j jƒ }|tkr| j| _nì|dkr<| jj| jƒ | j| _nÌ|dkrn| jjt	d ddœƒ d| jd< | j
| _nš|dkr | jjt	d ddœƒ d| jd< | j| _nh|tkrà| jjt	d d	dœƒ d
| jd< | jj| jƒ | j| _n(| jjt	d ddœƒ d
| jd< | j| _dS )Nr|   rž   r(   zunexpected-char-in-doctype)r)   r*   r2   r»   r�   zeof-in-doctypeFr¼   T)r   r<   r
   Ú-betweenDoctypePublicAndSystemIdentifiersStater   r+   r=   r    r   r   Ú(doctypeSystemIdentifierDoubleQuotedStateÚ(doctypeSystemIdentifierSingleQuotedStater   rî   )r#   r*   r&   r&   r'   rò   ñ  s6    













z/HTMLTokenizer.afterDoctypePublicIdentifierStatec             C   sØ   | j jƒ }|tkrnÀ|dkr4| jj| jƒ | j| _n |dkrPd| jd< | j| _n„|dkrld| jd< | j	| _nh|t
kr¬| jjtd ddœƒ d	| jd
< | jj| jƒ | j| _n(| jjtd ddœƒ d	| jd
< | j| _dS )Nr|   rž   r2   r»   r�   r(   zeof-in-doctype)r)   r*   Fr¼   zunexpected-char-in-doctypeT)r   r<   r
   r+   r=   r    r   r   rô   rõ   r   r   rî   )r#   r*   r&   r&   r'   ró     s.    










z;HTMLTokenizer.betweenDoctypePublicAndSystemIdentifiersStatec             C   s¨   | j jƒ }|tkr| j| _nˆ|d
krP| jjtd ddœƒ | j j|ƒ | j| _nT|t	kr�| jjtd ddœƒ d| j
d< | jj| j
ƒ | j| _n| j j|ƒ | j| _d	S )Nr�   rž   r(   zunexpected-char-in-doctype)r)   r*   zeof-in-doctypeFr¼   T)r�   rž   )r   r<   r
   Ú"beforeDoctypeSystemIdentifierStater   r+   r=   r   rC   r   r    r   )r#   r*   r&   r&   r'   rí   )  s"    






z,HTMLTokenizer.afterDoctypeSystemKeywordStatec             C   sø   | j jƒ }|tkrnà|dkr0d| jd< | j| _nÄ|dkrLd| jd< | j| _n¨|dkrŒ| jjt	d ddœƒ d	| jd
< | jj| jƒ | j
| _nh|tkrÌ| jjt	d ddœƒ d	| jd
< | jj| jƒ | j
| _n(| jjt	d ddœƒ d	| jd
< | j| _dS )Nrž   r2   r»   r�   r|   r(   zunexpected-char-in-doctype)r)   r*   Fr¼   zeof-in-doctypeT)r   r<   r
   r    rô   r   rõ   r+   r=   r   r   r   rî   )r#   r*   r&   r&   r'   rö   =  s4    












z0HTMLTokenizer.beforeDoctypeSystemIdentifierStatec             C   sä   | j jƒ }|dkr| j| _nÄ|dkrN| jjtd ddœƒ | jd  d7  < n’|dkrŽ| jjtd d	dœƒ d
| jd< | jj| jƒ | j| _nR|t	krÎ| jjtd ddœƒ d
| jd< | jj| jƒ | j| _n| jd  |7  < dS )Nrž   rl   r(   zinvalid-codepoint)r)   r*   r»   u   ï¿½r|   zunexpected-end-of-doctypeFr¼   zeof-in-doctypeT)
r   r<   Ú!afterDoctypeSystemIdentifierStater   r+   r=   r   r    r   r   )r#   r*   r&   r&   r'   rô   Z  s*    








z6HTMLTokenizer.doctypeSystemIdentifierDoubleQuotedStatec             C   sä   | j jƒ }|dkr| j| _nÄ|dkrN| jjtd ddœƒ | jd  d7  < n’|dkrŽ| jjtd d	dœƒ d
| jd< | jj| jƒ | j| _nR|t	krÎ| jjtd ddœƒ d
| jd< | jj| jƒ | j| _n| jd  |7  < dS )Nr�   rl   r(   zinvalid-codepoint)r)   r*   r»   u   ï¿½r|   zunexpected-end-of-doctypeFr¼   zeof-in-doctypeT)
r   r<   r÷   r   r+   r=   r   r    r   r   )r#   r*   r&   r&   r'   rõ   r  s*    








z6HTMLTokenizer.doctypeSystemIdentifierSingleQuotedStatec             C   s–   | j jƒ }|tkrn~|dkr4| jj| jƒ | j| _n^|tkrt| jjt	d ddœƒ d| jd< | jj| jƒ | j| _n| jjt	d ddœƒ | j
| _dS )	Nr|   r(   zeof-in-doctype)r)   r*   Fr¼   zunexpected-char-in-doctypeT)r   r<   r
   r+   r=   r    r   r   r   r   rî   )r#   r*   r&   r&   r'   r÷   Š  s     





z/HTMLTokenizer.afterDoctypeSystemIdentifierStatec             C   sZ   | j jƒ }|dkr*| jj| jƒ | j| _n,|tkrV| j j|ƒ | jj| jƒ | j| _n dS )Nr|   T)	r   r<   r+   r=   r    r   r   r   rC   )r#   r*   r&   r&   r'   rî   �  s    


zHTMLTokenizer.bogusDoctypeStatec             C   sü   g }x€|j | jjdƒƒ |j | jjdƒƒ | jjƒ }|tkr@P q|dksLt‚|d dd … dkrx|d d d… |d< P q|j |ƒ qW dj|ƒ}|jdƒ}|dkrÖx&t|ƒD ]}| j	j t
d	 d
dœƒ q¬W |jddƒ}|rð| j	j t
d |dœƒ | j| _dS )Nú]r|   r	   é   z]]r2   rl   r   r(   zinvalid-codepoint)r)   r*   u   ï¿½rR   TrS   éþÿÿÿrS   rú   rS   )r=   r   ro   r<   r   ÚAssertionErrorr?   ÚcountÚranger+   r   r«   r   r   )r#   r*   r<   Ú	nullCountr¤   r&   r&   r'   rË   «  s0    



zHTMLTokenizer.cdataSectionState)N)NF)NÚ__name__Ú
__module__Ú__qualname__Ú__doc__r"   r/   rJ   r`   ra   rk   r   rm   rs   rq   ru   rw   rx   rn   r   r€   rr   r…   r†   rt   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Ë   Ú__classcell__r&   r&   )r%   r'   r      s”   H
P#

6 "-3r   N)r   r   ) Ú
__future__r   r   r   Zpip._vendor.sixr   rA   Úcollectionsr   r   Úsysr   Ú	constantsr
   r   r   r   r   r   r   r   r   r   Ú_inputstreamr   Ú_trier   rT   Údictrg   Úobjectr   r&   r&   r&   r'   Ú<module>   s    