a
    (ñ»j¶É ã                   @   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  |¡}t||d�}|j| fi |¤Ž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(   ú:E:\soccer\ml_env\Lib\site-packages\html5lib/html5parser.pyr"      s    
r"   Údivc                 K   s,   t  |¡}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                    s>   |  ¡ D ]$\}}t|tjƒr$ˆ |ƒ}|||< qt | |||¡S ©N)ÚitemsÚ
isinstanceÚtypesÚFunctionTypeÚtypeÚ__new__)ÚmetaÚ	classnameÚbasesZ	classDictZattributeNameÚ	attribute©Úfunctionr(   r)   r3   L   s
    
z5method_decorator_metaclass.<locals>.Decorated.__new__N)Ú__name__Ú
__module__Ú__qualname__r3   r(   r8   r(   r)   Ú	DecoratedK   s   r=   )r2   )r9   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u rt d¡}||ƒˆ _g ˆ _‡ fdd„t|ƒ ¡ 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   ó    z'HTMLParser.__init__.<locals>.<dictcomp>)Ústrictr
   r    r?   ÚerrorsÚ	getPhasesr.   Úphases)rD   r?   rG   r   Údebugr(   rC   r)   Ú__init__]   s    



ÿzHTMLParser.__init__r*   c                 K   sf   || _ || _|| _tj|fd| i|¤Ž| _|  ¡  z|  ¡  W n" ty`   |  ¡  |  ¡  Y n0 d S )NÚparser)	ÚinnerHTMLModer+   Ú	scriptingr	   ZHTMLTokenizerÚ	tokenizerÚresetÚmainLoopr   )rD   ÚstreamÚ	innerHTMLr+   rO   r%   r(   r(   r)   Ú_parse|   s    zHTMLParser._parsec                 C   sÄ   | j  ¡  d| _g | _g | _d| _| jrœ| j ¡ | _	| j	t
v rL| jj| j_n0| j	tv rd| jj| j_n| j	dkr|| jj| j_n | jd | _| j ¡  |  ¡  nd| _	| jd | _d | _d | _d| _d S )NFz	no quirksÚ	plaintextÚ
beforeHtmlÚinitialT)r?   rQ   ÚfirstStartTagrH   ÚlogÚ
compatModerN   r+   ÚlowerrT   r   rP   ÚrcdataStateÚstater   ÚrawtextStateÚplaintextStaterJ   ÚphaseÚinsertHtmlElementÚresetInsertionModeZ	lastPhaseZbeforeRCDataPhaseÚ
framesetOKrC   r(   r(   r)   rQ   Š   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

        rP   Nr   )ÚhasattrrP   rS   ÚcharEncodingrA   rC   r(   r(   r)   ÚdocumentEncoding¬   s    
zHTMLParser.documentEncodingc                 C   sJ   |j dkr6|jtd kr6d|jv o4|jd  t¡dv S |j|j ftv S d S )Núannotation-xmlÚmathmlÚencoding)z	text/htmlzapplication/xhtml+xml)rA   Ú	namespacer   Ú
attributesÚ	translater   r   ©rD   Úelementr(   r(   r)   ÚisHTMLIntegrationPoint¶   s    
ÿ

ÿþÿz!HTMLParser.isHTMLIntegrationPointc                 C   s   |j |jftv S r-   )rk   rA   r   rn   r(   r(   r)   ÚisMathMLTextIntegrationPointÀ   s    z'HTMLParser.isMathMLTextIntegrationPointc                 C   sf  t d }t d }t d }t d }t d }t d }t d }| jD �]â}d }	|}
|
d u�rö|
}	| jjrn| jjd nd }|r||jnd }|rŠ|jnd }|
d	 }||kr¼|  |
d
 |
 di ¡¡ d }
qLt| jjƒdk�sb|| jj	k�sb|  
|¡�r||k�r|d tddgƒv�sb|||fv �sb|td k�rF|dk�rF||k�rF|d dk�sb|  |¡�rj||||fv �rj| j}n
| jd }||k�rŠ| |
¡}
qL||k�r | |
¡}
qL||k�r¶| |
¡}
qL||k�rÌ| |
¡}
qL||k�râ| |
¡}
qL||krL| |
¡}
qL||kr>|	d r>|	d s>|  dd|	d i¡ q>d}g }|�rb| | j¡ | j ¡ }|�r,| j|v�s,J ‚�q,d S )NÚ
CharactersZSpaceCharactersÚStartTagÚEndTagÚCommentZDoctypeÚ
ParseErroréÿÿÿÿr2   ÚdataÚdatavarsr   rA   ZmglyphZ
malignmarkri   rh   ÚsvgÚinForeignContentÚselfClosingÚselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   rP   r?   ÚopenElementsrk   rA   Ú
parseErrorÚgetÚlenÚdefaultNamespacerq   Ú	frozensetr   rp   ra   rJ   ÚprocessCharactersÚprocessSpaceCharactersÚprocessStartTagÚprocessEndTagÚprocessCommentÚprocessDoctypeÚappendÚ
processEOF)rD   ZCharactersTokenZSpaceCharactersTokenZStartTagTokenZEndTagTokenZCommentTokenZDoctypeTokenZParseErrorTokenÚtokenZ
prev_tokenÚ	new_tokenÚcurrentNodeZcurrentNodeNamespaceZcurrentNodeNamer2   ra   Z	reprocessrJ   r(   r(   r)   rR   Ã   sŠ    

ÿþýü
û
úùø	
÷
öõ





ÿ
ÿ
zHTMLParser.mainLoopc                 O   s&   | j |ddg|¢R i |¤Ž | 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)rU   r?   ZgetDocument©rD   rS   Úargsr%   r(   r(   r)   r"     s    zHTMLParser.parsec                 O   s$   | j |dg|¢R i |¤Ž | 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)rU   r?   ZgetFragmentr�   r(   r(   r)   r,     s    zHTMLParser.parseFragmentúXXX-undefined-errorc                 C   s@   |d u ri }| j  | jj ¡ ||f¡ | jr<tt| | ƒ‚d S r-   )rH   rŠ   rP   rS   ÚpositionrG   rv   r   )rD   Ú	errorcodery   r(   r(   r)   r   ;  s
    zHTMLParser.parseErrorc                 C   s   t |tƒ d S r-   )Úadjust_attributesr   ©rD   rŒ   r(   r(   r)   r   C  s    z!HTMLParser.adjustMathMLAttributesc                 C   s   t |tƒ d S r-   )r”   r   r•   r(   r(   r)   r   F  s    zHTMLParser.adjustSVGAttributesc                 C   s   t |tƒ d S r-   )r”   ÚadjustForeignAttributesMapr•   r(   r(   r)   r   I  s    z"HTMLParser.adjustForeignAttributesc                 C   s   | j  ¡  d S r-   )rM   ra   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œ}| j jd d d… D ]†}|j}d }|| j jd krj| js`J ‚d}| j}|dv r|| js|J ‚|s�|j| j jkr�q8||v r¬| j||  } qÀq8|r8| jd	 } qÀq8|| _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Úhtmlrw   r   T)r¢   rª   r¬   r¯   )r?   r~   rA   rT   rk   r‚   rJ   ra   )rD   ÚlastZnewModesÚnodeZnodeNameZ	new_phaser(   r(   r)   rc   P  sD    ò


zHTMLParser.resetInsertionModec                 C   sR   |dv sJ ‚| j  |¡ |dkr.| jj| j_n| jj| j_| j| _| jd | _d S )N)ÚRAWTEXTÚRCDATAr²   Útext)	r?   ÚinsertElementrP   r_   r^   r]   ra   ÚoriginalPhaserJ   )rD   rŒ   ZcontentTyper(   r(   r)   ÚparseRCDataRawtext|  s    zHTMLParser.parseRCDataRawtext)NFTF)Fr*   F)r‘   N)r:   r;   r<   Ú__doc__rL   rU   rQ   Úpropertyrg   rp   rq   rR   r"   r,   r   r   r   r   r—   rc   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  ¡ 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)   rE   �  rF   z*getPhases.<locals>.log.<locals>.<dictcomp>c                    s¦   ˆ j  d¡rŒt|ƒdkrŒ|d }dˆ|d  i}|d tv rH|d |d< | jj | jjjj | jj	j
j | j
j ˆ j |f¡ ˆ | g|¢R i |¤ŽS ˆ | g|¢R i |¤ŽS d S )NÚprocessr   r2   rA   )r:   Ú
startswithr�   r   rM   rZ   rŠ   rP   r^   ra   Ú	__class__)rD   r�   r%   rŒ   Úinfo©r9   Z
type_namesr(   r)   Úwrapped’  s    
üz'getPhases.<locals>.log.<locals>.wrapped)r   r.   )r9   rÁ   r(   rÀ   r)   rZ   Ž  s    zgetPhases.<locals>.logc                 S   s   | rt |ƒS tS d S r-   )r>   r2   )Zuse_metaclassZ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
        )rM   r?   Z__startTagCacheZ__endTagCachec                 S   s   || _ || _i | _i | _d S r-   )rM   r?   Ú_Phase__startTagCacheÚ_Phase__endTagCache)rD   rM   r?   r(   r(   r)   rL   ¯  s    z!getPhases.<locals>.Phase.__init__c                 S   s   t ‚d S r-   )ÚNotImplementedErrorrC   r(   r(   r)   r‹   µ  s    z#getPhases.<locals>.Phase.processEOFc                 S   s   | j  || j jd ¡ d S )Nrw   ©r?   ÚinsertCommentr~   r•   r(   r(   r)   rˆ   ¸  s    z'getPhases.<locals>.Phase.processCommentc                 S   s   | j  d¡ d S )Nzunexpected-doctype©rM   r   r•   r(   r(   r)   r‰   ½  s    z'getPhases.<locals>.Phase.processDoctypec                 S   s   | j  |d ¡ d S ©Nrx   ©r?   Ú
insertTextr•   r(   r(   r)   r„   À  s    z*getPhases.<locals>.Phase.processCharactersc                 S   s   | j  |d ¡ d S rÉ   rÊ   r•   r(   r(   r)   r…   Ã  s    z/getPhases.<locals>.Phase.processSpaceCharactersc                 S   sj   |d }|| j v r| j | }nD| j|  }| j |< t| j ƒt| jƒd krb| j  tt| j ƒƒ¡ q2||ƒS ©NrA   gš™™™™™ñ?)rÃ   ÚstartTagHandlerr�   ÚpopÚnextÚiter©rD   rŒ   rA   Úfuncr(   r(   r)   r†   Æ  s    
z(getPhases.<locals>.Phase.processStartTagc                 S   sf   | j js |d dkr | j  d¡ |d  ¡ D ],\}}|| jjd jvr,|| jjd j|< q,d| j _d S )NrA   r¯   znon-html-rootrx   r   F)rM   rY   r   r.   r?   r~   rl   ©rD   rŒ   Úattrr»   r(   r(   r)   ÚstartTagHtml×  s    z%getPhases.<locals>.Phase.startTagHtmlc                 S   sj   |d }|| j v r| j | }nD| j|  }| j |< t| j ƒt| jƒd krb| j  tt| j ƒƒ¡ q2||ƒS rÌ   )rÄ   ÚendTagHandlerr�   rÎ   rÏ   rÐ   rÑ   r(   r(   r)   r‡   á  s    
z&getPhases.<locals>.Phase.processEndTagN)r:   r;   r<   r¸   Ú	__slots__rL   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 r-   r(   r•   r(   r(   r)   r…   õ  s    z6getPhases.<locals>.InitialPhase.processSpaceCharactersc                 S   s   | j  || j j¡ d S r-   ©r?   rÇ   Zdocumentr•   r(   r(   r)   rˆ   ø  s    z.getPhases.<locals>.InitialPhase.processCommentc                 S   sü   |d }|d }|d }|d }|dks@|d us@|d urL|dkrL| j  d¡ |d u rXd}| j |¡ |dkrv| t¡}|rº|d dksº| d	¡sº|d
v sº| d¡rª|d u sº|rÄ| ¡ dkrÄd| j _n$| d¡sà| d¡rè|d urèd| j _| j j	d | j _
d S )NrA   ÚpublicIdÚsystemIdÚcorrectr¯   zabout:legacy-compatzunknown-doctypeÚ )7z*+//silmaril//dtd html pro v0r11 19970101//z4-//advasoft ltd//dtd html 3.0 aswedit + extensions//z*-//as//dtd html 3.0 aswedit + extensions//z-//ietf//dtd html 2.0 level 1//z-//ietf//dtd html 2.0 level 2//z&-//ietf//dtd html 2.0 strict level 1//z&-//ietf//dtd html 2.0 strict level 2//z-//ietf//dtd html 2.0 strict//z-//ietf//dtd html 2.0//z-//ietf//dtd html 2.1e//z-//ietf//dtd html 3.0//z-//ietf//dtd html 3.2 final//z-//ietf//dtd html 3.2//z-//ietf//dtd html 3//z-//ietf//dtd html level 0//z-//ietf//dtd html level 1//z-//ietf//dtd html level 2//z-//ietf//dtd html level 3//z"-//ietf//dtd html strict level 0//z"-//ietf//dtd html strict level 1//z"-//ietf//dtd html strict level 2//z"-//ietf//dtd html strict level 3//z-//ietf//dtd html strict//z-//ietf//dtd html//z(-//metrius//dtd metrius presentational//z5-//microsoft//dtd internet explorer 2.0 html strict//z.-//microsoft//dtd internet explorer 2.0 html//z0-//microsoft//dtd internet explorer 2.0 tables//z5-//microsoft//dtd internet explorer 3.0 html strict//z.-//microsoft//dtd internet explorer 3.0 html//z0-//microsoft//dtd internet explorer 3.0 tables//z#-//netscape comm. corp.//dtd html//z*-//netscape comm. corp.//dtd strict html//z*-//o'reilly and associates//dtd html 2.0//z3-//o'reilly and associates//dtd html extended 1.0//z;-//o'reilly and associates//dtd html extended relaxed 1.0//zN-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//zE-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//z$-//spyglass//dtd html 2.0 extended//z+-//sq//dtd html 2.0 hotmetal + extensions//z--//sun microsystems corp.//dtd hotjava html//z4-//sun microsystems corp.//dtd hotjava strict html//z-//w3c//dtd html 3 1995-03-24//z-//w3c//dtd html 3.2 draft//z-//w3c//dtd html 3.2 final//z-//w3c//dtd html 3.2//z-//w3c//dtd html 3.2s draft//z-//w3c//dtd html 4.0 frameset//z#-//w3c//dtd html 4.0 transitional//z(-//w3c//dtd html experimental 19960712//z&-//w3c//dtd html experimental 970421//z-//w3c//dtd w3 html//z-//w3o//dtd w3 html 3.0//z#-//webtechs//dtd mozilla html 2.0//z-//webtechs//dtd mozilla html//)z$-//w3o//dtd w3 html strict 3.0//en//z"-/w3c/dtd html 4.0 transitional/enr¯   )z -//w3c//dtd html 4.01 frameset//z$-//w3c//dtd html 4.01 transitional//z:http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtdÚquirks)z -//w3c//dtd xhtml 1.0 frameset//z$-//w3c//dtd xhtml 1.0 transitional//zlimited quirksrW   )rM   r   r?   ZinsertDoctyperm   r   r½   r\   r[   rJ   ra   )rD   rŒ   rA   rÚ   rÛ   rÜ   r(   r(   r)   r‰   û  sX    ÿÿ
ÿÿ9Ç<ÿÄ?Á@À@
ÀA
ÿÿýúz.getPhases.<locals>.InitialPhase.processDoctypec                 S   s   d| j _| j jd | j _d S )NrÞ   rW   )rM   r[   rJ   ra   rC   r(   r(   r)   ÚanythingElseZ  s    z,getPhases.<locals>.InitialPhase.anythingElsec                 S   s   | j  d¡ |  ¡  |S )Nzexpected-doctype-but-got-chars©rM   r   rß   r•   r(   r(   r)   r„   ^  s    z1getPhases.<locals>.InitialPhase.processCharactersc                 S   s"   | j  dd|d i¡ |  ¡  |S )Nz"expected-doctype-but-got-start-tagrA   rà   r•   r(   r(   r)   r†   c  s
    
ÿz/getPhases.<locals>.InitialPhase.processStartTagc                 S   s"   | j  dd|d i¡ |  ¡  |S )Nz expected-doctype-but-got-end-tagrA   rà   r•   r(   r(   r)   r‡   i  s
    
ÿz-getPhases.<locals>.InitialPhase.processEndTagc                 S   s   | j  d¡ |  ¡  dS )Nzexpected-doctype-but-got-eofTrà   rC   r(   r(   r)   r‹   o  s    z*getPhases.<locals>.InitialPhase.processEOFN)r:   r;   r<   Útupler×   r…   rˆ   r‰   rß   r„   r†   r‡   r‹   r(   r(   r(   r)   ÚInitialPhaseò  s   _râ   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  tddƒ¡ | jjd | j_d S )Nr¯   rs   r¡   )r?   Z
insertRootÚimpliedTagTokenrM   rJ   ra   rC   r(   r(   r)   rb   x  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc                 S   s   |   ¡  dS ©NT©rb   rC   r(   r(   r)   r‹   }  s    z-getPhases.<locals>.BeforeHtmlPhase.processEOFc                 S   s   | j  || j j¡ d S r-   rÙ   r•   r(   r(   r)   rˆ   �  s    z1getPhases.<locals>.BeforeHtmlPhase.processCommentc                 S   s   d S r-   r(   r•   r(   r(   r)   r…   „  s    z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc                 S   s   |   ¡  |S r-   rå   r•   r(   r(   r)   r„   ‡  s    z4getPhases.<locals>.BeforeHtmlPhase.processCharactersc                 S   s    |d dkrd| j _|  ¡  |S )NrA   r¯   T)rM   rY   rb   r•   r(   r(   r)   r†   ‹  s    z2getPhases.<locals>.BeforeHtmlPhase.processStartTagc                 S   s4   |d dvr$| j  dd|d i¡ n|  ¡  |S d S )NrA   ©r¬   r­   r¯   Úbrzunexpected-end-tag-before-html)rM   r   rb   r•   r(   r(   r)   r‡   ‘  s    
ÿz0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)r:   r;   r<   rá   r×   rb   r‹   rˆ   r…   r„   r†   r‡   r(   r(   r(   r)   ÚBeforeHtmlPhaset  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 defde	fg¡Ze
e_e defg¡Zee_dS )z"getPhases.<locals>.BeforeHeadPhasec                 S   s   |   tddƒ¡ dS )Nr¬   rs   T©ÚstartTagHeadrã   rC   r(   r(   r)   r‹   œ  s    z-getPhases.<locals>.BeforeHeadPhase.processEOFc                 S   s   d S r-   r(   r•   r(   r(   r)   r…      s    z9getPhases.<locals>.BeforeHeadPhase.processSpaceCharactersc                 S   s   |   tddƒ¡ |S ©Nr¬   rs   ré   r•   r(   r(   r)   r„   £  s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc                 S   s   | j jd  |¡S ©NrŸ   ©rM   rJ   r†   r•   r(   r(   r)   rÕ   §  s    z/getPhases.<locals>.BeforeHeadPhase.startTagHtmlc                 S   s0   | j  |¡ | j jd | j _| jjd | j_d S )Nrw   ÚinHead)r?   rµ   r~   ÚheadPointerrM   rJ   ra   r•   r(   r(   r)   rê   ª  s    z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc                 S   s   |   tddƒ¡ |S rë   ré   r•   r(   r(   r)   ÚstartTagOther¯  s    z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc                 S   s   |   tddƒ¡ |S rë   ré   r•   r(   r(   r)   ÚendTagImplyHead³  s    z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc                 S   s   | j  dd|d i¡ d S )Nzend-tag-after-implied-rootrA   rÈ   r•   r(   r(   r)   ÚendTagOther·  s    
ÿz.getPhases.<locals>.BeforeHeadPhase.endTagOtherr¯   r¬   ræ   N)r:   r;   r<   rá   r×   r‹   r…   r„   rÕ   rê   rð   rñ   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 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_e d&efd'efg¡Zee_d(S ))zgetPhases.<locals>.InHeadPhasec                 S   s   |   ¡  dS rä   ©rß   rC   r(   r(   r)   r‹   Ê  s    z)getPhases.<locals>.InHeadPhase.processEOFc                 S   s   |   ¡  |S r-   rö   r•   r(   r(   r)   r„   Î  s    z0getPhases.<locals>.InHeadPhase.processCharactersc                 S   s   | j jd  |¡S rì   rí   r•   r(   r(   r)   rÕ   Ò  s    z+getPhases.<locals>.InHeadPhase.startTagHtmlc                 S   s   | j  d¡ d S )Nz!two-heads-are-not-better-than-onerÈ   r•   r(   r(   r)   rê   Õ  s    z+getPhases.<locals>.InHeadPhase.startTagHeadc                 S   s$   | j  |¡ | j j ¡  d|d< d S ©NTr}   ©r?   rµ   r~   rÎ   r•   r(   r(   r)   ÚstartTagBaseLinkCommandØ  s    z6getPhases.<locals>.InHeadPhase.startTagBaseLinkCommandc                 S   s´   | j  |¡ | j j ¡  d|d< |d }| jjjjd dkr°d|v rZ| jjj |d ¡ nVd|v r°d|v r°|d  	¡ d	kr°t
 |d  d
¡¡}t
 |¡}| ¡ }| jjj |¡ d S )NTr}   rx   r   Z	tentativeÚcharsetÚcontentz
http-equivzcontent-typezutf-8)r?   rµ   r~   rÎ   rM   rP   rS   rf   ZchangeEncodingr\   r   ZEncodingBytesÚencodeZContentAttrParserr"   )rD   rŒ   rl   rx   rM   Úcodecr(   r(   r)   ÚstartTagMetaÝ  s     ÿþ
z+getPhases.<locals>.InHeadPhase.startTagMetac                 S   s   | j  |d¡ d S )Nr³   ©rM   r·   r•   r(   r(   r)   ÚstartTagTitleò  s    z,getPhases.<locals>.InHeadPhase.startTagTitlec                 S   s   | j  |d¡ d S )Nr²   rÿ   r•   r(   r(   r)   ÚstartTagNoFramesStyleõ  s    z4getPhases.<locals>.InHeadPhase.startTagNoFramesStylec                 S   s8   | j jr| j  |d¡ n| j |¡ | j jd | j _d S )Nr²   ÚinHeadNoscript)rM   rO   r·   r?   rµ   rJ   ra   r•   r(   r(   r)   ÚstartTagNoscriptù  s    z/getPhases.<locals>.InHeadPhase.startTagNoscriptc                 S   s<   | j  |¡ | jjj| jj_| jj| j_| jjd | j_d S )Nr´   )	r?   rµ   rM   rP   ZscriptDataStater^   ra   r¶   rJ   r•   r(   r(   r)   ÚstartTagScript   s    z-getPhases.<locals>.InHeadPhase.startTagScriptc                 S   s   |   ¡  |S r-   rö   r•   r(   r(   r)   rð     s    z,getPhases.<locals>.InHeadPhase.startTagOtherc                 S   s:   | j jj ¡ }|jdks&J d|j ƒ‚| j jd | j _d S )Nr¬   zExpected head got %sÚ	afterHead©rM   r?   r~   rÎ   rA   rJ   ra   ©rD   rŒ   r±   r(   r(   r)   Ú
endTagHead
  s    z)getPhases.<locals>.InHeadPhase.endTagHeadc                 S   s   |   ¡  |S r-   rö   r•   r(   r(   r)   ÚendTagHtmlBodyBr  s    z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc                 S   s   | j  dd|d i¡ d S ©Núunexpected-end-tagrA   rÈ   r•   r(   r(   r)   rò     s    z*getPhases.<locals>.InHeadPhase.endTagOtherc                 S   s   |   tdƒ¡ d S )Nr¬   )r  rã   rC   r(   r(   r)   rß     s    z+getPhases.<locals>.InHeadPhase.anythingElser¯   Útitle)ÚnoframesÚstyleÚnoscriptÚscript)ÚbaseÚbasefontÚbgsoundÚcommandÚlinkr4   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   ró   rÍ   rô   rÖ   r(   r(   r(   r)   ÚInHeadPhaseÆ  sD   ÿ÷þ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 de	fde
fdefg¡Zee_e defdefg¡Zee_dS )z&getPhases.<locals>.InHeadNoscriptPhasec                 S   s   | j  d¡ |  ¡  dS )Nzeof-in-head-noscriptTrà   rC   r(   r(   r)   r‹   /  s    z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc                 S   s   | j jd  |¡S ©Nrî   )rM   rJ   rˆ   r•   r(   r(   r)   rˆ   4  s    z5getPhases.<locals>.InHeadNoscriptPhase.processCommentc                 S   s   | j  d¡ |  ¡  |S )Nzchar-in-head-noscriptrà   r•   r(   r(   r)   r„   7  s    z8getPhases.<locals>.InHeadNoscriptPhase.processCharactersc                 S   s   | j jd  |¡S r  ©rM   rJ   r…   r•   r(   r(   r)   r…   <  s    z=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharactersc                 S   s   | j jd  |¡S rì   rí   r•   r(   r(   r)   rÕ   ?  s    z3getPhases.<locals>.InHeadNoscriptPhase.startTagHtmlc                 S   s   | j jd  |¡S r  rí   r•   r(   r(   r)   rù   B  s    z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc                 S   s   | j  dd|d i¡ d S ©Núunexpected-start-tagrA   rÈ   r•   r(   r(   r)   ÚstartTagHeadNoscriptE  s    z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc                 S   s"   | j  dd|d i¡ |  ¡  |S ©Nzunexpected-inhead-noscript-tagrA   rà   r•   r(   r(   r)   rð   H  s    z4getPhases.<locals>.InHeadNoscriptPhase.startTagOtherc                 S   s:   | j jj ¡ }|jdks&J d|j ƒ‚| j jd | j _d S )Nr  zExpected noscript got %srî   r  r  r(   r(   r)   ÚendTagNoscriptM  s    z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc                 S   s"   | j  dd|d i¡ |  ¡  |S r  rà   r•   r(   r(   r)   ÚendTagBrR  s    z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc                 S   s   | j  dd|d i¡ d S r
  rÈ   r•   r(   r(   r)   rò   W  s    z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc                 S   s   |   tdƒ¡ d S )Nr  )r  rã   rC   r(   r(   r)   rß   Z  s    z3getPhases.<locals>.InHeadNoscriptPhase.anythingElser¯   )r  r  r  r4   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ô   rÖ   r(   r(   r(   r)   ÚInHeadNoscriptPhase,  s0   ýþ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 defdefde	fde
fdefg¡Zee_e defg¡Zee_dS )z!getPhases.<locals>.AfterHeadPhasec                 S   s   |   ¡  dS rä   rö   rC   r(   r(   r)   r‹   n  s    z,getPhases.<locals>.AfterHeadPhase.processEOFc                 S   s   |   ¡  |S r-   rö   r•   r(   r(   r)   r„   r  s    z3getPhases.<locals>.AfterHeadPhase.processCharactersc                 S   s   | j jd  |¡S rì   rí   r•   r(   r(   r)   rÕ   v  s    z.getPhases.<locals>.AfterHeadPhase.startTagHtmlc                 S   s(   d| j _| j |¡ | j jd | j _d S )NFrŸ   )rM   rd   r?   rµ   rJ   ra   r•   r(   r(   r)   ÚstartTagBodyy  s    z.getPhases.<locals>.AfterHeadPhase.startTagBodyc                 S   s    | j  |¡ | jjd | j_d S )Nr    )r?   rµ   rM   rJ   ra   r•   r(   r(   r)   ÚstartTagFrameset~  s    z2getPhases.<locals>.AfterHeadPhase.startTagFramesetc                 S   sr   | j  dd|d i¡ | jj | jj¡ | j jd  |¡ | jjd d d… D ] }|jdkrL| jj 	|¡  qnqLd S )Nz#unexpected-start-tag-out-of-my-headrA   rî   rw   r¬   )
rM   r   r?   r~   rŠ   rï   rJ   r†   rA   Úremover  r(   r(   r)   ÚstartTagFromHead‚  s    
ÿ
z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc                 S   s   | j  dd|d i¡ d S r  rÈ   r•   r(   r(   r)   rê   Œ  s    z.getPhases.<locals>.AfterHeadPhase.startTagHeadc                 S   s   |   ¡  |S r-   rö   r•   r(   r(   r)   rð   �  s    z/getPhases.<locals>.AfterHeadPhase.startTagOtherc                 S   s   |   ¡  |S r-   rö   r•   r(   r(   r)   r	  “  s    z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc                 S   s   | j  dd|d i¡ d S r
  rÈ   r•   r(   r(   r)   rò   —  s    z-getPhases.<locals>.AfterHeadPhase.endTagOtherc                 S   s.   | j  tddƒ¡ | jjd | j_d| j_d S )Nr­   rs   rŸ   T)r?   rµ   rã   rM   rJ   ra   rd   rC   r(   r(   r)   rß   š  s    z.getPhases.<locals>.AfterHeadPhase.anythingElser¯   r­   r®   )	r  r  r  r  r4   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Ö   r(   r(   r(   r)   ÚAfterHeadPhasek  s4   
þù	ÿr$  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„ Z6e7 8dh”j9fdiefdjefdkefdlefe:efdmefdnefdoefdpefdqefdrefdsefdtefduefdvefdwefdxefdyefdze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;_<e7 8dje-fdhe.fdˆe/fdne0fd‰e,fdŠe1fe:e2fd‹e3fdue4fdŒe5fg
¡Z=e6e=_<‡  Z>S )�zgetPhases.<locals>.InBodyPhase)r…   c                    s"   t ˆ | ƒj|i |¤Ž | j| _d S r-   )ÚsuperrL   ÚprocessSpaceCharactersNonPrer…   ©rD   r�   r%   )ÚInBodyPhaser¾   r(   r)   rL   ²  s    z'getPhases.<locals>.InBodyPhase.__init__c                 S   s$   |j |j ko"|j|jko"|j|jkS r-   )rA   rk   rl   )rD   Znode1Znode2r(   r(   r)   ÚisMatchingFormattingElement·  s
    
ÿ
þz:getPhases.<locals>.InBodyPhase.isMatchingFormattingElementc                 S   s˜   | j  |¡ | j jd }g }| j jd d d… D ](}|tu r@ qXq.|  ||¡r.| |¡ q.t|ƒdkshJ ‚t|ƒdkr†| j j |d ¡ | j j |¡ d S )Nrw   é   )	r?   rµ   r~   ÚactiveFormattingElementsr   r)  rŠ   r�   r"  )rD   rŒ   ro   ZmatchingElementsr±   r(   r(   r)   ÚaddFormattingElement½  s    z3getPhases.<locals>.InBodyPhase.addFormattingElementc                 S   s>   t dƒ}| jjd d d… D ]}|j|vr| j d¡  q:qd S )N)ÚddÚdtÚlir'   r¦   r£   r¨   r¤   r§   r¥   r­   r¯   rw   z expected-closing-tag-but-got-eof)rƒ   r?   r~   rA   rM   r   )rD   Zallowed_elementsr±   r(   r(   r)   r‹   Î  s
    
z)getPhases.<locals>.InBodyPhase.processEOFc                 S   sf   |d }| j | _| d¡rH| jjd jdv rH| jjd  ¡ sH|dd … }|rb| j ¡  | j |¡ d S )Nrx   Ú
rw   )ÚpreÚlistingÚtextarear   )	r&  r…   r½   r?   r~   rA   Z
hasContentÚ#reconstructActiveFormattingElementsrË   )rD   rŒ   rx   r(   r(   r)   Ú!processSpaceCharactersDropNewlineØ  s    
ÿþ
z@getPhases.<locals>.InBodyPhase.processSpaceCharactersDropNewlinec                 S   sT   |d dkrd S | j  ¡  | j  |d ¡ | jjrPtdd„ |d D ƒƒrPd| j_d S )Nrx   ú c                 S   s   g | ]}|t v‘qS r(   ©r   ©r@   Úcharr(   r(   r)   Ú
<listcomp>í  s   ÿzDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r?   r4  rË   rM   rd   Úanyr•   r(   r(   r)   r„   å  s    
ÿÿz0getPhases.<locals>.InBodyPhase.processCharactersc                 S   s   | j  ¡  | j  |d ¡ d S rÉ   )r?   r4  rË   r•   r(   r(   r)   r&  ñ  s    
z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec                 S   s   | j jd  |¡S r  rí   r•   r(   r(   r)   ÚstartTagProcessInHeadõ  s    z4getPhases.<locals>.InBodyPhase.startTagProcessInHeadc                 S   sˆ   | j  dddi¡ t| jjƒdks4| jjd jdkrB| j js„J ‚nBd| j _|d  ¡ D ],\}}|| jjd j	vrV|| jjd j	|< qVd S )Nr  rA   r­   r   Frx   )
rM   r   r�   r?   r~   rA   rT   rd   r.   rl   rÓ   r(   r(   r)   r   ø  s    ÿz+getPhases.<locals>.InBodyPhase.startTagBodyc                 S   s¶   | j  dddi¡ t| jjƒdks4| jjd jdkrB| j js²J ‚np| j jsLnf| jjd jrv| jjd j 	| jjd ¡ | jjd jdkr–| jj 
¡  qv| j |¡ | j jd | j _d S )	Nr  rA   r®   r   r­   rw   r¯   r    )rM   r   r�   r?   r~   rA   rT   rd   ÚparentÚremoveChildrÎ   rµ   rJ   ra   r•   r(   r(   r)   r!    s    "z/getPhases.<locals>.InBodyPhase.startTagFramesetc                 S   s.   | j jddd�r|  tdƒ¡ | j  |¡ d S ©Nr'   Úbutton©Úvariant)r?   ÚelementInScopeÚendTagPrã   rµ   r•   r(   r(   r)   ÚstartTagCloseP  s    z-getPhases.<locals>.InBodyPhase.startTagClosePc                 S   s>   | j jddd�r|  tdƒ¡ | j  |¡ d| j_| j| _d S )Nr'   r@  rA  F)	r?   rC  rD  rã   rµ   rM   rd   r5  r…   r•   r(   r(   r)   ÚstartTagPreListing  s
    z1getPhases.<locals>.InBodyPhase.startTagPreListingc                 S   sZ   | j jr| j dddi¡ n:| j jddd�r:|  tdƒ¡ | j  |¡ | j jd | j _d S )Nr  rA   Úformr'   r@  rA  rw   )	r?   ÚformPointerrM   r   rC  rD  rã   rµ   r~   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  }t| jjƒD ]@}|j|v r^| j j t|jdƒ¡  qx|j	t
v r6|jdvr6 qxq6| jjd	d
d�rœ| j j td	dƒ¡ | j |¡ d S )NFr/  r.  r-  )r/  r.  r-  rA   rt   )Úaddressr*   r'   r'   r@  rA  )rM   rd   Úreversedr?   r~   rA   ra   r‡   rã   Ú	nameTupler   rC  rµ   )rD   rŒ   ZstopNamesMapZ	stopNamesr±   r(   r(   r)   ÚstartTagListItem&  s*    þ

ÿ
ÿÿz/getPhases.<locals>.InBodyPhase.startTagListItemc                 S   s>   | j jddd�r|  tdƒ¡ | j  |¡ | jjj| jj_d S r?  )	r?   rC  rD  rã   rµ   rM   rP   r`   r^   r•   r(   r(   r)   ÚstartTagPlaintext<  s    z0getPhases.<locals>.InBodyPhase.startTagPlaintextc                 S   sb   | j jddd�r|  tdƒ¡ | j jd jtv rR| j dd|d i¡ | j j 	¡  | j  
|¡ d S )Nr'   r@  rA  rw   r  rA   )r?   rC  rD  rã   r~   rA   r   rM   r   rÎ   rµ   r•   r(   r(   r)   ÚstartTagHeadingB  s    z.getPhases.<locals>.InBodyPhase.startTagHeadingc                 S   s~   | j  d¡}|rf| j ddddœ¡ |  tdƒ¡ || j jv rL| j j |¡ || j jv rf| j j |¡ | j  	¡  |  
|¡ d S )NÚaú$unexpected-start-tag-implies-end-tag©Z	startNameZendName)r?   Ú!elementInActiveFormattingElementsrM   r   ÚendTagFormattingrã   r~   r"  r+  r4  r,  )rD   rŒ   ZafeAElementr(   r(   r)   Ú	startTagAJ  s    ÿ
z(getPhases.<locals>.InBodyPhase.startTagAc                 S   s   | j  ¡  |  |¡ d S r-   )r?   r4  r,  r•   r(   r(   r)   ÚstartTagFormattingW  s    
z1getPhases.<locals>.InBodyPhase.startTagFormattingc                 S   sP   | j  ¡  | j  d¡rB| j ddddœ¡ |  tdƒ¡ | j  ¡  |  |¡ d S )NÚnobrrQ  rR  )r?   r4  rC  rM   r   r‡   rã   r,  r•   r(   r(   r)   ÚstartTagNobr[  s    
ÿ
z+getPhases.<locals>.InBodyPhase.startTagNobrc                 S   sT   | j  d¡r2| j ddddœ¡ |  tdƒ¡ |S | j  ¡  | j  |¡ d| j_d S )Nr@  rQ  rR  F)	r?   rC  rM   r   r‡   rã   r4  rµ   rd   r•   r(   r(   r)   ÚstartTagButtone  s    ÿ
z-getPhases.<locals>.InBodyPhase.startTagButtonc                 S   s0   | j  ¡  | j  |¡ | j j t¡ d| j_d S ©NF)r?   r4  rµ   r+  rŠ   r   rM   rd   r•   r(   r(   r)   ÚstartTagAppletMarqueeObjectp  s    
z:getPhases.<locals>.InBodyPhase.startTagAppletMarqueeObjectc                 S   sB   | j jddd�r|  tdƒ¡ | j  ¡  d| j_| j |d¡ d S )Nr'   r@  rA  Fr²   )r?   rC  rD  rã   r4  rM   rd   r·   r•   r(   r(   r)   ÚstartTagXmpv  s
    
z*getPhases.<locals>.InBodyPhase.startTagXmpc                 S   sR   | j jdkr*| jjddd�r*|  tdƒ¡ | j |¡ d| j _| j jd | j _	d S )NrÞ   r'   r@  rA  Frž   )
rM   r[   r?   rC  r‡   rã   rµ   rd   rJ   ra   r•   r(   r(   r)   ÚstartTagTable}  s    z,getPhases.<locals>.InBodyPhase.startTagTablec                 S   s6   | j  ¡  | j  |¡ | j j ¡  d|d< d| j_d S )NTr}   F)r?   r4  rµ   r~   rÎ   rM   rd   r•   r(   r(   r)   ÚstartTagVoidFormatting…  s
    
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc                 S   s@   | j j}|  |¡ d|d v r<|d d  t¡dkr<|| j _d S )Nr2   rx   Úhidden)rM   rd   r^  rm   r   )rD   rŒ   rd   r(   r(   r)   ÚstartTagInputŒ  s    
ÿz,getPhases.<locals>.InBodyPhase.startTagInputc                 S   s$   | j  |¡ | j j ¡  d|d< d S r÷   rø   r•   r(   r(   r)   ÚstartTagParamSource”  s    z2getPhases.<locals>.InBodyPhase.startTagParamSourcec                 S   sJ   | j jddd�r|  tdƒ¡ | j  |¡ | j j ¡  d|d< d| j_d S )Nr'   r@  rA  Tr}   F)	r?   rC  rD  rã   rµ   r~   rÎ   rM   rd   r•   r(   r(   r)   Ú
startTagHr™  s    z)getPhases.<locals>.InBodyPhase.startTagHrc                 S   s6   | j  ddddœ¡ |  tdd|d |d d�¡ d S )	Nzunexpected-start-tag-treated-asÚimageÚimg©ZoriginalNameZnewNamers   rx   r|   ©rl   r|   )rM   r   r†   rã   r•   r(   r(   r)   ÚstartTagImage¡  s    ÿ
þz,getPhases.<locals>.InBodyPhase.startTagImagec                 S   s  | j  dddi¡ | jjrd S i }d|d v r>|d d |d< |  tdd|d�¡ |  td	dƒ¡ |  td
dƒ¡ d|d v rŒ|d d }nd}|  td |dœ¡ |d  ¡ }d|v r¾|d= d|v rÌ|d= d|d< |  tdd||d d�¡ |  	td
ƒ¡ |  td	dƒ¡ |  	tdƒ¡ d S )Nzdeprecated-tagrA   ÚisindexÚactionrx   rG  rs   )rl   ÚhrÚlabelÚpromptz3This is a searchable index. Enter search keywords: rr   ©r2   rx   Úinputr|   rf  )
rM   r   r?   rH  r†   rã   r„   r   Úcopyr‡   )rD   rŒ   Z
form_attrsrl  rl   r(   r(   r)   ÚstartTagIsIndex©  s<    
ÿÿ
þz.getPhases.<locals>.InBodyPhase.startTagIsIndexc                 S   s0   | j  |¡ | jjj| jj_| j| _d| j_d S rZ  )	r?   rµ   rM   rP   r]   r^   r5  r…   rd   r•   r(   r(   r)   ÚstartTagTextareaÈ  s    z/getPhases.<locals>.InBodyPhase.startTagTextareac                 S   s   d| j _|  |¡ d S rZ  )rM   rd   ÚstartTagRawtextr•   r(   r(   r)   ÚstartTagIFrameÎ  s    z-getPhases.<locals>.InBodyPhase.startTagIFramec                 S   s"   | j jr|  |¡ n
|  |¡ d S r-   )rM   rO   rr  rð   r•   r(   r(   r)   r  Ò  s    z/getPhases.<locals>.InBodyPhase.startTagNoscriptc                 S   s   | j  |d¡ dS )z8iframe, noembed noframes, noscript(if scripting enabled)r²   Nrÿ   r•   r(   r(   r)   rr  Ø  s    z.getPhases.<locals>.InBodyPhase.startTagRawtextc                 S   s@   | j jd jdkr$| jj tdƒ¡ | j  ¡  | jj  |¡ d S ©Nrw   Úoption)	r?   r~   rA   rM   ra   r‡   rã   r4  rµ   r•   r(   r(   r)   ÚstartTagOptÜ  s    
z*getPhases.<locals>.InBodyPhase.startTagOptc                 S   sŒ   | 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v rx| jjd | j_n| jjd	 | j_d S )
NFrž   rœ   r�   r›   rš   r™   ÚinSelectInTabler˜   )r?   r4  rµ   rM   rd   ra   rJ   r•   r(   r(   r)   ÚstartTagSelectâ  s    





ûz-getPhases.<locals>.InBodyPhase.startTagSelectc                 S   sB   | j  d¡r2| j  ¡  | j jd jdkr2| j ¡  | j  |¡ d S )NÚrubyrw   )r?   rC  ÚgenerateImpliedEndTagsr~   rA   rM   r   rµ   r•   r(   r(   r)   ÚstartTagRpRtð  s
    

z+getPhases.<locals>.InBodyPhase.startTagRpRtc                 S   sZ   | j  ¡  | j |¡ | j |¡ td |d< | j  |¡ |d rV| j j ¡  d|d< d S )Nri   rk   r|   Tr}   )	r?   r4  rM   r   r   r   rµ   r~   rÎ   r•   r(   r(   r)   ÚstartTagMath÷  s    
z+getPhases.<locals>.InBodyPhase.startTagMathc                 S   sZ   | j  ¡  | j |¡ | j |¡ td |d< | j  |¡ |d rV| j j ¡  d|d< d S )Nrz   rk   r|   Tr}   )	r?   r4  rM   r   r   r   rµ   r~   rÎ   r•   r(   r(   r)   ÚstartTagSvg  s    
z*getPhases.<locals>.InBodyPhase.startTagSvgc                 S   s   | 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-ignoredrA   NrÈ   r•   r(   r(   r)   ÚstartTagMisplaced  s    z0getPhases.<locals>.InBodyPhase.startTagMisplacedc                 S   s   | j  ¡  | j  |¡ d S r-   )r?   r4  rµ   r•   r(   r(   r)   rð     s    
z,getPhases.<locals>.InBodyPhase.startTagOtherc                 S   sœ   | j jddd�sD|  tddƒ¡ | j dddi¡ |  tddƒ¡ nT| j  d¡ | j jd j	dkrt| j dddi¡ | j j 
¡ }|j	dkr˜| j j 
¡ }q€d S )	Nr'   r@  rA  rs   r  rA   rt   rw   )r?   rC  rE  rã   rM   r   rD  rz  r~   rA   rÎ   r  r(   r(   r)   rD    s    
z&getPhases.<locals>.InBodyPhase.endTagPc                 S   s~   | j  d¡s| j ¡  d S | j jd jdkrj| j jdd … D ],}|jtdƒvr<| j dd|jdœ¡  qjq<| jjd | j_d S )Nr­   rw   é   )r-  r.  r/  Úoptgroupru  r'   ÚrpÚrtr¦   r£   r¨   r¤   r§   r¥   r­   r¯   ú$expected-one-end-tag-but-got-another©ZgotNameZexpectedNameÚ	afterBody)	r?   rC  rM   r   r~   rA   rƒ   rJ   ra   r  r(   r(   r)   Ú
endTagBody)  s    

þz)getPhases.<locals>.InBodyPhase.endTagBodyc                 S   s"   | j  d¡r|  tdƒ¡ |S d S )Nr­   )r?   rC  r†  rã   r•   r(   r(   r)   Ú
endTagHtml;  s    z)getPhases.<locals>.InBodyPhase.endTagHtmlc                 S   sŽ   |d dkr| j | _| j |d ¡}|r2| j ¡  | jjd j|d kr^| j dd|d i¡ |rŠ| jj 	¡ }|j|d krŠ| jj 	¡ }qnd S )NrA   r1  rw   úend-tag-too-early)
r&  r…   r?   rC  rz  r~   rA   rM   r   rÎ   )rD   rŒ   ZinScoper±   r(   r(   r)   ÚendTagBlockA  s    
z*getPhases.<locals>.InBodyPhase.endTagBlockc                 S   sv   | j j}d | j _|d u s$| j  |¡s8| j dddi¡ n:| j  ¡  | j jd |krd| j dddi¡ | j j |¡ d S )Nr  rA   rG  rw   zend-tag-too-early-ignored)r?   rH  rC  rM   r   rz  r~   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 dd|d i¡ nf| j j|d d� | j jd j|d kr€| j dd|d i¡ | j j ¡ }|j|d kr¨| j j ¡ }qŒd S )	NrA   r/  ÚlistrA  r  ©Úexcluderw   rˆ  )r?   rC  rM   r   rz  r~   rA   rÎ   )rD   rŒ   rB  r±   r(   r(   r)   ÚendTagListItem\  s    
þz-getPhases.<locals>.InBodyPhase.endTagListItemc                 S   s’   t D ]}| j |¡r| j ¡   q$q| jjd j|d krP| j dd|d i¡ t D ]8}| j |¡rT| jj ¡ }|jt vrˆ| jj ¡ }qp qŽqTd S )Nrw   rA   rˆ  )	r   r?   rC  rz  r~   rA   rM   r   rÎ   )rD   rŒ   Úitemr(   r(   r)   ÚendTagHeadingm  s    

z,getPhases.<locals>.InBodyPhase.endTagHeadingc                 S   s  d}|dk �r
|d7 }| j  |d ¡}|rD|| j jv rR| j  |j¡sR|  |¡ dS || j jvr†| j dd|d i¡ | j j 	|¡ dS | j  |j¡s®| j dd|d i¡ dS || j jd krÔ| j d	d|d i¡ | j j 
|¡}d}| j j|d… D ]}|jtv rö|} �qqö|du �rR| j j ¡ }||k�r@| j j ¡ }�q&| j j 	|¡ dS | j j|d  }| j j 
|¡}| }	}
d}| j j 
|
¡}|d
k �rX|d7 }|d8 }| j j| }
|
| j jv�rÐ| j j 	|
¡ �qŠ|
|k�rÞ�qX|	|k�rú| j j 
|
¡d }|
 ¡ }|| j j| j j 
|
¡< || j j| j j 
|
¡< |}
|	j�rF|	j |	¡ |
 |	¡ |
}	�qŠ|	j�rl|	j |	¡ |jtdƒv �r˜| j  ¡ \}}| |	|¡ n
| |	¡ | ¡ }| |¡ | |¡ | j j 	|¡ | j j ||¡ | j j 	|¡ | j j | j j 
|¡d |¡ qdS )z)The much-feared adoption agency algorithmr   é   r   rA   Nzadoption-agency-1.2zadoption-agency-4.4rw   zadoption-agency-1.3r*  ©r«   r¦   r¨   r§   r¥   )r?   rS  r~   rC  rA   rò   rM   r   r+  r"  ÚindexrL  r   rÎ   Z	cloneNoder=  r>  ZappendChildrƒ   ZgetTableMisnestedNodePositionÚinsertBeforeZreparentChildrenÚinsert)rD   rŒ   ZouterLoopCounterZformattingElementZafeIndexZfurthestBlockro   ZcommonAncestorÚbookmarkZlastNoder±   ZinnerLoopCounterr“  Úcloner=  r”  r(   r(   r)   rT  |  sž    

ÿ
ÿþ







ÿÿÿÿ



ÿz/getPhases.<locals>.InBodyPhase.endTagFormattingc                 S   sŒ   | j  |d ¡r| j  ¡  | j jd j|d krF| j dd|d i¡ | j  |d ¡rˆ| j j ¡ }|j|d kr~| j j ¡ }qb| j  ¡  d S )NrA   rw   rˆ  )	r?   rC  rz  r~   rA   rM   r   rÎ   ÚclearActiveFormattingElements)rD   rŒ   ro   r(   r(   r)   ÚendTagAppletMarqueeObject  s    
z8getPhases.<locals>.InBodyPhase.endTagAppletMarqueeObjectc                 S   s@   | j  ddddœ¡ | j ¡  | j tddƒ¡ | jj ¡  d S )Nzunexpected-end-tag-treated-asrç   z
br elementre  rs   )rM   r   r?   r4  rµ   rã   r~   rÎ   r•   r(   r(   r)   r  +  s    ÿ
z'getPhases.<locals>.InBodyPhase.endTagBrc                 S   s¤   | j jd d d… D ]Œ}|j|d krz| j j|d d� | j jd j|d krb| j dd|d i¡ | j j ¡ |krtqb q q|jtv r| j dd|d i¡  q qd S )Nrw   rA   rŒ  r  )	r?   r~   rA   rz  rM   r   rÎ   rL  r   r  r(   r(   r)   rò   2  s    
z*getPhases.<locals>.InBodyPhase.endTagOtherr¯   )	r  r  r  r  r  r4   r  r  r  r­   r®   )rJ  ÚarticleÚasideÚ
blockquoteÚcenterÚdetailsÚdirr*   ÚdlÚfieldsetÚ
figcaptionÚfigureÚfooterÚheaderÚhgroupÚmainÚmenuÚnavÚolr'   ÚsectionÚsummaryÚul)r1  r2  rG  )r/  r-  r.  rV   rP  )ÚbÚbigÚcodeÚemÚfontÚiÚsÚsmallÚstrikeÚstrongÚttÚurW  r@  )ZappletZmarqueeÚobjectZxmpr«   )Zarearç   Úembedrd  ÚkeygenZwbr)ÚparamÚsourceÚtrackrn  rj  rc  rh  r3  Ziframer  )Znoembedr  r¢   )r�  r‚  )ru  r€  Úmathrz   )r©   Úcolrª   Úframer¬   r¦   r£   r¨   r¤   r§   r¥   )rJ  rš  r›  rœ  r@  r�  rž  ZdialogrŸ  r*   r   r¡  r¢  r£  r¤  r¥  r¦  r2  r§  r¨  r©  rª  r1  r«  r¬  r­  r'   )r-  r.  r/  )rP  r®  r¯  r°  r±  r²  r³  rW  r´  rµ  r¶  r·  r¸  r¹  rç   )?r:   r;   r<   r×   rL   r)  r,  r‹   r5  r„   r&  r<  r   r!  rE  rF  rI  rM  rN  rO  rU  rV  rX  rY  r[  r\  r]  r^  r`  ra  rb  rg  rp  rq  rs  r  rr  rv  rx  r{  r|  r}  r~  rð   rD  r†  r‡  r‰  rŠ  rŽ  r�  rT  r™  r  rò   r   ró   rÕ   r   rÍ   rô   rÖ   Ú__classcell__r(   )r(  rØ   ©r¾   r)   r(  ­  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	e
 g ¡Zee_e
 defg¡Ze	e_dS )zgetPhases.<locals>.TextPhasec                 S   s   | j  |d ¡ d S rÉ   rÊ   r•   r(   r(   r)   r„   „  s    z.getPhases.<locals>.TextPhase.processCharactersc                 S   s8   | j  dd| jjd ji¡ | jj ¡  | j j| j _dS )Nz&expected-named-closing-tag-but-got-eofrA   rw   T)rM   r   r?   r~   rA   rÎ   r¶   ra   rC   r(   r(   r)   r‹   ‡  s    ÿz'getPhases.<locals>.TextPhase.processEOFc                 S   s   dsJ d|d  ƒ‚d S )NFz4Tried to process start tag %s in RCDATA/RAWTEXT moderA   r(   r•   r(   r(   r)   rð   Ž  s    z*getPhases.<locals>.TextPhase.startTagOtherc                 S   s*   | j j ¡ }|jdksJ ‚| jj| j_d S )Nr  )r?   r~   rÎ   rA   rM   r¶   ra   r  r(   r(   r)   ÚendTagScript‘  s    z)getPhases.<locals>.TextPhase.endTagScriptc                 S   s   | j j ¡  | jj| j_d S r-   )r?   r~   rÎ   rM   r¶   ra   r•   r(   r(   r)   rò   ˜  s    z(getPhases.<locals>.TextPhase.endTagOtherr  N)r:   r;   r<   rá   r×   r„   r‹   rð   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 d%” j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_e d+efd/efg¡Zee_d0S )1zgetPhases.<locals>.InTablePhasec                 S   s$   | j jd jdvr | j j ¡  q d S )Nrw   )r«   r¯   )r?   r~   rA   rÎ   rC   r(   r(   r)   ÚclearStackToTableContext§  s    z8getPhases.<locals>.InTablePhase.clearStackToTableContextc                 S   s0   | j jd jdkr | j d¡ n| jjs,J ‚d S )Nrw   r¯   zeof-in-table©r?   r~   rA   rM   r   rT   rC   r(   r(   r)   r‹   °  s    z*getPhases.<locals>.InTablePhase.processEOFc                 S   s4   | j j}| j jd | j _|| j j_| j j |¡ d S ©NÚinTableText)rM   ra   rJ   r¶   r…   ©rD   rŒ   r¶   r(   r(   r)   r…   ·  s    
z6getPhases.<locals>.InTablePhase.processSpaceCharactersc                 S   s4   | j j}| j jd | j _|| j j_| j j |¡ d S rÉ  )rM   ra   rJ   r¶   r„   rË  r(   r(   r)   r„   ½  s    
z1getPhases.<locals>.InTablePhase.processCharactersc                 S   s&   d| j _| jjd  |¡ d| j _d S )NTrŸ   F)r?   ÚinsertFromTablerM   rJ   r„   r•   r(   r(   r)   rË   Ã  s    z*getPhases.<locals>.InTablePhase.insertTextc                 S   s6   |   ¡  | jj t¡ | j |¡ | jjd | j_d S )Nrœ   )	rÇ  r?   r+  rŠ   r   rµ   rM   rJ   ra   r•   r(   r(   r)   ÚstartTagCaptionÊ  s    z/getPhases.<locals>.InTablePhase.startTagCaptionc                 S   s(   |   ¡  | j |¡ | jjd | j_d S )Nr�   ©rÇ  r?   rµ   rM   rJ   ra   r•   r(   r(   r)   ÚstartTagColgroupÐ  s    z0getPhases.<locals>.InTablePhase.startTagColgroupc                 S   s   |   tddƒ¡ |S )Nrª   rs   )rÏ  rã   r•   r(   r(   r)   ÚstartTagColÕ  s    z+getPhases.<locals>.InTablePhase.startTagColc                 S   s(   |   ¡  | j |¡ | jjd | j_d S ©Nr›   rÎ  r•   r(   r(   r)   ÚstartTagRowGroupÙ  s    z0getPhases.<locals>.InTablePhase.startTagRowGroupc                 S   s   |   tddƒ¡ |S )Nr¦   rs   )rÒ  rã   r•   r(   r(   r)   ÚstartTagImplyTbodyÞ  s    z2getPhases.<locals>.InTablePhase.startTagImplyTbodyc                 S   s6   | j  ddddœ¡ | j j tdƒ¡ | j js2|S d S )NrQ  r«   rR  )rM   r   ra   r‡   rã   rT   r•   r(   r(   r)   r]  â  s    ÿz-getPhases.<locals>.InTablePhase.startTagTablec                 S   s   | j jd  |¡S r  rí   r•   r(   r(   r)   ÚstartTagStyleScripté  s    z3getPhases.<locals>.InTablePhase.startTagStyleScriptc                 S   sV   d|d v rH|d d   t¡dkrH| j d¡ | j |¡ | jj ¡  n
|  |¡ d S )Nr2   rx   r_  z unexpected-hidden-input-in-table)	rm   r   rM   r   r?   rµ   r~   rÎ   rð   r•   r(   r(   r)   r`  ì  s    ÿz-getPhases.<locals>.InTablePhase.startTagInputc                 S   sD   | j  d¡ | jjd u r@| j |¡ | jjd | j_| jj ¡  d S )Nzunexpected-form-in-tablerw   )rM   r   r?   rH  rµ   r~   rÎ   r•   r(   r(   r)   rI  ö  s
    z,getPhases.<locals>.InTablePhase.startTagFormc                 S   s<   | j  dd|d i¡ d| j_| j jd  |¡ d| j_d S )Nz)unexpected-start-tag-implies-table-voodoorA   TrŸ   F)rM   r   r?   rÌ  rJ   r†   r•   r(   r(   r)   rð   ý  s    z-getPhases.<locals>.InTablePhase.startTagOtherc                 S   sœ   | j jddd�r‚| j  ¡  | j jd jdkrJ| j dd| j jd jdœ¡ | j jd jdkrj| j j ¡  qJ| j j ¡  | j ¡  n| jj	sŽJ ‚| j ¡  d S )Nr«   rA  rw   zend-tag-too-early-namedr„  )
r?   rC  rz  r~   rA   rM   r   rÎ   rc   rT   r•   r(   r(   r)   ÚendTagTable  s    
ÿÿz+getPhases.<locals>.InTablePhase.endTagTablec                 S   s   | j  dd|d i¡ d S r
  rÈ   r•   r(   r(   r)   ÚendTagIgnore  s    z,getPhases.<locals>.InTablePhase.endTagIgnorec                 S   s<   | j  dd|d i¡ d| j_| j jd  |¡ d| j_d S )Nz'unexpected-end-tag-implies-table-voodoorA   TrŸ   F)rM   r   r?   rÌ  rJ   r‡   r•   r(   r(   r)   rò     s    z+getPhases.<locals>.InTablePhase.endTagOtherr¯   r©   rª   rÁ  ©r¦   r¨   r§   )r£   r¤   r¥   r«   )r  r  rn  rG  )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`  rI  rð   rÕ  rÖ  rò   r   ró   rÕ   rÍ   rô   rÖ   r(   ©rØ   r(   r)   ÚInTablePhase¢  sN   	
öÿþ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>.InTableTextPhase)r¶   ÚcharacterTokensc                    s&   t ˆ | ƒj|i |¤Ž d | _g | _d S r-   )r%  rL   r¶   rÚ  r'  )ÚInTableTextPhaser¾   r(   r)   rL   6  s    z,getPhases.<locals>.InTableTextPhase.__init__c                 S   sd   d  dd„ | jD ƒ¡}tdd„ |D ƒƒrJtd |dœ}| jjd  |¡ n|rZ| j |¡ g | _d S )NrÝ   c                 S   s   g | ]}|d  ‘qS )rx   r(   ©r@   r�  r(   r(   r)   r:  <  rF   zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c                 S   s   g | ]}|t v‘qS r(   r7  rÜ  r(   r(   r)   r:  =  rF   rr   rm  rž   )ÚjoinrÚ  r;  r   rM   rJ   rË   r?   )rD   rx   rŒ   r(   r(   r)   ÚflushCharacters;  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc                 S   s   |   ¡  | j| j_|S r-   ©rÞ  r¶   rM   ra   r•   r(   r(   r)   rˆ   D  s    
z2getPhases.<locals>.InTableTextPhase.processCommentc                 S   s   |   ¡  | j| j_dS rä   rß  rC   r(   r(   r)   r‹   I  s    
z.getPhases.<locals>.InTableTextPhase.processEOFc                 S   s    |d dkrd S | j  |¡ d S ©Nrx   r6  ©rÚ  rŠ   r•   r(   r(   r)   r„   N  s    z5getPhases.<locals>.InTableTextPhase.processCharactersc                 S   s   | j  |¡ d S r-   rá  r•   r(   r(   r)   r…   S  s    z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc                 S   s   |   ¡  | j| j_|S r-   rß  r•   r(   r(   r)   r†   X  s    
z3getPhases.<locals>.InTableTextPhase.processStartTagc                 S   s   |   ¡  | j| j_|S r-   rß  r•   r(   r(   r)   r‡   ]  s    
z1getPhases.<locals>.InTableTextPhase.processEndTag)r:   r;   r<   r×   rL   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 d” jfdefg¡Ze	e_e 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«   rA  ©r?   rC  rC   r(   r(   r)   ÚignoreEndTagCaptionf  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc                 S   s   | j jd  ¡  d S rì   ©rM   rJ   r‹   rC   r(   r(   r)   r‹   i  s    z,getPhases.<locals>.InCaptionPhase.processEOFc                 S   s   | j jd  |¡S rì   ©rM   rJ   r„   r•   r(   r(   r)   r„   l  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc                 S   s0   | j  ¡  |  ¡ }| j j tdƒ¡ |s,|S d S ©Nr©   ©rM   r   rã  ra   r‡   rã   ©rD   rŒ   ÚignoreEndTagr(   r(   r)   ÚstartTagTableElemento  s
    
z6getPhases.<locals>.InCaptionPhase.startTagTableElementc                 S   s   | j jd  |¡S rì   rí   r•   r(   r(   r)   rð   w  s    z/getPhases.<locals>.InCaptionPhase.startTagOtherc                 S   s¤   |   ¡ sŠ| j ¡  | jjd jdkrB| j dd| jjd jdœ¡ | jjd jdkrb| jj ¡  qB| jj ¡  | j ¡  | jj	d | j_
n| jjs–J ‚| j ¡  d S )Nrw   r©   rƒ  r„  rž   )rã  r?   rz  r~   rA   rM   r   rÎ   r˜  rJ   ra   rT   r•   r(   r(   r)   ÚendTagCaptionz  s    
ÿÿ
z/getPhases.<locals>.InCaptionPhase.endTagCaptionc                 S   s0   | j  ¡  |  ¡ }| j j tdƒ¡ |s,|S d S ræ  rç  rè  r(   r(   r)   rÕ  Œ  s
    
z-getPhases.<locals>.InCaptionPhase.endTagTablec                 S   s   | j  dd|d i¡ d S r
  rÈ   r•   r(   r(   r)   rÖ  “  s    z.getPhases.<locals>.InCaptionPhase.endTagIgnorec                 S   s   | j jd  |¡S rì   ©rM   rJ   r‡   r•   r(   r(   r)   rò   –  s    z-getPhases.<locals>.InCaptionPhase.endTagOtherr¯   ©	r©   rÁ  rª   r¦   r£   r¨   r¤   r§   r¥   r©   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(   rØ  r(   r)   ÚInCaptionPhaseb  s2   ÿþÿý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 d” jfdefg¡Ze	e_e 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 )Nrw   r¯   )r?   r~   rA   rC   r(   r(   r)   ÚignoreEndTagColgroup¬  s    z:getPhases.<locals>.InColumnGroupPhase.ignoreEndTagColgroupc                 S   sD   | j jd jdkr"| jjsJ ‚d S |  ¡ }|  tdƒ¡ |s@dS d S )Nrw   r¯   rª   T)r?   r~   rA   rM   rT   rï  ÚendTagColgrouprã   )rD   ré  r(   r(   r)   r‹   ¯  s    z0getPhases.<locals>.InColumnGroupPhase.processEOFc                 S   s"   |   ¡ }|  tdƒ¡ |s|S d S ©Nrª   ©rï  rð  rã   rè  r(   r(   r)   r„   ¹  s    z7getPhases.<locals>.InColumnGroupPhase.processCharactersc                 S   s$   | j  |¡ | j j ¡  d|d< d S r÷   rø   r•   r(   r(   r)   rÐ  ¿  s    z1getPhases.<locals>.InColumnGroupPhase.startTagColc                 S   s"   |   ¡ }|  tdƒ¡ |s|S d S rñ  rò  rè  r(   r(   r)   rð   Ä  s    z3getPhases.<locals>.InColumnGroupPhase.startTagOtherc                 S   s@   |   ¡ r | jjsJ ‚| j ¡  n| jj ¡  | jjd | j_d S ©Nrž   )	rï  rM   rT   r   r?   r~   rÎ   rJ   ra   r•   r(   r(   r)   rð  Ê  s
    z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc                 S   s   | j  dddi¡ d S )Nz
no-end-tagrA   rÁ  rÈ   r•   r(   r(   r)   Ú	endTagColÓ  s    z/getPhases.<locals>.InColumnGroupPhase.endTagColc                 S   s"   |   ¡ }|  tdƒ¡ |s|S d S rñ  rò  rè  r(   r(   r)   rò   Ö  s    z1getPhases.<locals>.InColumnGroupPhase.endTagOtherr¯   rÁ  rª   N)r:   r;   r<   rá   r×   rï  r‹   r„   rÐ  rð   rð  rô  rò   r   ró   rÕ   rÍ   rô   rÖ   r(   rØ  r(   r)   ÚInColumnGroupPhase¨  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 d” jfde	fde
fdefg¡Zee_e defdefdefg¡Zee_d S )!z#getPhases.<locals>.InTableBodyPhasec                 S   sB   | j jd jdvr | j j ¡  q | j jd jdkr>| jjs>J ‚d S )Nrw   )r¦   r¨   r§   r¯   r¯   )r?   r~   rA   rÎ   rM   rT   rC   r(   r(   r)   ÚclearStackToTableBodyContextí  s    z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc                 S   s   | j jd  ¡  d S ró  rä  rC   r(   r(   r)   r‹   ÷  s    z.getPhases.<locals>.InTableBodyPhase.processEOFc                 S   s   | j jd  |¡S ró  r  r•   r(   r(   r)   r…   ú  s    z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc                 S   s   | j jd  |¡S ró  rå  r•   r(   r(   r)   r„   ý  s    z5getPhases.<locals>.InTableBodyPhase.processCharactersc                 S   s(   |   ¡  | j |¡ | jjd | j_d S )Nrš   )rö  r?   rµ   rM   rJ   ra   r•   r(   r(   r)   Ú
startTagTr   s    z.getPhases.<locals>.InTableBodyPhase.startTagTrc                 S   s*   | j  dd|d i¡ |  tddƒ¡ |S )Nzunexpected-cell-in-table-bodyrA   r¥   rs   )rM   r   r÷  rã   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|  ¡  |  t| j jd jƒ¡ |S | jjs`J ‚| j 	¡  d S ©Nr¦   r«   rA  r§   r¨   rw   ©
r?   rC  rö  ÚendTagTableRowGrouprã   r~   rA   rM   rT   r   r•   r(   r(   r)   ÚstartTagTableOther  s    ÿþÿz6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc                 S   s   | j jd  |¡S ró  rí   r•   r(   r(   r)   rð     s    z1getPhases.<locals>.InTableBodyPhase.startTagOtherc                 S   sT   | j j|d dd�r:|  ¡  | j j ¡  | jjd | j_n| j dd|d i¡ d S )NrA   r«   rA  rž   ú unexpected-end-tag-in-table-body)	r?   rC  rö  r~   rÎ   rM   rJ   ra   r   r•   r(   r(   r)   rû    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|  ¡  |  t| j jd jƒ¡ |S | jjs`J ‚| j 	¡  d S rù  rú  r•   r(   r(   r)   rÕ  %  s    ÿþÿz/getPhases.<locals>.InTableBodyPhase.endTagTablec                 S   s   | j  dd|d i¡ d S )Nrý  rA   rÈ   r•   r(   r(   r)   rÖ  2  s    
ÿz0getPhases.<locals>.InTableBodyPhase.endTagIgnorec                 S   s   | j jd  |¡S ró  rì  r•   r(   r(   r)   rò   6  s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherr¯   r¥   ©r£   r¤   )r©   rÁ  rª   r¦   r¨   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Í   rô   rÖ   r(   rØ  r(   r)   ÚInTableBodyPhaseè  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e d” jfde
fdefg¡Zee_e defdefd efd!efg¡Zee_d"S )#zgetPhases.<locals>.InRowPhasec                 S   s@   | j jd jdvr<| j dd| j jd ji¡ | j j ¡  q d S )Nrw   )r¥   r¯   z'unexpected-implied-end-tag-in-table-rowrA   )r?   r~   rA   rM   r   rÎ   rC   r(   r(   r)   ÚclearStackToTableRowContextO  s
    ÿz9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc                 S   s   | j jddd� S )Nr¥   r«   rA  râ  rC   r(   r(   r)   ÚignoreEndTagTrU  s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc                 S   s   | j jd  ¡  d S ró  rä  rC   r(   r(   r)   r‹   Y  s    z(getPhases.<locals>.InRowPhase.processEOFc                 S   s   | j jd  |¡S ró  r  r•   r(   r(   r)   r…   \  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc                 S   s   | j jd  |¡S ró  rå  r•   r(   r(   r)   r„   _  s    z/getPhases.<locals>.InRowPhase.processCharactersc                 S   s6   |   ¡  | j |¡ | jjd | j_| jj t¡ d S )Nr™   )	r   r?   rµ   rM   rJ   ra   r+  rŠ   r   r•   r(   r(   r)   rø  b  s    z/getPhases.<locals>.InRowPhase.startTagTableCellc                 S   s"   |   ¡ }|  tdƒ¡ |s|S d S ©Nr¥   ©r  ÚendTagTrrã   rè  r(   r(   r)   rü  h  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc                 S   s   | j jd  |¡S ró  rí   r•   r(   r(   r)   rð   o  s    z+getPhases.<locals>.InRowPhase.startTagOtherc                 S   sH   |   ¡ s.|  ¡  | jj ¡  | jjd | j_n| jjs:J ‚| j 	¡  d S rÑ  )
r  r   r?   r~   rÎ   rM   rJ   ra   rT   r   r•   r(   r(   r)   r  r  s    z&getPhases.<locals>.InRowPhase.endTagTrc                 S   s"   |   ¡ }|  tdƒ¡ |s|S d S r  r  rè  r(   r(   r)   rÕ  |  s    z)getPhases.<locals>.InRowPhase.endTagTablec                 S   s4   | j j|d dd�r&|  tdƒ¡ |S | j ¡  d S )NrA   r«   rA  r¥   )r?   rC  r  rã   rM   r   r•   r(   r(   r)   rû  „  s    z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc                 S   s   | j  dd|d i¡ d S )Nzunexpected-end-tag-in-table-rowrA   rÈ   r•   r(   r(   r)   rÖ  ‹  s    
ÿz*getPhases.<locals>.InRowPhase.endTagIgnorec                 S   s   | j jd  |¡S ró  rì  r•   r(   r(   r)   rò   �  s    z)getPhases.<locals>.InRowPhase.endTagOtherr¯   rþ  )r©   rÁ  rª   r¦   r¨   r§   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Õ   rÍ   rô   rÖ   r(   rØ  r(   r)   Ú
InRowPhaseJ  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 d” jfdefg¡Ze	e_e 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 |  tdƒ¡ n| j jddd�r>|  tdƒ¡ d S ©Nr£   r«   rA  r¤   )r?   rC  ÚendTagTableCellrã   rC   r(   r(   r)   Ú	closeCell¨  s    z(getPhases.<locals>.InCellPhase.closeCellc                 S   s   | j jd  ¡  d S rì   rä  rC   r(   r(   r)   r‹   ¯  s    z)getPhases.<locals>.InCellPhase.processEOFc                 S   s   | j jd  |¡S rì   rå  r•   r(   r(   r)   r„   ²  s    z0getPhases.<locals>.InCellPhase.processCharactersc                 S   sF   | j jddd�s | j jddd�r,|  ¡  |S | jjs8J ‚| j ¡  d S r  )r?   rC  r  rM   rT   r   r•   r(   r(   r)   rü  µ  s    ÿz1getPhases.<locals>.InCellPhase.startTagTableOtherc                 S   s   | j jd  |¡S rì   rí   r•   r(   r(   r)   rð   ¿  s    z,getPhases.<locals>.InCellPhase.startTagOtherc                 S   s²   | j j|d dd�r˜| j  |d ¡ | j jd j|d krp| j dd|d i¡ | j j ¡ }|j|d krPq|qPn| j j ¡  | j  ¡  | jj	d | j_
n| j dd|d i¡ d S )NrA   r«   rA  rw   zunexpected-cell-end-tagrš   r  )r?   rC  rz  r~   rA   rM   r   rÎ   r˜  rJ   ra   r  r(   r(   r)   r  Â  s    
ÿ
z.getPhases.<locals>.InCellPhase.endTagTableCellc                 S   s   | j  dd|d i¡ d S r
  rÈ   r•   r(   r(   r)   rÖ  Ó  s    z+getPhases.<locals>.InCellPhase.endTagIgnorec                 S   s.   | j j|d dd�r |  ¡  |S | j ¡  d S )NrA   r«   rA  )r?   rC  r  rM   r   r•   r(   r(   r)   ÚendTagImplyÖ  s    z*getPhases.<locals>.InCellPhase.endTagImplyc                 S   s   | j jd  |¡S rì   rì  r•   r(   r(   r)   rò   Þ  s    z*getPhases.<locals>.InCellPhase.endTagOtherr¯   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(   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 d” jfdefdefde	fde
fdefg¡Zee_e 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 d¡ n| jjs,J ‚d S )Nrw   r¯   zeof-in-selectrÈ  rC   r(   r(   r)   r‹   ó  s    z+getPhases.<locals>.InSelectPhase.processEOFc                 S   s$   |d dkrd S | j  |d ¡ d S rà  rÊ   r•   r(   r(   r)   r„   ù  s    z2getPhases.<locals>.InSelectPhase.processCharactersc                 S   s.   | j jd jdkr| j j ¡  | j  |¡ d S rt  ©r?   r~   rA   rÎ   rµ   r•   r(   r(   r)   ÚstartTagOptionþ  s    z/getPhases.<locals>.InSelectPhase.startTagOptionc                 S   sL   | j jd jdkr| j j ¡  | j jd jdkr<| j j ¡  | j  |¡ d S )Nrw   ru  r€  r  r•   r(   r(   r)   ÚstartTagOptgroup	  s
    z1getPhases.<locals>.InSelectPhase.startTagOptgroupc                 S   s   | j  d¡ |  tdƒ¡ d S )Nzunexpected-select-in-selectr¢   )rM   r   ÚendTagSelectrã   r•   r(   r(   r)   rx  	  s    z/getPhases.<locals>.InSelectPhase.startTagSelectc                 S   s>   | j  d¡ | jjddd�r.|  tdƒ¡ |S | j js:J ‚d S )Nzunexpected-input-in-selectr¢   rA  )rM   r   r?   rC  r  rã   rT   r•   r(   r(   r)   r`  	  s
    z.getPhases.<locals>.InSelectPhase.startTagInputc                 S   s   | j jd  |¡S r  rí   r•   r(   r(   r)   r  	  s    z/getPhases.<locals>.InSelectPhase.startTagScriptc                 S   s   | j  dd|d i¡ d S )Nzunexpected-start-tag-in-selectrA   rÈ   r•   r(   r(   r)   rð   	  s    
ÿz.getPhases.<locals>.InSelectPhase.startTagOtherc                 S   s6   | j jd jdkr | j j ¡  n| j dddi¡ d S )Nrw   ru  úunexpected-end-tag-in-selectrA   ©r?   r~   rA   rÎ   rM   r   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d jdkrP| j j ¡  n| j dddi¡ d S )Nrw   ru  éþÿÿÿr€  r  rA   r  r•   r(   r(   r)   ÚendTagOptgroup%	  s    ÿÿz/getPhases.<locals>.InSelectPhase.endTagOptgroupc                 S   sZ   | j jddd�r@| j j ¡ }|jdkr4| j j ¡ }q| j ¡  n| jjsLJ ‚| j ¡  d S )Nr¢   rA  )	r?   rC  r~   rÎ   rA   rM   rc   rT   r   r  r(   r(   r)   r  2	  s    
z-getPhases.<locals>.InSelectPhase.endTagSelectc                 S   s   | j  dd|d i¡ d S )Nr  rA   rÈ   r•   r(   r(   r)   rò   =	  s    
ÿz,getPhases.<locals>.InSelectPhase.endTagOtherr¯   ru  r€  r¢   )rn  r¼  r3  r  N)r:   r;   r<   rá   r×   r‹   r„   r  r  rx  r`  r  rð   r  r  r  rò   r   ró   rÕ   rÍ   rô   rÖ   r(   rØ  r(   r)   ÚInSelectPhaseï  s8   úý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
e defg¡Zee_e de	fg¡Ze
e_dS )z'getPhases.<locals>.InSelectInTablePhasec                 S   s   | j jd  ¡  d S ©Nr˜   rä  rC   r(   r(   r)   r‹   U	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc                 S   s   | j jd  |¡S r  rå  r•   r(   r(   r)   r„   X	  s    z9getPhases.<locals>.InSelectInTablePhase.processCharactersc                 S   s(   | j  dd|d i¡ |  tdƒ¡ |S )Nz5unexpected-table-element-start-tag-in-select-in-tablerA   r¢   )rM   r   rò   rã   r•   r(   r(   r)   r]  [	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec                 S   s   | j jd  |¡S r  rí   r•   r(   r(   r)   rð   `	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagOtherc                 S   s@   | j  dd|d i¡ | jj|d dd�r<|  tdƒ¡ |S d S )Nz3unexpected-table-element-end-tag-in-select-in-tablerA   r«   rA  r¢   )rM   r   r?   rC  rò   rã   r•   r(   r(   r)   rÕ  c	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec                 S   s   | j jd  |¡S r  rì  r•   r(   r(   r)   rò   i	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOther)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)   ÚInSelectInTablePhaseR	  s&   ÿÿÿÿr  c                       sB   e Zd Zeƒ Zeg d¢ƒZdd„ Z‡ fdd„Zdd„ Z	dd	„ Z
d
S )z(getPhases.<locals>.InForeignContentPhase),r®  r¯  rœ  r­   rç   r�  r°  r-  r*   r   r.  r±  r»  Zh1Zh2Zh3Zh4Zh5Zh6r¬   rj  r³  rd  r/  r2  r¨  r4   rW  rª  r'   r1  ry  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& |v rj||d&  |d&< d S )'NZaltGlyphZaltGlyphDefZaltGlyphItemZanimateColorZanimateMotionZanimateTransformZclipPathZfeBlendZfeColorMatrixZfeComponentTransferZfeCompositeZfeConvolveMatrixZfeDiffuseLightingZfeDisplacementMapZfeDistantLightZfeFloodZfeFuncAZfeFuncBZfeFuncGZfeFuncRZfeGaussianBlurZfeImageZfeMergeZfeMergeNodeZfeMorphologyZfeOffsetZfePointLightZfeSpecularLightingZfeSpotLightZfeTileZfeTurbulenceZforeignObjectZglyphRefZlinearGradientZradialGradientZtextPath)$ZaltglyphZaltglyphdefZaltglyphitemZanimatecolorZanimatemotionZanimatetransformZclippathZfeblendZfecolormatrixZfecomponenttransferZfecompositeZfeconvolvematrixZfediffuselightingZfedisplacementmapZfedistantlightZfefloodZfefuncaZfefuncbZfefuncgZfefuncrZfegaussianblurZfeimageZfemergeZfemergenodeZfemorphologyZfeoffsetZfepointlightZfespecularlightingZfespotlightZfetileZfeturbulenceZforeignobjectZglyphrefZlineargradientZradialgradientZtextpathrA   r(   )rD   rŒ   Úreplacementsr(   r(   r)   ÚadjustSVGTagNames„	  sN    Ý%z:getPhases.<locals>.InForeignContentPhase.adjustSVGTagNamesc                    sL   |d dkrd|d< n&| j jr<tdd„ |d D ƒƒr<d| j _ˆ  | |¡ d S )Nrx   r6  u   ï¿½c                 s   s   | ]}|t vV  qd S r-   r7  r8  r(   r(   r)   Ú	<genexpr>±	  rF   zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rM   rd   r;  r„   r•   rØ  r(   r)   r„   ­	  s    
ÿz:getPhases.<locals>.InForeignContentPhase.processCharactersc                 S   s(  | j jd }|d | jv s>|d dkr¤t|d  ¡ ƒh d£@ r¤| j dd|d i¡ | j jd j| j jkr | j 	| j jd ¡s | j 
| j jd ¡s | j j ¡  qT|S |jtd krÀ| j |¡ n$|jtd krä|  |¡ | j |¡ | j |¡ |j|d	< | j  |¡ |d
 �r$| j j ¡  d|d< d S )Nrw   rA   r²  rx   >   ÚsizeZfaceÚcolorz*unexpected-html-element-in-foreign-contentri   rz   rk   r|   Tr}   )r?   r~   ÚbreakoutElementsÚsetÚkeysrM   r   rk   r‚   rp   rq   rÎ   r   r   r  r   r   rµ   )rD   rŒ   rŽ   r(   r(   r)   r†   µ	  s:    
ÿþ
ÿÿþý


z8getPhases.<locals>.InForeignContentPhase.processStartTagc                 S   sè   t | jjƒd }| jjd }|j t¡|d krF| j dd|d i¡ |j t¡|d kr¬| jj| jj	d krˆ| jj 
¡  | jjj| j_| jj ¡ |kr¦| jjsˆJ ‚qˆd }qä|d8 }| jj| }|j| jjkrÒqFqF| jj |¡}qäqF|S )Nr   rw   rA   r  rÊ  )r�   r?   r~   rA   rm   r   rM   r   ra   rJ   rÞ  r¶   rÎ   rk   r‚   r‡   )rD   rŒ   Z	nodeIndexr±   r�   r(   r(   r)   r‡   Ð	  s&    z6getPhases.<locals>.InForeignContentPhase.processEndTagN)r:   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 defg¡Ze	e_e de
fg¡Zee_dS )z!getPhases.<locals>.AfterBodyPhasec                 S   s   d S r-   r(   rC   r(   r(   r)   r‹   í	  s    z,getPhases.<locals>.AfterBodyPhase.processEOFc                 S   s   | j  || j jd ¡ d S )Nr   rÆ   r•   r(   r(   r)   rˆ   ñ	  s    z0getPhases.<locals>.AfterBodyPhase.processCommentc                 S   s    | j  d¡ | j jd | j _|S )Nzunexpected-char-after-bodyrŸ   ©rM   r   rJ   ra   r•   r(   r(   r)   r„   ö	  s    z3getPhases.<locals>.AfterBodyPhase.processCharactersc                 S   s   | j jd  |¡S rì   rí   r•   r(   r(   r)   rÕ   û	  s    z.getPhases.<locals>.AfterBodyPhase.startTagHtmlc                 S   s*   | j  dd|d i¡ | j jd | j _|S )Nzunexpected-start-tag-after-bodyrA   rŸ   r$  r•   r(   r(   r)   rð   þ	  s
    
ÿz/getPhases.<locals>.AfterBodyPhase.startTagOtherc                 S   s*   | j jr| j  d¡ n| j jd | j _d S )Nz'unexpected-end-tag-after-body-innerhtmlÚafterAfterBody)rM   rT   r   rJ   ra   )rD   rA   r(   r(   r)   r‡  
  s    z,getPhases.<locals>.AfterBodyPhase.endTagHtmlc                 S   s*   | j  dd|d i¡ | j jd | j _|S )Nzunexpected-end-tag-after-bodyrA   rŸ   r$  r•   r(   r(   r)   rò   

  s
    
ÿz-getPhases.<locals>.AfterBodyPhase.endTagOtherr¯   N)r:   r;   r<   rá   r×   r‹   rˆ   r„   rÕ   rð   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 d” jfdefdefde	fg¡Ze
e_e defg¡Zee_dS )z"getPhases.<locals>.InFramesetPhasec                 S   s0   | j jd jdkr | j d¡ n| jjs,J ‚d S )Nrw   r¯   zeof-in-framesetrÈ  rC   r(   r(   r)   r‹   
  s    z-getPhases.<locals>.InFramesetPhase.processEOFc                 S   s   | j  d¡ d S )Nzunexpected-char-in-framesetrÈ   r•   r(   r(   r)   r„   "
  s    z4getPhases.<locals>.InFramesetPhase.processCharactersc                 S   s   | j  |¡ d S r-   )r?   rµ   r•   r(   r(   r)   r!  %
  s    z3getPhases.<locals>.InFramesetPhase.startTagFramesetc                 S   s   | j  |¡ | j j ¡  d S r-   rø   r•   r(   r(   r)   ÚstartTagFrame(
  s    z0getPhases.<locals>.InFramesetPhase.startTagFramec                 S   s   | j jd  |¡S rì   rí   r•   r(   r(   r)   ÚstartTagNoframes,
  s    z3getPhases.<locals>.InFramesetPhase.startTagNoframesc                 S   s   | j  dd|d i¡ d S )Nz unexpected-start-tag-in-framesetrA   rÈ   r•   r(   r(   r)   rð   /
  s    
ÿz0getPhases.<locals>.InFramesetPhase.startTagOtherc                 S   sZ   | j jd jdkr | j d¡ n| j j ¡  | jjsV| j jd jdkrV| jjd | j_d S )Nrw   r¯   z)unexpected-frameset-in-frameset-innerhtmlr®   ÚafterFrameset)	r?   r~   rA   rM   r   rÎ   rT   rJ   ra   r•   r(   r(   r)   ÚendTagFrameset3
  s    ÿz1getPhases.<locals>.InFramesetPhase.endTagFramesetc                 S   s   | j  dd|d i¡ d S )Nzunexpected-end-tag-in-framesetrA   rÈ   r•   r(   r(   r)   rò   ?
  s    
ÿz.getPhases.<locals>.InFramesetPhase.endTagOtherr¯   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Ø  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 d” jfdefg¡Zee_e de	fg¡Ze
e_dS )z%getPhases.<locals>.AfterFramesetPhasec                 S   s   d S r-   r(   rC   r(   r(   r)   r‹   T
  s    z0getPhases.<locals>.AfterFramesetPhase.processEOFc                 S   s   | j  d¡ d S )Nzunexpected-char-after-framesetrÈ   r•   r(   r(   r)   r„   X
  s    z7getPhases.<locals>.AfterFramesetPhase.processCharactersc                 S   s   | j jd  |¡S r  rí   r•   r(   r(   r)   r(  [
  s    z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc                 S   s   | j  dd|d i¡ d S )Nz#unexpected-start-tag-after-framesetrA   rÈ   r•   r(   r(   r)   rð   ^
  s    
ÿz3getPhases.<locals>.AfterFramesetPhase.startTagOtherc                 S   s   | j jd | j _d S )NÚafterAfterFrameset)rM   rJ   ra   r•   r(   r(   r)   r‡  b
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc                 S   s   | j  dd|d i¡ d S )Nz!unexpected-end-tag-after-framesetrA   rÈ   r•   r(   r(   r)   rò   e
  s    
ÿz1getPhases.<locals>.AfterFramesetPhase.endTagOtherr¯   r  N)r:   r;   r<   rá   r×   r‹   r„   r(  rð   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 de	fg¡Ze
e_dS )z&getPhases.<locals>.AfterAfterBodyPhasec                 S   s   d S r-   r(   rC   r(   r(   r)   r‹   w
  s    z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc                 S   s   | j  || j j¡ d S r-   rÙ   r•   r(   r(   r)   rˆ   z
  s    z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc                 S   s   | j jd  |¡S rì   r  r•   r(   r(   r)   r…   }
  s    z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharactersc                 S   s    | j  d¡ | j jd | j _|S )Núexpected-eof-but-got-charrŸ   r$  r•   r(   r(   r)   r„   €
  s    z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc                 S   s   | j jd  |¡S rì   rí   r•   r(   r(   r)   rÕ   …
  s    z3getPhases.<locals>.AfterAfterBodyPhase.startTagHtmlc                 S   s*   | j  dd|d i¡ | j jd | j _|S )Núexpected-eof-but-got-start-tagrA   rŸ   r$  r•   r(   r(   r)   rð   ˆ
  s
    
ÿz4getPhases.<locals>.AfterAfterBodyPhase.startTagOtherc                 S   s*   | j  dd|d i¡ | j jd | j _|S )Núexpected-eof-but-got-end-tagrA   rŸ   r$  r•   r(   r(   r)   r‡   Ž
  s
    
ÿz4getPhases.<locals>.AfterAfterBodyPhase.processEndTagr¯   N)r:   r;   r<   rá   r×   r‹   rˆ   r…   r„   rÕ   rð   r‡   r   ró   rÍ   rô   r(   r(   r(   r)   ÚAfterAfterBodyPhaset
  s   ÿr1  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 de	fde
fg¡Zee_dS )z*getPhases.<locals>.AfterAfterFramesetPhasec                 S   s   d S r-   r(   rC   r(   r(   r)   r‹   œ
  s    z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc                 S   s   | j  || j j¡ d S r-   rÙ   r•   r(   r(   r)   rˆ   Ÿ
  s    z9getPhases.<locals>.AfterAfterFramesetPhase.processCommentc                 S   s   | j jd  |¡S rì   r  r•   r(   r(   r)   r…   ¢
  s    zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc                 S   s   | j  d¡ d S )Nr.  rÈ   r•   r(   r(   r)   r„   ¥
  s    z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc                 S   s   | j jd  |¡S rì   rí   r•   r(   r(   r)   rÕ   ¨
  s    z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc                 S   s   | j jd  |¡S r  rí   r•   r(   r(   r)   ÚstartTagNoFrames«
  s    z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc                 S   s   | j  dd|d i¡ d S )Nr/  rA   rÈ   r•   r(   r(   r)   rð   ®
  s    
ÿz8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc                 S   s   | j  dd|d i¡ d S )Nr0  rA   rÈ   r•   r(   r(   r)   r‡   ²
  s    
ÿz8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagr¯   r  N)r:   r;   r<   rá   r×   r‹   rˆ   r…   r„   rÕ   r2  rð   r‡   r   ró   rÍ   rô   r(   r(   r(   r)   ÚAfterAfterFramesetPhase™
  s   þr3  )rX   rW   r¡   rî   r  r  rŸ   r´   rž   rÊ  rœ   r�   r›   rš   r™   r˜   rw  r{   r…  r    r)  r%  r,  )r   )rK   rZ   rÂ   râ   rè   rõ   r  r  r$  rÆ  rÙ  rî  rõ  rÿ  r  r
  r  r  r#  r&  r+  r-  r1  r3  r(   )r(  rÛ  rØ   r)   rI   Œ  sr    H %-f?B     Y! /F@bYLc&r.8$%&érI   c                    sF   t | d ƒt ˆ ƒ@ }|rBt| d ƒ‡ fdd„| d  ¡ D ƒƒ| d< d S )Nrx   c                 3   s"   | ]\}}ˆ   ||¡|fV  qd S r-   )r€   )r@   ÚkÚv©r  r(   r)   r  Ý
  s   ÿz$adjust_attributes.<locals>.<genexpr>)r   r2   r.   )rŒ   r  Zneeds_adjustmentr(   r6  r)   r”   Ú
  s
    
ÿr”   rt   Fc                 C   s   |d u ri }t | | ||dœS )N)r2   rA   rx   r|   )r   )rA   r2   rl   r|   r(   r(   r)   rã   á
  s
    
ÿrã   c                   @   s   e Zd ZdZdS )rv   zError in parsed documentN)r:   r;   r<   r¸   r(   r(   r(   r)   rv   é
  s   rv   )r   T)r*   r   T)rt   NF),Ú
__future__r   r   r   Úsixr   r   r0   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!   ÚmemoizerI   r”   rã   Ú	Exceptionrv   r(   r(   r(   r)   Ú<module>   sN   H

  8
                  _  ÿ
