3
ûâdeÂÉ ã               @   s  d dl mZmZmZ d dlmZmZ d dl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 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*ƒZ+dS )#é    )Úabsolute_importÚdivisionÚunicode_literals)Úwith_metaclassÚviewkeysNé   )Ú_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 )aò  Parse an HTML document as a string or file-like object into a tree

    :arg doc: the document to parse as a string or file-like object

    :arg treebuilder: the treebuilder to use when parsing

    :arg namespaceHTMLElements: whether or not to namespace HTML elements

    :returns: parsed tree

    Example:

    >>> from html5lib.html5parser import parse
    >>> parse('<html><body><p>This is a doc</p></body></html>')
    <Element u'{http://www.w3.org/1999/xhtml}html' at 0x7feac4909db0>

    )ÚnamespaceHTMLElements)r
   ÚgetTreeBuilderÚ
HTMLParserÚparse)ÚdocÚtreebuilderr   ÚkwargsÚtbÚp© r'   ú?/tmp/pip-build-red6nood/pip/pip/_vendor/html5lib/html5parser.pyr!      s    
r!   Údivc             K   s,   t j|ƒ}t||d�}|j| fd|i|—ŽS )a#  Parse an HTML fragment as a string or file-like object into a tree

    :arg doc: the fragment to parse as a string or file-like object

    :arg container: the container context to parse the fragment in

    :arg treebuilder: the treebuilder to use when parsing

    :arg namespaceHTMLElements: whether or not to namespace HTML elements

    :returns: parsed tree

    Example:

    >>> from html5lib.html5libparser import parseFragment
    >>> parseFragment('<b>this is a fragment</b>')
    <Element u'DOCUMENT_FRAGMENT' at 0x7feac484b090>

    )r   Ú	container)r
   r   r    ÚparseFragment)r"   r*   r#   r   r$   r%   r&   r'   r'   r(   r+   1   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__)ÚmetaÚ	classnameÚbasesÚ	classDictÚattributeNameÚ	attribute)Úfunctionr'   r(   r1   L   s
    z5method_decorator_metaclass.<locals>.Decorated.__new__N)Ú__name__Ú
__module__Ú__qualname__r1   r'   )r8   r'   r(   Ú	DecoratedK   s   r<   )r0   )r8   r<   r'   )r8   r(   Úmethod_decorator_metaclassJ   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d„Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ ZdS )*r    z]HTML parser

    Generates a tree structure from a stream of (possibly malformed) HTML.

    NFTc                sH   |ˆ _ |dkrtjdƒ}||ƒˆ _g ˆ _‡ fdd„t|ƒjƒ D ƒˆ _dS )aÑ  
        :arg tree: a treebuilder class controlling the type of tree that will be
            returned. Built in treebuilders can be accessed through
            html5lib.treebuilders.getTreeBuilder(treeType)

        :arg strict: raise an exception when a parse error is encountered

        :arg namespaceHTMLElements: whether or not to namespace HTML elements

        :arg debug: whether or not to enable debug mode which logs things

        Example:

        >>> from html5lib.html5parser import HTMLParser
        >>> parser = HTMLParser()                     # generates parser with etree builder
        >>> parser = HTMLParser('lxml', strict=True)  # generates parser with lxml builder which is strict

        Nr   c                s   i | ]\}}|ˆ ˆ j ƒ|“qS r'   )Útree)Ú.0ÚnameÚcls)Úselfr'   r(   ú
<dictcomp>y   s    z'HTMLParser.__init__.<locals>.<dictcomp>)Ústrictr
   r   r>   ÚerrorsÚ	getPhasesr,   Úphases)rB   r>   rD   r   Údebugr'   )rB   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	   ÚHTMLTokenizerÚ	tokenizerÚresetÚmainLoopr   )rB   ÚstreamÚ	innerHTMLr*   rL   r$   r'   r'   r(   Ú_parse|   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>   rO   ÚfirstStartTagrE   ÚlogÚ
compatModerK   r*   ÚlowerrR   r   rN   ÚrcdataStateÚstater   ÚrawtextStateÚplaintextStaterG   ÚphaseÚinsertHtmlElementÚresetInsertionModeÚ	lastPhaseÚbeforeRCDataPhaseÚ
framesetOK)rB   r'   r'   r(   rO   Š   s*    





zHTMLParser.resetc             C   s   t | dƒsdS | jjjd jS )z‡Name of the character encoding that was used to decode the input stream, or
        :obj:`None` if that is not determined yet

        rN   Nr   )ÚhasattrrN   rQ   ÚcharEncodingr@   )rB   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)rj   rk   )r@   Ú	namespacer   Ú
attributesÚ	translater   r   )rB   Úelementr'   r'   r(   ÚisHTMLIntegrationPoint¶   s    


z!HTMLParser.isHTMLIntegrationPointc             C   s   |j |jftkS )N)rl   r@   r   )rB   ro   r'   r'   r(   ÚisMathMLTextIntegrationPointÀ   s    z'HTMLParser.isMathMLTextIntegrationPointc             C   sx  t d }t d }t d }t d }t d }t d }t d }�xö| jD �]ê}d }	|}
�x¬|
d k	�rþ|
}	| jjrv| jjd nd }|r„|jnd }|r’|jnd }|
d	 }||krÄ| j|
d
 |
jdi ƒƒ d }
qTt| jjƒdk�sj|| jj	k�sj| j
|ƒ�r||k�r|d tddgƒk�sj|||fk�sj|td k�rN|dk�rN||k�rN|d dk�sj| j|ƒ�rr||||fk�rr| j}n
| jd }||k�r’|j|
ƒ}
qT||k�r¨|j|
ƒ}
qT||k�r¾|j|
ƒ}
qT||k�rÔ|j|
ƒ}
qT||k�rê|j|
ƒ}
qT||krT|j|
ƒ}
qTW ||krB|	d rB|	d  rB| jdd|	d iƒ qBW d}g }x8|�rr|j| jƒ | jjƒ }|�r<| j|k�s<t‚�q<W d S )NÚ
CharactersÚSpaceCharactersÚStartTagÚEndTagÚCommentÚDoctypeÚ
ParseErrorr   r0   ÚdataÚdatavarsr   r@   ÚmglyphÚ
malignmarkrh   zannotation-xmlÚsvgÚinForeignContentÚselfClosingÚselfClosingAcknowledgedz&non-void-element-with-trailing-solidusTéÿÿÿÿ)r   rN   r>   ÚopenElementsrl   r@   Ú
parseErrorÚgetÚlenÚdefaultNamespacerq   Ú	frozensetr   rp   r_   rG   ÚprocessCharactersÚprocessSpaceCharactersÚprocessStartTagÚprocessEndTagÚprocessCommentÚprocessDoctypeÚappendÚ
processEOFÚAssertionError)rB   ÚCharactersTokenÚSpaceCharactersTokenÚStartTagTokenÚEndTagTokenÚCommentTokenÚDoctypeTokenÚParseErrorTokenÚtokenÚ
prev_tokenÚ	new_tokenÚcurrentNodeÚcurrentNodeNamespaceÚcurrentNodeNamer0   r_   Ú	reprocessrG   r'   r'   r(   rP   Ã   sp    










zHTMLParser.mainLoopc             O   s    | j |ddf|ž|Ž | jjƒ S )aî  Parse a HTML document into a well-formed tree

        :arg stream: a file-like 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).

        :arg scripting: treat noscript elements as if JavaScript was turned on

        :returns: parsed tree

        Example:

        >>> from html5lib.html5parser import HTMLParser
        >>> parser = HTMLParser()
        >>> parser.parse('<html><body><p>This is a doc</p></body></html>')
        <Element u'{http://www.w3.org/1999/xhtml}html' at 0x7feac4909db0>

        FN)rS   r>   ÚgetDocument)rB   rQ   Úargsr$   r'   r'   r(   r!     s    zHTMLParser.parsec             O   s   | j |df|ž|Ž | jjƒ S )aZ  Parse a HTML fragment into a well-formed tree fragment

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

        :arg stream: a file-like 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)

        :arg scripting: treat noscript elements as if JavaScript was turned on

        :returns: parsed tree

        Example:

        >>> from html5lib.html5libparser import HTMLParser
        >>> parser = HTMLParser()
        >>> parser.parseFragment('<b>this is a fragment</b>')
        <Element u'DOCUMENT_FRAGMENT' at 0x7feac484b090>

        T)rS   r>   ÚgetFragment)rB   rQ   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)rE   rŽ   rN   rQ   ÚpositionrD   rx   r   )rB   Ú	errorcoderz   r'   r'   r(   rƒ   ;  s
    zHTMLParser.parseErrorc             C   s   t |tƒ d S )N)Úadjust_attributesr   )rB   r˜   r'   r'   r(   r   C  s    z!HTMLParser.adjustMathMLAttributesc             C   s   t |tƒ d S )N)r¥   r   )rB   r˜   r'   r'   r(   r   F  s    zHTMLParser.adjustSVGAttributesc             C   s   t |tƒ d S )N)r¥   ÚadjustForeignAttributesMap)rB   r˜   r'   r'   r(   r   I  s    z"HTMLParser.adjustForeignAttributesc             C   s   | j jƒ  d S )N)rJ   r_   )rB   r˜   r'   r'   r(   ÚreparseTokenNormalL  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 ]„}|j}d }|| j jd krl| jsbt‚d}| j}|dkr~| js~t‚| 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¿   r�   )r²   rº   r¼   r¿   )	r>   r‚   r@   rR   r�   rl   r†   rG   r_   )rB   ÚlastÚnewModesÚnodeÚnodeNameÚ	new_phaser'   r'   r(   ra   P  sB    


zHTMLParser.resetInsertionModec             C   sR   |dkst ‚| jj|ƒ |dkr.| jj| j_n| jj| j_| j| _| j	d | _d S )NÚRAWTEXTÚRCDATAÚtext)rÅ   rÆ   )
r�   r>   ÚinsertElementrN   r]   r\   r[   r_   ÚoriginalPhaserG   )rB   r˜   ÚcontentTyper'   r'   r(   ÚparseRCDataRawtext|  s    zHTMLParser.parseRCDataRawtext)NFTF)Fr)   F)r¢   N)r9   r:   r;   Ú__doc__rI   rS   rO   Úpropertyrg   rp   rq   rP   r!   r+   rƒ   r   r   r   r§   ra   rË   r'   r'   r'   r(   r    V   s"   

"

C
,r    c                s   dd„ }dd„ }G dd„ dt || |ƒƒƒ‰G dd„ dˆƒ}G d	d
„ d
ˆƒ}G dd„ dˆƒ}G dd„ dˆƒ}G dd„ dˆƒ}G dd„ dˆƒ}G ‡ ‡f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 d'd(„ d(ˆƒ}G ‡fd)d*„d*ˆƒ}G d+d,„ d,ˆƒ}G ‡fd-d.„d.ˆƒ}G ‡fd/d0„d0ˆƒ}G d1d2„ d2ˆƒ}G d3d4„ d4ˆƒ}||||||ˆ |	|
ˆ|||||||||||||d5œS )6Nc                s$   dd„ t jƒ D ƒ‰‡ ‡fdd„}|S )z4Logger that records which phase processes each tokenc             S   s   i | ]\}}||“qS r'   r'   )r?   ÚkeyÚvaluer'   r'   r(   rC   �  s    z*getPhases.<locals>.log.<locals>.<dictcomp>c                sš   ˆ j jdƒr†t|ƒdkr†|d }dˆ|d  i}|d tkrH|d |d< | jjj| jjjj | jj	j
j | j
j ˆ j |fƒ ˆ | f|ž|ŽS ˆ | f|ž|ŽS d S )NÚprocessr   r0   r@   )r9   Ú
startswithr…   r   rJ   rX   rŽ   rN   r\   r_   Ú	__class__)rB   r    r$   r˜   Úinfo)r8   Ú
type_namesr'   r(   Úwrapped’  s    
z'getPhases.<locals>.log.<locals>.wrapped)r   r,   )r8   rÕ   r'   )r8   rÔ   r(   rX   Ž  s    zgetPhases.<locals>.logc             S   s   | rt |ƒS tS d S )N)r=   r0   )Úuse_metaclassÚmetaclass_funcr'   r'   r(   ÚgetMetaclass£  s    zgetPhases.<locals>.getMetaclassc               @   s\   e Zd 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
        rJ   r>   Ú__startTagCacheÚ__endTagCachec             S   s   || _ || _i | _i | _d S )N)rJ   r>   Ú_Phase__startTagCacheÚ_Phase__endTagCache)rB   rJ   r>   r'   r'   r(   rI   ¯  s    z!getPhases.<locals>.Phase.__init__c             S   s   t ‚d S )N)ÚNotImplementedError)rB   r'   r'   r(   r�   µ  s    z#getPhases.<locals>.Phase.processEOFc             S   s   | j j|| j jd ƒ d S )Nr   r�   )r>   ÚinsertCommentr‚   )rB   r˜   r'   r'   r(   rŒ   ¸  s    z'getPhases.<locals>.Phase.processCommentc             S   s   | j jdƒ d S )Nzunexpected-doctype)rJ   rƒ   )rB   r˜   r'   r'   r(   r�   ½  s    z'getPhases.<locals>.Phase.processDoctypec             S   s   | j j|d ƒ d S )Nry   )r>   Ú
insertText)rB   r˜   r'   r'   r(   rˆ   À  s    z*getPhases.<locals>.Phase.processCharactersc             S   s   | j j|d ƒ d S )Nry   )r>   rß   )rB   r˜   r'   r'   r(   r‰   Ã  s    z/getPhases.<locals>.Phase.processSpaceCharactersc             S   sn   |d }|| j kr| j | }nH| j|  }| j |< x2t| j ƒt| jƒd krd| j jtt| j ƒƒƒ q4W ||ƒS )Nr@   gš™™™™™ñ?)rÛ   ÚstartTagHandlerr…   ÚpopÚnextÚiter)rB   r˜   r@   Úfuncr'   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-rootry   r   F)rJ   rW   rƒ   r,   r>   r‚   rm   )rB   r˜   ÚattrrÏ   r'   r'   r(   ÚstartTagHtml×  s    z%getPhases.<locals>.Phase.startTagHtmlc             S   sn   |d }|| j kr| j | }nH| j|  }| j |< x2t| j ƒt| jƒd krd| j jtt| j ƒƒƒ q4W ||ƒS )Nr@   gš™™™™™ñ?)rÜ   ÚendTagHandlerr…   rá   râ   rã   )rB   r˜   r@   rä   r'   r'   r(   r‹   á  s    
z&getPhases.<locals>.Phase.processEndTagN)rJ   r>   rÙ   rÚ   )r9   r:   r;   rÌ   Ú	__slots__rI   r�   rŒ   r�   rˆ   r‰   rŠ   ræ   r‹   r'   r'   r'   r(   ÚPhaseª  s   
ré   c               @   sR   e Zd Zeƒ 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'   )rB   r˜   r'   r'   r(   r‰   õ  s    z6getPhases.<locals>.InitialPhase.processSpaceCharactersc             S   s   | j j|| j jƒ d S )N)r>   rÞ   Údocument)rB   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 quirksrU   )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)  )rJ   rƒ   r>   ÚinsertDoctypern   r   rÑ   rZ   rY   rG   r_   )rB   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*  rU   )rJ   rY   rG   r_   )rB   r'   r'   r(   ÚanythingElseZ  s    z,getPhases.<locals>.InitialPhase.anythingElsec             S   s   | j jdƒ | jƒ  |S )Nzexpected-doctype-but-got-chars)rJ   rƒ   r.  )rB   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@   )rJ   rƒ   r.  )rB   r˜   r'   r'   r(   rŠ   c  s    z/getPhases.<locals>.InitialPhase.processStartTagc             S   s"   | j jdd|d iƒ | jƒ  |S )Nz expected-doctype-but-got-end-tagr@   )rJ   rƒ   r.  )rB   r˜   r'   r'   r(   r‹   i  s    z-getPhases.<locals>.InitialPhase.processEndTagc             S   s   | j jdƒ | jƒ  dS )Nzexpected-doctype-but-got-eofT)rJ   rƒ   r.  )rB   r'   r'   r(   r�   o  s    z*getPhases.<locals>.InitialPhase.processEOFN)r9   r:   r;   Útuplerè   r‰   rŒ   r�   r.  rˆ   rŠ   r‹   r�   r'   r'   r'   r(   ÚInitialPhaseò  s   _r0  c               @   sJ   e Zd Zeƒ 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¿   rt   r±   )r>   Ú
insertRootÚimpliedTagTokenrJ   rG   r_   )rB   r'   r'   r(   r`   x  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc             S   s   | j ƒ  dS )NT)r`   )rB   r'   r'   r(   r�   }  s    z-getPhases.<locals>.BeforeHtmlPhase.processEOFc             S   s   | j j|| j jƒ d S )N)r>   rÞ   rê   )rB   r˜   r'   r'   r(   rŒ   �  s    z1getPhases.<locals>.BeforeHtmlPhase.processCommentc             S   s   d S )Nr'   )rB   r˜   r'   r'   r(   r‰   „  s    z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc             S   s   | j ƒ  |S )N)r`   )rB   r˜   r'   r'   r(   rˆ   ‡  s    z4getPhases.<locals>.BeforeHtmlPhase.processCharactersc             S   s    |d dkrd| j _| jƒ  |S )Nr@   r¿   T)rJ   rW   r`   )rB   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¿   r3  )rJ   rƒ   r`   )rB   r˜   r'   r'   r(   r‹   ‘  s
    z0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)r9   r:   r;   r/  rè   r`   r�   rŒ   r‰   rˆ   rŠ   r‹   r'   r'   r'   r(   ÚBeforeHtmlPhaset  s   r4  c               @   s„   e Zd Zeƒ 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ejdefde	fgƒZe
e_ejdefgƒZee_dS )z"getPhases.<locals>.BeforeHeadPhasec             S   s   | j tddƒƒ dS )Nr¼   rt   T)ÚstartTagHeadr2  )rB   r'   r'   r(   r�   œ  s    z-getPhases.<locals>.BeforeHeadPhase.processEOFc             S   s   d S )Nr'   )rB   r˜   r'   r'   r(   r‰      s    z9getPhases.<locals>.BeforeHeadPhase.processSpaceCharactersc             S   s   | j tddƒƒ |S )Nr¼   rt   )r5  r2  )rB   r˜   r'   r'   r(   rˆ   £  s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   ræ   §  s    z/getPhases.<locals>.BeforeHeadPhase.startTagHtmlc             S   s0   | j j|ƒ | j jd | j _| jjd | j_d S )Nr   ÚinHeadr�   )r>   rÈ   r‚   ÚheadPointerrJ   rG   r_   )rB   r˜   r'   r'   r(   r5  ª  s    z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc             S   s   | j tddƒƒ |S )Nr¼   rt   )r5  r2  )rB   r˜   r'   r'   r(   ÚstartTagOther¯  s    z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc             S   s   | j tddƒƒ |S )Nr¼   rt   )r5  r2  )rB   r˜   r'   r'   r(   ÚendTagImplyHead³  s    z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc             S   s   | j jdd|d iƒ d S )Nzend-tag-after-implied-rootr@   )rJ   rƒ   )rB   r˜   r'   r'   r(   ÚendTagOther·  s    z.getPhases.<locals>.BeforeHeadPhase.endTagOtherr¿   r¼   r½   r3  N)r¼   r½   r¿   r3  )r9   r:   r;   r/  rè   r�   r‰   rˆ   ræ   r5  r8  r9  r:  r   ÚMethodDispatcherrà   Údefaultrç   r'   r'   r'   r(   ÚBeforeHeadPhase™  s    r=  c               @   sæ   e Zd Zeƒ 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ejdefd efd/efd#efd$efd0e	fd*e
fd+efgƒZee_ejd+efd1efgƒZee_d.S )2zgetPhases.<locals>.InHeadPhasec             S   s   | j ƒ  dS )NT)r.  )rB   r'   r'   r(   r�   Ê  s    z)getPhases.<locals>.InHeadPhase.processEOFc             S   s   | j ƒ  |S )N)r.  )rB   r˜   r'   r'   r(   rˆ   Î  s    z0getPhases.<locals>.InHeadPhase.processCharactersc             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   rŠ   )rB   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)rJ   rƒ   )rB   r˜   r'   r'   r(   r5  Õ  s    z+getPhases.<locals>.InHeadPhase.startTagHeadc             S   s$   | j j|ƒ | j jjƒ  d|d< d S )NTr€   )r>   rÈ   r‚   rá   )rB   r˜   r'   r'   r(   ÚstartTagBaseLinkCommandØ  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 )NTr€   ry   r   Ú	tentativeÚcharsetÚcontentz
http-equivzcontent-typezutf-8)r>   rÈ   r‚   rá   rJ   rN   rQ   rf   ÚchangeEncodingrZ   r   ÚEncodingBytesÚencodeÚContentAttrParserr!   )rB   r˜   rm   ry   rJ   Úcodecr'   r'   r(   ÚstartTagMetaÝ  s    
z+getPhases.<locals>.InHeadPhase.startTagMetac             S   s   | j j|dƒ d S )NrÆ   )rJ   rË   )rB   r˜   r'   r'   r(   ÚstartTagTitleò  s    z,getPhases.<locals>.InHeadPhase.startTagTitlec             S   s   | j j|dƒ d S )NrÅ   )rJ   rË   )rB   r˜   r'   r'   r(   ÚstartTagNoFramesStyleõ  s    z4getPhases.<locals>.InHeadPhase.startTagNoFramesStylec             S   s8   | j jr| j j|dƒ n| jj|ƒ | j jd | j _d S )NrÅ   ÚinHeadNoscript)rJ   rL   rË   r>   rÈ   rG   r_   )rB   r˜   r'   r'   r(   ÚstartTagNoscriptù  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È   rJ   rN   ÚscriptDataStater\   r_   rÉ   rG   )rB   r˜   r'   r'   r(   ÚstartTagScript   s    z-getPhases.<locals>.InHeadPhase.startTagScriptc             S   s   | j ƒ  |S )N)r.  )rB   r˜   r'   r'   r(   r8    s    z,getPhases.<locals>.InHeadPhase.startTagOtherc             S   s:   | j jjjƒ }|jdks&td|j ƒ‚| j jd | j _d S )Nr¼   zExpected head got %sÚ	afterHead)rJ   r>   r‚   rá   r@   r�   rG   r_   )rB   r˜   rÂ   r'   r'   r(   Ú
endTagHead
  s    z)getPhases.<locals>.InHeadPhase.endTagHeadc             S   s   | j ƒ  |S )N)r.  )rB   r˜   r'   r'   r(   ÚendTagHtmlBodyBr  s    z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tagr@   )rJ   rƒ   )rB   r˜   r'   r'   r(   r:    s    z*getPhases.<locals>.InHeadPhase.endTagOtherc             S   s   | j tdƒƒ d S )Nr¼   )rO  r2  )rB   r'   r'   r(   r.    s    z+getPhases.<locals>.InHeadPhase.anythingElser¿   ÚtitleÚnoframesÚstyleÚnoscriptÚscriptÚbaseÚbasefontÚbgsoundÚcommandÚlinkr2   r¼   r3  r½   N)rR  rS  )rV  rW  rX  rY  rZ  )r3  r¿   r½   )r9   r:   r;   r/  rè   r�   rˆ   ræ   r5  r>  rG  rH  rI  rK  rM  r8  rO  rP  r:  r.  r   r;  rà   r<  rç   r'   r'   r'   r(   ÚInHeadPhaseÆ  s>   r[  c               @   s°   e Zd Zeƒ 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ejde	fd$e
fd%efgƒZee_ejd!efd"efgƒZee_d#S )&z&getPhases.<locals>.InHeadNoscriptPhasec             S   s   | j jdƒ | jƒ  dS )Nzeof-in-head-noscriptT)rJ   rƒ   r.  )rB   r'   r'   r(   r�   /  s    z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc             S   s   | j jd j|ƒS )Nr6  )rJ   rG   rŒ   )rB   r˜   r'   r'   r(   rŒ   4  s    z5getPhases.<locals>.InHeadNoscriptPhase.processCommentc             S   s   | j jdƒ | jƒ  |S )Nzchar-in-head-noscript)rJ   rƒ   r.  )rB   r˜   r'   r'   r(   rˆ   7  s    z8getPhases.<locals>.InHeadNoscriptPhase.processCharactersc             S   s   | j jd j|ƒS )Nr6  )rJ   rG   r‰   )rB   r˜   r'   r'   r(   r‰   <  s    z=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharactersc             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   ræ   ?  s    z3getPhases.<locals>.InHeadNoscriptPhase.startTagHtmlc             S   s   | j jd j|ƒS )Nr6  )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   r>  B  s    z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc             S   s   | j jdd|d iƒ d S )Nzunexpected-start-tagr@   )rJ   rƒ   )rB   r˜   r'   r'   r(   ÚstartTagHeadNoscriptE  s    z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc             S   s"   | j jdd|d iƒ | jƒ  |S )Nzunexpected-inhead-noscript-tagr@   )rJ   rƒ   r.  )rB   r˜   r'   r'   r(   r8  H  s    z4getPhases.<locals>.InHeadNoscriptPhase.startTagOtherc             S   s:   | j jjjƒ }|jdks&td|j ƒ‚| j jd | j _d S )NrT  zExpected noscript got %sr6  )rJ   r>   r‚   rá   r@   r�   rG   r_   )rB   r˜   rÂ   r'   r'   r(   ÚendTagNoscriptM  s    z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc             S   s"   | j jdd|d iƒ | jƒ  |S )Nzunexpected-inhead-noscript-tagr@   )rJ   rƒ   r.  )rB   r˜   r'   r'   r(   ÚendTagBrR  s    z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tagr@   )rJ   rƒ   )rB   r˜   r'   r'   r(   r:  W  s    z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc             S   s   | j tdƒƒ d S )NrT  )r]  r2  )rB   r'   r'   r(   r.  Z  s    z3getPhases.<locals>.InHeadNoscriptPhase.anythingElser¿   rW  rX  rZ  r2   rR  rS  r¼   rT  r3  N)rW  rX  rZ  r2   rR  rS  )r¼   rT  )r9   r:   r;   r/  rè   r�   rŒ   rˆ   r‰   ræ   r>  r\  r8  r]  r^  r:  r.  r   r;  rà   r<  rç   r'   r'   r'   r(   ÚInHeadNoscriptPhase,  s,   r_  c               @   s®   e Zd Zeƒ 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ejdefdefde	fd&e
fd#efgƒZee_ejd'efgƒZee_d%S )(z!getPhases.<locals>.AfterHeadPhasec             S   s   | j ƒ  dS )NT)r.  )rB   r'   r'   r(   r�   n  s    z,getPhases.<locals>.AfterHeadPhase.processEOFc             S   s   | j ƒ  |S )N)r.  )rB   r˜   r'   r'   r(   rˆ   r  s    z3getPhases.<locals>.AfterHeadPhase.processCharactersc             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   ræ   v  s    z.getPhases.<locals>.AfterHeadPhase.startTagHtmlc             S   s(   d| j _| jj|ƒ | j jd | j _d S )NFr¯   )rJ   rd   r>   rÈ   rG   r_   )rB   r˜   r'   r'   r(   ÚstartTagBodyy  s    z.getPhases.<locals>.AfterHeadPhase.startTagBodyc             S   s    | j j|ƒ | jjd | j_d S )Nr°   )r>   rÈ   rJ   rG   r_   )rB   r˜   r'   r'   r(   ÚstartTagFrameset~  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@   r6  r   r¼   r�   )
rJ   rƒ   r>   r‚   rŽ   r7  rG   rŠ   r@   Úremove)rB   r˜   rÂ   r'   r'   r(   ÚstartTagFromHead‚  s    
z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc             S   s   | j jdd|d iƒ d S )Nzunexpected-start-tagr@   )rJ   rƒ   )rB   r˜   r'   r'   r(   r5  Œ  s    z.getPhases.<locals>.AfterHeadPhase.startTagHeadc             S   s   | j ƒ  |S )N)r.  )rB   r˜   r'   r'   r(   r8  �  s    z/getPhases.<locals>.AfterHeadPhase.startTagOtherc             S   s   | j ƒ  |S )N)r.  )rB   r˜   r'   r'   r(   rP  “  s    z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tagr@   )rJ   rƒ   )rB   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½   rt   r¯   T)r>   rÈ   r2  rJ   rG   r_   rd   )rB   r'   r'   r(   r.  š  s    z.getPhases.<locals>.AfterHeadPhase.anythingElser¿   r½   r¾   rV  rW  rX  rZ  r2   rR  rU  rS  rQ  r¼   r3  N)	rV  rW  rX  rZ  r2   rR  rU  rS  rQ  )r½   r¿   r3  )r9   r:   r;   r/  rè   r�   rˆ   ræ   r`  ra  rc  r5  r8  rP  r:  r.  r   r;  rà   r<  rç   r'   r'   r'   r(   ÚAfterHeadPhasek  s0   
 
rd  c            ,       sÖ  e Zd 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d0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBdC„ Z$dDdE„ Z%dFdG„ Z&dHdI„ Z'dJdK„ Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+dRdS„ Z,dTdU„ Z-dVdW„ Z.dXdY„ Z/dZd[„ Z0d\d]„ Z1d^d_„ Z2d`da„ Z3dbdc„ Z4ddde„ Z5dfdg„ Z6e7j8dh”j9fdÌefdrefdsefdÍefe:efdÎefd�efdÏefd‘efd’efdÐefdŸefd efdÑefd¤efd¥efdÒefdÓefd¯efd°efd±efd²e fd³e!fd´e"fdµe#fdÔe$fd¸e&fdÕe'fdÖe%fd½e(fd¾e)fd×e*fg!ƒZ;e+e;_<e7j8dre-fdhe.fdØe/fd�e0fd‡e,fdÙe1fe:e2fdÚe3fdÛe4fd§e5fg
ƒZ=e6e=_<‡  Z>S )ÜzgetPhases.<locals>.InBodyPhaser‰   c                s   t ˆ | ƒj||Ž | j| _d S )N)ÚsuperrI   ÚprocessSpaceCharactersNonPrer‰   )rB   r    r$   )ÚInBodyPhaserÒ   r'   r(   rI   ²  s    z'getPhases.<locals>.InBodyPhase.__init__c             S   s$   |j |j ko"|j|jko"|j|jkS )N)r@   rl   rm   )rB   Únode1Ú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sjt‚t|ƒdkrˆ| j jj	|d ƒ | j jj|ƒ d S )Nr   é   r�   r�   r�   )
r>   rÈ   r‚   ÚactiveFormattingElementsr   rj  rŽ   r…   r�   rb  )rB   r˜   ro   Ú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 )NÚddÚdtÚlir&   r¶   r³   r¸   r´   r·   rµ   r½   r¿   r   z expected-closing-tag-but-got-eof)ro  rp  rq  r&   r¶   r³   r¸   r´   r·   rµ   r½   r¿   r�   )r‡   r>   r‚   r@   rJ   rƒ   )rB   Ú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 )
Nry   Ú
r   ÚpreÚlistingÚtextarear�   )rt  ru  rv  r�   )	rf  r‰   rÑ   r>   r‚   r@   Ú
hasContentÚ#reconstructActiveFormattingElementsrß   )rB   r˜   ry   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 )Nry   ú c             S   s   g | ]}|t k‘qS r'   )r   )r?   Úcharr'   r'   r(   ú
<listcomp>í  s   zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r>   rx  rß   rJ   rd   Úany)rB   r˜   r'   r'   r(   rˆ   å  s    
z0getPhases.<locals>.InBodyPhase.processCharactersc             S   s   | j jƒ  | j j|d ƒ d S )Nry   )r>   rx  rß   )rB   r˜   r'   r'   r(   rf  ñ  s    
z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec             S   s   | j jd j|ƒS )Nr6  )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   ÚstartTagProcessInHeadõ  s    z4getPhases.<locals>.InBodyPhase.startTagProcessInHeadc             S   sŒ   | j jdddiƒ t| jjƒdks4| jjd jdkrB| j jsˆt‚nFd| j _x<|d j	ƒ D ],\}}|| jjd j
krX|| jjd j
|< qXW d S )Nzunexpected-start-tagr@   r½   r   Fry   )rJ   rƒ   r…   r>   r‚   r@   rR   r�   rd   r,   rm   )rB   r˜   rå   rÏ   r'   r'   r(   r`  ø  s    z+getPhases.<locals>.InBodyPhase.startTagBodyc             S   sº   | j jdddiƒ t| jjƒdks4| jjd jdkrB| j js¶t‚nt| j jsLnj| jjd j	rv| jjd j	j
| jjd ƒ x"| jjd jdkr˜| jjjƒ  qxW | jj|ƒ | j jd | j _d S )	Nzunexpected-start-tagr@   r¾   r   r½   r¿   r°   r�   )rJ   rƒ   r…   r>   r‚   r@   rR   r�   rd   ÚparentÚremoveChildrá   rÈ   rG   r_   )rB   r˜   r'   r'   r(   ra    s    "z/getPhases.<locals>.InBodyPhase.startTagFramesetc             S   s.   | j jddd�r| jtdƒƒ | j j|ƒ d S )Nr&   Úbutton)Úvariant)r>   ÚelementInScopeÚendTagPr2  rÈ   )rB   r˜   r'   r'   r(   ÚstartTagCloseP  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&   r�  )r‚  F)	r>   rƒ  r„  r2  rÈ   rJ   rd   ry  r‰   )rB   r˜   r'   r'   r(   ÚstartTagPreListing  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@   Úformr&   r�  )r‚  r   r�   )	r>   ÚformPointerrJ   rƒ   rƒ  r„  r2  rÈ   r‚   )rB   r˜   r'   r'   r(   ÚstartTagForm  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  rp  ro  )rq  rp  ro  r@   ru   Úaddressr)   r&   r�  )r‚  )rŠ  r)   r&   )rJ   rd   Úreversedr>   r‚   r@   r_   r‹   r2  Ú	nameTupler   rƒ  rÈ   )rB   r˜   ÚstopNamesMapÚ	stopNamesrÂ   r'   r'   r(   ÚstartTagListItem&  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&   r�  )r‚  )	r>   rƒ  r„  r2  rÈ   rJ   rN   r^   r\   )rB   r˜   r'   r'   r(   ÚstartTagPlaintext<  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&   r�  )r‚  r   zunexpected-start-tagr@   r�   )r>   rƒ  r„  r2  r‚   r@   r   rJ   rƒ   rá   rÈ   )rB   r˜   r'   r'   r(   ÚstartTagHeadingB  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 )NÚaz$unexpected-start-tag-implies-end-tag)Ú	startNameÚendName)r>   Ú!elementInActiveFormattingElementsrJ   rƒ   ÚendTagFormattingr2  r‚   rb  rl  rx  rn  )rB   r˜   ÚafeAElementr'   r'   r(   Ú	startTagAJ  s    
z(getPhases.<locals>.InBodyPhase.startTagAc             S   s   | j jƒ  | j|ƒ d S )N)r>   rx  rn  )rB   r˜   r'   r'   r(   ÚstartTagFormattingW  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 )NÚnobrz$unexpected-start-tag-implies-end-tag)r“  r”  )r>   rx  rƒ  rJ   rƒ   r‹   r2  rn  )rB   r˜   r'   r'   r(   ÚstartTagNobr[  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 )Nr�  z$unexpected-start-tag-implies-end-tag)r“  r”  F)	r>   rƒ  rJ   rƒ   r‹   r2  rx  rÈ   rd   )rB   r˜   r'   r'   r(   ÚstartTagButtone  s    
z-getPhases.<locals>.InBodyPhase.startTagButtonc             S   s0   | j jƒ  | j j|ƒ | j jjtƒ d| j_d S )NF)r>   rx  rÈ   rl  rŽ   r   rJ   rd   )rB   r˜   r'   r'   r(   ÚstartTagAppletMarqueeObjectp  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&   r�  )r‚  FrÅ   )r>   rƒ  r„  r2  rx  rJ   rd   rË   )rB   r˜   r'   r'   r(   ÚstartTagXmpv  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&   r�  )r‚  Fr®   )
rJ   rY   r>   rƒ  r‹   r2  rÈ   rd   rG   r_   )rB   r˜   r'   r'   r(   ÚstartTagTable}  s    z,getPhases.<locals>.InBodyPhase.startTagTablec             S   s6   | j jƒ  | j j|ƒ | j jjƒ  d|d< d| j_d S )NTr€   F)r>   rx  rÈ   r‚   rá   rJ   rd   )rB   r˜   r'   r'   r(   ÚstartTagVoidFormatting…  s
    
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc             S   s@   | j j}| j|ƒ d|d kr<|d d jtƒdkr<|| j _d S )Nr0   ry   Úhidden)rJ   rd   r   rn   r   )rB   r˜   rd   r'   r'   r(   ÚstartTagInputŒ  s
    
z,getPhases.<locals>.InBodyPhase.startTagInputc             S   s$   | j j|ƒ | j jjƒ  d|d< d S )NTr€   )r>   rÈ   r‚   rá   )rB   r˜   r'   r'   r(   ÚstartTagParamSource”  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&   r�  )r‚  Tr€   F)	r>   rƒ  r„  r2  rÈ   r‚   rá   rJ   rd   )rB   r˜   r'   r'   r(   Ú
startTagHr™  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-asÚimageÚimg)ÚoriginalNameÚnewNamert   ry   r   )rm   r   )rJ   rƒ   rŠ   r2  )rB   r˜   r'   r'   r(   ÚstartTagImage¡  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@   ÚisindexÚactionry   r‡  rt   )rm   ÚhrÚlabelÚpromptz3This is a searchable index. Enter search keywords: rr   )r0   ry   Úinputr   )rm   r   )
rJ   rƒ   r>   rˆ  rŠ   r2  rˆ   r   Úcopyr‹   )rB   r˜   Ú
form_attrsr®  rm   r'   r'   r(   ÚstartTagIsIndex©  s6    


z.getPhases.<locals>.InBodyPhase.startTagIsIndexc             S   s0   | j j|ƒ | jjj| jj_| j| _d| j_d S )NF)	r>   rÈ   rJ   rN   r[   r\   ry  r‰   rd   )rB   r˜   r'   r'   r(   ÚstartTagTextareaÈ  s    z/getPhases.<locals>.InBodyPhase.startTagTextareac             S   s   d| j _| j|ƒ d S )NF)rJ   rd   ÚstartTagRawtext)rB   r˜   r'   r'   r(   ÚstartTagIFrameÎ  s    z-getPhases.<locals>.InBodyPhase.startTagIFramec             S   s"   | j jr| j|ƒ n
| j|ƒ d S )N)rJ   rL   r´  r8  )rB   r˜   r'   r'   r(   rK  Ò  s    z/getPhases.<locals>.InBodyPhase.startTagNoscriptc             S   s   | j j|dƒ dS )z8iframe, noembed noframes, noscript(if scripting enabled)rÅ   N)rJ   rË   )rB   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   Úoptionr�   )	r>   r‚   r@   rJ   r_   r‹   r2  rx  rÈ   )rB   r˜   r'   r'   r(   ÚstartTagOptÜ  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>   rx  rÈ   rJ   rd   r_   rG   )rB   r˜   r'   r'   r(   ÚstartTagSelectâ  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   r�   )r>   rƒ  ÚgenerateImpliedEndTagsr‚   r@   rJ   rƒ   rÈ   )rB   r˜   r'   r'   r(   ÚstartTagRpRtð  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 )Nrh   rl   r   Tr€   )	r>   rx  rJ   r   r   r   rÈ   r‚   rá   )rB   r˜   r'   r'   r(   ÚstartTagMath÷  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 )Nr}   rl   r   Tr€   )	r>   rx  rJ   r   r   r   rÈ   r‚   rá   )rB   r˜   r'   r'   r(   ÚstartTagSvg  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)rJ   rƒ   )rB   r˜   r'   r'   r(   ÚstartTagMisplaced  s    z0getPhases.<locals>.InBodyPhase.startTagMisplacedc             S   s   | j jƒ  | j j|ƒ d S )N)r>   rx  rÈ   )rB   r˜   r'   r'   r(   r8    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&   r�  )r‚  rt   zunexpected-end-tagr@   ru   r   r�   )r>   rƒ  r…  r2  rJ   rƒ   r„  r»  r‚   r@   rá   )rB   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   é   ro  rp  rq  Úoptgroupr¶  r&   ÚrpÚrtr¶   r³   r¸   r´   r·   rµ   r¿   z$expected-one-end-tag-but-got-another)ÚgotNameÚexpectedNameÚ	afterBodyr�   )ro  rp  rq  rÁ  r¶  r&   rÂ  rÃ  r¶   r³   r¸   r´   r·   rµ   r½   r¿   )	r>   rƒ  rJ   rƒ   r‚   r@   r‡   rG   r_   )rB   r˜   rÂ   r'   r'   r(   Ú
endTagBody)  s    
   z)getPhases.<locals>.InBodyPhase.endTagBodyc             S   s"   | j jdƒr| jtdƒƒ |S d S )Nr½   )r>   rƒ  rÇ  r2  )rB   r˜   r'   r'   r(   Ú
endTagHtml;  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@   rt  r   zend-tag-too-earlyr�   )
rf  r‰   r>   rƒ  r»  r‚   r@   rJ   rƒ   rá   )rB   r˜   ÚinScoperÂ   r'   r'   r(   ÚendTagBlockA  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@   r‡  r   zend-tag-too-early-ignoredr�   )r>   rˆ  rƒ  rJ   rƒ   r»  r‚   rb  )rB   r˜   rÂ   r'   r'   r(   Ú
endTagFormO  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-earlyr�   )r>   rƒ  rJ   rƒ   r»  r‚   r@   rá   )rB   r˜   r‚  rÂ   r'   r'   r(   ÚendTagListItem\  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-earlyr�   )	r   r>   rƒ  r»  r‚   r@   rJ   rƒ   rá   )rB   r˜   Úitemr'   r'   r(   ÚendTagHeadingm  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.3rk  r»   r¶   r¸   r·   rµ   r�   )r»   r¶   r¸   r·   rµ   )r>   r•  r‚   rƒ  r@   r:  rJ   rƒ   rl  rb  ÚindexrŒ  r   rá   Ú	cloneNoder  r€  ÚappendChildr‡   ÚgetTableMisnestedNodePositionÚinsertBeforeÚreparentChildrenÚinsert)rB   r˜   ÚouterLoopCounterÚformattingElementÚafeIndexÚfurthestBlockro   ÚcommonAncestorÚbookmarkÚlastNoderÂ   ÚinnerLoopCounterrÒ  Úcloner  rÖ  r'   r'   r(   r–  |  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-earlyr�   )	r>   rƒ  r»  r‚   r@   rJ   rƒ   rá   ÚclearActiveFormattingElements)rB   r˜   ro   r'   r'   r(   ÚendTagAppletMarqueeObject  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-asr3  z
br element)r§  r¨  rt   )rJ   rƒ   r>   rx  rÈ   r2  r‚   rá   )rB   r˜   r'   r'   r(   r^  +  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-tagr�   r�   )	r>   r‚   r@   r»  rJ   rƒ   rá   rŒ  r   )rB   r˜   rÂ   r'   r'   r(   r:  2  s    
z*getPhases.<locals>.InBodyPhase.endTagOtherr¿   rV  rW  rX  rY  rZ  r2   rU  rS  rQ  r½   r¾   rŠ  ÚarticleÚasideÚ
blockquoteÚcenterÚdetailsÚdirr)   ÚdlÚfieldsetÚ
figcaptionÚfigureÚfooterÚheaderÚhgroupÚmainÚmenuÚnavÚolr&   ÚsectionÚsummaryÚulrt  ru  r‡  rq  ro  rp  rT   r’  ÚbÚbigÚcodeÚemÚfontÚiÚsÚsmallÚstrikeÚstrongÚttÚurš  r�  ÚappletÚmarqueeÚobjectÚxmpr»   Úarear3  Úembedr¦  ÚkeygenÚwbrÚparamÚsourceÚtrackr¯  r¬  r¥  rª  rv  ÚiframerT  ÚnoembedrR  r²   rÂ  rÃ  r¶  rÁ  Úmathr}   r¹   Úcolrº   Úframer¼   r¶   r³   r¸   r´   r·   rµ   Údialog)r‰   )	rV  rW  rX  rY  rZ  r2   rU  rS  rQ  )rŠ  rä  rå  ræ  rç  rè  ré  r)   rê  rë  rì  rí  rî  rï  rð  rñ  rò  ró  rô  r&   rõ  rö  r÷  )rt  ru  )rq  ro  rp  )rø  rù  rú  rû  rü  rý  rþ  rÿ  r   r  r  r  )r  r  r  )r  r3  r	  r¦  r
  r  )r  r  r  )r  rR  )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ð  ru  rñ  rò  ró  rô  rt  rõ  rö  r÷  )ro  rp  rq  )r’  rø  rù  rú  rû  rü  rý  rš  rþ  rÿ  r   r  r  r  )r  r  r  )?r9   r:   r;   rè   rI   rj  rn  r�   ry  rˆ   rf  r~  r`  ra  r…  r†  r‰  r�  r�  r‘  r˜  r™  r›  rœ  r�  rž  rŸ  r   r¢  r£  r¤  r©  r²  r³  rµ  rK  r´  r·  r¹  r¼  r½  r¾  r¿  r8  r„  rÇ  rÈ  rÊ  rË  rÎ  rÐ  r–  rã  r^  r:  r   r;  ræ   r   rà   r<  rç   Ú__classcell__r'   )rg  ré   )rÒ   r(   rg  ­  sä   
	
	 $           rg  c               @   s`   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	e
jg ƒZee_e
jdefgƒZe	e_dS )zgetPhases.<locals>.TextPhasec             S   s   | j j|d ƒ d S )Nry   )r>   rß   )rB   r˜   r'   r'   r(   rˆ   „  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   Tr�   )rJ   rƒ   r>   r‚   r@   rá   rÉ   r_   )rB   r'   r'   r(   r�   ‡  s
    z'getPhases.<locals>.TextPhase.processEOFc             S   s   dst d|d  ƒ‚d S )NFz4Tried to process start tag %s in RCDATA/RAWTEXT moder@   )r�   )rB   r˜   r'   r'   r(   r8  Ž  s    z*getPhases.<locals>.TextPhase.startTagOtherc             S   s*   | j jjƒ }|jdkst‚| jj| j_d S )NrU  )r>   r‚   rá   r@   r�   rJ   rÉ   r_   )rB   r˜   rÂ   r'   r'   r(   ÚendTagScript‘  s    z)getPhases.<locals>.TextPhase.endTagScriptc             S   s   | j jjƒ  | jj| j_d S )N)r>   r‚   rá   rJ   rÉ   r_   )rB   r˜   r'   r'   r(   r:  ˜  s    z(getPhases.<locals>.TextPhase.endTagOtherrU  N)r9   r:   r;   r/  rè   rˆ   r�   r8  r  r:  r   r;  rà   r<  rç   r'   r'   r'   r(   Ú	TextPhase�  s   
r  c                   s  e Zd Zeƒ 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ejd%” jfd&e
fd'efd(efd6efd7efd/efd8efd2efd3efg
ƒZee_ejd/efd9efgƒZee_d5S ):zgetPhases.<locals>.InTablePhasec             S   s(   x"| j jd jdkr"| j jjƒ  qW d S )Nr   r»   r¿   r�   )r»   r¿   )r>   r‚   r@   rá   )rB   r'   r'   r(   ÚclearStackToTableContext§  s    z8getPhases.<locals>.InTablePhase.clearStackToTableContextc             S   s0   | j jd jdkr | jjdƒ n| jjs,t‚d S )Nr   r¿   zeof-in-tabler�   )r>   r‚   r@   rJ   rƒ   rR   r�   )rB   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)rJ   r_   rG   rÉ   r‰   )rB   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  )rJ   r_   rG   rÉ   rˆ   )rB   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>   ÚinsertFromTablerJ   rG   rˆ   )rB   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>   rl  rŽ   r   rÈ   rJ   rG   r_   )rB   r˜   r'   r'   r(   ÚstartTagCaptionÊ  s    z/getPhases.<locals>.InTablePhase.startTagCaptionc             S   s(   | j ƒ  | jj|ƒ | jjd | j_d S )Nr­   )r  r>   rÈ   rJ   rG   r_   )rB   r˜   r'   r'   r(   ÚstartTagColgroupÐ  s    z0getPhases.<locals>.InTablePhase.startTagColgroupc             S   s   | j tddƒƒ |S )Nrº   rt   )r  r2  )rB   r˜   r'   r'   r(   ÚstartTagColÕ  s    z+getPhases.<locals>.InTablePhase.startTagColc             S   s(   | j ƒ  | jj|ƒ | jjd | j_d S )Nr«   )r  r>   rÈ   rJ   rG   r_   )rB   r˜   r'   r'   r(   ÚstartTagRowGroupÙ  s    z0getPhases.<locals>.InTablePhase.startTagRowGroupc             S   s   | j tddƒƒ |S )Nr¶   rt   )r  r2  )rB   r˜   r'   r'   r(   ÚstartTagImplyTbodyÞ  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”  )rJ   rƒ   r_   r‹   r2  rR   )rB   r˜   r'   r'   r(   rŸ  â  s
    z-getPhases.<locals>.InTablePhase.startTagTablec             S   s   | j jd j|ƒS )Nr6  )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   ÚstartTagStyleScripté  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 )Nr0   ry   r¡  z unexpected-hidden-input-in-table)	rn   r   rJ   rƒ   r>   rÈ   r‚   rá   r8  )rB   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   r�   )rJ   rƒ   r>   rˆ  rÈ   r‚   rá   )rB   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)rJ   rƒ   r>   r  rG   rŠ   )rB   r˜   r'   r'   r(   r8  ý  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	s’t
‚| jjƒ  d S )	Nr»   )r‚  r   zend-tag-too-early-named)rÄ  rÅ  r�   r�   r�   )r>   rƒ  r»  r‚   r@   rJ   rƒ   rá   ra   rR   r�   )rB   r˜   r'   r'   r(   ÚendTagTable  s    
z+getPhases.<locals>.InTablePhase.endTagTablec             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tagr@   )rJ   rƒ   )rB   r˜   r'   r'   r(   ÚendTagIgnore  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)rJ   rƒ   r>   r  rG   r‹   )rB   r˜   r'   r'   r(   r:    s    z+getPhases.<locals>.InTablePhase.endTagOtherr¿   r¹   rº   r  r¶   r¸   r·   r³   r´   rµ   r»   rS  rU  r¯  r‡  r½   N)r¶   r¸   r·   )r³   r´   rµ   )rS  rU  )r½   r¹   r  rº   r¿   r¶   r³   r¸   r´   r·   rµ   )r9   r:   r;   r/  rè   r  r�   r‰   rˆ   rß   r  r  r  r  r  rŸ  r   r¢  r‰  r8  r!  r"  r:  r   r;  ræ   rà   r<  rç   r'   )ré   r'   r(   ÚInTablePhase¢  sH   	
 r#  c                   sZ   e Zd 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‡  ZS )z#getPhases.<locals>.InTableTextPhaserÉ   ÚcharacterTokensc                s"   t ˆ | ƒj||Ž d | _g | _d S )N)re  rI   rÉ   r$  )rB   r    r$   )ÚInTableTextPhaserÒ   r'   r(   rI   6  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 )ry   r'   )r?   rÏ  r'   r'   r(   r|  <  s    zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c             S   s   g | ]}|t k‘qS r'   )r   )r?   rÏ  r'   r'   r(   r|  =  s    rr   )r0   ry   r®   )Újoinr$  r}  r   rJ   rG   rß   r>   )rB   ry   r˜   r'   r'   r(   ÚflushCharacters;  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc             S   s   | j ƒ  | j| j_|S )N)r'  rÉ   rJ   r_   )rB   r˜   r'   r'   r(   rŒ   D  s    
z2getPhases.<locals>.InTableTextPhase.processCommentc             S   s   | j ƒ  | j| j_dS )NT)r'  rÉ   rJ   r_   )rB   r'   r'   r(   r�   I  s    
z.getPhases.<locals>.InTableTextPhase.processEOFc             S   s    |d dkrd S | j j|ƒ d S )Nry   rz  )r$  rŽ   )rB   r˜   r'   r'   r(   rˆ   N  s    z5getPhases.<locals>.InTableTextPhase.processCharactersc             S   s   | j j|ƒ d S )N)r$  rŽ   )rB   r˜   r'   r'   r(   r‰   S  s    z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc             S   s   | j ƒ  | j| j_|S )N)r'  rÉ   rJ   r_   )rB   r˜   r'   r'   r(   rŠ   X  s    
z3getPhases.<locals>.InTableTextPhase.processStartTagc             S   s   | j ƒ  | j| j_|S )N)r'  rÉ   rJ   r_   )rB   r˜   r'   r'   r(   r‹   ]  s    
z1getPhases.<locals>.InTableTextPhase.processEndTag)rÉ   r$  )r9   r:   r;   rè   rI   r'  rŒ   r�   rˆ   r‰   rŠ   r‹   r  r'   )r%  )rÒ   r(   r%  3  s   	r%  c                   sš   e Zd Zeƒ 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ejd” jfd efgƒZe	e_ejde
fdefd!efgƒZee_dS )"z!getPhases.<locals>.InCaptionPhasec             S   s   | j jddd� S )Nr¹   r»   )r‚  )r>   rƒ  )rB   r'   r'   r(   ÚignoreEndTagCaptionf  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc             S   s   | j jd jƒ  d S )Nr¯   )rJ   rG   r�   )rB   r'   r'   r(   r�   i  s    z,getPhases.<locals>.InCaptionPhase.processEOFc             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   rˆ   )rB   r˜   r'   r'   r(   rˆ   l  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc             S   s0   | j jƒ  | jƒ }| j jjtdƒƒ |s,|S d S )Nr¹   )rJ   rƒ   r(  r_   r‹   r2  )rB   r˜   ÚignoreEndTagr'   r'   r(   ÚstartTagTableElemento  s
    
z6getPhases.<locals>.InCaptionPhase.startTagTableElementc             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   r8  w  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sšt‚| jjƒ  d S )	Nr   r¹   z$expected-one-end-tag-but-got-another)rÄ  rÅ  r®   r�   r�   r�   )r(  r>   r»  r‚   r@   rJ   rƒ   rá   râ  rG   r_   rR   r�   )rB   r˜   r'   r'   r(   ÚendTagCaptionz  s    

z/getPhases.<locals>.InCaptionPhase.endTagCaptionc             S   s0   | j jƒ  | jƒ }| j jjtdƒƒ |s,|S d S )Nr¹   )rJ   rƒ   r(  r_   r‹   r2  )rB   r˜   r)  r'   r'   r(   r!  Œ  s
    
z-getPhases.<locals>.InCaptionPhase.endTagTablec             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tagr@   )rJ   rƒ   )rB   r˜   r'   r'   r(   r"  “  s    z.getPhases.<locals>.InCaptionPhase.endTagIgnorec             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   r‹   )rB   r˜   r'   r'   r(   r:  –  s    z-getPhases.<locals>.InCaptionPhase.endTagOtherr¿   r¹   r  rº   r¶   r³   r¸   r´   r·   rµ   r»   r½   N)	r¹   r  rº   r¶   r³   r¸   r´   r·   rµ   )
r½   r  rº   r¿   r¶   r³   r¸   r´   r·   rµ   )r9   r:   r;   r/  rè   r(  r�   rˆ   r*  r8  r+  r!  r"  r:  r   r;  ræ   rà   r<  rç   r'   )ré   r'   r(   ÚInCaptionPhaseb  s*     r,  c                   sŒ   e Zd Zeƒ 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ejd” jfdefgƒZe	e_ejde
fdefgƒZee_dS )z%getPhases.<locals>.InColumnGroupPhasec             S   s   | j jd jdkS )Nr   r¿   r�   )r>   r‚   r@   )rB   r'   r'   r(   ÚignoreEndTagColgroup¬  s    z:getPhases.<locals>.InColumnGroupPhase.ignoreEndTagColgroupc             S   sD   | j jd jdkr"| jjst‚d S | jƒ }| jtdƒƒ |s@dS d S )Nr   r¿   rº   Tr�   )	r>   r‚   r@   rJ   rR   r�   r-  ÚendTagColgroupr2  )rB   r)  r'   r'   r(   r�   ¯  s    z0getPhases.<locals>.InColumnGroupPhase.processEOFc             S   s"   | j ƒ }| jtdƒƒ |s|S d S )Nrº   )r-  r.  r2  )rB   r˜   r)  r'   r'   r(   rˆ   ¹  s    z7getPhases.<locals>.InColumnGroupPhase.processCharactersc             S   s$   | j j|ƒ | j jjƒ  d|d< d S )NTr€   )r>   rÈ   r‚   rá   )rB   r˜   r'   r'   r(   r  ¿  s    z1getPhases.<locals>.InColumnGroupPhase.startTagColc             S   s"   | j ƒ }| jtdƒƒ |s|S d S )Nrº   )r-  r.  r2  )rB   r˜   r)  r'   r'   r(   r8  Ä  s    z3getPhases.<locals>.InColumnGroupPhase.startTagOtherc             S   s@   | j ƒ r | jjst‚| jjƒ  n| jjjƒ  | jjd | j_	d S )Nr®   )
r-  rJ   rR   r�   rƒ   r>   r‚   rá   rG   r_   )rB   r˜   r'   r'   r(   r.  Ê  s
    z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc             S   s   | j jdddiƒ d S )Nz
no-end-tagr@   r  )rJ   rƒ   )rB   r˜   r'   r'   r(   Ú	endTagColÓ  s    z/getPhases.<locals>.InColumnGroupPhase.endTagColc             S   s"   | j ƒ }| jtdƒƒ |s|S d S )Nrº   )r-  r.  r2  )rB   r˜   r)  r'   r'   r(   r:  Ö  s    z1getPhases.<locals>.InColumnGroupPhase.endTagOtherr¿   r  rº   N)r9   r:   r;   r/  rè   r-  r�   rˆ   r  r8  r.  r/  r:  r   r;  ræ   rà   r<  rç   r'   )ré   r'   r(   ÚInColumnGroupPhase¨  s"   
	r0  c                   s¾   e Zd Zeƒ 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ejd” jfde	fd&e
fd'efgƒZee_ejd(efd#efd)efgƒZee_d%S )*z#getPhases.<locals>.InTableBodyPhasec             S   sF   x"| j jd jdkr"| j jjƒ  qW | j jd jdkrB| jjsBt‚d S )	Nr   r¶   r¸   r·   r¿   r�   )r¶   r¸   r·   r¿   r�   )r>   r‚   r@   rá   rJ   rR   r�   )rB   r'   r'   r(   ÚclearStackToTableBodyContextí  s
    z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc             S   s   | j jd jƒ  d S )Nr®   )rJ   rG   r�   )rB   r'   r'   r(   r�   ÷  s    z.getPhases.<locals>.InTableBodyPhase.processEOFc             S   s   | j jd j|ƒS )Nr®   )rJ   rG   r‰   )rB   r˜   r'   r'   r(   r‰   ú  s    z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc             S   s   | j jd j|ƒS )Nr®   )rJ   rG   rˆ   )rB   r˜   r'   r'   r(   rˆ   ý  s    z5getPhases.<locals>.InTableBodyPhase.processCharactersc             S   s(   | j ƒ  | jj|ƒ | jjd | j_d S )Nrª   )r1  r>   rÈ   rJ   rG   r_   )rB   r˜   r'   r'   r(   Ú
startTagTr   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µ   rt   )rJ   rƒ   r2  r2  )rB   r˜   r'   r'   r(   ÚstartTagTableCell  s    z5getPhases.<locals>.InTableBodyPhase.startTagTableCellc             S   sn   | 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s`t	‚| jj
ƒ  d S )Nr¶   r»   )r‚  r·   r¸   r   r�   )r>   rƒ  r1  ÚendTagTableRowGroupr2  r‚   r@   rJ   rR   r�   rƒ   )rB   r˜   r'   r'   r(   ÚstartTagTableOther  s    z6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc             S   s   | j jd j|ƒS )Nr®   )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   r8    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ƒ  r1  r‚   rá   rJ   rG   r_   rƒ   )rB   r˜   r'   r'   r(   r4    s    z7getPhases.<locals>.InTableBodyPhase.endTagTableRowGroupc             S   sn   | 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s`t	‚| jj
ƒ  d S )Nr¶   r»   )r‚  r·   r¸   r   r�   )r>   rƒ  r1  r4  r2  r‚   r@   rJ   rR   r�   rƒ   )rB   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@   )rJ   rƒ   )rB   r˜   r'   r'   r(   r"  2  s    z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec             S   s   | j jd j|ƒS )Nr®   )rJ   rG   r‹   )rB   r˜   r'   r'   r(   r:  6  s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherr¿   rµ   r³   r´   r¹   r  rº   r¶   r¸   r·   r»   r½   N)r³   r´   )r¹   r  rº   r¶   r¸   r·   )r¶   r¸   r·   )r½   r¹   r  rº   r¿   r³   r´   rµ   )r9   r:   r;   r/  rè   r1  r�   r‰   rˆ   r2  r3  r5  r8  r4  r!  r"  r:  r   r;  ræ   rà   r<  rç   r'   )ré   r'   r(   ÚInTableBodyPhaseè  s4   
	
 r6  c                   sÆ   e Zd Zeƒ 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ejd” jfd(e
fd)efgƒZee_ejd$efd%efd*efd+efgƒZee_d'S ),zgetPhases.<locals>.InRowPhasec             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@   r�   )rµ   r¿   r�   )r>   r‚   r@   rJ   rƒ   rá   )rB   r'   r'   r(   ÚclearStackToTableRowContextO  s    z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc             S   s   | j jddd� S )Nrµ   r»   )r‚  )r>   rƒ  )rB   r'   r'   r(   ÚignoreEndTagTrU  s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc             S   s   | j jd jƒ  d S )Nr®   )rJ   rG   r�   )rB   r'   r'   r(   r�   Y  s    z(getPhases.<locals>.InRowPhase.processEOFc             S   s   | j jd j|ƒS )Nr®   )rJ   rG   r‰   )rB   r˜   r'   r'   r(   r‰   \  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc             S   s   | j jd j|ƒS )Nr®   )rJ   rG   rˆ   )rB   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©   )	r7  r>   rÈ   rJ   rG   r_   rl  rŽ   r   )rB   r˜   r'   r'   r(   r3  b  s    z/getPhases.<locals>.InRowPhase.startTagTableCellc             S   s"   | j ƒ }| jtdƒƒ |s|S d S )Nrµ   )r8  ÚendTagTrr2  )rB   r˜   r)  r'   r'   r(   r5  h  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc             S   s   | j jd j|ƒS )Nr®   )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   r8  o  s    z+getPhases.<locals>.InRowPhase.startTagOtherc             S   sH   | j ƒ s.| jƒ  | jjjƒ  | jjd | j_n| jjs:t	‚| jj
ƒ  d S )Nr«   )r8  r7  r>   r‚   rá   rJ   rG   r_   rR   r�   rƒ   )rB   r˜   r'   r'   r(   r9  r  s    z&getPhases.<locals>.InRowPhase.endTagTrc             S   s"   | j ƒ }| jtdƒƒ |s|S d S )Nrµ   )r8  r9  r2  )rB   r˜   r)  r'   r'   r(   r!  |  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ƒ  r9  r2  rJ   rƒ   )rB   r˜   r'   r'   r(   r4  „  s    z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tag-in-table-rowr@   )rJ   rƒ   )rB   r˜   r'   r'   r(   r"  ‹  s    z*getPhases.<locals>.InRowPhase.endTagIgnorec             S   s   | j jd j|ƒS )Nr®   )rJ   rG   r‹   )rB   r˜   r'   r'   r(   r:  �  s    z)getPhases.<locals>.InRowPhase.endTagOtherr¿   r³   r´   r¹   r  rº   r¶   r¸   r·   rµ   r»   r½   N)r³   r´   )r¹   r  rº   r¶   r¸   r·   rµ   )r¶   r¸   r·   )r½   r¹   r  rº   r¿   r³   r´   )r9   r:   r;   r/  rè   r7  r8  r�   r‰   rˆ   r3  r5  r8  r9  r!  r4  r"  r:  r   r;  ræ   rà   r<  rç   r'   )ré   r'   r(   Ú
InRowPhaseJ  s6   
 
r:  c                   sš   e Zd Zeƒ 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ejd” jfd efgƒZe	e_ejd!e
fd"efd#efgƒZee_dS )$zgetPhases.<locals>.InCellPhasec             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ƒ  ÚendTagTableCellr2  )rB   r'   r'   r(   Ú	closeCell¨  s    z(getPhases.<locals>.InCellPhase.closeCellc             S   s   | j jd jƒ  d S )Nr¯   )rJ   rG   r�   )rB   r'   r'   r(   r�   ¯  s    z)getPhases.<locals>.InCellPhase.processEOFc             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   rˆ   )rB   r˜   r'   r'   r(   rˆ   ²  s    z0getPhases.<locals>.InCellPhase.processCharactersc             S   sF   | j jddd�s | j jddd�r,| jƒ  |S | jjs8t‚| jjƒ  d S )Nr³   r»   )r‚  r´   )r>   rƒ  r<  rJ   rR   r�   rƒ   )rB   r˜   r'   r'   r(   r5  µ  s    z1getPhases.<locals>.InCellPhase.startTagTableOtherc             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   r8  ¿  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-tagr�   )r>   rƒ  r»  r‚   r@   rJ   rƒ   rá   râ  rG   r_   )rB   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@   )rJ   rƒ   )rB   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<  rJ   rƒ   )rB   r˜   r'   r'   r(   ÚendTagImplyÖ  s    z*getPhases.<locals>.InCellPhase.endTagImplyc             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   r‹   )rB   r˜   r'   r'   r(   r:  Þ  s    z*getPhases.<locals>.InCellPhase.endTagOtherr¿   r¹   r  rº   r¶   r³   r¸   r´   r·   rµ   r½   r»   N)	r¹   r  rº   r¶   r³   r¸   r´   r·   rµ   )r³   r´   )r½   r¹   r  rº   r¿   )r»   r¶   r¸   r·   rµ   )r9   r:   r;   r/  rè   r<  r�   rˆ   r5  r8  r;  r"  r=  r:  r   r;  ræ   rà   r<  rç   r'   )ré   r'   r(   ÚInCellPhase£  s(   
 r>  c                   sÊ   e Zd Zeƒ 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ejd” jfdefdefde	fd"e
fd efgƒZee_ejdefdefdefgƒZee_d!S )#z getPhases.<locals>.InSelectPhasec             S   s0   | j jd jdkr | jjdƒ n| jjs,t‚d S )Nr   r¿   zeof-in-selectr�   )r>   r‚   r@   rJ   rƒ   rR   r�   )rB   r'   r'   r(   r�   ó  s    z+getPhases.<locals>.InSelectPhase.processEOFc             S   s$   |d dkrd S | j j|d ƒ d S )Nry   rz  )r>   rß   )rB   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   r¶  r�   )r>   r‚   r@   rá   rÈ   )rB   r˜   r'   r'   r(   ÚstartTagOptionþ  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   r¶  rÁ  r�   r�   )r>   r‚   r@   rá   rÈ   )rB   r˜   r'   r'   r(   ÚstartTagOptgroup	  s
    z1getPhases.<locals>.InSelectPhase.startTagOptgroupc             S   s   | j jdƒ | jtdƒƒ d S )Nzunexpected-select-in-selectr²   )rJ   rƒ   ÚendTagSelectr2  )rB   r˜   r'   r'   r(   r¹  	  s    z/getPhases.<locals>.InSelectPhase.startTagSelectc             S   s>   | j jdƒ | jjddd�r.| jtdƒƒ |S | j js:t‚d S )Nzunexpected-input-in-selectr²   )r‚  )rJ   rƒ   r>   rƒ  rA  r2  rR   r�   )rB   r˜   r'   r'   r(   r¢  	  s
    z.getPhases.<locals>.InSelectPhase.startTagInputc             S   s   | j jd j|ƒS )Nr6  )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   rM  	  s    z/getPhases.<locals>.InSelectPhase.startTagScriptc             S   s   | j jdd|d iƒ d S )Nzunexpected-start-tag-in-selectr@   )rJ   rƒ   )rB   r˜   r'   r'   r(   r8  	  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   r¶  zunexpected-end-tag-in-selectr@   r�   )r>   r‚   r@   rá   rJ   rƒ   )rB   r˜   r'   r'   r(   ÚendTagOption	  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   r¶  rÀ  rÁ  zunexpected-end-tag-in-selectr@   r�   éþÿÿÿr�   )r>   r‚   r@   rá   rJ   rƒ   )rB   r˜   r'   r'   r(   ÚendTagOptgroup%	  s    z/getPhases.<locals>.InSelectPhase.endTagOptgroupc             S   s^   | j jddd�rD| j jjƒ }x|jdkr6| j jjƒ }qW | jjƒ  n| jjsPt‚| jj	ƒ  d S )Nr²   )r‚  )
r>   rƒ  r‚   rá   r@   rJ   ra   rR   r�   rƒ   )rB   r˜   rÂ   r'   r'   r(   rA  2	  s    z-getPhases.<locals>.InSelectPhase.endTagSelectc             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tag-in-selectr@   )rJ   rƒ   )rB   r˜   r'   r'   r(   r:  =	  s    z,getPhases.<locals>.InSelectPhase.endTagOtherr¿   r¶  rÁ  r²   r¯  r
  rv  rU  N)r¯  r
  rv  )r9   r:   r;   r/  rè   r�   rˆ   r?  r@  r¹  r¢  rM  r8  rB  rD  rA  r:  r   r;  ræ   rà   r<  rç   r'   )ré   r'   r(   ÚInSelectPhaseï  s4   rE  c            	   @   sn   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
ejdefgƒZee_ejde	fgƒZe
e_dS )z'getPhases.<locals>.InSelectInTablePhasec             S   s   | j jd jƒ  d S )Nr¨   )rJ   rG   r�   )rB   r'   r'   r(   r�   U	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc             S   s   | j jd j|ƒS )Nr¨   )rJ   rG   rˆ   )rB   r˜   r'   r'   r(   rˆ   X	  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²   )rJ   rƒ   r:  r2  )rB   r˜   r'   r'   r(   rŸ  [	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec             S   s   | j jd j|ƒS )Nr¨   )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   r8  `	  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²   )rJ   rƒ   r>   rƒ  r:  r2  )rB   r˜   r'   r'   r(   r!  c	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec             S   s   | j jd j|ƒS )Nr¨   )rJ   rG   r‹   )rB   r˜   r'   r'   r(   r:  i	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOtherr¹   r»   r¶   r¸   r·   rµ   r³   r´   N)r¹   r»   r¶   r¸   r·   rµ   r³   r´   )r¹   r»   r¶   r¸   r·   rµ   r³   r´   )r9   r:   r;   r/  rè   r�   rˆ   rŸ  r8  r!  r:  r   r;  rà   r<  rç   r'   r'   r'   r(   ÚInSelectInTablePhaseR	  s   

rF  c            -       s–   e Zd Zeƒ 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d-d.„ Z‡ fd/d0„Zd1d2„ Z	d3d4„ Z
d5S )6z(getPhases.<locals>.InForeignContentPhaserø  rù  ræ  r½   r3  rç  rú  ro  r)   rê  rp  rû  r	  Úh1Úh2Úh3Úh4Úh5Úh6r¼   r¬  rý  r¦  rq  ru  rò  r2   rš  rô  r&   rt  rº  rþ  rÿ  Úspanr  r   ÚsubÚsupr»   r  r  r÷  Úvarc          %   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 )'NÚaltGlyphÚaltGlyphDefÚaltGlyphItemÚanimateColorÚanimateMotionÚanimateTransformÚclipPathÚfeBlendÚfeColorMatrixÚfeComponentTransferÚfeCompositeÚfeConvolveMatrixÚfeDiffuseLightingÚfeDisplacementMapÚfeDistantLightÚfeFloodÚfeFuncAÚfeFuncBÚfeFuncGÚfeFuncRÚfeGaussianBlurÚfeImageÚfeMergeÚfeMergeNodeÚfeMorphologyÚfeOffsetÚfePointLightÚfeSpecularLightingÚfeSpotLightÚfeTileÚfeTurbulenceÚforeignObjectÚglyphRefÚlinearGradientÚradialGradientÚtextPath)$ÚaltglyphÚaltglyphdefÚaltglyphitemÚanimatecolorÚanimatemotionÚanimatetransformÚclippathÚfeblendÚfecolormatrixÚfecomponenttransferÚfecompositeÚfeconvolvematrixÚfediffuselightingÚfedisplacementmapÚfedistantlightÚfefloodÚfefuncaÚfefuncbÚfefuncgÚfefuncrÚfegaussianblurÚfeimageÚfemergeÚfemergenodeÚfemorphologyÚfeoffsetÚfepointlightÚfespecularlightingÚfespotlightÚfetileÚfeturbulenceÚforeignobjectÚglyphrefÚlineargradientÚradialgradientÚtextpathr@   r'   )rB   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 )Nry   rz  u   ï¿½c             s   s   | ]}|t kV  qd S )N)r   )r?   r{  r'   r'   r(   ú	<genexpr>±	  s    zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rJ   rd   r}  rˆ   )rB   r˜   )ré   r'   r(   rˆ   ­	  s    
z:getPhases.<locals>.InForeignContentPhase.processCharactersc             S   s2  | j jd }|d | jks@|d dkr®t|d jƒ ƒdddh@ 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ƒ  qXW |S |jtd	 krÊ| jj|ƒ n$|jtd
 krî| j|ƒ | jj|ƒ | jj|ƒ |j|d< | j j|ƒ |d �r.| j jjƒ  d|d< d S )Nr   r@   rü  ry   ÚcolorÚfaceÚsizez*unexpected-html-element-in-foreign-contentrh   r}   rl   r   Tr€   r�   r�   r�   r�   )r>   r‚   ÚbreakoutElementsÚsetÚkeysrJ   rƒ   rl   r†   rp   rq   rá   r   r   rš  r   r   rÈ   )rB   r˜   r›   r'   r'   r(   rŠ   µ	  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ª| jjsŒt‚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  r�   )r…   r>   r‚   r@   rn   r   rJ   rƒ   r_   rG   r'  rÉ   rá   r�   rl   r†   r‹   )rB   r˜   Ú	nodeIndexrÂ   rš   r'   r'   r(   r‹   Ð	  s(    z6getPhases.<locals>.InForeignContentPhase.processEndTagN)r9   r:   r;   r/  rè   r‡   rŸ  rš  rˆ   rŠ   r‹   r'   )ré   r'   r(   ÚInForeignContentPhasex	  s   


)r£  c               @   sv   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ ZejdefgƒZe	e_ejde
fgƒZee_dS )z!getPhases.<locals>.AfterBodyPhasec             S   s   d S )Nr'   )rB   r'   r'   r(   r�   í	  s    z,getPhases.<locals>.AfterBodyPhase.processEOFc             S   s   | j j|| j jd ƒ d S )Nr   )r>   rÞ   r‚   )rB   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¯   )rJ   rƒ   rG   r_   )rB   r˜   r'   r'   r(   rˆ   ö	  s    z3getPhases.<locals>.AfterBodyPhase.processCharactersc             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   rŠ   )rB   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¯   )rJ   rƒ   rG   r_   )rB   r˜   r'   r'   r(   r8  þ	  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)rJ   rR   rƒ   rG   r_   )rB   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¯   )rJ   rƒ   rG   r_   )rB   r˜   r'   r'   r(   r:  

  s    z-getPhases.<locals>.AfterBodyPhase.endTagOtherr¿   N)r9   r:   r;   r/  rè   r�   rŒ   rˆ   ræ   r8  rÈ  r:  r   r;  rà   r<  rç   r'   r'   r'   r(   ÚAfterBodyPhaseê	  s   r¥  c                   s’   e Zd Zeƒ 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ejd” jfdefdefde	fgƒZe
e_ejdefgƒZee_dS )z"getPhases.<locals>.InFramesetPhasec             S   s0   | j jd jdkr | jjdƒ n| jjs,t‚d S )Nr   r¿   zeof-in-framesetr�   )r>   r‚   r@   rJ   rƒ   rR   r�   )rB   r'   r'   r(   r�   
  s    z-getPhases.<locals>.InFramesetPhase.processEOFc             S   s   | j jdƒ d S )Nzunexpected-char-in-frameset)rJ   rƒ   )rB   r˜   r'   r'   r(   rˆ   "
  s    z4getPhases.<locals>.InFramesetPhase.processCharactersc             S   s   | j j|ƒ d S )N)r>   rÈ   )rB   r˜   r'   r'   r(   ra  %
  s    z3getPhases.<locals>.InFramesetPhase.startTagFramesetc             S   s   | j j|ƒ | j jjƒ  d S )N)r>   rÈ   r‚   rá   )rB   r˜   r'   r'   r(   ÚstartTagFrame(
  s    z0getPhases.<locals>.InFramesetPhase.startTagFramec             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   ÚstartTagNoframes,
  s    z3getPhases.<locals>.InFramesetPhase.startTagNoframesc             S   s   | j jdd|d iƒ d S )Nz unexpected-start-tag-in-framesetr@   )rJ   rƒ   )rB   r˜   r'   r'   r(   r8  /
  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¾   ÚafterFramesetr�   r�   )	r>   r‚   r@   rJ   rƒ   rá   rR   rG   r_   )rB   r˜   r'   r'   r(   ÚendTagFrameset3
  s    
z1getPhases.<locals>.InFramesetPhase.endTagFramesetc             S   s   | j jdd|d iƒ d S )Nzunexpected-end-tag-in-framesetr@   )rJ   rƒ   )rB   r˜   r'   r'   r(   r:  ?
  s    z.getPhases.<locals>.InFramesetPhase.endTagOtherr¿   r¾   r  rR  N)r9   r:   r;   r/  rè   r�   rˆ   ra  r¦  r§  r8  r©  r:  r   r;  ræ   rà   r<  rç   r'   )ré   r'   r(   ÚInFramesetPhase
  s$   rª  c                   sv   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
ejd” jfdefgƒZee_ejde	fgƒZe
e_dS )z%getPhases.<locals>.AfterFramesetPhasec             S   s   d S )Nr'   )rB   r'   r'   r(   r�   T
  s    z0getPhases.<locals>.AfterFramesetPhase.processEOFc             S   s   | j jdƒ d S )Nzunexpected-char-after-frameset)rJ   rƒ   )rB   r˜   r'   r'   r(   rˆ   X
  s    z7getPhases.<locals>.AfterFramesetPhase.processCharactersc             S   s   | j jd j|ƒS )Nr6  )rJ   rG   rŠ   )rB   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@   )rJ   rƒ   )rB   r˜   r'   r'   r(   r8  ^
  s    z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc             S   s   | j jd | j _d S )NÚafterAfterFrameset)rJ   rG   r_   )rB   r˜   r'   r'   r(   rÈ  b
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc             S   s   | j jdd|d iƒ d S )Nz!unexpected-end-tag-after-framesetr@   )rJ   rƒ   )rB   r˜   r'   r'   r(   r:  e
  s    z1getPhases.<locals>.AfterFramesetPhase.endTagOtherr¿   rR  N)r9   r:   r;   r/  rè   r�   rˆ   r§  r8  rÈ  r:  r   r;  ræ   rà   r<  rç   r'   )ré   r'   r(   ÚAfterFramesetPhaseP
  s   r¬  c               @   s`   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zejde	fgƒZe
e_dS )z&getPhases.<locals>.AfterAfterBodyPhasec             S   s   d S )Nr'   )rB   r'   r'   r(   r�   w
  s    z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc             S   s   | j j|| j jƒ d S )N)r>   rÞ   rê   )rB   r˜   r'   r'   r(   rŒ   z
  s    z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   r‰   )rB   r˜   r'   r'   r(   r‰   }
  s    z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharactersc             S   s    | j jdƒ | j jd | j _|S )Nzexpected-eof-but-got-charr¯   )rJ   rƒ   rG   r_   )rB   r˜   r'   r'   r(   rˆ   €
  s    z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   ræ   …
  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¯   )rJ   rƒ   rG   r_   )rB   r˜   r'   r'   r(   r8  ˆ
  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¯   )rJ   rƒ   rG   r_   )rB   r˜   r'   r'   r(   r‹   Ž
  s    z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagr¿   N)r9   r:   r;   r/  rè   r�   rŒ   r‰   rˆ   ræ   r8  r‹   r   r;  rà   r<  r'   r'   r'   r(   ÚAfterAfterBodyPhaset
  s   r­  c               @   sn   e Zd Zeƒ 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ejde	fde
fgƒZee_dS )z*getPhases.<locals>.AfterAfterFramesetPhasec             S   s   d S )Nr'   )rB   r'   r'   r(   r�   œ
  s    z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc             S   s   | j j|| j jƒ d S )N)r>   rÞ   rê   )rB   r˜   r'   r'   r(   rŒ   Ÿ
  s    z9getPhases.<locals>.AfterAfterFramesetPhase.processCommentc             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   r‰   )rB   r˜   r'   r'   r(   r‰   ¢
  s    zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc             S   s   | j jdƒ d S )Nzexpected-eof-but-got-char)rJ   rƒ   )rB   r˜   r'   r'   r(   rˆ   ¥
  s    z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc             S   s   | j jd j|ƒS )Nr¯   )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   ræ   ¨
  s    z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc             S   s   | j jd j|ƒS )Nr6  )rJ   rG   rŠ   )rB   r˜   r'   r'   r(   ÚstartTagNoFrames«
  s    z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc             S   s   | j jdd|d iƒ d S )Nzexpected-eof-but-got-start-tagr@   )rJ   rƒ   )rB   r˜   r'   r'   r(   r8  ®
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc             S   s   | j jdd|d iƒ d S )Nzexpected-eof-but-got-end-tagr@   )rJ   rƒ   )rB   r˜   r'   r'   r(   r‹   ²
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagr¿   rR  N)r9   r:   r;   r/  rè   r�   rŒ   r‰   rˆ   ræ   r®  r8  r‹   r   r;  rà   r<  r'   r'   r'   r(   ÚAfterAfterFramesetPhase™
  s   r¯  )rV   rU   r±   r6  rJ  rN  r¯   rÇ   r®   r  r¬   r­   r«   rª   r©   r¨   r¸  r~   rÆ  r°   r¨  r¤  r«  )r   )rH   rX   rØ   r0  r4  r=  r[  r_  rd  r  r#  r,  r0  r6  r:  r>  rE  rF  r£  r¥  rª  r¬  r­  r¯  r'   )rg  r%  ré   r(   rF   Œ  sp    H %-f?B     Y! /F@bYLc&r.8$%&rF   c                sF   t | d ƒt ˆ ƒ@ }|rBt| d ƒ‡ fdd„| d jƒ D ƒƒ| d< d S )Nry   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   r0   r,   )r˜   r™  Úneeds_adjustmentr'   )r™  r(   r¥   Ú
  s    r¥   ru   Fc             C   s   |d kri }t | | ||dœS )N)r0   r@   ry   r   )r   )r@   r0   rm   r   r'   r'   r(   r2  á
  s    
r2  c               @   s   e Zd ZdZdS )rx   zError in parsed documentN)r9   r:   r;   rÌ   r'   r'   r'   r(   rx   é
  s   rx   )r   T)r)   r   T)ru   NF),Ú
__future__r   r   r   Zpip._vendor.sixr   r   r.   rî   r   r	   r
   Ztreebuilders.baser   r   Ú	constantsr   r   r   r   r   r   r   r   r   r   r   r   r¦   r   r   r   r   r!   r+   r=   r  r    ÚmemoizerF   r¥   r2  Ú	Exceptionrx   r'   r'   r'   r(   Ú<module>   sJ   H

  8                  ` 
