U
    §òcc¶É ã                   @   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|Ž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(   úN/var/www/html/project/venv/lib/python3.8/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k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   s      z'HTMLParser.__init__.<locals>.<dictcomp>)Ústrictr
   r    r?   ÚerrorsÚ	getPhasesr.   Úphases)rD   r?   rF   r   Údebugr(   rC   r)   Ú__init__]   s    



ÿzHTMLParser.__init__r*   c                 K   sh   || _ || _|| _tj|fd| i|—Ž| _|  ¡  z|  ¡  W n$ tk
rb   |  ¡  |  ¡  Y nX d S )NÚparser)	ÚinnerHTMLModer+   Ú	scriptingr	   ZHTMLTokenizerÚ	tokenizerÚresetÚmainLoopr   )rD   ÚstreamÚ	innerHTMLr+   rN   r%   r(   r(   r)   Ú_parse|   s    zHTMLParser._parsec                 C   sÄ   | j  ¡  d| _g | _g | _d| _| jrœ| 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 ¡  |  ¡  nd| _	| jd | _d | _d | _d| _d S )NFz	no quirksÚ	plaintextÚ
beforeHtmlÚinitialT)r?   rP   ÚfirstStartTagrG   ÚlogÚ
compatModerM   r+   ÚlowerrS   r   rO   ÚrcdataStateÚstater   ÚrawtextStateÚplaintextStaterI   ÚphaseÚinsertHtmlElementÚresetInsertionModeZ	lastPhaseZbeforeRCDataPhaseÚ
framesetOKrC   r(   r(   r)   rP   Š   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

        rO   Nr   )ÚhasattrrO   rR   ÚcharEncodingrA   rC   r(   r(   r)   ÚdocumentEncoding¬   s    
zHTMLParser.documentEncodingc                 C   sJ   |j dkr6|jtd kr6d|jko4|jd  t¡dkS |j|j ftk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kS r-   )rj   rA   r   rm   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 k	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ƒksb|||fksb|td krF|dkrF||krF|d dksb|  |¡rj||||fk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|ks,t‚q,d S )NÚ
CharactersZSpaceCharactersÚStartTagÚEndTagÚCommentZDoctypeÚ
ParseErroréÿÿÿÿr2   ÚdataÚdatavarsr   rA   ZmglyphZ
malignmarkrh   rg   ÚsvgÚinForeignContentÚselfClosingÚselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   rO   r?   ÚopenElementsrj   rA   Ú
parseErrorÚgetÚlenÚdefaultNamespacerp   Ú	frozensetr   ro   r`   rI   ÚprocessCharactersÚprocessSpaceCharactersÚprocessStartTagÚprocessEndTagÚprocessCommentÚprocessDoctypeÚappendÚ
processEOFÚAssertionError)rD   ZCharactersTokenZSpaceCharactersTokenZStartTagTokenZEndTagTokenZCommentTokenZDoctypeTokenZParseErrorTokenÚtokenZ
prev_tokenÚ	new_tokenÚcurrentNodeZcurrentNodeNamespaceZcurrentNodeNamer2   r`   Z	reprocessrI   r(   r(   r)   rQ   Ã   sŠ    

ÿþýü
û
úùø	
÷
öõ





ÿ
ÿ
zHTMLParser.mainLoopc                 O   s    | j |ddf|ž|Ž | 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)rT   r?   ZgetDocument©rD   rR   Úargsr%   r(   r(   r)   r"     s    zHTMLParser.parsec                 O   s   | j |df|ž|Ž | 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)rT   r?   ZgetFragmentr   r(   r(   r)   r,     s    zHTMLParser.parseFragmentúXXX-undefined-errorc                 C   s@   |d kri }| j  | jj ¡ ||f¡ | jr<tt| | ƒ‚d S r-   )rG   r‰   rO   rR   ÚpositionrF   ru   r   )rD   Ú	errorcoderx   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-   )rL   r`   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`t‚d}| j}|dkr|| js|t‚|s|j| j jkrq8||k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Úhtmlrv   r   T)r¢   rª   r¬   r¯   )	r?   r}   rA   rS   r‹   rj   r   rI   r`   )rD   ÚlastZnewModesÚnodeZnodeNameZ	new_phaser(   r(   r)   rb   P  sD    ò


zHTMLParser.resetInsertionModec                 C   sR   |dkst ‚| j |¡ |dkr.| jj| j_n| jj| j_| j| _| j	d | _d S )N)ÚRAWTEXTÚRCDATAr²   Útext)
r‹   r?   ÚinsertElementrO   r^   r]   r\   r`   ÚoriginalPhaserI   )rD   rŒ   ZcontentTyper(   r(   r)   ÚparseRCDataRawtext|  s    zHTMLParser.parseRCDataRawtext)NFTF)Fr*   F)r‘   N)r:   r;   r<   Ú__doc__rK   rT   rP   Úpropertyrf   ro   rp   rQ   r"   r,   r~   r   r   r   r—   rb   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     s      z*getPhases.<locals>.log.<locals>.<dictcomp>c                    sš   ˆ 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 |f¡ ˆ | f|ž|ŽS ˆ | f|ž|ŽS d S )NÚprocessr   r2   rA   )r:   Ú
startswithr€   r   rL   rY   r‰   rO   r]   r`   Ú	__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)   rY   Ž  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
        )rL   r?   Z__startTagCacheZ__endTagCachec                 S   s   || _ || _i | _i | _d S r-   )rL   r?   Ú_Phase__startTagCacheÚ_Phase__endTagCache)rD   rL   r?   r(   r(   r)   rK   ¯  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 )Nrv   ©r?   ÚinsertCommentr}   r•   r(   r(   r)   r‡   ¸  s    z'getPhases.<locals>.Phase.processCommentc                 S   s   | j  d¡ d S )Nzunexpected-doctype©rL   r~   r•   r(   r(   r)   rˆ   ½  s    z'getPhases.<locals>.Phase.processDoctypec                 S   s   | j  |d ¡ d S ©Nrw   ©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 k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kr,|| jjd j|< q,d| j _d S )NrA   r¯   znon-html-rootrw   r   F)rL   rX   r~   r.   r?   r}   rk   ©rD   rŒ   Úattrr»   r(   r(   r)   ÚstartTagHtml×  s    z%getPhases.<locals>.Phase.startTagHtmlc                 S   sj   |d }|| j k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__rK   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 k	s@|d k	rL|dkrL| j  d¡ |d krXd}| j |¡ |dkrv| t¡}|rº|d dksº| d	¡sº|d
ksº| d¡rª|d ksº|rÄ| ¡ dkrÄd| j _n$| d¡sà| d¡rè|d k	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 quirksrV   )rL   r~   r?   ZinsertDoctyperl   r   r½   r[   rZ   rI   r`   )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Þ   rV   )rL   rZ   rI   r`   rC   r(   r(   r)   ÚanythingElseZ  s    z,getPhases.<locals>.InitialPhase.anythingElsec                 S   s   | j  d¡ |  ¡  |S )Nzexpected-doctype-but-got-chars©rL   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¯   rr   r¡   )r?   Z
insertRootÚimpliedTagTokenrL   rI   r`   rC   r(   r(   r)   ra   x  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc                 S   s   |   ¡  dS ©NT©ra   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)rL   rX   ra   r•   r(   r(   r)   r…   ‹  s    z2getPhases.<locals>.BeforeHtmlPhase.processStartTagc                 S   s4   |d dkr$| j  dd|d i¡ n|  ¡  |S d S )NrA   ©r¬   r­   r¯   Úbrzunexpected-end-tag-before-html)rL   r~   ra   r•   r(   r(   r)   r†   ‘  s    
ÿz0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)r:   r;   r<   rá   r×   ra   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¬   rr   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¬   rr   ré   r•   r(   r(   r)   rƒ   £  s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc                 S   s   | j jd  |¡S ©NrŸ   ©rL   rI   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 )Nrv   ÚinHead)r?   rµ   r}   ÚheadPointerrL   rI   r`   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|krZ| jjj |d ¡ nVd|kr°d|kr°|d  	¡ d	kr°t
 |d  d
¡¡}t
 |¡}| ¡ }| jjj |¡ d S )NTr|   rw   r   Z	tentativeÚcharsetÚcontentz
http-equivzcontent-typezutf-8)r?   rµ   r}   rÎ   rL   rO   rR   re   ZchangeEncodingr[   r   ZEncodingBytesÚencodeZContentAttrParserr"   )rD   rŒ   rk   rw   rL   Úcodecr(   r(   r)   ÚstartTagMetaÝ  s     ÿþ
z+getPhases.<locals>.InHeadPhase.startTagMetac                 S   s   | j  |d¡ d S )Nr³   ©rL   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)rL   rN   r·   r?   rµ   rI   r`   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µ   rL   rO   ZscriptDataStater]   r`   r¶   rI   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&td|j ƒ‚| j jd | j _d S )Nr¬   zExpected head got %sÚ	afterHead©rL   r?   r}   rÎ   rA   r‹   rI   r`   ©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î   )rL   rI   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  ©rL   rI   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&t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Ÿ   )rL   rc   r?   rµ   rI   r`   r•   r(   r(   r)   ÚstartTagBodyy  s    z.getPhases.<locals>.AfterHeadPhase.startTagBodyc                 S   s    | j  |¡ | jjd | j_d S )Nr    )r?   rµ   rL   rI   r`   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î   rv   r¬   )
rL   r~   r?   r}   r‰   rï   rI   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­   rr   rŸ   T)r?   rµ   rã   rL   rI   r`   rc   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de$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||Ž | j| _d S r-   )ÚsuperrK   ÚprocessSpaceCharactersNonPrer„   ©rD   r   r%   )ÚInBodyPhaser¾   r(   r)   rK   ²  s    z'getPhases.<locals>.InBodyPhase.__init__c                 S   s$   |j |j ko"|j|jko"|j|jkS r-   )rA   rj   rk   )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kr@ qXq.|  ||¡r.| |¡ q.t|ƒdksht‚t|ƒdkr†| j j 	|d ¡ | j j |¡ d S )Nrv   é   )
r?   rµ   r}   ÚactiveFormattingElementsr   r)  r‰   r€   r‹   r"  )rD   rŒ   rn   ZmatchingElementsr±   r(   r(   r)   ÚaddFormattingElement½  s    z3getPhases.<locals>.InBodyPhase.addFormattingElementc                 S   s>   t dƒ}| jjd d d… D ]}|j|kr| j d¡  q:qd S )N)ÚddÚdtÚlir'   r¦   r£   r¨   r¤   r§   r¥   r­   r¯   rv   z expected-closing-tag-but-got-eof)r‚   r?   r}   rA   rL   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krH| jjd  ¡ sH|dd … }|rb| j ¡  | j |¡ d S )Nrw   Ú
rv   )ÚpreÚlistingÚtextarear   )	r&  r„   r½   r?   r}   rA   Z
hasContentÚ#reconstructActiveFormattingElementsrË   )rD   rŒ   rw   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 )Nrw   ú c                 S   s   g | ]}|t k‘qS r(   ©r   ©r@   Úcharr(   r(   r)   Ú
<listcomp>í  s   ÿzDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r?   r4  rË   rL   rc   Ú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„t‚nBd| j _|d  	¡ D ],\}}|| jjd j
krV|| jjd j
|< qVd S )Nr  rA   r­   r   Frw   )rL   r~   r€   r?   r}   rA   rS   r‹   rc   r.   rk   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²t‚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­   rv   r¯   r    )rL   r~   r€   r?   r}   rA   rS   r‹   rc   ÚparentÚremoveChildrÎ   rµ   rI   r`   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µ   rL   rc   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  rv   )	r?   ÚformPointerrL   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|kr^| j j t|jdƒ¡  qx|j	t
kr6|jdkr6 qxq6| jjd	d
drœ| j j td	dƒ¡ | j |¡ d S )NFr/  r.  r-  )r/  r.  r-  rA   rs   )Úaddressr*   r'   r'   r@  rA  )rL   rc   Úreversedr?   r}   rA   r`   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µ   rL   rO   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krR| j dd|d i¡ | j j 	¡  | j  
|¡ d S )Nr'   r@  rA  rv   r  rA   )r?   rC  rD  rã   r}   rA   r   rL   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krL| j j |¡ || j jkrf| j j |¡ | j  	¡  |  
|¡ d S )NÚaú$unexpected-start-tag-implies-end-tag©Z	startNameZendName)r?   Ú!elementInActiveFormattingElementsrL   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  rL   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  rL   r~   r†   rã   r4  rµ   rc   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   rL   rc   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  rL   rc   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ž   )
rL   rZ   r?   rC  r†   rã   rµ   rc   rI   r`   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Î   rL   rc   r•   r(   r(   r)   ÚstartTagVoidFormatting…  s
    
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc                 S   s@   | j j}|  |¡ d|d kr<|d d  t¡dkr<|| j _d S )Nr2   rw   Úhidden)rL   rc   r^  rl   r   )rD   rŒ   rc   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Î   rL   rc   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newNamerr   rw   r{   ©rk   r{   )rL   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 kr>|d d |d< |  tdd|d¡ |  td	dƒ¡ |  td
dƒ¡ d|d krŒ|d d }nd}|  td |dœ¡ |d  ¡ }d|kr¾|d= d|krÌ|d= d|d< |  tdd||d d¡ |  	td
ƒ¡ |  td	dƒ¡ |  	tdƒ¡ d S )Nzdeprecated-tagrA   ÚisindexÚactionrw   rG  rr   )rk   ÚhrÚlabelÚpromptz3This is a searchable index. Enter search keywords: rq   ©r2   rw   Úinputr{   rf  )
rL   r~   r?   rH  r…   rã   rƒ   r   Úcopyr†   )rD   rŒ   Z
form_attrsrl  rk   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µ   rL   rO   r\   r]   r5  r„   rc   r•   r(   r(   r)   ÚstartTagTextareaÈ  s    z/getPhases.<locals>.InBodyPhase.startTagTextareac                 S   s   d| j _|  |¡ d S rZ  )rL   rc   ÚstartTagRawtextr•   r(   r(   r)   ÚstartTagIFrameÎ  s    z-getPhases.<locals>.InBodyPhase.startTagIFramec                 S   s"   | j jr|  |¡ n
|  |¡ d S r-   )rL   rN   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 ©Nrv   Úoption)	r?   r}   rA   rL   r`   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krx| jjd | j_n| jjd	 | j_d S )
NFrž   rœ   r   r›   rš   r™   ÚinSelectInTabler˜   )r?   r4  rµ   rL   rc   r`   rI   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Úrubyrv   )r?   rC  ÚgenerateImpliedEndTagsr}   rA   rL   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 )Nrh   rj   r{   Tr|   )	r?   r4  rL   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 )Nry   rj   r{   Tr|   )	r?   r4  rL   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  rr   r  rA   rs   rv   )r?   rC  rE  rã   rL   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ƒkr<| j dd|jdœ¡  qjq<| jjd | j_d S )Nr­   rv   é   )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  rL   r~   r}   rA   r‚   rI   r`   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  rv   úend-tag-too-early)
r&  r„   r?   rC  rz  r}   rA   rL   r~   rÎ   )rD   rŒ   ZinScoper±   r(   r(   r)   ÚendTagBlockA  s    
z*getPhases.<locals>.InBodyPhase.endTagBlockc                 S   sv   | j j}d | j _|d k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  rv   zend-tag-too-early-ignored)r?   rH  rC  rL   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  ©Úexcluderv   rˆ  )r?   rC  rL   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 krˆ| jj ¡ }qp qŽqTd S )Nrv   rA   rˆ  )	r   r?   rC  rz  r}   rA   rL   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krR| j  |j¡sR|  |¡ dS || j jk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krö|} qqö|dk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k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ƒk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.4rv   zadoption-agency-1.3r*  ©r«   r¦   r¨   r§   r¥   )r?   rS  r}   rC  rA   rò   rL   r~   r+  r"  ÚindexrL  r   rÎ   Z	cloneNoder=  r>  ZappendChildr‚   ZgetTableMisnestedNodePositionÚinsertBeforeZreparentChildrenÚinsert)rD   rŒ   ZouterLoopCounterZformattingElementZafeIndexZfurthestBlockrn   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   rv   rˆ  )	r?   rC  rz  r}   rA   rL   r~   rÎ   ÚclearActiveFormattingElements)rD   rŒ   rn   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  rr   )rL   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kr| j dd|d i¡  q qd S )Nrv   rA   rŒ  r  )	r?   r}   rA   rz  rL   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.  rU   rP  )ÚbÚbigÚcodeÚemÚfontÚiÚsÚsmallÚstrikeÚstrongÚttÚurW  r@  )ZappletZmarqueeÚobjectZxmpr«   )Úarearç   Úembedrd  ÚkeygenZwbr)ÚparamÚsourceÚtrackrn  rj  rc  rh  r3  Ziframer  )Znoembedr  r¢   )r  r‚  )ru  r€  Úmathry   )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×   rK   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   rv   T)rL   r~   r?   r}   rA   rÎ   r¶   r`   rC   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 moderA   )r‹   r•   r(   r(   r)   rð   Ž  s    z*getPhases.<locals>.TextPhase.startTagOtherc                 S   s*   | j j ¡ }|jdkst‚| jj| j_d S )Nr  )r?   r}   rÎ   rA   r‹   rL   r¶   r`   r  r(   r(   r)   ÚendTagScript‘  s    z)getPhases.<locals>.TextPhase.endTagScriptc                 S   s   | j j ¡  | jj| j_d S r-   )r?   r}   rÎ   rL   r¶   r`   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kr | j j ¡  q d S )Nrv   )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,t‚d S )Nrv   r¯   zeof-in-table©r?   r}   rA   rL   r~   rS   r‹   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)rL   r`   rI   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Ê  )rL   r`   rI   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?   ÚinsertFromTablerL   rI   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µ   rL   rI   r`   r•   r(   r(   r)   ÚstartTagCaptionÊ  s    z/getPhases.<locals>.InTablePhase.startTagCaptionc                 S   s(   |   ¡  | j |¡ | jjd | j_d S )Nr   ©rÈ  r?   rµ   rL   rI   r`   r•   r(   r(   r)   ÚstartTagColgroupÐ  s    z0getPhases.<locals>.InTablePhase.startTagColgroupc                 S   s   |   tddƒ¡ |S )Nrª   rr   )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¦   rr   )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  )rL   r~   r`   r†   rã   rS   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 krH|d d   t¡dkrH| j d¡ | j |¡ | jj ¡  n
|  |¡ d S )Nr2   rw   r_  z unexpected-hidden-input-in-table)	rl   r   rL   r~   r?   rµ   r}   rÎ   rð   r•   r(   r(   r)   r`  ì  s    ÿz-getPhases.<locals>.InTablePhase.startTagInputc                 S   sD   | j  d¡ | jjd kr@| j |¡ | jjd | j_| jj ¡  d S )Nzunexpected-form-in-tablerv   )rL   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)rL   r~   r?   rÍ  rI   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Žt
‚| j ¡  d S )Nr«   rA  rv   zend-tag-too-early-namedr„  )r?   rC  rz  r}   rA   rL   r~   rÎ   rb   rS   r‹   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)rL   r~   r?   rÍ  rI   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||Ž d | _g | _d S r-   )r%  rK   r¶   rÛ  r'  )ÚInTableTextPhaser¾   r(   r)   rK   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 )rw   r(   ©r@   r  r(   r(   r)   r:  <  s     zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c                 S   s   g | ]}|t k‘qS r(   r7  rÝ  r(   r(   r)   r:  =  s     rq   rm  rž   )ÚjoinrÛ  r;  r   rL   rI   rË   r?   )rD   rw   rŒ   r(   r(   r)   ÚflushCharacters;  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc                 S   s   |   ¡  | j| j_|S r-   ©rß  r¶   rL   r`   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 ©Nrw   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×   rK   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ì   ©rL   rI   rŠ   rC   r(   r(   r)   rŠ   i  s    z,getPhases.<locals>.InCaptionPhase.processEOFc                 S   s   | j jd  |¡S rì   ©rL   rI   rƒ   r•   r(   r(   r)   rƒ   l  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc                 S   s0   | j  ¡  |  ¡ }| j j tdƒ¡ |s,|S d S ©Nr©   ©rL   r~   rä  r`   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–t‚| j ¡  d S )Nrv   r©   rƒ  r„  rž   )rä  r?   rz  r}   rA   rL   r~   rÎ   r˜  rI   r`   rS   r‹   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ì   ©rL   rI   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 )Nrv   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t‚d S |  ¡ }|  tdƒ¡ |s@dS d S )Nrv   r¯   rª   T)	r?   r}   rA   rL   rS   r‹   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t‚| j ¡  n| jj ¡  | jjd | j_	d S ©Nrž   )
rð  rL   rS   r‹   r~   r?   r}   rÎ   rI   r`   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kr | j j ¡  q | j jd jdkr>| jjs>t‚d S )Nrv   )r¦   r¨   r§   r¯   r¯   )r?   r}   rA   rÎ   rL   rS   r‹   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µ   rL   rI   r`   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¥   rr   )rL   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`t	‚| j 
¡  d S ©Nr¦   r«   rA  r§   r¨   rv   ©r?   rC  r÷  ÚendTagTableRowGrouprã   r}   rA   rL   rS   r‹   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Î   rL   rI   r`   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`t	‚| 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kr<| j dd| j jd ji¡ | j j ¡  q d S )Nrv   )r¥   r¯   z'unexpected-implied-end-tag-in-table-rowrA   )r?   r}   rA   rL   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µ   rL   rI   r`   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:t	‚| j 
¡  d S rÒ  )r  r  r?   r}   rÎ   rL   rI   r`   rS   r‹   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ã   rL   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s8t‚| j ¡  d S r  )r?   rC  r	  rL   rS   r‹   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  rv   zunexpected-cell-end-tagrš   r  )r?   rC  rz  r}   rA   rL   r~   rÎ   r˜  rI   r`   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	  rL   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,t‚d S )Nrv   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 )Nrv   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¢   )rL   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:t‚d S )Nzunexpected-input-in-selectr¢   rA  )rL   r~   r?   rC  r  rã   rS   r‹   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 )Nrv   ru  úunexpected-end-tag-in-selectrA   ©r?   r}   rA   rÎ   rL   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 )Nrv   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sLt‚| j 	¡  d S )Nr¢   rA  )
r?   rC  r}   rÎ   rA   rL   rb   rS   r‹   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¢   )rL   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¢   )rL   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                -       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­   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& |krj||d&  |d&< d S )'NZaltGlyphZaltGlyphDefZaltGlyphItemZanimateColorZanimateMotionZanimateTransformZclipPathZfeBlendZfeColorMatrixZfeComponentTransferZfeCompositeZfeConvolveMatrixZfeDiffuseLightingZfeDisplacementMapZfeDistantLightZfeFloodZfeFuncAZfeFuncBZfeFuncGZfeFuncRZfeGaussianBlurZfeImageZfeMergeZfeMergeNodeZfeMorphologyZfeOffsetZfePointLightZfeSpecularLightingZfeSpotLightZfeTileZfeTurbulenceZforeignObjectZglyphRefZlinearGradientZradialGradientZtextPath)$ZaltglyphZaltglyphdefZaltglyphitemZanimatecolorZanimatemotionZanimatetransformZclippathZfeblendZfecolormatrixZfecomponenttransferZfecompositeZfeconvolvematrixZfediffuselightingZfedisplacementmapZfedistantlightZfefloodZfefuncaZfefuncbZfefuncgZfefuncrZfegaussianblurZfeimageZfemergeZfemergenodeZfemorphologyZfeoffsetZfepointlightZfespecularlightingZfespotlightZfetileZfeturbulenceZforeignobjectZglyphrefZlineargradientZradialgradientZ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 )Nrw   r6  u   ï¿½c                 s   s   | ]}|t kV  qd S r-   r7  r8  r(   r(   r)   Ú	<genexpr>±	  s     zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rL   rc   r;  rƒ   r•   rÙ  r(   r)   rƒ   ­	  s    
ÿz:getPhases.<locals>.InForeignContentPhase.processCharactersc                 S   s*  | j jd }|d | jks@|d dkr¦t|d  ¡ ƒdddh@ 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 ¡  qV|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 )Nrv   rA   r²  rw   ÚcolorZfaceÚsizez*unexpected-html-element-in-foreign-contentrh   ry   rj   r{   Tr|   )r?   r}   ÚbreakoutElementsÚsetÚkeysrL   r~   rj   r   ro   rp   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ˆt‚qˆd }qä|d8 }| jj| }|j| jjkrÒqFqF| jj |¡}qäqF|S )Nr   rv   rA   r  rË  )r€   r?   r}   rA   rl   r   rL   r~   r`   rI   rß  r¶   rÎ   r‹   rj   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Ÿ   ©rL   r~   rI   r`   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)rL   rS   r~   rI   r`   )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,t‚d S )Nrv   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 )Nrv   r¯   z)unexpected-frameset-in-frameset-innerhtmlr®   ÚafterFrameset)	r?   r}   rA   rL   r~   rÎ   rS   rI   r`   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)rL   rI   r`   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   ÿr2  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 )Nr0  rA   rÈ   r•   r(   r(   r)   rð   ®
  s    
ÿz8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc                 S   s   | j  dd|d i¡ d S )Nr1  rA   rÈ   r•   r(   r(   r)   r†   ²
  s    
ÿz8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagr¯   r  N)r:   r;   r<   rá   r×   rŠ   r‡   r„   rƒ   rÕ   r3  rð   r†   r   ró   rÍ   rô   r(   r(   r(   r)   ÚAfterAfterFramesetPhase™
  s   þr4  )rW   rV   r¡   rî   r  r  rŸ   r´   rž   rË  rœ   r   r›   rš   r™   r˜   rw  rz   r…  r    r*  r&  r-  )r   )rJ   rY   rÂ   râ   rè   rõ   r  r  r$  rÇ  rÚ  rï  rö  r   r  r  r  r  r$  r'  r,  r.  r2  r4  r(   )r(  rÜ  rØ   r)   rH   Œ  sr    H %-f?B     Y! /F@bYLc&r.8$%&érH   c                    sF   t | d ƒt ˆ ƒ@ }|rBt| d ƒ‡ fdd„| d  ¡ D ƒƒ| d< d S )Nrw   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(   r7  r)   r”   Ú
  s
    
ÿr”   rs   Fc                 C   s   |d kri }t | | ||dœS )N)r2   rA   rw   r{   )r   )rA   r2   rk   r{   r(   r(   r)   rã   á
  s
    
ÿrã   c                   @   s   e Zd ZdZdS )ru   zError in parsed documentN)r:   r;   r<   r¸   r(   r(   r(   r)   ru   é
  s   ru   )r   T)r*   r   T)rs   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!   ÚmemoizerH   r”   rã   Ú	Exceptionru   r(   r(   r(   r)   Ú<module>   sN   H

  8
                  _  ÿ
