
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
B;ˆWšÉ ã               @   sF  d dl mZmZmZ d dlmZmZmZ d dlZyd dl	m
Z
 W n  ek
r`   d dlm
Z
 Y nX ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZmZmZmZmZmZmZmZmZmZm Z!m"Z"m#Z#m$Z$m%Z% d!dd„Z&d"dd„Z'dd„ Z(G dd„ de)ƒZ*ej+dd„ ƒZ,dd„ Z-d#dd„Z.G dd „ d e/ƒZ0dS )$é    )Úabsolute_importÚdivisionÚunicode_literals)Úwith_metaclassÚviewkeysÚPY3N)ÚOrderedDicté   )Ú_inputstream)Ú
_tokenizer)Útreebuilders)ÚMarker)Ú_utils)ÚspaceCharactersÚasciiUpper2LowerÚspecialElementsÚheadingElementsÚcdataElementsÚrcdataElementsÚ
tokenTypesÚtagTokenTypesÚ
namespacesÚhtmlIntegrationPointElementsÚ"mathmlTextIntegrationPointElementsÚadjustForeignAttributesÚadjustMathMLAttributesÚadjustSVGAttributesÚEÚReparseExceptionÚetreeTc             K   s$   t j|ƒ}t||d�}|j| f|ŽS )z.Parse a string or file-like object into a tree)ÚnamespaceHTMLElements)r   ÚgetTreeBuilderÚ
HTMLParserÚparse)ÚdocÚtreebuilderr    ÚkwargsÚtbÚp© r)   ú!/usr/lib/python3.6/html5parser.pyr#      s    
r#   Údivc             K   s,   t j|ƒ}t||d�}|j| fd|i|—ŽS )N)r    Ú	container)r   r!   r"   ÚparseFragment)r$   r,   r%   r    r&   r'   r(   r)   r)   r*   r-   &   s    
r-   c                s   G ‡ fdd„dt ƒ}|S )Nc                   s   e Zd Z‡ fdd„ZdS )z-method_decorator_metaclass.<locals>.Decoratedc                sB   x0|j ƒ D ]$\}}t|tjƒr&ˆ |ƒ}|||< q
W tj| |||ƒS )N)ÚitemsÚ
isinstanceÚtypesÚFunctionTypeÚtypeÚ__new__)ÚmetaZ	classnameÚbasesZ	classDictZattributeNameZ	attribute)Úfunctionr)   r*   r3   .   s
    z5method_decorator_metaclass.<locals>.Decorated.__new__N)Ú__name__Ú
__module__Ú__qualname__r3   r)   )r6   r)   r*   Ú	Decorated-   s   r:   )r2   )r6   r:   r)   )r6   r*   Úmethod_decorator_metaclass,   s    r;   c               @   sª   e Zd ZdZd+dd„Zd,dd	„Zd
d„ Zedd„ ƒZdd„ Z	dd„ Z
dd„ Z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S ).r"   zZHTML parser. Generates a tree structure from a stream of (possibly
        malformed) HTMLNFTc                sL   |ˆ _ |dkrtjdƒ}||ƒˆ _g ˆ _t‡ fdd„t|ƒjƒ D ƒƒˆ _dS )a  
        strict - raise an exception when a parse error is encountered

        tree - a treebuilder class controlling the type of tree that will be
        returned. Built in treebuilders can be accessed through
        html5lib.treebuilders.getTreeBuilder(treeType)
        Nr   c                s    g | ]\}}||ˆ ˆ j ƒf‘qS r)   )Útree)Ú.0ÚnameÚcls)Úselfr)   r*   ú
<listcomp>M   s    z'HTMLParser.__init__.<locals>.<listcomp>)	Ústrictr   r!   r<   ÚerrorsÚdictÚ	getPhasesr.   Úphases)r@   r<   rB   r    Údebugr)   )r@   r*   Ú__init__<   s    


zHTMLParser.__init__r+   c             K   sh   || _ || _|| _tj|fd| i|—Ž| _| jƒ  y| jƒ  W n$ tk
rb   | jƒ  | jƒ  Y nX d S )NÚparser)	ÚinnerHTMLModer,   Ú	scriptingr   ZHTMLTokenizerÚ	tokenizerÚresetÚmainLoopr   )r@   ÚstreamÚ	innerHTMLr,   rK   r&   r)   r)   r*   Ú_parseP   s    zHTMLParser._parsec             C   sÄ   | j jƒ  d| _g | _g | _d| _| jrœ| jjƒ | _	| j	t
krL| jj| j_n0| j	tkrd| jj| j_n| j	dkr|| jj| j_n | jd | _| jjƒ  | jƒ  nd| _	| jd | _d | _d | _d| _d S )NFz	no quirksÚ	plaintextÚ
beforeHtmlÚinitialT)r<   rM   ÚfirstStartTagrC   ÚlogÚ
compatModerJ   r,   ÚlowerrP   r   rL   ÚrcdataStateÚstater   ÚrawtextStateÚplaintextStaterF   ÚphaseÚinsertHtmlElementÚresetInsertionModeZ	lastPhaseZbeforeRCDataPhaseÚ
framesetOK)r@   r)   r)   r*   rM   ^   s*    





zHTMLParser.resetc             C   s   t | dƒsdS | jjjd jS )z”The name of the character encoding
        that was used to decode the input stream,
        or :obj:`None` if that is not determined yet.

        rL   Nr   )ÚhasattrrL   rO   ÚcharEncodingr>   )r@   r)   r)   r*   ÚdocumentEncoding€   s    
zHTMLParser.documentEncodingc             C   sJ   |j dkr6|jtd kr6d|jko4|jd jtƒdkS |j|j ftkS d S )Nzannotation-xmlÚmathmlÚencodingú	text/htmlúapplication/xhtml+xml)rf   rg   )r>   Ú	namespacer   Ú
attributesÚ	translater   r   )r@   Úelementr)   r)   r*   ÚisHTMLIntegrationPoint‹   s    


z!HTMLParser.isHTMLIntegrationPointc             C   s   |j |jftkS )N)rh   r>   r   )r@   rk   r)   r)   r*   ÚisMathMLTextIntegrationPoint•   s    z'HTMLParser.isMathMLTextIntegrationPointc             C   sj  t d }t d }t d }t d }t d }t d }t d }�xø| jƒ D �]ê}d }	|}
�x¬|
d k	�r |
}	| jjrx| jjd nd }|r†|jnd }|r”|jnd }|
d	 }||krÆ| j|
d
 |
jdi ƒƒ d }
qVt| jjƒdk�sl|| jj	k�sl| j
|ƒ�r ||k�r|d tddgƒk�sl|||fk�sl|td k�rP|dk�rP||k�rP|d dk�sl| j|ƒ�rt||||fk�rt| j}n
| jd }||k�r”|j|
ƒ}
qV||k�rª|j|
ƒ}
qV||k�rÀ|j|
ƒ}
qV||k�rÖ|j|
ƒ}
qV||k�rì|j|
ƒ}
qV||krV|j|
ƒ}
qVW ||krD|	d rD|	d  rD| jdd|	d iƒ qDW d}g }x(|�rd|j| jƒ | jjƒ }|�r>�q>W d S )NÚ
CharactersZSpaceCharactersÚStartTagÚEndTagÚCommentZDoctypeÚ
ParseErrorr	   r2   ÚdataÚdatavarsr   r>   ZmglyphZ
malignmarkrd   zannotation-xmlÚsvgÚinForeignContentÚselfClosingÚselfClosingAcknowledgedz&non-void-element-with-trailing-solidusTéÿÿÿÿ)r   ÚnormalizedTokensr<   ÚopenElementsrh   r>   Ú
parseErrorÚgetÚlenÚdefaultNamespacerm   Ú	frozensetr   rl   r]   rF   ÚprocessCharactersÚprocessSpaceCharactersÚprocessStartTagÚprocessEndTagÚprocessCommentÚprocessDoctypeÚappendÚ
processEOF)r@   ZCharactersTokenZSpaceCharactersTokenZStartTagTokenZEndTagTokenZCommentTokenZDoctypeTokenZParseErrorTokenÚtokenZ
prev_tokenÚ	new_tokenÚcurrentNodeZcurrentNodeNamespaceZcurrentNodeNamer2   r]   Z	reprocessrF   r)   r)   r*   rN   ˜   sp    










zHTMLParser.mainLoopc             c   s    x| j D ]}| j|ƒV  qW d S )N)rL   ÚnormalizeToken)r@   r‰   r)   r)   r*   rz   Û   s    zHTMLParser.normalizedTokensc             O   s    | j |ddf|ž|Ž | jjƒ S )a²  Parse a HTML document into a well-formed tree

        stream - a filelike object or string containing the HTML to be parsed

        The optional encoding parameter must be a string that indicates
        the encoding.  If specified, that encoding will be used,
        regardless of any BOM or later declaration (such as in a meta
        element)

        scripting - treat noscript elements as if javascript was turned on
        FN)rQ   r<   ZgetDocument)r@   rO   Úargsr&   r)   r)   r*   r#   ß   s    zHTMLParser.parsec             O   s   | j |df|ž|Ž | jjƒ S )a2  Parse a HTML fragment into a well-formed tree fragment

        container - name of the element we're setting the innerHTML property
        if set to None, default to 'div'

        stream - a filelike object or string containing the HTML to be parsed

        The optional encoding parameter must be a string that indicates
        the encoding.  If specified, that encoding will be used,
        regardless of any BOM or later declaration (such as in a meta
        element)

        scripting - treat noscript elements as if javascript was turned on
        T)rQ   r<   ZgetFragment)r@   rO   r�   r&   r)   r)   r*   r-   î   s    zHTMLParser.parseFragmentúXXX-undefined-errorc             C   s@   |d kri }| j j| jjjƒ ||fƒ | jr<tt| | ƒ‚d S )N)rC   r‡   rL   rO   ZpositionrB   rr   r   )r@   Ú	errorcodert   r)   r)   r*   r|      s
    zHTMLParser.parseErrorc             C   sT   |d t d krP|d }t|ƒ|d< t|ƒt|d ƒkrP|d j|ddd… ƒ |S )z3 HTML5 specific normalizations to the token stream r2   ro   rs   Nr	   ry   )r   r   r~   Úupdate)r@   r‰   Úrawr)   r)   r*   rŒ     s    zHTMLParser.normalizeTokenc             C   s   t |tƒ d S )N)Úadjust_attributesr   )r@   r‰   r)   r)   r*   r     s    z!HTMLParser.adjustMathMLAttributesc             C   s   t |tƒ d S )N)r’   r   )r@   r‰   r)   r)   r*   r     s    zHTMLParser.adjustSVGAttributesc             C   s   t |tƒ d S )N)r’   ÚadjustForeignAttributesMap)r@   r‰   r)   r)   r*   r     s    z"HTMLParser.adjustForeignAttributesc             C   s   | j jƒ  d S )N)rI   r]   )r@   r‰   r)   r)   r*   ÚreparseTokenNormal  s    zHTMLParser.reparseTokenNormalc             C   s¸   d}ddddddddddd	d	d
ddœ}x†| j jd d d… D ]p}|j}d }|| j jd krbd}| j}|dkrj| r€|j| j jkr€q:||krš| j||  }P q:|r:| jd	 }P q:W || _d S )NFÚinSelectÚinCellÚinRowÚinTableBodyÚ	inCaptionÚinColumnGroupÚinTableÚinBodyÚ
inFramesetÚ
beforeHead)ÚselectÚtdÚthÚtrÚtbodyÚtheadÚtfootÚcaptionÚcolgroupÚtableÚheadÚbodyÚframesetÚhtmlr	   r   TrŸ   r§   r©   r¬   ry   )rŸ   r§   r©   r¬   )r<   r{   r>   rP   rh   r   rF   r]   )r@   ZlastZnewModesÚnodeZnodeNameZ	new_phaser)   r)   r*   r_   !  s>    
zHTMLParser.resetInsertionModec             C   sF   | j j|ƒ |dkr"| jj| j_n| jj| j_| j| _| jd | _dS )zYGeneric RCDATA/RAWTEXT Parsing algorithm
        contentType - RCDATA or RAWTEXT
        ÚRAWTEXTÚtextN)	r<   ÚinsertElementrL   r[   rZ   rY   r]   ÚoriginalPhaserF   )r@   r‰   ZcontentTyper)   r)   r*   ÚparseRCDataRawtextM  s    zHTMLParser.parseRCDataRawtext)NFTF)Fr+   F)rŽ   N)r7   r8   r9   Ú__doc__rH   rQ   rM   Úpropertyrc   rl   rm   rN   rz   r#   r-   r|   rŒ   r   r   r   r”   r_   r²   r)   r)   r)   r*   r"   8   s&   

"
C
,r"   c                s"  dd„ }dd„ }G dd„ dt || |ƒƒƒ‰ G dd„ dˆ ƒ}G d	d
„ d
ˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}	G ‡ fdd„dˆ ƒ}
G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd „d ˆ ƒ}G ‡ fd!d"„d"ˆ ƒ}G ‡ fd#d$„d$ˆ ƒ}G ‡ fd%d&„d&ˆ ƒ}G ‡ fd'd(„d(ˆ ƒ}G ‡ fd)d*„d*ˆ ƒ}G ‡ fd+d,„d,ˆ ƒ}G ‡ fd-d.„d.ˆ ƒ}G ‡ fd/d0„d0ˆ ƒ}G ‡ fd1d2„d2ˆ ƒ}G ‡ fd3d4„d4ˆ ƒ}|||||||	|
|||||||||||||||d5œS )6Nc                s(   t dd„ tjƒ D ƒƒ‰‡ ‡fdd„}|S )z4Logger that records which phase processes each tokenc             s   s   | ]\}}||fV  qd S )Nr)   )r=   ÚkeyÚvaluer)   r)   r*   ú	<genexpr>c  s    z)getPhases.<locals>.log.<locals>.<genexpr>c                s®   ˆ j jdƒršt|ƒdkrš|d }ydˆ|d  i}W n   ‚ Y nX |d tkr\|d |d< | jjj| jjjj | jj	j
j | j
j ˆ j |fƒ ˆ | f|ž|ŽS ˆ | f|ž|ŽS d S )NZprocessr   r2   r>   )r7   Ú
startswithr~   r   rI   rV   r‡   rL   rZ   r]   Ú	__class__)r@   r�   r&   r‰   Úinfo)r6   Ú
type_namesr)   r*   Úwrappedf  s    
z'getPhases.<locals>.log.<locals>.wrapped)rD   r   r.   )r6   r¼   r)   )r6   r»   r*   rV   a  s    zgetPhases.<locals>.logc             S   s   | rt |ƒS tS d S )N)r;   r2   )Zuse_metaclassZmetaclass_funcr)   r)   r*   ÚgetMetaclassz  s    zgetPhases.<locals>.getMetaclassc               @   sX   e Zd Z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S )zgetPhases.<locals>.PhasezNBase class for helper object that implements each phase of processing
        c             S   s   || _ || _d S )N)rI   r<   )r@   rI   r<   r)   r)   r*   rH   …  s    z!getPhases.<locals>.Phase.__init__c             S   s   t ‚d S )N)ÚNotImplementedError)r@   r)   r)   r*   rˆ   ‰  s    z#getPhases.<locals>.Phase.processEOFc             S   s   | j j|| j jd ƒ d S )Nr	   ry   )r<   ÚinsertCommentr{   )r@   r‰   r)   r)   r*   r…   Œ  s    z'getPhases.<locals>.Phase.processCommentc             S   s   | j jdƒ d S )Nzunexpected-doctype)rI   r|   )r@   r‰   r)   r)   r*   r†   ‘  s    z'getPhases.<locals>.Phase.processDoctypec             S   s   | j j|d ƒ d S )Nrs   )r<   Ú
insertText)r@   r‰   r)   r)   r*   r�   ”  s    z*getPhases.<locals>.Phase.processCharactersc             S   s   | j j|d ƒ d S )Nrs   )r<   rÀ   )r@   r‰   r)   r)   r*   r‚   —  s    z/getPhases.<locals>.Phase.processSpaceCharactersc             S   s   | j |d  |ƒS )Nr>   )ÚstartTagHandler)r@   r‰   r)   r)   r*   rƒ   š  s    z(getPhases.<locals>.Phase.processStartTagc             S   sl   | j j r"|d dkr"| j jdƒ x<|d jƒ D ],\}}|| jjd jkr0|| jjd j|< q0W d| j _d S )Nr>   r¬   znon-html-rootrs   r   F)rI   rU   r|   r.   r<   r{   ri   )r@   r‰   Úattrr¶   r)   r)   r*   ÚstartTagHtml�  s    z%getPhases.<locals>.Phase.startTagHtmlc             S   s   | j |d  |ƒS )Nr>   )ÚendTagHandler)r@   r‰   r)   r)   r*   r„   §  s    z&getPhases.<locals>.Phase.processEndTagN)r7   r8   r9   r³   rH   rˆ   r…   r†   r�   r‚   rƒ   rÃ   r„   r)   r)   r)   r*   ÚPhase�  s   
rÅ   c               @   sL   e Z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S )zgetPhases.<locals>.InitialPhasec             S   s   d S )Nr)   )r@   r‰   r)   r)   r*   r‚   «  s    z6getPhases.<locals>.InitialPhase.processSpaceCharactersc             S   s   | j j|| j jƒ d S )N)r<   r¿   Údocument)r@   r‰   r)   r)   r*   r…   ®  s    z.getPhases.<locals>.InitialPhase.processCommentc          8   S   s  |d }|d }|d }|d }|dks@|d k	s@|d k	rL|dkrL| j jdƒ |d krXd}| jj|ƒ |dkrv|jtƒ}| � sÌ|d dk� sÌ|jdJƒ� sÌ|dKk� sÌ|jdLƒ� r¸|d k� sÌ|� rÖ|jƒ dDk� rÖdE| j _n*|jdMƒ� sø|jdNƒ�r |d k	�r dH| j _| j j	dI | j _
d S )ONr>   ÚpublicIdÚsystemIdÚcorrectr¬   zabout:legacy-compatzunknown-doctypeÚ ú*+//silmaril//dtd html pro v0r11 19970101//ú4-//advasoft ltd//dtd html 3.0 aswedit + extensions//ú*-//as//dtd html 3.0 aswedit + extensions//ú-//ietf//dtd html 2.0 level 1//ú-//ietf//dtd html 2.0 level 2//ú&-//ietf//dtd html 2.0 strict level 1//ú&-//ietf//dtd html 2.0 strict level 2//ú-//ietf//dtd html 2.0 strict//ú-//ietf//dtd html 2.0//ú-//ietf//dtd html 2.1e//ú-//ietf//dtd html 3.0//ú-//ietf//dtd html 3.2 final//ú-//ietf//dtd html 3.2//ú-//ietf//dtd html 3//ú-//ietf//dtd html level 0//ú-//ietf//dtd html level 1//ú-//ietf//dtd html level 2//ú-//ietf//dtd html level 3//ú"-//ietf//dtd html strict level 0//ú"-//ietf//dtd html strict level 1//ú"-//ietf//dtd html strict level 2//ú"-//ietf//dtd html strict level 3//ú-//ietf//dtd html strict//ú-//ietf//dtd html//ú(-//metrius//dtd metrius presentational//ú5-//microsoft//dtd internet explorer 2.0 html strict//ú.-//microsoft//dtd internet explorer 2.0 html//ú0-//microsoft//dtd internet explorer 2.0 tables//ú5-//microsoft//dtd internet explorer 3.0 html strict//ú.-//microsoft//dtd internet explorer 3.0 html//ú0-//microsoft//dtd internet explorer 3.0 tables//ú#-//netscape comm. corp.//dtd html//ú*-//netscape comm. corp.//dtd strict html//ú*-//o'reilly and associates//dtd html 2.0//ú3-//o'reilly and associates//dtd html extended 1.0//ú;-//o'reilly and associates//dtd html extended relaxed 1.0//úN-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//úE-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//ú$-//spyglass//dtd html 2.0 extended//ú+-//sq//dtd html 2.0 hotmetal + extensions//ú--//sun microsystems corp.//dtd hotjava html//ú4-//sun microsystems corp.//dtd hotjava strict html//ú-//w3c//dtd html 3 1995-03-24//ú-//w3c//dtd html 3.2 draft//ú-//w3c//dtd html 3.2 final//ú-//w3c//dtd html 3.2//ú-//w3c//dtd html 3.2s draft//ú-//w3c//dtd html 4.0 frameset//ú#-//w3c//dtd html 4.0 transitional//ú(-//w3c//dtd html experimental 19960712//ú&-//w3c//dtd html experimental 970421//ú-//w3c//dtd w3 html//ú-//w3o//dtd w3 html 3.0//ú#-//webtechs//dtd mozilla html 2.0//ú-//webtechs//dtd mozilla html//ú$-//w3o//dtd w3 html strict 3.0//en//ú"-/w3c/dtd html 4.0 transitional/enú -//w3c//dtd html 4.01 frameset//ú$-//w3c//dtd html 4.01 transitional//z:http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtdÚquirksú -//w3c//dtd xhtml 1.0 frameset//ú$-//w3c//dtd xhtml 1.0 transitional//zlimited quirksrS   )7rË   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  )r  r  )r  r  )rI   r|   r<   ZinsertDoctyperj   r   r¸   rX   rW   rF   r]   )r@   r‰   r>   rÇ   rÈ   rÉ   r)   r)   r*   r†   ±  s®    
                                                        

  
z.getPhases.<locals>.InitialPhase.processDoctypec             S   s   d| j _| j jd | j _d S )Nr  rS   )rI   rW   rF   r]   )r@   r)   r)   r*   ÚanythingElse  s    z,getPhases.<locals>.InitialPhase.anythingElsec             S   s   | j jdƒ | jƒ  |S )Nzexpected-doctype-but-got-chars)rI   r|   r	  )r@   r‰   r)   r)   r*   r�     s    z1getPhases.<locals>.InitialPhase.processCharactersc             S   s"   | j jdd|d iƒ | jƒ  |S )Nz"expected-doctype-but-got-start-tagr>   )rI   r|   r	  )r@   r‰   r)   r)   r*   rƒ     s    z/getPhases.<locals>.InitialPhase.processStartTagc             S   s"   | j jdd|d iƒ | jƒ  |S )Nz expected-doctype-but-got-end-tagr>   )rI   r|   r	  )r@   r‰   r)   r)   r*   r„     s    z-getPhases.<locals>.InitialPhase.processEndTagc             S   s   | j jdƒ | jƒ  dS )Nzexpected-doctype-but-got-eofT)rI   r|   r	  )r@   r)   r)   r*   rˆ   %  s    z*getPhases.<locals>.InitialPhase.processEOFN)r7   r8   r9   r‚   r…   r†   r	  r�   rƒ   r„   rˆ   r)   r)   r)   r*   ÚInitialPhaseª  s   _r
  c               @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )z"getPhases.<locals>.BeforeHtmlPhasec             S   s&   | j jtddƒƒ | jjd | j_d S )Nr¬   ro   rž   )r<   Z
insertRootÚimpliedTagTokenrI   rF   r]   )r@   r)   r)   r*   r^   ,  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc             S   s   | j ƒ  dS )NT)r^   )r@   r)   r)   r*   rˆ   1  s    z-getPhases.<locals>.BeforeHtmlPhase.processEOFc             S   s   | j j|| j jƒ d S )N)r<   r¿   rÆ   )r@   r‰   r)   r)   r*   r…   5  s    z1getPhases.<locals>.BeforeHtmlPhase.processCommentc             S   s   d S )Nr)   )r@   r‰   r)   r)   r*   r‚   8  s    z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc             S   s   | j ƒ  |S )N)r^   )r@   r‰   r)   r)   r*   r�   ;  s    z4getPhases.<locals>.BeforeHtmlPhase.processCharactersc             S   s    |d dkrd| j _| jƒ  |S )Nr>   r¬   T)rI   rU   r^   )r@   r‰   r)   r)   r*   rƒ   ?  s    z2getPhases.<locals>.BeforeHtmlPhase.processStartTagc             S   s4   |d dkr$| j jdd|d iƒ n| jƒ  |S d S )Nr>   r©   rª   r¬   Úbrzunexpected-end-tag-before-html)r©   rª   r¬   r  )rI   r|   r^   )r@   r‰   r)   r)   r*   r„   E  s
    z0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)
r7   r8   r9   r^   rˆ   r…   r‚   r�   rƒ   r„   r)   r)   r)   r*   ÚBeforeHtmlPhase*  s   r  c                   sX   e Zd Z‡ f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S )z"getPhases.<locals>.BeforeHeadPhasec                sV   ˆ j | ||ƒ tjd| jfd| jfgƒ| _| j| j_tjd| jfgƒ| _	| j
| j	_d S )Nr¬   r©   rª   r  )r©   rª   r¬   r  )rH   r   ÚMethodDispatcherrÃ   ÚstartTagHeadrÁ   ÚstartTagOtherÚdefaultÚendTagImplyHeadrÄ   ÚendTagOther)r@   rI   r<   )rÅ   r)   r*   rH   N  s    
z+getPhases.<locals>.BeforeHeadPhase.__init__c             S   s   | j tddƒƒ dS )Nr©   ro   T)r  r  )r@   r)   r)   r*   rˆ   \  s    z-getPhases.<locals>.BeforeHeadPhase.processEOFc             S   s   d S )Nr)   )r@   r‰   r)   r)   r*   r‚   `  s    z9getPhases.<locals>.BeforeHeadPhase.processSpaceCharactersc             S   s   | j tddƒƒ |S )Nr©   ro   )r  r  )r@   r‰   r)   r)   r*   r�   c  s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc             S   s   | j jd j|ƒS )Nrœ   )rI   rF   rƒ   )r@   r‰   r)   r)   r*   rÃ   g  s    z/getPhases.<locals>.BeforeHeadPhase.startTagHtmlc             S   s0   | j j|ƒ | j jd | j _| jjd | j_d S )Nr	   ÚinHeadry   )r<   r°   r{   ÚheadPointerrI   rF   r]   )r@   r‰   r)   r)   r*   r  j  s    z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc             S   s   | j tddƒƒ |S )Nr©   ro   )r  r  )r@   r‰   r)   r)   r*   r  o  s    z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc             S   s   | j tddƒƒ |S )Nr©   ro   )r  r  )r@   r‰   r)   r)   r*   r  s  s    z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc             S   s   | j jdd|d iƒ d S )Nzend-tag-after-implied-rootr>   )rI   r|   )r@   r‰   r)   r)   r*   r  w  s    z.getPhases.<locals>.BeforeHeadPhase.endTagOtherN)r7   r8   r9   rH   rˆ   r‚   r�   rÃ   r  r  r  r  r)   )rÅ   r)   r*   ÚBeforeHeadPhaseM  s   r  c                   s�   e Zd Z‡ f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!S )"zgetPhases.<locals>.InHeadPhasec                sŽ   ˆ j | ||ƒ tjd| jfd| jfd| jfd| jfd| jfd| jfd| j	fd| j
fgƒ| _| j| j_tjd| jfd| jfgƒ| _| j| j_d S )Nr¬   ÚtitleÚnoframesÚstyleÚnoscriptÚscriptÚbaseÚbasefontÚbgsoundÚcommandÚlinkr4   r©   r  rª   )r  r  )r  r  r  r  r   )r  r¬   rª   )rH   r   r  rÃ   ÚstartTagTitleÚstartTagNoFramesStyleÚstartTagNoscriptÚstartTagScriptÚstartTagBaseLinkCommandÚstartTagMetar  rÁ   r  r  Ú
endTagHeadÚendTagHtmlBodyBrrÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH   |  s     
z'getPhases.<locals>.InHeadPhase.__init__c             S   s   | j ƒ  dS )NT)r	  )r@   r)   r)   r*   rˆ   “  s    z)getPhases.<locals>.InHeadPhase.processEOFc             S   s   | j ƒ  |S )N)r	  )r@   r‰   r)   r)   r*   r�   —  s    z0getPhases.<locals>.InHeadPhase.processCharactersc             S   s   | j jd j|ƒS )Nrœ   )rI   rF   rƒ   )r@   r‰   r)   r)   r*   rÃ   ›  s    z+getPhases.<locals>.InHeadPhase.startTagHtmlc             S   s   | j jdƒ d S )Nz!two-heads-are-not-better-than-one)rI   r|   )r@   r‰   r)   r)   r*   r  ž  s    z+getPhases.<locals>.InHeadPhase.startTagHeadc             S   s$   | j j|ƒ | j jjƒ  d|d< d S )NTrx   )r<   r°   r{   Úpop)r@   r‰   r)   r)   r*   r%  ¡  s    z6getPhases.<locals>.InHeadPhase.startTagBaseLinkCommandc             S   s´   | j j|ƒ | j jjƒ  d|d< |d }| jjjjd dkr°d|krZ| jjjj|d ƒ nVd|kr°d|kr°|d j	ƒ d	kr°t
j|d jd
ƒƒ}t
j|ƒ}|jƒ }| jjjj|ƒ d S )NTrx   rs   r	   Z	tentativeÚcharsetZcontentz
http-equivzcontent-typezutf-8)r<   r°   r{   r)  rI   rL   rO   rb   ZchangeEncodingrX   r
   ZEncodingBytesÚencodeZContentAttrParserr#   )r@   r‰   ri   rs   rI   Úcodecr)   r)   r*   r&  ¦  s    
z+getPhases.<locals>.InHeadPhase.startTagMetac             S   s   | j j|dƒ d S )NZRCDATA)rI   r²   )r@   r‰   r)   r)   r*   r!  »  s    z,getPhases.<locals>.InHeadPhase.startTagTitlec             S   s   | j j|dƒ d S )Nr®   )rI   r²   )r@   r‰   r)   r)   r*   r"  ¾  s    z4getPhases.<locals>.InHeadPhase.startTagNoFramesStylec             S   s8   | j jr| j j|dƒ n| jj|ƒ | j jd | j _d S )Nr®   ÚinHeadNoscript)rI   rK   r²   r<   r°   rF   r]   )r@   r‰   r)   r)   r*   r#  Â  s    z/getPhases.<locals>.InHeadPhase.startTagNoscriptc             S   s<   | j j|ƒ | jjj| jj_| jj| j_| jjd | j_d S )Nr¯   )	r<   r°   rI   rL   ZscriptDataStaterZ   r]   r±   rF   )r@   r‰   r)   r)   r*   r$  É  s    z-getPhases.<locals>.InHeadPhase.startTagScriptc             S   s   | j ƒ  |S )N)r	  )r@   r‰   r)   r)   r*   r  Ï  s    z,getPhases.<locals>.InHeadPhase.startTagOtherc             S   s"   | j jjjƒ }| j jd | j _d S )NÚ	afterHead)rI   r<   r{   r)  rF   r]   )r@   r‰   r­   r)   r)   r*   r'  Ó  s    z)getPhases.<locals>.InHeadPhase.endTagHeadc             S   s   | j ƒ  |S )N)r	  )r@   r‰   r)   r)   r*   r(  Ø  s    z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tagr>   )rI   r|   )r@   r‰   r)   r)   r*   r  Ü  s    z*getPhases.<locals>.InHeadPhase.endTagOtherc             S   s   | j tdƒƒ d S )Nr©   )r'  r  )r@   r)   r)   r*   r	  ß  s    z+getPhases.<locals>.InHeadPhase.anythingElseN)r7   r8   r9   rH   rˆ   r�   rÃ   r  r%  r&  r!  r"  r#  r$  r  r'  r(  r  r	  r)   )rÅ   r)   r*   ÚInHeadPhase{  s    r/  c                   sx   e Zd Z‡ f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S )z&getPhases.<locals>.InHeadNoscriptPhasec                sf   ˆ j | ||ƒ tjd| jfd| jfd| jfgƒ| _| j| j_tjd	| j	fd
| j
fgƒ| _| j| j_d S )Nr¬   r  r  r   r4   r  r  r©   r  r  )r  r  r   r4   r  r  )r©   r  )rH   r   r  rÃ   r%  ÚstartTagHeadNoscriptrÁ   r  r  ÚendTagNoscriptÚendTagBrrÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH   ã  s    
z/getPhases.<locals>.InHeadNoscriptPhase.__init__c             S   s   | j jdƒ | jƒ  dS )Nzeof-in-head-noscriptT)rI   r|   r	  )r@   r)   r)   r*   rˆ   ó  s    z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc             S   s   | j jd j|ƒS )Nr  )rI   rF   r…   )r@   r‰   r)   r)   r*   r…   ø  s    z5getPhases.<locals>.InHeadNoscriptPhase.processCommentc             S   s   | j jdƒ | jƒ  |S )Nzchar-in-head-noscript)rI   r|   r	  )r@   r‰   r)   r)   r*   r�   û  s    z8getPhases.<locals>.InHeadNoscriptPhase.processCharactersc             S   s   | j jd j|ƒS )Nr  )rI   rF   r‚   )r@   r‰   r)   r)   r*   r‚      s    z=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharactersc             S   s   | j jd j|ƒS )Nrœ   )rI   rF   rƒ   )r@   r‰   r)   r)   r*   rÃ     s    z3getPhases.<locals>.InHeadNoscriptPhase.startTagHtmlc             S   s   | j jd j|ƒS )Nr  )rI   rF   rƒ   )r@   r‰   r)   r)   r*   r%    s    z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc             S   s   | j jdd|d iƒ d S )Nzunexpected-start-tagr>   )rI   r|   )r@   r‰   r)   r)   r*   r0  	  s    z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc             S   s"   | j jdd|d iƒ | jƒ  |S )Nzunexpected-inhead-noscript-tagr>   )rI   r|   r	  )r@   r‰   r)   r)   r*   r    s    z4getPhases.<locals>.InHeadNoscriptPhase.startTagOtherc             S   s"   | j jjjƒ }| j jd | j _d S )Nr  )rI   r<   r{   r)  rF   r]   )r@   r‰   r­   r)   r)   r*   r1    s    z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc             S   s"   | j jdd|d iƒ | jƒ  |S )Nzunexpected-inhead-noscript-tagr>   )rI   r|   r	  )r@   r‰   r)   r)   r*   r2    s    z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tagr>   )rI   r|   )r@   r‰   r)   r)   r*   r    s    z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc             S   s   | j tdƒƒ d S )Nr  )r1  r  )r@   r)   r)   r*   r	    s    z3getPhases.<locals>.InHeadNoscriptPhase.anythingElseN)r7   r8   r9   rH   rˆ   r…   r�   r‚   rÃ   r%  r0  r  r1  r2  r  r	  r)   )rÅ   r)   r*   ÚInHeadNoscriptPhaseâ  s   r3  c                   sp   e Zd Z‡ f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S )z!getPhases.<locals>.AfterHeadPhasec                sn   ˆ j | ||ƒ tjd| jfd| jfd| jfd| jfd| jfgƒ| _| j	| j_
tjd| jfgƒ| _| j| j_
d S )Nr¬   rª   r«   r  r  r  r   r4   r  r  r  r  r©   r  )	r  r  r  r   r4   r  r  r  r  )rª   r¬   r  )rH   r   r  rÃ   ÚstartTagBodyÚstartTagFramesetÚstartTagFromHeadr  rÁ   r  r  r(  rÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH   #  s     
z*getPhases.<locals>.AfterHeadPhase.__init__c             S   s   | j ƒ  dS )NT)r	  )r@   r)   r)   r*   rˆ   4  s    z,getPhases.<locals>.AfterHeadPhase.processEOFc             S   s   | j ƒ  |S )N)r	  )r@   r‰   r)   r)   r*   r�   8  s    z3getPhases.<locals>.AfterHeadPhase.processCharactersc             S   s   | j jd j|ƒS )Nrœ   )rI   rF   rƒ   )r@   r‰   r)   r)   r*   rÃ   <  s    z.getPhases.<locals>.AfterHeadPhase.startTagHtmlc             S   s(   d| j _| jj|ƒ | j jd | j _d S )NFrœ   )rI   r`   r<   r°   rF   r]   )r@   r‰   r)   r)   r*   r4  ?  s    z.getPhases.<locals>.AfterHeadPhase.startTagBodyc             S   s    | j j|ƒ | jjd | j_d S )Nr�   )r<   r°   rI   rF   r]   )r@   r‰   r)   r)   r*   r5  D  s    z2getPhases.<locals>.AfterHeadPhase.startTagFramesetc             S   st   | j jdd|d iƒ | jjj| jjƒ | j jd j|ƒ x4| jjd d d… D ]}|jdkrN| jjj	|ƒ P qNW d S )Nz#unexpected-start-tag-out-of-my-headr>   r  r	   r©   ry   )
rI   r|   r<   r{   r‡   r  rF   rƒ   r>   Úremove)r@   r‰   r­   r)   r)   r*   r6  H  s    
z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc             S   s   | j jdd|d iƒ d S )Nzunexpected-start-tagr>   )rI   r|   )r@   r‰   r)   r)   r*   r  R  s    z.getPhases.<locals>.AfterHeadPhase.startTagHeadc             S   s   | j ƒ  |S )N)r	  )r@   r‰   r)   r)   r*   r  U  s    z/getPhases.<locals>.AfterHeadPhase.startTagOtherc             S   s   | j ƒ  |S )N)r	  )r@   r‰   r)   r)   r*   r(  Y  s    z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tagr>   )rI   r|   )r@   r‰   r)   r)   r*   r  ]  s    z-getPhases.<locals>.AfterHeadPhase.endTagOtherc             S   s.   | j jtddƒƒ | jjd | j_d| j_d S )Nrª   ro   rœ   T)r<   r°   r  rI   rF   r]   r`   )r@   r)   r)   r*   r	  `  s    z.getPhases.<locals>.AfterHeadPhase.anythingElseN)r7   r8   r9   rH   rˆ   r�   rÃ   r4  r5  r6  r  r  r(  r  r	  r)   )rÅ   r)   r*   ÚAfterHeadPhase"  s   
r8  c                   s¨  e Zd Z‡ f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d'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWdX„ Z.dYdZ„ Z/d[d\„ Z0d]d^„ Z1d_d`„ Z2dadb„ Z3dcdd„ Z4dedf„ Z5dgS )hzgetPhases.<locals>.InBodyPhasec          ,      sž  ˆ j | ||ƒ | j| _tjd| jfdd| jfd| jfd| jfde| j	ft
| jfdf| jfd&| jfdg| jfd*| jfd+| jfdh| jfd8| jfd9| jfdi| jfd=| jfd>| jfdj| jfdk| jfdH| jfdI| jfdJ| jfdK| jfdL| jfdM| jfdN| jfdl| j fdQ| j!fdm| j"fdn| j#fdV| j$fdW| j%fdo| j&fg!ƒ| _'| j(| j'_)tjd| j*fd| j+fdp| j,fd&| j-fd | j.fdq| j/ft
| j0fdr| j1fds| j2fd@| j3fg
ƒ| _4| j5| j4_)d S )tNr¬   r  r  r  r  r   r4   r  r  r  rª   r«   ÚaddressÚarticleÚasideÚ
blockquoteÚcenterÚdetailsÚdirr+   ÚdlÚfieldsetÚ
figcaptionÚfigureÚfooterÚheaderÚhgroupÚmainÚmenuÚnavÚolr(   ÚsectionÚsummaryÚulÚpreÚlistingÚformÚliÚddÚdtrR   ÚaÚbÚbigÚcodeÚemÚfontÚiÚsÚsmallÚstrikeÚstrongÚttÚuÚnobrÚbuttonÚappletÚmarqueeÚobjectZxmpr¨   Úarear  ÚembedÚimgÚkeygenÚwbrÚparamÚsourceÚtrackÚinputÚhrÚimageÚisindexÚtextareaZiframer  Únoembedr  rŸ   ÚrpÚrtÚoptionÚoptgroupZmathru   r¦   Úcolr§   Úframer©   r£   r    r¥   r¡   r¤   r¢   Údialog)	r  r  r  r  r   r4   r  r  r  )r9  r:  r;  r<  r=  r>  r?  r+   r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  r(   rK  rL  rM  )rN  rO  )rQ  rR  rS  )rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  )rc  rd  re  )rf  r  rg  rh  ri  rj  )rk  rl  rm  )rs  r  )rt  ru  )rv  rw  )r¦   rx  r§   ry  r©   r£   r    r¥   r¡   r¤   r¢   )r9  r:  r;  r<  rb  r=  r>  rz  r?  r+   r@  rA  rB  rC  rD  rE  rF  rO  rG  rH  rI  rJ  rN  rK  rL  rM  )rR  rS  rQ  )rT  rU  rV  rW  rX  rY  rZ  ra  r[  r\  r]  r^  r_  r`  )rc  rd  re  )6rH   ÚprocessSpaceCharactersNonPrer‚   r   r  rÃ   ÚstartTagProcessInHeadr4  r5  ÚstartTagClosePr   ÚstartTagHeadingÚstartTagPreListingÚstartTagFormÚstartTagListItemÚstartTagPlaintextÚ	startTagAÚstartTagFormattingÚstartTagNobrÚstartTagButtonÚstartTagAppletMarqueeObjectÚstartTagXmpÚstartTagTableÚstartTagVoidFormattingÚstartTagParamSourceÚstartTagInputÚ
startTagHrÚstartTagImageÚstartTagIsIndexÚstartTagTextareaÚstartTagIFramer#  ÚstartTagRawtextÚstartTagSelectÚstartTagRpRtÚstartTagOptÚstartTagMathÚstartTagSvgÚstartTagMisplacedrÁ   r  r  Ú
endTagBodyÚ
endTagHtmlÚendTagBlockÚ
endTagFormÚendTagPÚendTagListItemÚendTagHeadingÚendTagFormattingÚendTagAppletMarqueeObjectr2  rÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH   h  s~           
    z'getPhases.<locals>.InBodyPhase.__init__c             S   s$   |j |j ko"|j|jko"|j|jkS )N)r>   rh   ri   )r@   Znode1Znode2r)   r)   r*   ÚisMatchingFormattingElement¯  s    z:getPhases.<locals>.InBodyPhase.isMatchingFormattingElementc             S   sŠ   | j j|ƒ | j jd }g }x<| j jd d d… D ]&}|tkr@P q0| j||ƒr0|j|ƒ q0W t|ƒdkrx| j jj|d ƒ | j jj|ƒ d S )Nr	   é   ry   ry   ry   )	r<   r°   r{   ÚactiveFormattingElementsr   r¢  r‡   r~   r7  )r@   r‰   rk   ZmatchingElementsr­   r)   r)   r*   ÚaddFormattingElementµ  s    z3getPhases.<locals>.InBodyPhase.addFormattingElementc             S   s@   t dƒ}x2| jjd d d… D ]}|j|kr| jjdƒ P qW d S )NrR  rS  rQ  r(   r£   r    r¥   r¡   r¤   r¢   rª   r¬   r	   z expected-closing-tag-but-got-eof)rR  rS  rQ  r(   r£   r    r¥   r¡   r¤   r¢   rª   r¬   ry   )r€   r<   r{   r>   rI   r|   )r@   Zallowed_elementsr­   r)   r)   r*   rˆ   Æ  s     
z)getPhases.<locals>.InBodyPhase.processEOFc             S   sh   |d }| j | _|jdƒrJ| jjd jdkrJ| jjd	 jƒ  rJ|dd … }|rd| jjƒ  | jj|ƒ d S )
Nrs   Ú
r	   rN  rO  rr  ry   )rN  rO  rr  ry   )	r{  r‚   r¸   r<   r{   r>   Z
hasContentÚ#reconstructActiveFormattingElementsrÀ   )r@   r‰   rs   r)   r)   r*   Ú!processSpaceCharactersDropNewlineÐ  s    

z@getPhases.<locals>.InBodyPhase.processSpaceCharactersDropNewlinec             S   sT   |d dkrd S | j jƒ  | j j|d ƒ | jjrPtdd„ |d D ƒƒrPd| j_d S )Nrs   ú c             S   s   g | ]}|t k‘qS r)   )r   )r=   Úcharr)   r)   r*   rA   å  s   zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r<   r§  rÀ   rI   r`   Úany)r@   r‰   r)   r)   r*   r�   Ý  s    
z0getPhases.<locals>.InBodyPhase.processCharactersc             S   s   | j jƒ  | j j|d ƒ d S )Nrs   )r<   r§  rÀ   )r@   r‰   r)   r)   r*   r{  é  s    
z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec             S   s   | j jd j|ƒS )Nr  )rI   rF   rƒ   )r@   r‰   r)   r)   r*   r|  í  s    z4getPhases.<locals>.InBodyPhase.startTagProcessInHeadc             S   s€   | j jdddiƒ t| jjƒdks|| jjd jdkr6nFd| j _x<|d jƒ D ],\}}|| jjd jkrL|| jjd j|< qLW d S )Nzunexpected-start-tagr>   rª   r	   Frs   )	rI   r|   r~   r<   r{   r>   r`   r.   ri   )r@   r‰   rÂ   r¶   r)   r)   r*   r4  ð  s    z+getPhases.<locals>.InBodyPhase.startTagBodyc             S   s®   | j jdddiƒ t| jjƒdksª| jjd jdkr6nt| j js@nj| jjd jrj| jjd jj| jjd ƒ x"| jjd jdkrŒ| jjj	ƒ  qlW | jj
|ƒ | j jd | j _d S )	Nzunexpected-start-tagr>   r«   r	   rª   r¬   r�   ry   )rI   r|   r~   r<   r{   r>   r`   ÚparentÚremoveChildr)  r°   rF   r]   )r@   r‰   r)   r)   r*   r5  û  s    "z/getPhases.<locals>.InBodyPhase.startTagFramesetc             S   s.   | j jddd�r| jtdƒƒ | j j|ƒ d S )Nr(   rb  )Úvariant)r<   ÚelementInScoper�  r  r°   )r@   r‰   r)   r)   r*   r}  	  s    z-getPhases.<locals>.InBodyPhase.startTagClosePc             S   s>   | j jddd�r| jtdƒƒ | j j|ƒ d| j_| j| _d S )Nr(   rb  )r®  F)	r<   r¯  r�  r  r°   rI   r`   r¨  r‚   )r@   r‰   r)   r)   r*   r    s
    z1getPhases.<locals>.InBodyPhase.startTagPreListingc             S   sZ   | j jr| jjdddiƒ n:| j jddd�r:| jtdƒƒ | j j|ƒ | j jd | j _d S )	Nzunexpected-start-tagr>   rP  r(   rb  )r®  r	   ry   )	r<   ÚformPointerrI   r|   r¯  r�  r  r°   r{   )r@   r‰   r)   r)   r*   r€    s    z+getPhases.<locals>.InBodyPhase.startTagFormc             S   s¬   d| j _dgddgddgdœ}||d  }xLt| jjƒD ]<}|j|kr^| j jjt|jdƒƒ P |j	t
kr8|jdkr8P q8W | jjd
dd�rœ| j jjtd
dƒƒ | jj|ƒ d S )NFrQ  rS  rR  )rQ  rS  rR  r>   rp   r9  r+   r(   rb  )r®  )r9  r+   r(   )rI   r`   Úreversedr<   r{   r>   r]   r„   r  Ú	nameTupler   r¯  r°   )r@   r‰   ZstopNamesMapZ	stopNamesr­   r)   r)   r*   r�    s"    


z/getPhases.<locals>.InBodyPhase.startTagListItemc             S   s>   | j jddd�r| jtdƒƒ | j j|ƒ | jjj| jj_d S )Nr(   rb  )r®  )	r<   r¯  r�  r  r°   rI   rL   r\   rZ   )r@   r‰   r)   r)   r*   r‚  4  s    z0getPhases.<locals>.InBodyPhase.startTagPlaintextc             S   sb   | j jddd�r| jtdƒƒ | j jd jtkrR| jjdd|d iƒ | j jj	ƒ  | j j
|ƒ d S )Nr(   rb  )r®  r	   zunexpected-start-tagr>   ry   )r<   r¯  r�  r  r{   r>   r   rI   r|   r)  r°   )r@   r‰   r)   r)   r*   r~  :  s    z.getPhases.<locals>.InBodyPhase.startTagHeadingc             S   s~   | j jdƒ}|rf| jjddddœƒ | jtdƒƒ || j jkrL| j jj|ƒ || j jkrf| j jj|ƒ | j j	ƒ  | j
|ƒ d S )NrT  z$unexpected-start-tag-implies-end-tag)Ú	startNameÚendName)r<   Ú!elementInActiveFormattingElementsrI   r|   r   r  r{   r7  r¤  r§  r¥  )r@   r‰   ZafeAElementr)   r)   r*   rƒ  B  s    
z(getPhases.<locals>.InBodyPhase.startTagAc             S   s   | j jƒ  | j|ƒ d S )N)r<   r§  r¥  )r@   r‰   r)   r)   r*   r„  O  s    
z1getPhases.<locals>.InBodyPhase.startTagFormattingc             S   sP   | j jƒ  | j jdƒrB| jjddddœƒ | jtdƒƒ | j jƒ  | j|ƒ d S )Nra  z$unexpected-start-tag-implies-end-tag)r³  r´  )r<   r§  r¯  rI   r|   r„   r  r¥  )r@   r‰   r)   r)   r*   r…  S  s    

z+getPhases.<locals>.InBodyPhase.startTagNobrc             S   sT   | j jdƒr2| jjddddœƒ | jtdƒƒ |S | j jƒ  | j j|ƒ d| j_d S )Nrb  z$unexpected-start-tag-implies-end-tag)r³  r´  F)	r<   r¯  rI   r|   r„   r  r§  r°   r`   )r@   r‰   r)   r)   r*   r†  ]  s    
z-getPhases.<locals>.InBodyPhase.startTagButtonc             S   s0   | j jƒ  | j j|ƒ | j jjtƒ d| j_d S )NF)r<   r§  r°   r¤  r‡   r   rI   r`   )r@   r‰   r)   r)   r*   r‡  h  s    
z:getPhases.<locals>.InBodyPhase.startTagAppletMarqueeObjectc             S   sB   | j jddd�r| jtdƒƒ | j jƒ  d| j_| jj|dƒ d S )Nr(   rb  )r®  Fr®   )r<   r¯  r�  r  r§  rI   r`   r²   )r@   r‰   r)   r)   r*   rˆ  n  s
    
z*getPhases.<locals>.InBodyPhase.startTagXmpc             S   sR   | j jdkr*| jjddd�r*| jtdƒƒ | jj|ƒ d| j _| j jd | j _	d S )Nr  r(   rb  )r®  Fr›   )
rI   rW   r<   r¯  r„   r  r°   r`   rF   r]   )r@   r‰   r)   r)   r*   r‰  u  s    z,getPhases.<locals>.InBodyPhase.startTagTablec             S   s6   | j jƒ  | j j|ƒ | j jjƒ  d|d< d| j_d S )NTrx   F)r<   r§  r°   r{   r)  rI   r`   )r@   r‰   r)   r)   r*   rŠ  }  s
    
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc             S   s@   | j j}| j|ƒ d|d kr<|d d jtƒdkr<|| j _d S )Nr2   rs   Úhidden)rI   r`   rŠ  rj   r   )r@   r‰   r`   r)   r)   r*   rŒ  „  s
    
z,getPhases.<locals>.InBodyPhase.startTagInputc             S   s$   | j j|ƒ | j jjƒ  d|d< d S )NTrx   )r<   r°   r{   r)  )r@   r‰   r)   r)   r*   r‹  Œ  s    z2getPhases.<locals>.InBodyPhase.startTagParamSourcec             S   sJ   | j jddd�r| jtdƒƒ | j j|ƒ | j jjƒ  d|d< d| j_d S )Nr(   rb  )r®  Trx   F)	r<   r¯  r�  r  r°   r{   r)  rI   r`   )r@   r‰   r)   r)   r*   r�  ‘  s    z)getPhases.<locals>.InBodyPhase.startTagHrc             S   s6   | j jddddœƒ | jtdd|d |d d�ƒ d S )	Nzunexpected-start-tag-treated-asrp  rh  )ÚoriginalNameÚnewNamero   rs   rw   )ri   rw   )rI   r|   rƒ   r  )r@   r‰   r)   r)   r*   rŽ  ™  s
    
z,getPhases.<locals>.InBodyPhase.startTagImagec             S   s  | j jdddiƒ | jjrd S i }d|d kr>|d d |d< | jtdd|d�ƒ | jtd	dƒƒ | jtd
dƒƒ d|d krŒ|d d }nd}| jtd |dœƒ |d jƒ }d|kr¾|d= d|krÌ|d= d|d< | jtdd||d d�ƒ | j	td
ƒƒ | jtd	dƒƒ | j	tdƒƒ d S )Nzdeprecated-tagr>   rq  Úactionrs   rP  ro   )ri   ro  ZlabelÚpromptz3This is a searchable index. Enter search keywords: rn   )r2   rs   rn  rw   )ri   rw   )
rI   r|   r<   r°  rƒ   r  r�   r   Úcopyr„   )r@   r‰   Z
form_attrsrº  ri   r)   r)   r*   r�  ¡  s6    


z.getPhases.<locals>.InBodyPhase.startTagIsIndexc             S   s0   | j j|ƒ | jjj| jj_| j| _d| j_d S )NF)	r<   r°   rI   rL   rY   rZ   r¨  r‚   r`   )r@   r‰   r)   r)   r*   r�  À  s    z/getPhases.<locals>.InBodyPhase.startTagTextareac             S   s   d| j _| j|ƒ d S )NF)rI   r`   r’  )r@   r‰   r)   r)   r*   r‘  Æ  s    z-getPhases.<locals>.InBodyPhase.startTagIFramec             S   s"   | j jr| j|ƒ n
| j|ƒ d S )N)rI   rK   r’  r  )r@   r‰   r)   r)   r*   r#  Ê  s    z/getPhases.<locals>.InBodyPhase.startTagNoscriptc             S   s   | j j|dƒ dS )z8iframe, noembed noframes, noscript(if scripting enabled)r®   N)rI   r²   )r@   r‰   r)   r)   r*   r’  Ð  s    z.getPhases.<locals>.InBodyPhase.startTagRawtextc             S   s@   | j jd jdkr$| jjjtdƒƒ | j jƒ  | jj j|ƒ d S )Nr	   rv  ry   )	r<   r{   r>   rI   r]   r„   r  r§  r°   )r@   r‰   r)   r)   r*   r•  Ô  s    
z*getPhases.<locals>.InBodyPhase.startTagOptc             S   sŒ   | j jƒ  | j j|ƒ d| j_| jj| jjd | jjd | jjd | jjd | jjd | jjd fkrx| jjd | j_n| jjd	 | j_d S )
NFr›   r™   rš   r˜   r—   r–   ÚinSelectInTabler•   )r<   r§  r°   rI   r`   r]   rF   )r@   r‰   r)   r)   r*   r“  Ú  s    




z-getPhases.<locals>.InBodyPhase.startTagSelectc             S   sB   | j jdƒr2| j jƒ  | j jd jdkr2| jjƒ  | j j|ƒ d S )NÚrubyr	   ry   )r<   r¯  ÚgenerateImpliedEndTagsr{   r>   rI   r|   r°   )r@   r‰   r)   r)   r*   r”  è  s
    

z+getPhases.<locals>.InBodyPhase.startTagRpRtc             S   sZ   | j jƒ  | jj|ƒ | jj|ƒ td |d< | j j|ƒ |d rV| j jjƒ  d|d< d S )Nrd   rh   rw   Trx   )	r<   r§  rI   r   r   r   r°   r{   r)  )r@   r‰   r)   r)   r*   r–  ï  s    
z+getPhases.<locals>.InBodyPhase.startTagMathc             S   sZ   | j jƒ  | jj|ƒ | jj|ƒ td |d< | j j|ƒ |d rV| j jjƒ  d|d< d S )Nru   rh   rw   Trx   )	r<   r§  rI   r   r   r   r°   r{   r)  )r@   r‰   r)   r)   r*   r—  û  s    
z*getPhases.<locals>.InBodyPhase.startTagSvgc             S   s   | j jdd|d iƒ dS )a5   Elements that should be children of other elements that have a
            different insertion mode; here they are ignored
            "caption", "col", "colgroup", "frame", "frameset", "head",
            "option", "optgroup", "tbody", "td", "tfoot", "th", "thead",
            "tr", "noscript"
            zunexpected-start-tag-ignoredr>   N)rI   r|   )r@   r‰   r)   r)   r*   r˜    s    z0getPhases.<locals>.InBodyPhase.startTagMisplacedc             S   s   | j jƒ  | j j|ƒ d S )N)r<   r§  r°   )r@   r‰   r)   r)   r*   r    s    
z,getPhases.<locals>.InBodyPhase.startTagOtherc             S   s    | j jddd�sD| jtddƒƒ | jjdddiƒ | jtddƒƒ nX| j jdƒ | j jd	 j	dkrt| jjdddiƒ | j jj
ƒ }x|j	dkrš| j jj
ƒ }q‚W d S )
Nr(   rb  )r®  ro   zunexpected-end-tagr>   rp   r	   ry   )r<   r¯  r}  r  rI   r|   r�  r¾  r{   r>   r)  )r@   r‰   r­   r)   r)   r*   r�    s    z&getPhases.<locals>.InBodyPhase.endTagPc             S   s€   | j jdƒs| jjƒ  d S | j jd jdkrlx>| j jdd … D ]*}|jtdƒkr>| jjdd|jdœƒ P q>W | jjd | j_d S )Nrª   r	   é   rR  rS  rQ  rw  rv  r(   rt  ru  r£   r    r¥   r¡   r¤   r¢   r¬   z$expected-one-end-tag-but-got-another)ÚgotNameÚexpectedNameÚ	afterBodyry   )rR  rS  rQ  rw  rv  r(   rt  ru  r£   r    r¥   r¡   r¤   r¢   rª   r¬   )	r<   r¯  rI   r|   r{   r>   r€   rF   r]   )r@   r‰   r­   r)   r)   r*   r™  !  s    
   z)getPhases.<locals>.InBodyPhase.endTagBodyc             S   s"   | j jdƒr| jtdƒƒ |S d S )Nrª   )r<   r¯  r™  r  )r@   r‰   r)   r)   r*   rš  3  s    z)getPhases.<locals>.InBodyPhase.endTagHtmlc             S   s’   |d dkr| j | _| jj|d ƒ}|r2| jjƒ  | jjd j|d kr^| jjdd|d iƒ |rŽ| jjj	ƒ }x|j|d krŒ| jjj	ƒ }qpW d S )Nr>   rN  r	   zend-tag-too-earlyry   )
r{  r‚   r<   r¯  r¾  r{   r>   rI   r|   r)  )r@   r‰   ZinScoper­   r)   r)   r*   r›  9  s    
z*getPhases.<locals>.InBodyPhase.endTagBlockc             S   sx   | j j}d | j _|d ks&| j j|ƒ r:| jjdddiƒ n:| j jƒ  | j jd |krf| jjdddiƒ | j jj|ƒ d S )Nzunexpected-end-tagr>   rP  r	   zend-tag-too-early-ignoredry   )r<   r°  r¯  rI   r|   r¾  r{   r7  )r@   r‰   r­   r)   r)   r*   rœ  G  s    

z)getPhases.<locals>.InBodyPhase.endTagFormc             S   s°   |d dkrd}nd }| j j|d |d�sB| jjdd|d iƒ nj| j j|d d� | j jd	 j|d kr€| jjdd|d iƒ | j jjƒ }x|j|d krª| j jjƒ }qŽW d S )
Nr>   rQ  Úlist)r®  zunexpected-end-tag)Úexcluder	   zend-tag-too-earlyry   )r<   r¯  rI   r|   r¾  r{   r>   r)  )r@   r‰   r®  r­   r)   r)   r*   rž  T  s    z-getPhases.<locals>.InBodyPhase.endTagListItemc             S   sš   x$t D ]}| jj|ƒr| jjƒ  P qW | jjd j|d krR| jjdd|d iƒ xBt D ]:}| jj|ƒrX| jjjƒ }x|jt krŽ| jjjƒ }qvW P qXW d S )Nr	   r>   zend-tag-too-earlyry   )	r   r<   r¯  r¾  r{   r>   rI   r|   r)  )r@   r‰   Úitemr)   r)   r*   rŸ  e  s    


z,getPhases.<locals>.InBodyPhase.endTagHeadingc             S   s"  d}�x|dk �r|d7 }| j j|d ƒ}| sL|| j jkrZ| j j|jƒ rZ| j|ƒ dS || j jkrŽ| jjdd|d iƒ | j jj	|ƒ dS | j j|jƒs¶| jjdd|d iƒ dS || j jd krÜ| jjdd|d iƒ | j jj
|ƒ}d}x,| j j|d… D ]}|jtk�r |}P �q W |dk�rb| j jjƒ }x||k�rN| j jjƒ }�q4W | j jj	|ƒ dS | j j|d  }| j jj
|ƒ}| }	}
d}| j jj
|
ƒ}xÎ|d	k �rh|d7 }|d8 }| j j| }
|
| j jk�râ| j jj	|
ƒ �qœ|
|k�rîP |	|k�r
| j jj
|
ƒd }|
jƒ }|| j j| j jj
|
ƒ< || j j| j jj
|
ƒ< |}
|	j�rV|	jj|	ƒ |
j|	ƒ |
}	�qœW |	j�r~|	jj|	ƒ |jtdƒk�rª| j jƒ \}}|j|	|ƒ n
|j|	ƒ |jƒ }|j|ƒ |j|ƒ | j jj	|ƒ | j jj||ƒ | j jj	|ƒ | j jj| j jj
|ƒd |ƒ qW dS )z)The much-feared adoption agency algorithmr   é   r	   r>   Nzadoption-agency-1.2zadoption-agency-4.4zadoption-agency-1.3r£  r¨   r£   r¥   r¤   r¢   ry   )r¨   r£   r¥   r¤   r¢   )r<   rµ  r{   r¯  r>   r  rI   r|   r¤  r7  Úindexr²  r   r)  Z	cloneNoder¬  r­  ZappendChildr€   ZgetTableMisnestedNodePositionÚinsertBeforeZreparentChildrenÚinsert)r@   r‰   ZouterLoopCounterZformattingElementZafeIndexZfurthestBlockrk   ZcommonAncestorZbookmarkZlastNoder­   ZinnerLoopCounterrÇ  Zcloner¬  rÈ  r)   r)   r*   r   t  sŠ    











z/getPhases.<locals>.InBodyPhase.endTagFormattingc             S   s�   | j j|d ƒr| j jƒ  | j jd j|d krF| jjdd|d iƒ | j j|d ƒrŒ| j jjƒ }x|j|d kr€| j jjƒ }qdW | j jƒ  d S )Nr>   r	   zend-tag-too-earlyry   )	r<   r¯  r¾  r{   r>   rI   r|   r)  ÚclearActiveFormattingElements)r@   r‰   rk   r)   r)   r*   r¡    s    
z8getPhases.<locals>.InBodyPhase.endTagAppletMarqueeObjectc             S   s@   | j jddddœƒ | jjƒ  | jjtddƒƒ | jjjƒ  d S )Nzunexpected-end-tag-treated-asr  z
br element)r·  r¸  ro   )rI   r|   r<   r§  r°   r  r{   r)  )r@   r‰   r)   r)   r*   r2  #  s
    
z'getPhases.<locals>.InBodyPhase.endTagBrc             S   s¨   x¢| j jd d d… D ]Œ}|j|d kr~| j j|d d� | j jd j|d krd| jjdd|d iƒ x| j jjƒ |krxqfW P q|jtkr| jjdd|d iƒ P qW d S )Nr	   r>   )rÄ  zunexpected-end-tagry   ry   )	r<   r{   r>   r¾  rI   r|   r)  r²  r   )r@   r‰   r­   r)   r)   r*   r  *  s    
z*getPhases.<locals>.InBodyPhase.endTagOtherN)6r7   r8   r9   rH   r¢  r¥  rˆ   r¨  r�   r{  r|  r4  r5  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¡  r2  r  r)   )rÅ   r)   r*   ÚInBodyPhasee  sh   G
	
	 $rË  c                   s@   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )zgetPhases.<locals>.TextPhasec                sF   ˆ j | ||ƒ tjg ƒ| _| j| j_tjd| jfgƒ| _| j| j_d S )Nr  )	rH   r   r  rÁ   r  r  ÚendTagScriptrÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH   9  s    
z%getPhases.<locals>.TextPhase.__init__c             S   s   | j j|d ƒ d S )Nrs   )r<   rÀ   )r@   r‰   r)   r)   r*   r�   A  s    z.getPhases.<locals>.TextPhase.processCharactersc             S   s8   | j jdd| jjd jiƒ | jjjƒ  | j j| j _dS )Nz&expected-named-closing-tag-but-got-eofr>   r	   Try   )rI   r|   r<   r{   r>   r)  r±   r]   )r@   r)   r)   r*   rˆ   D  s
    z'getPhases.<locals>.TextPhase.processEOFc             S   s   d S )Nr)   )r@   r‰   r)   r)   r*   r  K  s    z*getPhases.<locals>.TextPhase.startTagOtherc             S   s   | j jjƒ }| jj| j_d S )N)r<   r{   r)  rI   r±   r]   )r@   r‰   r­   r)   r)   r*   rÌ  N  s    z)getPhases.<locals>.TextPhase.endTagScriptc             S   s   | j jjƒ  | jj| j_d S )N)r<   r{   r)  rI   r±   r]   )r@   r‰   r)   r)   r*   r  U  s    z(getPhases.<locals>.TextPhase.endTagOtherN)	r7   r8   r9   rH   r�   rˆ   r  rÌ  r  r)   )rÅ   r)   r*   Ú	TextPhase8  s   rÍ  c                   s¨   e Zd Z‡ f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d'S )(zgetPhases.<locals>.InTablePhasec                sž   ˆ j | ||ƒ tjd| jfd| jfd| jfd| jfd| jfd| jfd| j	fd| j
fd| jfd| jfg
ƒ| _| j| j_tjd| jfd| jfgƒ| _| j| j_d S )Nr¬   r¦   r§   rx  r£   r¥   r¤   r    r¡   r¢   r¨   r  r  rn  rP  rª   )r£   r¥   r¤   )r    r¡   r¢   )r  r  )rª   r¦   rx  r§   r¬   r£   r    r¥   r¡   r¤   r¢   )rH   r   r  rÃ   ÚstartTagCaptionÚstartTagColgroupÚstartTagColÚstartTagRowGroupÚstartTagImplyTbodyr‰  ÚstartTagStyleScriptrŒ  r€  rÁ   r  r  ÚendTagTableÚendTagIgnorerÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH   [  s$    
 z(getPhases.<locals>.InTablePhase.__init__c             S   s(   x"| j jd jdkr"| j jjƒ  qW d S )Nr	   r¨   r¬   ry   )r¨   r¬   )r<   r{   r>   r)  )r@   r)   r)   r*   ÚclearStackToTableContexts  s    z8getPhases.<locals>.InTablePhase.clearStackToTableContextc             S   s$   | j jd jdkr | jjdƒ n d S )Nr	   r¬   zeof-in-tablery   )r<   r{   r>   rI   r|   )r@   r)   r)   r*   rˆ   |  s    z*getPhases.<locals>.InTablePhase.processEOFc             S   s4   | j j}| j jd | j _|| j j_| j jj|ƒ d S )NÚinTableText)rI   r]   rF   r±   r‚   )r@   r‰   r±   r)   r)   r*   r‚   ƒ  s    
z6getPhases.<locals>.InTablePhase.processSpaceCharactersc             S   s4   | j j}| j jd | j _|| j j_| j jj|ƒ d S )Nr×  )rI   r]   rF   r±   r�   )r@   r‰   r±   r)   r)   r*   r�   ‰  s    
z1getPhases.<locals>.InTablePhase.processCharactersc             S   s&   d| j _| jjd j|ƒ d| j _d S )NTrœ   F)r<   ÚinsertFromTablerI   rF   r�   )r@   r‰   r)   r)   r*   rÀ   �  s    z*getPhases.<locals>.InTablePhase.insertTextc             S   s6   | j ƒ  | jjjtƒ | jj|ƒ | jjd | j_d S )Nr™   )	rÖ  r<   r¤  r‡   r   r°   rI   rF   r]   )r@   r‰   r)   r)   r*   rÎ  –  s    z/getPhases.<locals>.InTablePhase.startTagCaptionc             S   s(   | j ƒ  | jj|ƒ | jjd | j_d S )Nrš   )rÖ  r<   r°   rI   rF   r]   )r@   r‰   r)   r)   r*   rÏ  œ  s    z0getPhases.<locals>.InTablePhase.startTagColgroupc             S   s   | j tddƒƒ |S )Nr§   ro   )rÏ  r  )r@   r‰   r)   r)   r*   rÐ  ¡  s    z+getPhases.<locals>.InTablePhase.startTagColc             S   s(   | j ƒ  | jj|ƒ | jjd | j_d S )Nr˜   )rÖ  r<   r°   rI   rF   r]   )r@   r‰   r)   r)   r*   rÑ  ¥  s    z0getPhases.<locals>.InTablePhase.startTagRowGroupc             S   s   | j tddƒƒ |S )Nr£   ro   )rÑ  r  )r@   r‰   r)   r)   r*   rÒ  ª  s    z2getPhases.<locals>.InTablePhase.startTagImplyTbodyc             S   s6   | j jddddœƒ | j jjtdƒƒ | j js2|S d S )Nz$unexpected-start-tag-implies-end-tagr¨   )r³  r´  )rI   r|   r]   r„   r  rP   )r@   r‰   r)   r)   r*   r‰  ®  s
    z-getPhases.<locals>.InTablePhase.startTagTablec             S   s   | j jd j|ƒS )Nr  )rI   rF   rƒ   )r@   r‰   r)   r)   r*   rÓ  µ  s    z3getPhases.<locals>.InTablePhase.startTagStyleScriptc             S   sV   d|d krH|d d j tƒdkrH| jjdƒ | jj|ƒ | jjjƒ  n
| j|ƒ d S )Nr2   rs   r¶  z unexpected-hidden-input-in-table)	rj   r   rI   r|   r<   r°   r{   r)  r  )r@   r‰   r)   r)   r*   rŒ  ¸  s    z-getPhases.<locals>.InTablePhase.startTagInputc             S   sD   | j jdƒ | jjd kr@| jj|ƒ | jjd | j_| jjjƒ  d S )Nzunexpected-form-in-tabler	   ry   )rI   r|   r<   r°  r°   r{   r)  )r@   r‰   r)   r)   r*   r€  Â  s
    z,getPhases.<locals>.InTablePhase.startTagFormc             S   s<   | j jdd|d iƒ d| j_| j jd j|ƒ d| j_d S )Nz)unexpected-start-tag-implies-table-voodoor>   Trœ   F)rI   r|   r<   rØ  rF   rƒ   )r@   r‰   r)   r)   r*   r  É  s    z-getPhases.<locals>.InTablePhase.startTagOtherc             S   s”   | j jddd�r†| j jƒ  | j jd jdkrJ| jjdd| j jd jdœƒ x"| j jd jdkrl| j jjƒ  qLW | j jjƒ  | jjƒ  n
| jjƒ  d S )	Nr¨   )r®  r	   zend-tag-too-early-named)rÀ  rÁ  ry   ry   ry   )	r<   r¯  r¾  r{   r>   rI   r|   r)  r_   )r@   r‰   r)   r)   r*   rÔ  Ð  s    
z+getPhases.<locals>.InTablePhase.endTagTablec             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tagr>   )rI   r|   )r@   r‰   r)   r)   r*   rÕ  à  s    z,getPhases.<locals>.InTablePhase.endTagIgnorec             S   s<   | j jdd|d iƒ d| j_| j jd j|ƒ d| j_d S )Nz'unexpected-end-tag-implies-table-voodoor>   Trœ   F)rI   r|   r<   rØ  rF   r„   )r@   r‰   r)   r)   r*   r  ã  s    z+getPhases.<locals>.InTablePhase.endTagOtherN)r7   r8   r9   rH   rÖ  rˆ   r‚   r�   rÀ   rÎ  rÏ  rÐ  rÑ  rÒ  r‰  rÓ  rŒ  r€  r  rÔ  rÕ  r  r)   )rÅ   r)   r*   ÚInTablePhaseY  s&   	
rÙ  c                   sP   e Zd Z‡ f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S )z#getPhases.<locals>.InTableTextPhasec                s   ˆ j | ||ƒ d | _g | _d S )N)rH   r±   ÚcharacterTokens)r@   rI   r<   )rÅ   r)   r*   rH   ë  s    z,getPhases.<locals>.InTableTextPhase.__init__c             S   sd   dj dd„ | jD ƒƒ}tdd„ |D ƒƒrJtd |dœ}| jjd j|ƒ n|rZ| jj|ƒ g | _d S )NrÊ   c             S   s   g | ]}|d  ‘qS )rs   r)   )r=   rÅ  r)   r)   r*   rA   ñ  s    zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c             S   s   g | ]}|t k‘qS r)   )r   )r=   rÅ  r)   r)   r*   rA   ò  s    rn   )r2   rs   r›   )ÚjoinrÚ  r«  r   rI   rF   rÀ   r<   )r@   rs   r‰   r)   r)   r*   ÚflushCharactersð  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc             S   s   | j ƒ  | j| j_|S )N)rÜ  r±   rI   r]   )r@   r‰   r)   r)   r*   r…   ù  s    
z2getPhases.<locals>.InTableTextPhase.processCommentc             S   s   | j ƒ  | j| j_dS )NT)rÜ  r±   rI   r]   )r@   r)   r)   r*   rˆ   þ  s    
z.getPhases.<locals>.InTableTextPhase.processEOFc             S   s    |d dkrd S | j j|ƒ d S )Nrs   r©  )rÚ  r‡   )r@   r‰   r)   r)   r*   r�     s    z5getPhases.<locals>.InTableTextPhase.processCharactersc             S   s   | j j|ƒ d S )N)rÚ  r‡   )r@   r‰   r)   r)   r*   r‚     s    z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc             S   s   | j ƒ  | j| j_|S )N)rÜ  r±   rI   r]   )r@   r‰   r)   r)   r*   rƒ     s    
z3getPhases.<locals>.InTableTextPhase.processStartTagc             S   s   | j ƒ  | j| j_|S )N)rÜ  r±   rI   r]   )r@   r‰   r)   r)   r*   r„     s    
z1getPhases.<locals>.InTableTextPhase.processEndTagN)r7   r8   r9   rH   rÜ  r…   rˆ   r�   r‚   rƒ   r„   r)   )rÅ   r)   r*   ÚInTableTextPhaseê  s   	rÝ  c                   s`   e Zd Z‡ f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S )z!getPhases.<locals>.InCaptionPhasec                sf   ˆ j | ||ƒ tjd| jfd| jfgƒ| _| j| j_tjd| jfd| j	fd| j
fgƒ| _| j| j_d S )Nr¬   r¦   rx  r§   r£   r    r¥   r¡   r¤   r¢   r¨   rª   )	r¦   rx  r§   r£   r    r¥   r¡   r¤   r¢   )
rª   rx  r§   r¬   r£   r    r¥   r¡   r¤   r¢   )rH   r   r  rÃ   ÚstartTagTableElementrÁ   r  r  ÚendTagCaptionrÔ  rÕ  rÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH     s     
 z*getPhases.<locals>.InCaptionPhase.__init__c             S   s   | j jddd� S )Nr¦   r¨   )r®  )r<   r¯  )r@   r)   r)   r*   ÚignoreEndTagCaption+  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc             S   s   | j jd jƒ  d S )Nrœ   )rI   rF   rˆ   )r@   r)   r)   r*   rˆ   .  s    z,getPhases.<locals>.InCaptionPhase.processEOFc             S   s   | j jd j|ƒS )Nrœ   )rI   rF   r�   )r@   r‰   r)   r)   r*   r�   1  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc             S   s0   | j jƒ  | jƒ }| j jjtdƒƒ |s,|S d S )Nr¦   )rI   r|   rà  r]   r„   r  )r@   r‰   ÚignoreEndTagr)   r)   r*   rÞ  4  s
    
z6getPhases.<locals>.InCaptionPhase.startTagTableElementc             S   s   | j jd j|ƒS )Nrœ   )rI   rF   rƒ   )r@   r‰   r)   r)   r*   r  <  s    z/getPhases.<locals>.InCaptionPhase.startTagOtherc             S   sœ   | j ƒ sŽ| jjƒ  | jjd jdkrB| jjdd| jjd jdœƒ x"| jjd jdkrd| jjjƒ  qDW | jjjƒ  | jjƒ  | jj	d | j_
n
| jjƒ  d S )	Nr	   r¦   z$expected-one-end-tag-but-got-another)rÀ  rÁ  r›   ry   ry   ry   )rà  r<   r¾  r{   r>   rI   r|   r)  rÊ  rF   r]   )r@   r‰   r)   r)   r*   rß  ?  s    

z/getPhases.<locals>.InCaptionPhase.endTagCaptionc             S   s0   | j jƒ  | jƒ }| j jjtdƒƒ |s,|S d S )Nr¦   )rI   r|   rà  r]   r„   r  )r@   r‰   rá  r)   r)   r*   rÔ  Q  s
    
z-getPhases.<locals>.InCaptionPhase.endTagTablec             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tagr>   )rI   r|   )r@   r‰   r)   r)   r*   rÕ  X  s    z.getPhases.<locals>.InCaptionPhase.endTagIgnorec             S   s   | j jd j|ƒS )Nrœ   )rI   rF   r„   )r@   r‰   r)   r)   r*   r  [  s    z-getPhases.<locals>.InCaptionPhase.endTagOtherN)r7   r8   r9   rH   rà  rˆ   r�   rÞ  r  rß  rÔ  rÕ  r  r)   )rÅ   r)   r*   ÚInCaptionPhase  s   râ  c                   sX   e Zd Z‡ f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S )z%getPhases.<locals>.InColumnGroupPhasec                s^   ˆ j | ||ƒ tjd| jfd| jfgƒ| _| j| j_tjd| jfd| j	fgƒ| _
| j| j
_d S )Nr¬   rx  r§   )rH   r   r  rÃ   rÐ  rÁ   r  r  ÚendTagColgroupÚ	endTagColrÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH   a  s    
z.getPhases.<locals>.InColumnGroupPhase.__init__c             S   s   | j jd jdkS )Nr	   r¬   ry   )r<   r{   r>   )r@   r)   r)   r*   ÚignoreEndTagColgroupp  s    z:getPhases.<locals>.InColumnGroupPhase.ignoreEndTagColgroupc             S   s8   | j jd jdkrd S | jƒ }| jtdƒƒ |s4dS d S )Nr	   r¬   r§   Try   )r<   r{   r>   rå  rã  r  )r@   rá  r)   r)   r*   rˆ   s  s    z0getPhases.<locals>.InColumnGroupPhase.processEOFc             S   s"   | j ƒ }| jtdƒƒ |s|S d S )Nr§   )rå  rã  r  )r@   r‰   rá  r)   r)   r*   r�   }  s    z7getPhases.<locals>.InColumnGroupPhase.processCharactersc             S   s$   | j j|ƒ | j jjƒ  d|d< d S )NTrx   )r<   r°   r{   r)  )r@   r‰   r)   r)   r*   rÐ  ƒ  s    z1getPhases.<locals>.InColumnGroupPhase.startTagColc             S   s"   | j ƒ }| jtdƒƒ |s|S d S )Nr§   )rå  rã  r  )r@   r‰   rá  r)   r)   r*   r  ˆ  s    z3getPhases.<locals>.InColumnGroupPhase.startTagOtherc             S   s4   | j ƒ r| jjƒ  n| jjjƒ  | jjd | j_d S )Nr›   )rå  rI   r|   r<   r{   r)  rF   r]   )r@   r‰   r)   r)   r*   rã  Ž  s    z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc             S   s   | j jdddiƒ d S )Nz
no-end-tagr>   rx  )rI   r|   )r@   r‰   r)   r)   r*   rä  —  s    z/getPhases.<locals>.InColumnGroupPhase.endTagColc             S   s"   | j ƒ }| jtdƒƒ |s|S d S )Nr§   )rå  rã  r  )r@   r‰   rá  r)   r)   r*   r  š  s    z1getPhases.<locals>.InColumnGroupPhase.endTagOtherN)r7   r8   r9   rH   rå  rˆ   r�   rÐ  r  rã  rä  r  r)   )rÅ   r)   r*   ÚInColumnGroupPhase^  s   
	ræ  c                   sx   e Zd Z‡ f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S )z#getPhases.<locals>.InTableBodyPhasec                sv   ˆ j | ||ƒ tjd| jfd| jfd| jfd| jfgƒ| _| j| j_	tjd| j
fd| jfd| jfgƒ| _| j| j_	d S )Nr¬   r¢   r    r¡   r¦   rx  r§   r£   r¥   r¤   r¨   rª   )r    r¡   )r¦   rx  r§   r£   r¥   r¤   )r£   r¥   r¤   )rª   r¦   rx  r§   r¬   r    r¡   r¢   )rH   r   r  rÃ   Ú
startTagTrÚstartTagTableCellÚstartTagTableOtherrÁ   r  r  ÚendTagTableRowGrouprÔ  rÕ  rÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH   ¢  s    
 z,getPhases.<locals>.InTableBodyPhase.__init__c             S   s:   x"| j jd jdkr"| j jjƒ  qW | j jd jdkr6d S )	Nr	   r£   r¥   r¤   r¬   ry   )r£   r¥   r¤   r¬   ry   )r<   r{   r>   r)  )r@   r)   r)   r*   ÚclearStackToTableBodyContext¶  s
    z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc             S   s   | j jd jƒ  d S )Nr›   )rI   rF   rˆ   )r@   r)   r)   r*   rˆ   À  s    z.getPhases.<locals>.InTableBodyPhase.processEOFc             S   s   | j jd j|ƒS )Nr›   )rI   rF   r‚   )r@   r‰   r)   r)   r*   r‚   Ã  s    z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc             S   s   | j jd j|ƒS )Nr›   )rI   rF   r�   )r@   r‰   r)   r)   r*   r�   Æ  s    z5getPhases.<locals>.InTableBodyPhase.processCharactersc             S   s(   | j ƒ  | jj|ƒ | jjd | j_d S )Nr—   )rë  r<   r°   rI   rF   r]   )r@   r‰   r)   r)   r*   rç  É  s    z.getPhases.<locals>.InTableBodyPhase.startTagTrc             S   s*   | j jdd|d iƒ | jtddƒƒ |S )Nzunexpected-cell-in-table-bodyr>   r¢   ro   )rI   r|   rç  r  )r@   r‰   r)   r)   r*   rè  Î  s    z5getPhases.<locals>.InTableBodyPhase.startTagTableCellc             S   sb   | j jddd�s0| j jddd�s0| j jddd�rT| jƒ  | jt| j jd jƒƒ |S | jjƒ  d S )Nr£   r¨   )r®  r¤   r¥   r	   ry   )	r<   r¯  rë  rê  r  r{   r>   rI   r|   )r@   r‰   r)   r)   r*   ré  Ô  s    z6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc             S   s   | j jd j|ƒS )Nr›   )rI   rF   rƒ   )r@   r‰   r)   r)   r*   r  â  s    z1getPhases.<locals>.InTableBodyPhase.startTagOtherc             S   sT   | j j|d dd�r:| jƒ  | j jjƒ  | jjd | j_n| jjdd|d iƒ d S )Nr>   r¨   )r®  r›   z unexpected-end-tag-in-table-body)	r<   r¯  rë  r{   r)  rI   rF   r]   r|   )r@   r‰   r)   r)   r*   rê  å  s    z7getPhases.<locals>.InTableBodyPhase.endTagTableRowGroupc             S   sb   | j jddd�s0| j jddd�s0| j jddd�rT| jƒ  | jt| j jd jƒƒ |S | jjƒ  d S )Nr£   r¨   )r®  r¤   r¥   r	   ry   )	r<   r¯  rë  rê  r  r{   r>   rI   r|   )r@   r‰   r)   r)   r*   rÔ  î  s    z/getPhases.<locals>.InTableBodyPhase.endTagTablec             S   s   | j jdd|d iƒ d S )Nz unexpected-end-tag-in-table-bodyr>   )rI   r|   )r@   r‰   r)   r)   r*   rÕ  û  s    z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec             S   s   | j jd j|ƒS )Nr›   )rI   rF   r„   )r@   r‰   r)   r)   r*   r  ÿ  s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherN)r7   r8   r9   rH   rë  rˆ   r‚   r�   rç  rè  ré  r  rê  rÔ  rÕ  r  r)   )rÅ   r)   r*   ÚInTableBodyPhase   s   
	rì  c                   s€   e Zd Z‡ f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S )zgetPhases.<locals>.InRowPhasec                sv   ˆ j | ||ƒ tjd| jfd| jfd| jfgƒ| _| j| j_tjd
| j	fd| j
fd| jfd| jfgƒ| _| j| j_d S )Nr¬   r    r¡   r¦   rx  r§   r£   r¥   r¤   r¢   r¨   rª   )r    r¡   )r¦   rx  r§   r£   r¥   r¤   r¢   )r£   r¥   r¤   )rª   r¦   rx  r§   r¬   r    r¡   )rH   r   r  rÃ   rè  ré  rÁ   r  r  ÚendTagTrrÔ  rê  rÕ  rÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH     s     
z&getPhases.<locals>.InRowPhase.__init__c             S   sD   x>| j jd jdkr>| jjdd| j jd jiƒ | j jjƒ  qW d S )	Nr	   r¢   r¬   z'unexpected-implied-end-tag-in-table-rowr>   ry   )r¢   r¬   ry   )r<   r{   r>   rI   r|   r)  )r@   r)   r)   r*   ÚclearStackToTableRowContext  s    z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc             S   s   | j jddd� S )Nr¢   r¨   )r®  )r<   r¯  )r@   r)   r)   r*   ÚignoreEndTagTr  s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc             S   s   | j jd jƒ  d S )Nr›   )rI   rF   rˆ   )r@   r)   r)   r*   rˆ   "  s    z(getPhases.<locals>.InRowPhase.processEOFc             S   s   | j jd j|ƒS )Nr›   )rI   rF   r‚   )r@   r‰   r)   r)   r*   r‚   %  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc             S   s   | j jd j|ƒS )Nr›   )rI   rF   r�   )r@   r‰   r)   r)   r*   r�   (  s    z/getPhases.<locals>.InRowPhase.processCharactersc             S   s6   | j ƒ  | jj|ƒ | jjd | j_| jjjtƒ d S )Nr–   )	rî  r<   r°   rI   rF   r]   r¤  r‡   r   )r@   r‰   r)   r)   r*   rè  +  s    z/getPhases.<locals>.InRowPhase.startTagTableCellc             S   s"   | j ƒ }| jtdƒƒ |s|S d S )Nr¢   )rï  rí  r  )r@   r‰   rá  r)   r)   r*   ré  1  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc             S   s   | j jd j|ƒS )Nr›   )rI   rF   rƒ   )r@   r‰   r)   r)   r*   r  8  s    z+getPhases.<locals>.InRowPhase.startTagOtherc             S   s<   | j ƒ s.| jƒ  | jjjƒ  | jjd | j_n
| jjƒ  d S )Nr˜   )	rï  rî  r<   r{   r)  rI   rF   r]   r|   )r@   r‰   r)   r)   r*   rí  ;  s
    z&getPhases.<locals>.InRowPhase.endTagTrc             S   s"   | j ƒ }| jtdƒƒ |s|S d S )Nr¢   )rï  rí  r  )r@   r‰   rá  r)   r)   r*   rÔ  E  s    z)getPhases.<locals>.InRowPhase.endTagTablec             S   s4   | j j|d dd�r&| jtdƒƒ |S | jjƒ  d S )Nr>   r¨   )r®  r¢   )r<   r¯  rí  r  rI   r|   )r@   r‰   r)   r)   r*   rê  M  s    z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tag-in-table-rowr>   )rI   r|   )r@   r‰   r)   r)   r*   rÕ  T  s    z*getPhases.<locals>.InRowPhase.endTagIgnorec             S   s   | j jd j|ƒS )Nr›   )rI   rF   r„   )r@   r‰   r)   r)   r*   r  X  s    z)getPhases.<locals>.InRowPhase.endTagOtherN)r7   r8   r9   rH   rî  rï  rˆ   r‚   r�   rè  ré  r  rí  rÔ  rê  rÕ  r  r)   )rÅ   r)   r*   Ú
InRowPhase  s   
rð  c                   s`   e Zd Z‡ f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S )zgetPhases.<locals>.InCellPhasec                sf   ˆ j | ||ƒ tjd| jfd| jfgƒ| _| j| j_tjd| jfd| j	fd| j
fgƒ| _| j| j_d S )Nr¬   r¦   rx  r§   r£   r    r¥   r¡   r¤   r¢   rª   r¨   )	r¦   rx  r§   r£   r    r¥   r¡   r¤   r¢   )r    r¡   )rª   r¦   rx  r§   r¬   )r¨   r£   r¥   r¤   r¢   )rH   r   r  rÃ   ré  rÁ   r  r  ÚendTagTableCellrÕ  ÚendTagImplyrÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH   ]  s     
z'getPhases.<locals>.InCellPhase.__init__c             S   sB   | j jddd�r | jtdƒƒ n| j jddd�r>| jtdƒƒ d S )Nr    r¨   )r®  r¡   )r<   r¯  rñ  r  )r@   r)   r)   r*   Ú	closeCelln  s    z(getPhases.<locals>.InCellPhase.closeCellc             S   s   | j jd jƒ  d S )Nrœ   )rI   rF   rˆ   )r@   r)   r)   r*   rˆ   u  s    z)getPhases.<locals>.InCellPhase.processEOFc             S   s   | j jd j|ƒS )Nrœ   )rI   rF   r�   )r@   r‰   r)   r)   r*   r�   x  s    z0getPhases.<locals>.InCellPhase.processCharactersc             S   s:   | j jddd�s | j jddd�r,| jƒ  |S | jjƒ  d S )Nr    r¨   )r®  r¡   )r<   r¯  ró  rI   r|   )r@   r‰   r)   r)   r*   ré  {  s
    z1getPhases.<locals>.InCellPhase.startTagTableOtherc             S   s   | j jd j|ƒS )Nrœ   )rI   rF   rƒ   )r@   r‰   r)   r)   r*   r  …  s    z,getPhases.<locals>.InCellPhase.startTagOtherc             S   s¶   | j j|d dd�rœ| j j|d ƒ | j jd j|d krt| jjdd|d iƒ x.| j jjƒ }|j|d krRP qRW n| j jjƒ  | j jƒ  | jj	d | j_
n| jjdd|d iƒ d S )	Nr>   r¨   )r®  r	   zunexpected-cell-end-tagr—   zunexpected-end-tagry   )r<   r¯  r¾  r{   r>   rI   r|   r)  rÊ  rF   r]   )r@   r‰   r­   r)   r)   r*   rñ  ˆ  s    
z.getPhases.<locals>.InCellPhase.endTagTableCellc             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tagr>   )rI   r|   )r@   r‰   r)   r)   r*   rÕ  ™  s    z+getPhases.<locals>.InCellPhase.endTagIgnorec             S   s.   | j j|d dd�r | jƒ  |S | jjƒ  d S )Nr>   r¨   )r®  )r<   r¯  ró  rI   r|   )r@   r‰   r)   r)   r*   rò  œ  s    z*getPhases.<locals>.InCellPhase.endTagImplyc             S   s   | j jd j|ƒS )Nrœ   )rI   rF   r„   )r@   r‰   r)   r)   r*   r  ¤  s    z*getPhases.<locals>.InCellPhase.endTagOtherN)r7   r8   r9   rH   ró  rˆ   r�   ré  r  rñ  rÕ  rò  r  r)   )rÅ   r)   r*   ÚInCellPhase[  s   
rô  c                   sx   e Zd Z‡ f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S )z getPhases.<locals>.InSelectPhasec                s†   ˆ j | ||ƒ tjd| jfd| jfd| jfd| jfd	| jfd| jfgƒ| _	| j
| j	_tjd| jfd| jfd| jfgƒ| _| j| j_d S )
Nr¬   rv  rw  rŸ   rn  ri  rr  r  )rn  ri  rr  )rH   r   r  rÃ   ÚstartTagOptionÚstartTagOptgroupr“  rŒ  r$  rÁ   r  r  ÚendTagOptionÚendTagOptgroupÚendTagSelectrÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH   ¨  s    
z)getPhases.<locals>.InSelectPhase.__init__c             S   s$   | j jd jdkr | jjdƒ n d S )Nr	   r¬   zeof-in-selectry   )r<   r{   r>   rI   r|   )r@   r)   r)   r*   rˆ   ½  s    z+getPhases.<locals>.InSelectPhase.processEOFc             S   s$   |d dkrd S | j j|d ƒ d S )Nrs   r©  )r<   rÀ   )r@   r‰   r)   r)   r*   r�   Ã  s    z2getPhases.<locals>.InSelectPhase.processCharactersc             S   s.   | j jd jdkr| j jjƒ  | j j|ƒ d S )Nr	   rv  ry   )r<   r{   r>   r)  r°   )r@   r‰   r)   r)   r*   rõ  È  s    z/getPhases.<locals>.InSelectPhase.startTagOptionc             S   sL   | j jd jdkr| j jjƒ  | j jd jdkr<| j jjƒ  | j j|ƒ d S )Nr	   rv  rw  ry   ry   )r<   r{   r>   r)  r°   )r@   r‰   r)   r)   r*   rö  Î  s
    z1getPhases.<locals>.InSelectPhase.startTagOptgroupc             S   s   | j jdƒ | jtdƒƒ d S )Nzunexpected-select-in-selectrŸ   )rI   r|   rù  r  )r@   r‰   r)   r)   r*   r“  Õ  s    z/getPhases.<locals>.InSelectPhase.startTagSelectc             S   s2   | j jdƒ | jjddd�r.| jtdƒƒ |S d S )Nzunexpected-input-in-selectrŸ   )r®  )rI   r|   r<   r¯  rù  r  )r@   r‰   r)   r)   r*   rŒ  Ù  s
    z.getPhases.<locals>.InSelectPhase.startTagInputc             S   s   | j jd j|ƒS )Nr  )rI   rF   rƒ   )r@   r‰   r)   r)   r*   r$  á  s    z/getPhases.<locals>.InSelectPhase.startTagScriptc             S   s   | j jdd|d iƒ d S )Nzunexpected-start-tag-in-selectr>   )rI   r|   )r@   r‰   r)   r)   r*   r  ä  s    z.getPhases.<locals>.InSelectPhase.startTagOtherc             S   s6   | j jd jdkr | j jjƒ  n| jjdddiƒ d S )Nr	   rv  zunexpected-end-tag-in-selectr>   ry   )r<   r{   r>   r)  rI   r|   )r@   r‰   r)   r)   r*   r÷  è  s    z-getPhases.<locals>.InSelectPhase.endTagOptionc             S   sf   | j jd jdkr0| j jd jdkr0| j jjƒ  | j jd	 jdkrP| j jjƒ  n| jjdddiƒ d S )
Nr	   rv  r¿  rw  zunexpected-end-tag-in-selectr>   ry   éþÿÿÿry   )r<   r{   r>   r)  rI   r|   )r@   r‰   r)   r)   r*   rø  ï  s    z/getPhases.<locals>.InSelectPhase.endTagOptgroupc             S   sR   | j jddd�rD| j jjƒ }x|jdkr6| j jjƒ }qW | jjƒ  n
| jjƒ  d S )NrŸ   )r®  )r<   r¯  r{   r)  r>   rI   r_   r|   )r@   r‰   r­   r)   r)   r*   rù  ü  s    z-getPhases.<locals>.InSelectPhase.endTagSelectc             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tag-in-selectr>   )rI   r|   )r@   r‰   r)   r)   r*   r  	  s    z,getPhases.<locals>.InSelectPhase.endTagOtherN)r7   r8   r9   rH   rˆ   r�   rõ  rö  r“  rŒ  r$  r  r÷  rø  rù  r  r)   )rÅ   r)   r*   ÚInSelectPhase§  s   rû  c                   sH   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )z'getPhases.<locals>.InSelectInTablePhasec          	      sN   ˆ j | ||ƒ tjd	| jfgƒ| _| j| j_tjd
| jfgƒ| _| j	| j_d S )Nr¦   r¨   r£   r¥   r¤   r¢   r    r¡   )r¦   r¨   r£   r¥   r¤   r¢   r    r¡   )r¦   r¨   r£   r¥   r¤   r¢   r    r¡   )
rH   r   r  r‰  rÁ   r  r  rÔ  rÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH   	  s    
z0getPhases.<locals>.InSelectInTablePhase.__init__c             S   s   | j jd jƒ  d S )Nr•   )rI   rF   rˆ   )r@   r)   r)   r*   rˆ   	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc             S   s   | j jd j|ƒS )Nr•   )rI   rF   r�   )r@   r‰   r)   r)   r*   r�   	  s    z9getPhases.<locals>.InSelectInTablePhase.processCharactersc             S   s(   | j jdd|d iƒ | jtdƒƒ |S )Nz5unexpected-table-element-start-tag-in-select-in-tabler>   rŸ   )rI   r|   r  r  )r@   r‰   r)   r)   r*   r‰  !	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec             S   s   | j jd j|ƒS )Nr•   )rI   rF   rƒ   )r@   r‰   r)   r)   r*   r  &	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagOtherc             S   s@   | j jdd|d iƒ | jj|d dd�r<| jtdƒƒ |S d S )Nz3unexpected-table-element-end-tag-in-select-in-tabler>   r¨   )r®  rŸ   )rI   r|   r<   r¯  r  r  )r@   r‰   r)   r)   r*   rÔ  )	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec             S   s   | j jd j|ƒS )Nr•   )rI   rF   r„   )r@   r‰   r)   r)   r*   r  /	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOtherN)
r7   r8   r9   rH   rˆ   r�   r‰  r  rÔ  r  r)   )rÅ   r)   r*   ÚInSelectInTablePhase	  s   rü  c            -       sœ   e Zd Ze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dddd d!d"d#d$d%d&d'd(d)d*d+d,g,ƒZ‡ fd-d.„Zd/d0„ Z‡ fd1d2„Zd3d4„ Zd5d6„ Z	d7S )8z(getPhases.<locals>.InForeignContentPhaserU  rV  r<  rª   r  r=  rW  rR  r+   r@  rS  rX  rg  Zh1Zh2Zh3Zh4Zh5Zh6r©   ro  rZ  rh  rQ  rO  rH  r4   ra  rJ  r(   rN  r½  r[  r\  Úspanr^  r]  ÚsubZsupr¨   r_  r`  rM  Úvarc                s   ˆ j | ||ƒ d S )N)rH   )r@   rI   r<   )rÅ   r)   r*   rH   <	  s    z1getPhases.<locals>.InForeignContentPhase.__init__c          %   S   sn   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dddd d!d"d#d$d%œ$}|d& |krj||d&  |d&< d S )'NZaltGlyphZaltGlyphDefZaltGlyphItemZanimateColorZanimateMotionZanimateTransformZclipPathZfeBlendZfeColorMatrixZfeComponentTransferZfeCompositeZfeConvolveMatrixZfeDiffuseLightingZfeDisplacementMapZfeDistantLightZfeFloodZfeFuncAZfeFuncBZfeFuncGZfeFuncRZfeGaussianBlurZfeImageZfeMergeZfeMergeNodeZfeMorphologyZfeOffsetZfePointLightZfeSpecularLightingZfeSpotLightZfeTileZfeTurbulenceZforeignObjectZglyphRefZlinearGradientZradialGradientZtextPath)$ZaltglyphZaltglyphdefZaltglyphitemZanimatecolorZanimatemotionZanimatetransformZclippathZfeblendZfecolormatrixZfecomponenttransferZfecompositeZfeconvolvematrixZfediffuselightingZfedisplacementmapZfedistantlightZfefloodZfefuncaZfefuncbZfefuncgZfefuncrZfegaussianblurZfeimageZfemergeZfemergenodeZfemorphologyZfeoffsetZfepointlightZfespecularlightingZfespotlightZfetileZfeturbulenceZforeignobjectZglyphrefZlineargradientZradialgradientZtextpathr>   r)   )r@   r‰   Úreplacementsr)   r)   r*   ÚadjustSVGTagNames?	  sL    z:getPhases.<locals>.InForeignContentPhase.adjustSVGTagNamesc                sL   |d dkrd|d< n&| j jr<tdd„ |d D ƒƒr<d| j _ˆ j| |ƒ d S )Nrs   r©  u   ï¿½c             s   s   | ]}|t kV  qd S )N)r   )r=   rª  r)   r)   r*   r·   l	  s    zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rI   r`   r«  r�   )r@   r‰   )rÅ   r)   r*   r�   h	  s    
z:getPhases.<locals>.InForeignContentPhase.processCharactersc             S   s6  | j jd }|d | jksD|d dkr²t|d jƒ ƒtdddgƒ@ r²| jjdd|d iƒ xR| j jd j| j jkr¬| jj	| j jd ƒ r¬| jj
| j jd ƒ r¬| j jjƒ  q\W |S |jtd	 krÎ| jj|ƒ n$|jtd
 krò| j|ƒ | jj|ƒ | jj|ƒ |j|d< | j j|ƒ |d �r2| j jjƒ  d|d< d S )Nr	   r>   rY  rs   ZcolorZfaceÚsizez*unexpected-html-element-in-foreign-contentrd   ru   rh   rw   Trx   ry   ry   ry   ry   )r<   r{   ÚbreakoutElementsÚsetÚkeysrI   r|   rh   r   rl   rm   r)  r   r   r  r   r   r°   )r@   r‰   r‹   r)   r)   r*   rƒ   p	  s.    



z8getPhases.<locals>.InForeignContentPhase.processStartTagc             S   sä   t | jjƒd }| jjd }|jjtƒ|d krF| jjdd|d iƒ x˜|jjtƒ|d kr¦| jj| jj	d krŠ| jjj
ƒ  | jjj| j_x| jjjƒ |kržqŒW d }P |d8 }| jj| }|j| jjkrÌqHqH| jjj|ƒ}P qHW |S )Nr	   r>   zunexpected-end-tagr×  ry   )r~   r<   r{   r>   rj   r   rI   r|   r]   rF   rÜ  r±   r)  rh   r   r„   )r@   r‰   Z	nodeIndexr­   rŠ   r)   r)   r*   r„   ‹	  s(    z6getPhases.<locals>.InForeignContentPhase.processEndTagN)
r7   r8   r9   r€   r  rH   r  r�   rƒ   r„   r)   )rÅ   r)   r*   ÚInForeignContentPhase2	  s   


)r  c                   sP   e Zd Z‡ f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S )z!getPhases.<locals>.AfterBodyPhasec                sN   ˆ j | ||ƒ tjd| jfgƒ| _| j| j_tjd| jfgƒ| _| j	| j_d S )Nr¬   )
rH   r   r  rÃ   rÁ   r  r  rš  rÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH   ¦	  s    
z*getPhases.<locals>.AfterBodyPhase.__init__c             S   s   d S )Nr)   )r@   r)   r)   r*   rˆ   ±	  s    z,getPhases.<locals>.AfterBodyPhase.processEOFc             S   s   | j j|| j jd ƒ d S )Nr   )r<   r¿   r{   )r@   r‰   r)   r)   r*   r…   µ	  s    z0getPhases.<locals>.AfterBodyPhase.processCommentc             S   s    | j jdƒ | j jd | j _|S )Nzunexpected-char-after-bodyrœ   )rI   r|   rF   r]   )r@   r‰   r)   r)   r*   r�   º	  s    z3getPhases.<locals>.AfterBodyPhase.processCharactersc             S   s   | j jd j|ƒS )Nrœ   )rI   rF   rƒ   )r@   r‰   r)   r)   r*   rÃ   ¿	  s    z.getPhases.<locals>.AfterBodyPhase.startTagHtmlc             S   s*   | j jdd|d iƒ | j jd | j _|S )Nzunexpected-start-tag-after-bodyr>   rœ   )rI   r|   rF   r]   )r@   r‰   r)   r)   r*   r  Â	  s    z/getPhases.<locals>.AfterBodyPhase.startTagOtherc             S   s*   | j jr| j jdƒ n| j jd | j _d S )Nz'unexpected-end-tag-after-body-innerhtmlÚafterAfterBody)rI   rP   r|   rF   r]   )r@   r>   r)   r)   r*   rš  È	  s    z,getPhases.<locals>.AfterBodyPhase.endTagHtmlc             S   s*   | j jdd|d iƒ | j jd | j _|S )Nzunexpected-end-tag-after-bodyr>   rœ   )rI   r|   rF   r]   )r@   r‰   r)   r)   r*   r  Î	  s    z-getPhases.<locals>.AfterBodyPhase.endTagOtherN)r7   r8   r9   rH   rˆ   r…   r�   rÃ   r  rš  r  r)   )rÅ   r)   r*   ÚAfterBodyPhase¥	  s   r  c                   sX   e Zd Z‡ f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S )z"getPhases.<locals>.InFramesetPhasec                sf   ˆ j | ||ƒ tjd| jfd| jfd| jfd| jfgƒ| _| j| j_	tjd| j
fgƒ| _| j| j_	d S )Nr¬   r«   ry  r  )rH   r   r  rÃ   r5  ÚstartTagFrameÚstartTagNoframesrÁ   r  r  ÚendTagFramesetrÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH   Ö	  s    
z+getPhases.<locals>.InFramesetPhase.__init__c             S   s$   | j jd jdkr | jjdƒ n d S )Nr	   r¬   zeof-in-framesetry   )r<   r{   r>   rI   r|   )r@   r)   r)   r*   rˆ   æ	  s    z-getPhases.<locals>.InFramesetPhase.processEOFc             S   s   | j jdƒ d S )Nzunexpected-char-in-frameset)rI   r|   )r@   r‰   r)   r)   r*   r�   ì	  s    z4getPhases.<locals>.InFramesetPhase.processCharactersc             S   s   | j j|ƒ d S )N)r<   r°   )r@   r‰   r)   r)   r*   r5  ï	  s    z3getPhases.<locals>.InFramesetPhase.startTagFramesetc             S   s   | j j|ƒ | j jjƒ  d S )N)r<   r°   r{   r)  )r@   r‰   r)   r)   r*   r	  ò	  s    z0getPhases.<locals>.InFramesetPhase.startTagFramec             S   s   | j jd j|ƒS )Nrœ   )rI   rF   rƒ   )r@   r‰   r)   r)   r*   r
  ö	  s    z3getPhases.<locals>.InFramesetPhase.startTagNoframesc             S   s   | j jdd|d iƒ d S )Nz unexpected-start-tag-in-framesetr>   )rI   r|   )r@   r‰   r)   r)   r*   r  ù	  s    z0getPhases.<locals>.InFramesetPhase.startTagOtherc             S   s\   | j jd jdkr | jjdƒ n| j jjƒ  | jj rX| j jd jdkrX| jjd | j_d S )Nr	   r¬   z)unexpected-frameset-in-frameset-innerhtmlr«   ÚafterFramesetry   ry   )	r<   r{   r>   rI   r|   r)  rP   rF   r]   )r@   r‰   r)   r)   r*   r  ý	  s    
z1getPhases.<locals>.InFramesetPhase.endTagFramesetc             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tag-in-framesetr>   )rI   r|   )r@   r‰   r)   r)   r*   r  	
  s    z.getPhases.<locals>.InFramesetPhase.endTagOtherN)r7   r8   r9   rH   rˆ   r�   r5  r	  r
  r  r  r  r)   )rÅ   r)   r*   ÚInFramesetPhaseÔ	  s   r  c                   sH   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )z%getPhases.<locals>.AfterFramesetPhasec                sV   ˆ j | ||ƒ tjd| jfd| jfgƒ| _| j| j_tjd| jfgƒ| _	| j
| j	_d S )Nr¬   r  )rH   r   r  rÃ   r
  rÁ   r  r  rš  rÄ   r  )r@   rI   r<   )rÅ   r)   r*   rH   
  s    
z.getPhases.<locals>.AfterFramesetPhase.__init__c             S   s   d S )Nr)   )r@   r)   r)   r*   rˆ   
  s    z0getPhases.<locals>.AfterFramesetPhase.processEOFc             S   s   | j jdƒ d S )Nzunexpected-char-after-frameset)rI   r|   )r@   r‰   r)   r)   r*   r�   !
  s    z7getPhases.<locals>.AfterFramesetPhase.processCharactersc             S   s   | j jd j|ƒS )Nr  )rI   rF   rƒ   )r@   r‰   r)   r)   r*   r
  $
  s    z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc             S   s   | j jdd|d iƒ d S )Nz#unexpected-start-tag-after-framesetr>   )rI   r|   )r@   r‰   r)   r)   r*   r  '
  s    z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc             S   s   | j jd | j _d S )NÚafterAfterFrameset)rI   rF   r]   )r@   r‰   r)   r)   r*   rš  +
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc             S   s   | j jdd|d iƒ d S )Nz!unexpected-end-tag-after-framesetr>   )rI   r|   )r@   r‰   r)   r)   r*   r  .
  s    z1getPhases.<locals>.AfterFramesetPhase.endTagOtherN)
r7   r8   r9   rH   rˆ   r�   r
  r  rš  r  r)   )rÅ   r)   r*   ÚAfterFramesetPhase
  s   r  c                   sP   e Zd Z‡ f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S )z&getPhases.<locals>.AfterAfterBodyPhasec                s0   ˆ j | ||ƒ tjd| jfgƒ| _| j| j_d S )Nr¬   )rH   r   r  rÃ   rÁ   r  r  )r@   rI   r<   )rÅ   r)   r*   rH   3
  s    z/getPhases.<locals>.AfterAfterBodyPhase.__init__c             S   s   d S )Nr)   )r@   r)   r)   r*   rˆ   ;
  s    z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc             S   s   | j j|| j jƒ d S )N)r<   r¿   rÆ   )r@   r‰   r)   r)   r*   r…   >
  s    z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc             S   s   | j jd j|ƒS )Nrœ   )rI   rF   r‚   )r@   r‰   r)   r)   r*   r‚   A
  s    z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharactersc             S   s    | j jdƒ | j jd | j _|S )Nzexpected-eof-but-got-charrœ   )rI   r|   rF   r]   )r@   r‰   r)   r)   r*   r�   D
  s    z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc             S   s   | j jd j|ƒS )Nrœ   )rI   rF   rƒ   )r@   r‰   r)   r)   r*   rÃ   I
  s    z3getPhases.<locals>.AfterAfterBodyPhase.startTagHtmlc             S   s*   | j jdd|d iƒ | j jd | j _|S )Nzexpected-eof-but-got-start-tagr>   rœ   )rI   r|   rF   r]   )r@   r‰   r)   r)   r*   r  L
  s    z4getPhases.<locals>.AfterAfterBodyPhase.startTagOtherc             S   s*   | j jdd|d iƒ | j jd | j _|S )Nzexpected-eof-but-got-end-tagr>   rœ   )rI   r|   rF   r]   )r@   r‰   r)   r)   r*   r„   R
  s    z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagN)r7   r8   r9   rH   rˆ   r…   r‚   r�   rÃ   r  r„   r)   )rÅ   r)   r*   ÚAfterAfterBodyPhase2
  s   r  c                   sX   e Zd Z‡ f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S )z*getPhases.<locals>.AfterAfterFramesetPhasec                s8   ˆ j | ||ƒ tjd| jfd| jfgƒ| _| j| j_d S )Nr¬   r  )rH   r   r  rÃ   ÚstartTagNoFramesrÁ   r  r  )r@   rI   r<   )rÅ   r)   r*   rH   Y
  s
    z3getPhases.<locals>.AfterAfterFramesetPhase.__init__c             S   s   d S )Nr)   )r@   r)   r)   r*   rˆ   b
  s    z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc             S   s   | j j|| j jƒ d S )N)r<   r¿   rÆ   )r@   r‰   r)   r)   r*   r…   e
  s    z9getPhases.<locals>.AfterAfterFramesetPhase.processCommentc             S   s   | j jd j|ƒS )Nrœ   )rI   rF   r‚   )r@   r‰   r)   r)   r*   r‚   h
  s    zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc             S   s   | j jdƒ d S )Nzexpected-eof-but-got-char)rI   r|   )r@   r‰   r)   r)   r*   r�   k
  s    z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc             S   s   | j jd j|ƒS )Nrœ   )rI   rF   rƒ   )r@   r‰   r)   r)   r*   rÃ   n
  s    z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc             S   s   | j jd j|ƒS )Nr  )rI   rF   rƒ   )r@   r‰   r)   r)   r*   r  q
  s    z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc             S   s   | j jdd|d iƒ d S )Nzexpected-eof-but-got-start-tagr>   )rI   r|   )r@   r‰   r)   r)   r*   r  t
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc             S   s   | j jdd|d iƒ d S )Nzexpected-eof-but-got-end-tagr>   )rI   r|   )r@   r‰   r)   r)   r*   r„   x
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagN)r7   r8   r9   rH   rˆ   r…   r‚   r�   rÃ   r  r  r„   r)   )rÅ   r)   r*   ÚAfterAfterFramesetPhaseX
  s   	r  )rT   rS   rž   r  r-  r.  rœ   r¯   r›   r×  r™   rš   r˜   r—   r–   r•   r¼  rv   rÂ  r�   r  r  r  )r   )rG   rV   r½   r
  r  r  r/  r3  r8  rË  rÍ  rÙ  rÝ  râ  ræ  rì  rð  rô  rû  rü  r  r  r  r  r  r  r)   )rÅ   r*   rE   _  sp    ) #.g@C     X! -GBbYLd's/9%&&rE   c                s^   t s
tjr t| d ƒtˆ ƒ@ }nt| d ƒtˆ ƒ@ }|rZt‡ fdd„| d jƒ D ƒƒ| d< d S )Nrs   c             3   s"   | ]\}}ˆ j ||ƒ|fV  qd S )N)r}   )r=   ÚkÚv)r   r)   r*   r·   Ÿ
  s   z$adjust_attributes.<locals>.<genexpr>)r   r   ZPY27r   r€   r   r.   )r‰   r   Zneeds_adjustmentr)   )r   r*   r’   ™
  s    
r’   rp   Fc             C   s   |d kri }t | | ||dœS )N)r2   r>   rs   rw   )r   )r>   r2   ri   rw   r)   r)   r*   r  £
  s    
r  c               @   s   e Zd ZdZdS )rr   zError in parsed documentN)r7   r8   r9   r³   r)   r)   r)   r*   rr   «
  s   rr   )r   T)r+   r   T)rp   NF)1Z
__future__r   r   r   Zsixr   r   r   r0   Úcollectionsr   ÚImportErrorZordereddictrÊ   r
   r   r   Ztreebuilders.baser   r   Z	constantsr   r   r   r   r   r   r   r   r   r   r   r   r“   r   r   r   r   r#   r-   r;   re  r"   ZmemoizerE   r’   r  Ú	Exceptionrr   r)   r)   r)   r*   Ú<module>   sR   H

  )                  L
 
