o
    ‹¨Êh§Ð ã                   @   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 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)ÚOrderedDicté   )Ú_inputstream)Ú
_tokenizer)Útreebuilders)ÚMarker)Ú_utils)ÚspaceCharactersÚasciiUpper2LowerÚspecialElementsÚheadingElementsÚcdataElementsÚrcdataElementsÚ
tokenTypesÚtagTokenTypesÚ
namespacesÚhtmlIntegrationPointElementsÚ"mathmlTextIntegrationPointElementsÚadjustForeignAttributesÚadjustMathMLAttributesÚadjustSVGAttributesÚEÚ_ReparseExceptionÚetreeTc                 K   s(   t  |¡}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)   úF/var/www/html/env/lib/python3.10/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-   2   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ÚbasesÚ	classDictÚattributeNameÚ	attribute©Úfunctionr)   r*   r4   M   s
   
z5method_decorator_metaclass.<locals>.Decorated.__new__N)Ú__name__Ú
__module__Ú__qualname__r4   r)   r;   r)   r*   Ú	DecoratedL   s    r@   )r3   )r<   r@   r)   r;   r*   Úmethod_decorator_metaclassK   s   rA   c                   @   sª   e Zd ZdZd+dd„Zd,dd	„Zd
d„ Zedd„ ƒZdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zd-dd„Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ ZdS ).r"   z]HTML parser

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

    NFTc                    sL   |ˆ _ |du rt d¡}||ƒˆ _g ˆ _t‡ 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    g | ]\}}||ˆ ˆ j ƒf‘qS r)   )Útree)Ú.0ÚnameÚcls©Úselfr)   r*   Ú
<listcomp>z   s     z'HTMLParser.__init__.<locals>.<listcomp>)	Ústrictr   r!   rB   ÚerrorsÚdictÚ	getPhasesr/   Úphases)rG   rB   rI   r    Údebugr)   rF   r*   Ú__init__^   s   


ÿzHTMLParser.__init__r+   c                 K   sf   || _ || _|| _tj|fd| i|¤Ž| _|  ¡  z|  ¡  W d S  ty2   |  ¡  |  ¡  Y d S w )NÚparser)	ÚinnerHTMLModer,   Ú	scriptingr
   ÚHTMLTokenizerÚ	tokenizerÚresetÚmainLoopr   )rG   ÚstreamÚ	innerHTMLr,   rR   r&   r)   r)   r*   Ú_parse}   s   þzHTMLParser._parsec                 C   sÆ   | j  ¡  d| _g | _g | _d| _| jrO| j ¡ | _	| j	t
v r&| jj| j_n| j	tv r2| 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)rB   rU   ÚfirstStartTagrJ   ÚlogÚ
compatModerQ   r,   ÚlowerrX   r   rT   ÚrcdataStateÚstater   ÚrawtextStateÚplaintextStaterM   ÚphaseÚinsertHtmlElementÚresetInsertionModeÚ	lastPhaseÚbeforeRCDataPhaseÚ
framesetOKrF   r)   r)   r*   rU   ‹   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

        rT   Nr   )ÚhasattrrT   rW   ÚcharEncodingrD   rF   r)   r)   r*   ÚdocumentEncoding­   s   
zHTMLParser.documentEncodingc                 C   sF   |j dkr|jtd krd|jv o|jd  t¡dv S |j|j ftv S )Núannotation-xmlÚmathmlÚencoding)z	text/htmlzapplication/xhtml+xml)rD   Ú	namespacer   Ú
attributesÚ	translater   r   ©rG   Úelementr)   r)   r*   ÚisHTMLIntegrationPoint·   s   


ÿþÿz!HTMLParser.isHTMLIntegrationPointc                 C   s   |j |jftv S r.   )rq   rD   r   rt   r)   r)   r*   ÚisMathMLTextIntegrationPointÁ   ó   z'HTMLParser.isMathMLTextIntegrationPointc                 C   sT  t d }t d }t d }t d }t d }t d }t d }|  ¡ D ]å}d }	|}
|
d urì|
}	| jjr6| jjd nd }|r=|jnd }|rD|jnd }|
d	 }||kr]|  |
d
 |
 di ¡¡ d }
n‹t| jjƒdks¤|| jj	ks¤|  
|¡r„||kr~|d tddgƒvs¤|||fv s¤|td kr˜|dkr˜||kr˜|d dks¤|  |¡r¨||||fv r¨| j}n| jd }||kr·| |
¡}
n1||krÁ| |
¡}
n'||krË| |
¡}
n||krÕ| |
¡}
n||krß| |
¡}
n	||krè| |
¡}
|
d us*||k�r|	d �r|	d �s|  dd|	d i¡ q d}g }|�r(| | j¡ | j ¡ }|�r#| j|v�s#J ‚|�sd S d S )NÚ
CharactersÚSpaceCharactersÚStartTagÚEndTagÚCommentÚDoctypeÚ
ParseErroréÿÿÿÿr3   ÚdataÚdatavarsr   rD   ÚmglyphÚ
malignmarkro   rn   ÚsvgÚinForeignContentÚselfClosingÚselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   ÚnormalizedTokensrB   ÚopenElementsrq   rD   Ú
parseErrorÚgetÚlenÚdefaultNamespacerw   Ú	frozensetr   rv   re   rM   ÚprocessCharactersÚprocessSpaceCharactersÚprocessStartTagÚprocessEndTagÚprocessCommentÚprocessDoctypeÚappendÚ
processEOF)rG   ÚCharactersTokenÚSpaceCharactersTokenÚStartTagTokenÚEndTagTokenÚCommentTokenÚDoctypeTokenÚParseErrorTokenÚtokenÚ
prev_tokenÚ	new_tokenÚcurrentNodeÚcurrentNodeNamespaceÚcurrentNodeNamer3   re   Ú	reprocessrM   r)   r)   r*   rV   Ä   s~   ÿÿ

Ù)ÿ
ÿ€
üzHTMLParser.mainLoopc                 c   s   � | j D ]}|  |¡V  qd S r.   )rT   ÚnormalizeToken©rG   rŸ   r)   r)   r*   r‰     s   €
ÿzHTMLParser.normalizedTokensc                 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)rY   rB   ÚgetDocument©rG   rW   Ú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)rY   rB   Ú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.   )rJ   r–   rT   rW   ÚpositionrI   r   r   )rG   Ú	errorcoder‚   r)   r)   r*   r‹   @  s   ÿzHTMLParser.parseErrorc                 C   sT   |d t d kr(|d }t|ƒ|d< t|ƒt|d ƒkr(|d  |d d d… ¡ |S )Nr3   r{   r�   r€   )r   r   r�   Úupdate)rG   rŸ   Úrawr)   r)   r*   r¦   H  s   zHTMLParser.normalizeTokenc                 C   ó   t |tƒ d S r.   )Úadjust_attributesr   r§   r)   r)   r*   r   S  ó   z!HTMLParser.adjustMathMLAttributesc                 C   r±   r.   )r²   r   r§   r)   r)   r*   r   V  r³   zHTMLParser.adjustSVGAttributesc                 C   r±   r.   )r²   ÚadjustForeignAttributesMapr§   r)   r)   r*   r   Y  r³   z"HTMLParser.adjustForeignAttributesc                 C   s   | j  ¡  d S r.   )rP   re   r§   r)   r)   r*   ÚreparseTokenNormal\  s   zHTMLParser.reparseTokenNormalc                 C   sÈ   d}ddddddddddd	d	d
ddœ}| j jd d d… D ]B}|j}d }|| j jd kr5| js0J ‚d}| j}|dv r>| js>J ‚|sH|j| j jkrHq||v rU| j||  } n
|r^| jd	 } nq|| _d S )NFÚinSelectÚinCellÚinRowÚinTableBodyÚ	inCaptionÚinColumnGroupÚinTableÚinBodyÚ
inFramesetÚ
beforeHead)ÚselectÚtdÚthÚtrÚtbodyÚtheadÚtfootÚcaptionÚcolgroupÚtableÚheadÚbodyÚframesetÚhtmlr€   r   T)rÀ   rÈ   rÊ   rÍ   )rB   rŠ   rD   rX   rq   rŽ   rM   re   )rG   ÚlastÚnewModesÚnodeÚnodeNameÚ	new_phaser)   r)   r*   rg   `  sF   ò


þ
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)	rB   ÚinsertElementrT   rc   rb   ra   re   ÚoriginalPhaserM   )rG   rŸ   ÚcontentTyper)   r)   r*   ÚparseRCDataRawtextŒ  s   zHTMLParser.parseRCDataRawtext)NFTF)Fr+   F)r¬   N)r=   r>   r?   Ú__doc__rO   rY   rU   Úpropertyrm   rv   rw   rV   r‰   r#   r-   r‹   r¦   r   r   r   rµ   rg   rÙ   r)   r)   r)   r*   r"   W   s*    

"
	
C
,r"   c                    sj  dd„ }dd„ }G dd„ dt || |ƒƒƒ‰ G dd„ dˆ ƒ}G d	d
„ d
ˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}	G ‡ fdd„dˆ ƒ}
G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd „d ˆ ƒ}G ‡ fd!d"„d"ˆ ƒ}G ‡ fd#d$„d$ˆ ƒ}G ‡ fd%d&„d&ˆ ƒ}G ‡ fd'd(„d(ˆ ƒ}G ‡ fd)d*„d*ˆ ƒ}G ‡ fd+d,„d,ˆ ƒ}G ‡ fd-d.„d.ˆ ƒ}G ‡ fd/d0„d0ˆ ƒ}G ‡ fd1d2„d2ˆ ƒ}G ‡ fd3d4„d4ˆ ƒ}i d5|“d6|“d7|“d8|“d9|“d:|“d;|	“d<|
“d=|“d>|“d?|“d@|“dA|“dB|“dC|“dD|“dE|“||||||dFœ¥S )GNc                    s(   t dd„ t ¡ D ƒƒ‰‡ ‡fdd„}|S )z4Logger that records which phase processes each tokenc                 s   s   � | ]	\}}||fV  qd S r.   r)   )rC   ÚkeyÚvaluer)   r)   r*   Ú	<genexpr>   s   € z)getPhases.<locals>.log.<locals>.<genexpr>c                    s°   ˆ j  d¡rMt|ƒdkrM|d }z
dˆ|d  i}W n   ‚ |d tv r+|d |d< | jj | jjjj | jj	j
j | j
j ˆ j |f¡ ˆ | g|¢R i |¤ŽS ˆ | g|¢R i |¤ŽS )NÚprocessr   r3   rD   )r=   Ú
startswithr�   r   rP   r^   r–   rT   rb   re   Ú	__class__)rG   rª   r&   rŸ   Úinfo©r<   Ú
type_namesr)   r*   Úwrapped£  s    
üz'getPhases.<locals>.log.<locals>.wrapped)rK   r   r/   )r<   rå   r)   rã   r*   r^   ž  s
   ÿzgetPhases.<locals>.logc                 S   s   | rt |ƒS tS r.   )rA   r3   )Úuse_metaclassÚmetaclass_funcr)   r)   r*   ÚgetMetaclass·  s   zgetPhases.<locals>.getMetaclassc                   @   sX   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )zgetPhases.<locals>.PhasezNBase class for helper object that implements each phase of processing
        c                 S   s   || _ || _d S r.   )rP   rB   ©rG   rP   rB   r)   r)   r*   rO   Â  s   
z!getPhases.<locals>.Phase.__init__c                 S   s   t ‚r.   )ÚNotImplementedErrorrF   r)   r)   r*   r—   Æ  ó   z#getPhases.<locals>.Phase.processEOFc                 S   ó   | j  || j jd ¡ d S )Nr€   ©rB   ÚinsertCommentrŠ   r§   r)   r)   r*   r”   É  ó   z'getPhases.<locals>.Phase.processCommentc                 S   ó   | j  d¡ d S )Nzunexpected-doctype©rP   r‹   r§   r)   r)   r*   r•   Î  rx   z'getPhases.<locals>.Phase.processDoctypec                 S   ó   | j  |d ¡ d S ©Nr�   ©rB   Ú
insertTextr§   r)   r)   r*   r�   Ñ  ó   z*getPhases.<locals>.Phase.processCharactersc                 S   rò   ró   rô   r§   r)   r)   r*   r‘   Ô  rö   z/getPhases.<locals>.Phase.processSpaceCharactersc                 S   ó   | j |d  |ƒS ©NrD   )ÚstartTagHandlerr§   r)   r)   r*   r’   ×  ó   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 )NrD   rÍ   znon-html-rootr�   r   F)rP   r]   r‹   r/   rB   rŠ   rr   ©rG   rŸ   ÚattrrÝ   r)   r)   r*   ÚstartTagHtmlÚ  s   €z%getPhases.<locals>.Phase.startTagHtmlc                 S   r÷   rø   )ÚendTagHandlerr§   r)   r)   r*   r“   ä  rú   z&getPhases.<locals>.Phase.processEndTagN)r=   r>   r?   rÚ   rO   r—   r”   r•   r�   r‘   r’   rý   r“   r)   r)   r)   r*   ÚPhase¾  s    
rÿ   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )zgetPhases.<locals>.InitialPhasec                 S   ó   d S r.   r)   r§   r)   r)   r*   r‘   è  rë   z6getPhases.<locals>.InitialPhase.processSpaceCharactersc                 S   ó   | j  || j j¡ d S r.   ©rB   rî   Údocumentr§   r)   r)   r*   r”   ë  ó   z.getPhases.<locals>.InitialPhase.processCommentc                 S   sü   |d }|d }|d }|d }|dks |d us |d ur&|dkr&| j  d¡ |d u r,d}| j |¡ |dkr;| t¡}|r]|d dks]| d	¡s]|d
v s]| d¡rU|d u s]|rb| ¡ dkrbd| j _n| d¡sp| d¡rt|d urtd| j _| j j	d | j _
d S )NrD   Ú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 quirksr[   )rP   r‹   rB   ÚinsertDoctypers   r   rà   r`   r_   rM   re   )rG   rŸ   rD   r  r  r  r)   r)   r*   r•   î  sJ   
ÿÿ9ÿýÿ
ÿÿýz.getPhases.<locals>.InitialPhase.processDoctypec                 S   s   d| j _| j jd | j _d S )Nr	  r[   )rP   r_   rM   re   rF   r)   r)   r*   ÚanythingElseM  s   z,getPhases.<locals>.InitialPhase.anythingElsec                 S   ó   | j  d¡ |  ¡  |S )Nzexpected-doctype-but-got-chars©rP   r‹   r  r§   r)   r)   r*   r�   Q  ó   z1getPhases.<locals>.InitialPhase.processCharactersc                 S   ó"   | j  dd|d i¡ |  ¡  |S )Nz"expected-doctype-but-got-start-tagrD   r  r§   r)   r)   r*   r’   V  ó
   
ÿz/getPhases.<locals>.InitialPhase.processStartTagc                 S   r  )Nz expected-doctype-but-got-end-tagrD   r  r§   r)   r)   r*   r“   \  r  z-getPhases.<locals>.InitialPhase.processEndTagc                 S   ó   | j  d¡ |  ¡  dS )Nzexpected-doctype-but-got-eofTr  rF   r)   r)   r*   r—   b  r  z*getPhases.<locals>.InitialPhase.processEOFN)r=   r>   r?   r‘   r”   r•   r  r�   r’   r“   r—   r)   r)   r)   r*   ÚInitialPhaseç  s    _r  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )z"getPhases.<locals>.BeforeHtmlPhasec                 S   s&   | j  tddƒ¡ | jjd | j_d S )NrÍ   r{   r¿   )rB   Ú
insertRootÚimpliedTagTokenrP   rM   re   rF   r)   r)   r*   rf   i  s   z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc                 S   ó   |   ¡  dS ©NT©rf   rF   r)   r)   r*   r—   n  ó   z-getPhases.<locals>.BeforeHtmlPhase.processEOFc                 S   r  r.   r  r§   r)   r)   r*   r”   r  r  z1getPhases.<locals>.BeforeHtmlPhase.processCommentc                 S   r   r.   r)   r§   r)   r)   r*   r‘   u  rë   z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc                 S   ó   |   ¡  |S r.   r  r§   r)   r)   r*   r�   x  r  z4getPhases.<locals>.BeforeHtmlPhase.processCharactersc                 S   s    |d dkr
d| j _|  ¡  |S )NrD   rÍ   T)rP   r]   rf   r§   r)   r)   r*   r’   |  s   z2getPhases.<locals>.BeforeHtmlPhase.processStartTagc                 S   s2   |d dvr| j  dd|d i¡ d S |  ¡  |S )NrD   ©rÊ   rË   rÍ   Úbrzunexpected-end-tag-before-html)rP   r‹   rf   r§   r)   r)   r*   r“   ‚  s   
ÿz0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)
r=   r>   r?   rf   r—   r”   r‘   r�   r’   r“   r)   r)   r)   r*   ÚBeforeHtmlPhaseg  s    r  c                       óX   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )z"getPhases.<locals>.BeforeHeadPhasec                    sV   ˆ   | ||¡ t d| jfd| jfg¡| _| j| j_t d| jfg¡| _	| j
| j	_d S )NrÍ   rÊ   r  )rO   r   ÚMethodDispatcherrý   ÚstartTagHeadrù   ÚstartTagOtherÚdefaultÚendTagImplyHeadrþ   ÚendTagOtherré   ©rÿ   r)   r*   rO   ‹  ó   þ
ÿz+getPhases.<locals>.BeforeHeadPhase.__init__c                 S   s   |   tddƒ¡ dS )NrÊ   r{   T©r  r  rF   r)   r)   r*   r—   ™  ó   z-getPhases.<locals>.BeforeHeadPhase.processEOFc                 S   r   r.   r)   r§   r)   r)   r*   r‘   �  rë   z9getPhases.<locals>.BeforeHeadPhase.processSpaceCharactersc                 S   ó   |   tddƒ¡ |S ©NrÊ   r{   r&  r§   r)   r)   r*   r�      r'  z4getPhases.<locals>.BeforeHeadPhase.processCharactersc                 S   ó   | j jd  |¡S ©Nr½   ©rP   rM   r’   r§   r)   r)   r*   rý   ¤  rú   z/getPhases.<locals>.BeforeHeadPhase.startTagHtmlc                 S   s0   | j  |¡ | j jd | j _| jjd | j_d S )Nr€   ÚinHead)rB   rÖ   rŠ   ÚheadPointerrP   rM   re   r§   r)   r)   r*   r  §  s   z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc                 S   r(  r)  r&  r§   r)   r)   r*   r   ¬  r'  z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc                 S   r(  r)  r&  r§   r)   r)   r*   r"  °  r'  z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc                 S   ó   | j  dd|d i¡ d S )Nzend-tag-after-implied-rootrD   rñ   r§   r)   r)   r*   r#  ´  ó   
ÿz.getPhases.<locals>.BeforeHeadPhase.endTagOtherN)r=   r>   r?   rO   r—   r‘   r�   rý   r  r   r"  r#  r)   r$  r)   r*   ÚBeforeHeadPhaseŠ  s    r1  c                       s�   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!S )"zgetPhases.<locals>.InHeadPhasec                    sŽ   ˆ   | ||¡ t d| jfd| jfd| jfd| jfd| jfd| jfd| j	fd| j
fg¡| _| j| j_t d| jfd	| jfg¡| _| j| j_d S )
NrÍ   Útitle)ÚnoframesÚstyleÚnoscriptÚscript)ÚbaseÚbasefontÚbgsoundÚcommandÚlinkr5   rÊ   )r  rÍ   rË   )rO   r   r  rý   ÚstartTagTitleÚstartTagNoFramesStyleÚstartTagNoscriptÚstartTagScriptÚstartTagBaseLinkCommandÚstartTagMetar  rù   r   r!  Ú
endTagHeadÚendTagHtmlBodyBrrþ   r#  ré   r$  r)   r*   rO   ¹  s&   ÿ÷
þz'getPhases.<locals>.InHeadPhase.__init__c                 S   r  r  ©r  rF   r)   r)   r*   r—   Ð  r  z)getPhases.<locals>.InHeadPhase.processEOFc                 S   r  r.   rD  r§   r)   r)   r*   r�   Ô  r  z0getPhases.<locals>.InHeadPhase.processCharactersc                 S   r*  r+  r,  r§   r)   r)   r*   rý   Ø  rú   z+getPhases.<locals>.InHeadPhase.startTagHtmlc                 S   rð   )Nz!two-heads-are-not-better-than-onerñ   r§   r)   r)   r*   r  Û  rx   z+getPhases.<locals>.InHeadPhase.startTagHeadc                 S   ó$   | j  |¡ | j j ¡  d|d< d S ©NTrˆ   ©rB   rÖ   rŠ   Úpopr§   r)   r)   r*   r@  Þ  ó   z6getPhases.<locals>.InHeadPhase.startTagBaseLinkCommandc                 S   sÆ   | j  |¡ | j j ¡  d|d< |d }| jjjjd dkr[d|v r.| jjj |d ¡ d S d|v r]d|v r_|d  	¡ d	krat
 |d  d
¡¡}t
 |¡}| ¡ }| jjj |¡ d S d S d S d S d S )NTrˆ   r�   r   Ú	tentativeÚcharsetÚcontentz
http-equivzcontent-typezutf-8)rB   rÖ   rŠ   rH  rP   rT   rW   rl   ÚchangeEncodingr`   r	   ÚEncodingBytesÚencodeÚContentAttrParserr#   )rG   rŸ   rr   r�   rP   Úcodecr)   r)   r*   rA  ã  s$   
óz+getPhases.<locals>.InHeadPhase.startTagMetac                 S   ó   | j  |d¡ d S )NrÔ   ©rP   rÙ   r§   r)   r)   r*   r<  ø  rú   z,getPhases.<locals>.InHeadPhase.startTagTitlec                 S   rR  )NrÓ   rS  r§   r)   r)   r*   r=  û  ó   z4getPhases.<locals>.InHeadPhase.startTagNoFramesStylec                 S   s:   | j jr| j  |d¡ d S | j |¡ | j jd | j _d S )NrÓ   ÚinHeadNoscript)rP   rR   rÙ   rB   rÖ   rM   re   r§   r)   r)   r*   r>  ÿ  s   z/getPhases.<locals>.InHeadPhase.startTagNoscriptc                 S   s<   | j  |¡ | jjj| jj_| jj| j_| jjd | j_d S )NrÕ   )	rB   rÖ   rP   rT   ÚscriptDataStaterb   re   r×   rM   r§   r)   r)   r*   r?    s   z-getPhases.<locals>.InHeadPhase.startTagScriptc                 S   r  r.   rD  r§   r)   r)   r*   r     r  z,getPhases.<locals>.InHeadPhase.startTagOtherc                 S   ó:   | j jj ¡ }|jdksJ d|j ƒ‚| j jd | j _d S )NrÊ   zExpected head got %sÚ	afterHead©rP   rB   rŠ   rH  rD   rM   re   ©rG   rŸ   rÐ   r)   r)   r*   rB    ó   z)getPhases.<locals>.InHeadPhase.endTagHeadc                 S   r  r.   rD  r§   r)   r)   r*   rC    r  z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc                 S   r/  ©Núunexpected-end-tagrD   rñ   r§   r)   r)   r*   r#    ó   z*getPhases.<locals>.InHeadPhase.endTagOtherc                 S   ó   |   tdƒ¡ d S )NrÊ   )rB  r  rF   r)   r)   r*   r    rú   z+getPhases.<locals>.InHeadPhase.anythingElseN)r=   r>   r?   rO   r—   r�   rý   r  r@  rA  r<  r=  r>  r?  r   rB  rC  r#  r  r)   r$  r)   r*   ÚInHeadPhase¸  s"    r`  c                       óx   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )z&getPhases.<locals>.InHeadNoscriptPhasec                    sf   ˆ   | ||¡ t d| jfd| jfd| jfg¡| _| j| j_t d| j	fd| j
fg¡| _| j| j_d S )NrÍ   )r8  r9  r;  r5   r3  r4  )rÊ   r5  r5  r  )rO   r   r  rý   r@  ÚstartTagHeadNoscriptrù   r   r!  ÚendTagNoscriptÚendTagBrrþ   r#  ré   r$  r)   r*   rO      s   ý
þz/getPhases.<locals>.InHeadNoscriptPhase.__init__c                 S   r  )Nzeof-in-head-noscriptTr  rF   r)   r)   r*   r—   0  r  z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc                 S   r*  ©Nr-  )rP   rM   r”   r§   r)   r)   r*   r”   5  rú   z5getPhases.<locals>.InHeadNoscriptPhase.processCommentc                 S   r  )Nzchar-in-head-noscriptr  r§   r)   r)   r*   r�   8  r  z8getPhases.<locals>.InHeadNoscriptPhase.processCharactersc                 S   r*  re  ©rP   rM   r‘   r§   r)   r)   r*   r‘   =  rú   z=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharactersc                 S   r*  r+  r,  r§   r)   r)   r*   rý   @  rú   z3getPhases.<locals>.InHeadNoscriptPhase.startTagHtmlc                 S   r*  re  r,  r§   r)   r)   r*   r@  C  rú   z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc                 S   r/  ©Núunexpected-start-tagrD   rñ   r§   r)   r)   r*   rb  F  r^  z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc                 S   r  ©Nzunexpected-inhead-noscript-tagrD   r  r§   r)   r)   r*   r   I  ó   z4getPhases.<locals>.InHeadNoscriptPhase.startTagOtherc                 S   rW  )Nr5  zExpected noscript got %sr-  rY  rZ  r)   r)   r*   rc  N  r[  z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc                 S   r  ri  r  r§   r)   r)   r*   rd  S  rj  z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc                 S   r/  r\  rñ   r§   r)   r)   r*   r#  X  r^  z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc                 S   r_  )Nr5  )rc  r  rF   r)   r)   r*   r  [  rT  z3getPhases.<locals>.InHeadNoscriptPhase.anythingElseN)r=   r>   r?   rO   r—   r”   r�   r‘   rý   r@  rb  r   rc  rd  r#  r  r)   r$  r)   r*   ÚInHeadNoscriptPhase  s    rk  c                       sp   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )z!getPhases.<locals>.AfterHeadPhasec                    sn   ˆ   | ||¡ t d| jfd| jfd| jfd| jfd| jfg¡| _| j	| j_
t d| jfg¡| _| j| j_
d S )NrÍ   rË   rÌ   )	r7  r8  r9  r;  r5   r3  r6  r4  r2  rÊ   )rË   rÍ   r  )rO   r   r  rý   ÚstartTagBodyÚstartTagFramesetÚstartTagFromHeadr  rù   r   r!  rC  rþ   r#  ré   r$  r)   r*   rO   `  s   þù
	
ÿz*getPhases.<locals>.AfterHeadPhase.__init__c                 S   r  r  rD  rF   r)   r)   r*   r—   q  r  z,getPhases.<locals>.AfterHeadPhase.processEOFc                 S   r  r.   rD  r§   r)   r)   r*   r�   u  r  z3getPhases.<locals>.AfterHeadPhase.processCharactersc                 S   r*  r+  r,  r§   r)   r)   r*   rý   y  rú   z.getPhases.<locals>.AfterHeadPhase.startTagHtmlc                 S   s(   d| j _| j |¡ | j jd | j _d S )NFr½   )rP   rj   rB   rÖ   rM   re   r§   r)   r)   r*   rl  |  ó   z.getPhases.<locals>.AfterHeadPhase.startTagBodyc                 S   s    | j  |¡ | jjd | j_d S )Nr¾   )rB   rÖ   rP   rM   re   r§   r)   r)   r*   rm  �  s   z2getPhases.<locals>.AfterHeadPhase.startTagFramesetc                 S   st   | j  dd|d i¡ | jj | jj¡ | j jd  |¡ | jjd d d… D ]}|jdkr7| jj 	|¡  d S q&d S )Nz#unexpected-start-tag-out-of-my-headrD   r-  r€   rÊ   )
rP   r‹   rB   rŠ   r–   r.  rM   r’   rD   ÚremoverZ  r)   r)   r*   rn  …  s   
ÿ
þÿz2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc                 S   r/  rg  rñ   r§   r)   r)   r*   r  �  r^  z.getPhases.<locals>.AfterHeadPhase.startTagHeadc                 S   r  r.   rD  r§   r)   r)   r*   r   ’  r  z/getPhases.<locals>.AfterHeadPhase.startTagOtherc                 S   r  r.   rD  r§   r)   r)   r*   rC  –  r  z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc                 S   r/  r\  rñ   r§   r)   r)   r*   r#  š  r^  z-getPhases.<locals>.AfterHeadPhase.endTagOtherc                 S   s.   | j  tddƒ¡ | jjd | j_d| j_d S )NrË   r{   r½   T)rB   rÖ   r  rP   rM   re   rj   rF   r)   r)   r*   r  �  s   z.getPhases.<locals>.AfterHeadPhase.anythingElseN)r=   r>   r?   rO   r—   r�   rý   rl  rm  rn  r  r   rC  r#  r  r)   r$  r)   r*   ÚAfterHeadPhase_  s    
rq  c                       s¨  e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWdX„ Z.dYdZ„ Z/d[d\„ Z0d]d^„ Z1d_d`„ Z2dadb„ Z3dcdd„ Z4dedf„ Z5dgS )hzgetPhases.<locals>.InBodyPhasec                    sà  ˆ   | ||¡ | j| _t g d| jf‘d| jf‘d| jf‘d| jf‘d| j	f‘t
| jf‘d| jf‘d| jf‘d| jf‘d	| jf‘d
| jf‘d| jf‘d| jf‘d| jf‘d| jf‘d| jf‘d| jf‘d| jf‘d| jf‘d| jf‘d| jf‘d| jf‘d| jf‘d| jf‘d| jf‘d| jf‘d| j f‘d| j!f‘d| j"f‘d| j#f‘d| j$f‘d| j%f‘d | j&f‘¡| _'| j(| j'_)t d| j*fd| j+fd!| j,fd| j-fd"| j.fd#| j/ft
| j0fd$| j1fd| j2fd%| j3fg
¡| _4| j5| j4_)d S )&NrÍ   )	r7  r8  r9  r:  r;  r5   r6  r4  r2  rË   rÌ   )ÚaddressÚarticleÚasideÚ
blockquoteÚcenterÚdetailsÚdirr+   ÚdlÚfieldsetÚ
figcaptionÚfigureÚfooterÚheaderÚhgroupÚmainÚmenuÚnavÚolr(   ÚsectionÚsummaryÚul)ÚpreÚlistingÚform)ÚliÚddÚdtrZ   Úa)ÚbÚbigÚcodeÚemÚfontÚiÚsÚsmallÚstrikeÚstrongÚttÚuÚnobrÚbutton)ÚappletÚmarqueeÚobjectÚxmprÉ   )Úarear  ÚembedÚimgÚkeygenÚwbr)ÚparamÚsourceÚtrackÚinputÚhrÚimageÚisindexÚtextareaÚiframer5  )Únoembedr3  rÀ   )ÚrpÚrt)ÚoptionÚoptgroupÚmathr…   )rÇ   ÚcolrÈ   ÚframerÊ   rÄ   rÁ   rÆ   rÂ   rÅ   rÃ   )rr  rs  rt  ru  r›  rv  rw  Údialogrx  r+   ry  rz  r{  r|  r}  r~  r  rˆ  r€  r�  r‚  rƒ  r‡  r„  r…  r†  r(   )r‹  rŒ  rŠ  )r�  rŽ  r�  r�  r‘  r’  r“  rš  r”  r•  r–  r—  r˜  r™  r  )6rO   ÚprocessSpaceCharactersNonPrer‘   r   r  rý   ÚstartTagProcessInHeadrl  rm  ÚstartTagClosePr   ÚstartTagHeadingÚstartTagPreListingÚstartTagFormÚstartTagListItemÚstartTagPlaintextÚ	startTagAÚstartTagFormattingÚstartTagNobrÚstartTagButtonÚstartTagAppletMarqueeObjectÚstartTagXmpÚstartTagTableÚstartTagVoidFormattingÚstartTagParamSourceÚstartTagInputÚ
startTagHrÚstartTagImageÚstartTagIsIndexÚstartTagTextareaÚstartTagIFramer>  ÚstartTagRawtextÚstartTagSelectÚstartTagRpRtÚstartTagOptÚstartTagMathÚstartTagSvgÚstartTagMisplacedrù   r   r!  Ú
endTagBodyÚ
endTagHtmlÚendTagBlockÚ
endTagFormÚendTagPÚendTagListItemÚendTagHeadingÚendTagFormattingÚendTagAppletMarqueeObjectrd  rþ   r#  ré   r$  r)   r*   rO   ¥  sÂ   ÿþþûúüùôóòñðïÿîìëêéèÿçåäãâá à!ß"Þ#Ý$Ü%Û&Ú'Ù(Ø)þ×
-ýÿòz'getPhases.<locals>.InBodyPhase.__init__c                 S   s$   |j |j ko|j|jko|j|jkS r.   )rD   rq   rr   )rG   Únode1Ú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 n|  ||¡r*| |¡ qt|ƒdks3J ‚t|ƒdkrB| j j |d ¡ | j j |¡ d S )Nr€   é   )	rB   rÖ   rŠ   ÚactiveFormattingElementsr   rà  r–   r�   rp  )rG   rŸ   ru   Ú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¡  d S qd S )N)r‹  rŒ  rŠ  r(   rÄ   rÁ   rÆ   rÂ   rÅ   rÃ   rË   rÍ   r€   z expected-closing-tag-but-got-eof)r�   rB   rŠ   rD   rP   r‹   )rG   Úallowed_elementsrÐ   r)   r)   r*   r—     s   
þÿz)getPhases.<locals>.InBodyPhase.processEOFc                 S   sj   |d }| j | _| d¡r$| jjd jdv r$| jjd  ¡ s$|dd … }|r3| j ¡  | j |¡ d S d S )Nr�   Ú
r€   )r‡  rˆ  r¬  r   )	r·  r‘   rà   rB   rŠ   rD   Ú
hasContentÚ#reconstructActiveFormattingElementsrõ   )rG   rŸ   r�   r)   r)   r*   Ú!processSpaceCharactersDropNewline  s   
ÿ
þz@getPhases.<locals>.InBodyPhase.processSpaceCharactersDropNewlinec                 S   s\   |d dkrd S | j  ¡  | j  |d ¡ | jjr*tdd„ |d D ƒƒr,d| j_d S d S d S )Nr�   ú c                 S   ó   g | ]}|t v‘qS r)   ©r   ©rC   Úcharr)   r)   r*   rH   "  s    ÿzDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)rB   rè  rõ   rP   rj   Úanyr§   r)   r)   r*   r�     s   
ÿÿýz0getPhases.<locals>.InBodyPhase.processCharactersc                 S   s   | j  ¡  | j  |d ¡ d S ró   )rB   rè  rõ   r§   r)   r)   r*   r·  &  s   
z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec                 S   r*  re  r,  r§   r)   r)   r*   r¸  *  rú   z4getPhases.<locals>.InBodyPhase.startTagProcessInHeadc                 S   sŠ   | j  dddi¡ t| jjƒdks| jjd jdkr"| j js J ‚d S d| j _|d  ¡ D ]\}}|| jjd j	vrB|| jjd j	|< q,d S )Nrh  rD   rË   r   Fr�   )
rP   r‹   r�   rB   rŠ   rD   rX   rj   r/   rr   rû   r)   r)   r*   rl  -  s   €þz+getPhases.<locals>.InBodyPhase.startTagBodyc                 S   sÊ   | j  dddi¡ t| jjƒdks| jjd jdkr"| j js J ‚d S | j js(d S | jjd jr=| jjd j 	| jjd ¡ | jjd jdkrU| jj 
¡  | jjd jdksF| j |¡ | j jd | j _d S )	Nrh  rD   rÌ   r   rË   r€   rÍ   r¾   )rP   r‹   r�   rB   rŠ   rD   rX   rj   ÚparentÚremoveChildrH  rÖ   rM   re   r§   r)   r)   r*   rm  8  s   "ÿz/getPhases.<locals>.InBodyPhase.startTagFramesetc                 S   s.   | j jddd�r|  tdƒ¡ | j  |¡ d S ©Nr(   r›  ©Úvariant)rB   ÚelementInScoperÙ  r  rÖ   r§   r)   r)   r*   r¹  F  s   z-getPhases.<locals>.InBodyPhase.startTagClosePc                 S   s>   | j jddd�r|  tdƒ¡ | j  |¡ d| j_| j| _d S )Nr(   r›  ró  F)	rB   rõ  rÙ  r  rÖ   rP   rj   ré  r‘   r§   r)   r)   r*   r»  K  s
   z1getPhases.<locals>.InBodyPhase.startTagPreListingc                 S   s\   | j jr| j dddi¡ d S | j jddd�r|  tdƒ¡ | j  |¡ | j jd | j _d S )Nrh  rD   r‰  r(   r›  ró  r€   )	rB   ÚformPointerrP   r‹   rõ  rÙ  r  rÖ   rŠ   r§   r)   r)   r*   r¼  R  s   z+getPhases.<locals>.InBodyPhase.startTagFormc                 S   s¬   d| j _dgddgddgdœ}||d  }t| jjƒD ] }|j|v r/| j j t|jdƒ¡  n|j	t
v r;|jdvr; nq| jjd	d
d�rN| j j td	dƒ¡ | j |¡ d S )NFrŠ  rŒ  r‹  )rŠ  rŒ  r‹  rD   r|   )rr  r+   r(   r(   r›  ró  )rP   rj   ÚreversedrB   rŠ   rD   re   r“   r  Ú	nameTupler   rõ  rÖ   )rG   rŸ   ÚstopNamesMapÚ	stopNamesrÐ   r)   r)   r*   r½  [  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ò  )	rB   rõ  rÙ  r  rÖ   rP   rT   rd   rb   r§   r)   r)   r*   r¾  q  s   z0getPhases.<locals>.InBodyPhase.startTagPlaintextc                 S   sb   | j jddd�r|  tdƒ¡ | j jd jtv r)| j dd|d i¡ | j j 	¡  | j  
|¡ d S )Nr(   r›  ró  r€   rh  rD   )rB   rõ  rÙ  r  rŠ   rD   r   rP   r‹   rH  rÖ   r§   r)   r)   r*   rº  w  s   z.getPhases.<locals>.InBodyPhase.startTagHeadingc                 S   s~   | j  d¡}|r3| j ddddœ¡ |  tdƒ¡ || j jv r&| j j |¡ || j jv r3| j j |¡ | j  	¡  |  
|¡ d S )Nr�  ú$unexpected-start-tag-implies-end-tag©Ú	startNameÚendName)rB   Ú!elementInActiveFormattingElementsrP   r‹   rÜ  r  rŠ   rp  râ  rè  rä  )rG   rŸ   ÚafeAElementr)   r)   r*   r¿    s   ÿ
z(getPhases.<locals>.InBodyPhase.startTagAc                 S   s   | j  ¡  |  |¡ d S r.   )rB   rè  rä  r§   r)   r)   r*   rÀ  Œ  s   
z1getPhases.<locals>.InBodyPhase.startTagFormattingc                 S   sP   | j  ¡  | j  d¡r!| j ddddœ¡ |  tdƒ¡ | j  ¡  |  |¡ d S )Nrš  rû  rü  )rB   rè  rõ  rP   r‹   r“   r  rä  r§   r)   r)   r*   rÁ  �  s   
ÿ
z+getPhases.<locals>.InBodyPhase.startTagNobrc                 S   sT   | j  d¡r| j ddddœ¡ |  tdƒ¡ |S | j  ¡  | j  |¡ d| j_d S )Nr›  rû  rü  F)	rB   rõ  rP   r‹   r“   r  rè  rÖ   rj   r§   r)   r)   r*   rÂ  š  s   ÿ
z-getPhases.<locals>.InBodyPhase.startTagButtonc                 S   s0   | j  ¡  | j  |¡ | j j t¡ d| j_d S ©NF)rB   rè  rÖ   râ  r–   r   rP   rj   r§   r)   r)   r*   rÃ  ¥  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›  ró  FrÓ   )rB   rõ  rÙ  r  rè  rP   rj   rÙ   r§   r)   r)   r*   rÄ  «  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›  ró  Fr¼   )
rP   r_   rB   rõ  r“   r  rÖ   rj   rM   re   r§   r)   r)   r*   rÅ  ²  s   z,getPhases.<locals>.InBodyPhase.startTagTablec                 S   s6   | j  ¡  | j  |¡ | j j ¡  d|d< d| j_d S )NTrˆ   F)rB   rè  rÖ   rŠ   rH  rP   rj   r§   r)   r)   r*   rÆ  º  s
   
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc                 S   sH   | j j}|  |¡ d|d v r |d d  t¡dkr"|| j _d S d S d S )Nr3   r�   Úhidden)rP   rj   rÆ  rs   r   )rG   rŸ   rj   r)   r)   r*   rÈ  Á  s   
ýz,getPhases.<locals>.InBodyPhase.startTagInputc                 S   rE  rF  rG  r§   r)   r)   r*   rÇ  É  rI  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›  ró  Trˆ   F)	rB   rõ  rÙ  r  rÖ   rŠ   rH  rP   rj   r§   r)   r)   r*   rÉ  Î  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-asrª  r¢  ©ÚoriginalNameÚnewNamer{   r�   r‡   ©rr   r‡   )rP   r‹   r’   r  r§   r)   r)   r*   rÊ  Ö  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 rF|d d }nd}|  td |dœ¡ |d  ¡ }d|v r_|d= d|v rf|d= d|d< |  tdd||d d�¡ |  	td
ƒ¡ |  td	dƒ¡ |  	tdƒ¡ d S )Nzdeprecated-tagrD   r«  Úactionr�   r‰  r{   )rr   r©  ÚlabelÚpromptz3This is a searchable index. Enter search keywords: ry   ©r3   r�   r¨  r‡   r  )
rP   r‹   rB   rö  r’   r  r�   r   Úcopyr“   )rG   rŸ   Ú
form_attrsr	  rr   r)   r)   r*   rË  Þ  s<   
ÿÿ
þz.getPhases.<locals>.InBodyPhase.startTagIsIndexc                 S   s0   | j  |¡ | jjj| jj_| j| _d| j_d S r  )	rB   rÖ   rP   rT   ra   rb   ré  r‘   rj   r§   r)   r)   r*   rÌ  ý  s   z/getPhases.<locals>.InBodyPhase.startTagTextareac                 S   s   d| j _|  |¡ d S r  )rP   rj   rÎ  r§   r)   r)   r*   rÍ    s   z-getPhases.<locals>.InBodyPhase.startTagIFramec                 S   s$   | j jr|  |¡ d S |  |¡ d S r.   )rP   rR   rÎ  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Ó   NrS  r§   r)   r)   r*   rÎ    rT  z.getPhases.<locals>.InBodyPhase.startTagRawtextc                 S   s@   | j jd jdkr| jj tdƒ¡ | j  ¡  | jj  |¡ d S ©Nr€   r±  )	rB   rŠ   rD   rP   re   r“   r  rè  rÖ   r§   r)   r)   r*   rÑ    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 r=| jjd | j_d S | jjd	 | j_d S )
NFr¼   rº   r»   r¹   r¸   r·   ÚinSelectInTabler¶   )rB   rè  rÖ   rP   rj   re   rM   r§   r)   r)   r*   rÏ    s   





ûz-getPhases.<locals>.InBodyPhase.startTagSelectc                 S   sB   | j  d¡r| j  ¡  | j jd jdkr| j ¡  | j  |¡ d S )NÚrubyr€   )rB   rõ  ÚgenerateImpliedEndTagsrŠ   rD   rP   r‹   rÖ   r§   r)   r)   r*   rÐ  %  s
   

z+getPhases.<locals>.InBodyPhase.startTagRpRtc                 S   ó^   | j  ¡  | j |¡ | j |¡ td |d< | j  |¡ |d r-| j j ¡  d|d< d S d S )Nro   rq   r‡   Trˆ   )	rB   rè  rP   r   r   r   rÖ   rŠ   rH  r§   r)   r)   r*   rÒ  ,  ó   
þz+getPhases.<locals>.InBodyPhase.startTagMathc                 S   r  )Nr…   rq   r‡   Trˆ   )	rB   rè  rP   r   r   r   rÖ   rŠ   rH  r§   r)   r)   r*   rÓ  8  r  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-ignoredrD   Nrñ   r§   r)   r)   r*   rÔ  D  s   z0getPhases.<locals>.InBodyPhase.startTagMisplacedc                 S   s   | j  ¡  | j  |¡ d S r.   )rB   rè  rÖ   r§   r)   r)   r*   r   M  s   
z,getPhases.<locals>.InBodyPhase.startTagOtherc                 S   sª   | j jddd�s#|  tddƒ¡ | j dddi¡ |  tddƒ¡ d S | j  d¡ | j jd j	dkr;| j dddi¡ | j j 
¡ }|j	dkrS| j j 
¡ }|j	dksFd S d S )	Nr(   r›  ró  r{   r]  rD   r|   r€   )rB   rõ  r¹  r  rP   r‹   rÙ  r  rŠ   rD   rH  rZ  r)   r)   r*   rÙ  Q  s   
ÿz&getPhases.<locals>.InBodyPhase.endTagPc                 S   s~   | j  d¡s| j ¡  d S | j jd jdkr5| j jdd … D ]}|jtdƒvr4| j dd|jdœ¡  nq| jjd | j_d S )NrË   r€   é   )r‹  rŒ  rŠ  r²  r±  r(   r¯  r°  rÄ   rÁ   rÆ   rÂ   rÅ   rÃ   rË   rÍ   ú$expected-one-end-tag-but-got-another©ÚgotNameÚexpectedNameÚ	afterBody)	rB   rõ  rP   r‹   rŠ   rD   r�   rM   re   rZ  r)   r)   r*   rÕ  ^  s   

þ÷
z)getPhases.<locals>.InBodyPhase.endTagBodyc                 S   s"   | j  d¡r|  tdƒ¡ |S d S )NrË   )rB   rõ  rÕ  r  r§   r)   r)   r*   rÖ  p  s   þz)getPhases.<locals>.InBodyPhase.endTagHtmlc                 S   s¢   |d dkr
| j | _| j |d ¡}|r| j ¡  | jjd j|d kr/| j dd|d i¡ |rM| jj 	¡ }|j|d krO| jj 	¡ }|j|d ks>d S d S d S )NrD   r‡  r€   úend-tag-too-early)
r·  r‘   rB   rõ  r  rŠ   rD   rP   r‹   rH  )rG   rŸ   ÚinScoperÐ   r)   r)   r*   r×  v  s   
ÿþz*getPhases.<locals>.InBodyPhase.endTagBlockc                 S   sx   | j j}d | j _|d u s| j  |¡s| j dddi¡ d S | j  ¡  | j jd |kr3| j dddi¡ | j j |¡ d S )Nr]  rD   r‰  r€   zend-tag-too-early-ignored)rB   rö  rõ  rP   r‹   r  rŠ   rp  rZ  r)   r)   r*   rØ  „  s   ÿ
ÿz)getPhases.<locals>.InBodyPhase.endTagFormc                 S   s¾   |d dkr	d}nd }| j j|d |d�s"| j dd|d i¡ d S | j j|d d� | j jd j|d krA| j dd|d i¡ | j j ¡ }|j|d kr]| j j ¡ }|j|d ksNd S d S )	NrD   rŠ  Úlistró  r]  ©Úexcluder€   r  )rB   rõ  rP   r‹   r  rŠ   rD   rH  )rG   rŸ   rô  rÐ   r)   r)   r*   rÚ  ‘  s   
þÿz-getPhases.<locals>.InBodyPhase.endTagListItemc                 S   sœ   t D ]}| j |¡r| j ¡   nq| jjd j|d kr(| j dd|d i¡ t D ]!}| j |¡rK| jj ¡ }|jt vrH| jj ¡ }|jt vs= d S q*d S )Nr€   rD   r  )	r   rB   rõ  r  rŠ   rD   rP   r‹   rH  )rG   rŸ   Úitemr)   r)   r*   rÛ  ¢  s    
þ

ÿüÿz,getPhases.<locals>.InBodyPhase.endTagHeadingc                 S   s  d}|dk �r†|d7 }| j  |d ¡}|r"|| j jv r)| j  |j¡s)|  |¡ dS || j jvrC| j dd|d i¡ | j j 	|¡ dS | j  |j¡sW| j dd|d i¡ dS || j jd krj| j d	d|d i¡ | j j 
|¡}d}| j j|d… D ]}|jtv r†|} nq{|du r¨| j j ¡ }||krŸ| j j ¡ }||ks•| j j 	|¡ dS | j j|d  }| j j 
|¡}| }	}
d}| j j 
|
¡}|d
k �r(|d7 }|d8 }| j j| }
|
| j jvrå| j j 	|
¡ qÄ|
|krên>|	|kr÷| j j 
|
¡d }|
 ¡ }|| j j| j j 
|
¡< || j j| j j 
|
¡< |}
|	j�r|	j |	¡ |
 |	¡ |
}	|d
k sÉ|	j�r2|	j |	¡ |jtdƒv �rH| j  ¡ \}}| |	|¡ n| |	¡ | ¡ }| |¡ | |¡ | j j 	|¡ | j j ||¡ | j j 	|¡ | j j | j j 
|¡d |¡ |dk sdS dS )z)The much-feared adoption agency algorithmr   é   r   rD   Nzadoption-agency-1.2zadoption-agency-4.4r€   zadoption-agency-1.3rá  ©rÉ   rÄ   rÆ   rÅ   rÃ   )rB   rÿ  rŠ   rõ  rD   r#  rP   r‹   râ  rp  Úindexrø  r   rH  Ú	cloneNoderð  rñ  ÚappendChildr�   ÚgetTableMisnestedNodePositionÚinsertBeforeÚreparentChildrenÚinsert)rG   rŸ   ÚouterLoopCounterÚformattingElementÚafeIndexÚfurthestBlockru   ÚcommonAncestorÚbookmarkÚlastNoderÐ   ÚinnerLoopCounterr!  Úclonerð  r%  r)   r)   r*   rÜ  ±  s¦   

ÿÿ

þÿ
ÿÿÿÿ
ä"


ÿ �èz/getPhases.<locals>.InBodyPhase.endTagFormattingc                 S   sœ   | j  |d ¡r| j  ¡  | j jd j|d kr#| j dd|d i¡ | j  |d ¡rL| j j ¡ }|j|d krE| j j ¡ }|j|d ks8| j  ¡  d S d S )NrD   r€   r  )	rB   rõ  r  rŠ   rD   rP   r‹   rH  ÚclearActiveFormattingElements)rG   rŸ   ru   r)   r)   r*   rÝ  T  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 elementr  r{   )rP   r‹   rB   rè  rÖ   r  rŠ   rH  r§   r)   r)   r*   rd  `  s   ÿ
z'getPhases.<locals>.InBodyPhase.endTagBrc                 S   s¶   | j jd d d… D ]O}|j|d krE| j j|d d� | j jd j|d kr1| j dd|d i¡ | j j ¡ |krB	 | j j ¡ |ks9 d S |jtv rX| j dd|d i¡  d S q	d S )Nr€   rD   r  r]  )	rB   rŠ   rD   r  rP   r‹   rH  rø  r   rZ  r)   r)   r*   r#  g  s   ÿ
þ÷z*getPhases.<locals>.InBodyPhase.endTagOtherN)6r=   r>   r?   rO   rà  rä  r—   ré  r�   r·  r¸  rl  rm  r¹  r»  r¼  r½  r¾  rº  r¿  rÀ  rÁ  rÂ  rÃ  rÄ  rÅ  rÆ  rÈ  rÇ  rÉ  rÊ  rË  rÌ  rÍ  r>  rÎ  rÑ  rÏ  rÐ  rÒ  rÓ  rÔ  r   rÙ  rÕ  rÖ  r×  rØ  rÚ  rÛ  rÜ  rÝ  rd  r#  r)   r$  r)   r*   ÚInBodyPhase¢  sj    G
	
	 $r2  c                       s@   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )zgetPhases.<locals>.TextPhasec                    sF   ˆ   | ||¡ t g ¡| _| j| j_t d| jfg¡| _| j| j_d S ©Nr6  )	rO   r   r  rù   r   r!  ÚendTagScriptrþ   r#  ré   r$  r)   r*   rO   v  s   
ÿz%getPhases.<locals>.TextPhase.__init__c                 S   rò   ró   rô   r§   r)   r)   r*   r�   ~  rö   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-eofrD   r€   T)rP   r‹   rB   rŠ   rD   rH  r×   re   rF   r)   r)   r*   r—   �  s   ÿz'getPhases.<locals>.TextPhase.processEOFc                 S   s   J d|d  ƒ‚)NFz4Tried to process start tag %s in RCDATA/RAWTEXT moderD   r)   r§   r)   r)   r*   r   ˆ  rx   z*getPhases.<locals>.TextPhase.startTagOtherc                 S   s*   | j j ¡ }|jdksJ ‚| jj| j_d S r3  )rB   rŠ   rH  rD   rP   r×   re   rZ  r)   r)   r*   r4  ‹  s   z)getPhases.<locals>.TextPhase.endTagScriptc                 S   s   | j j ¡  | jj| j_d S r.   )rB   rŠ   rH  rP   r×   re   r§   r)   r)   r*   r#  ’  ó   z(getPhases.<locals>.TextPhase.endTagOtherN)	r=   r>   r?   rO   r�   r—   r   r4  r#  r)   r$  r)   r*   Ú	TextPhaseu  s    r6  c                       s¨   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'S )(zgetPhases.<locals>.InTablePhasec                    sž   ˆ   | ||¡ t d| jfd| jfd| jfd| jfd| jfd| jfd| j	fd| j
fd	| jfd
| jfg
¡| _| j| j_t d| jfd| jfg¡| _| j| j_d S )NrÍ   rÇ   rÈ   r´  ©rÄ   rÆ   rÅ   )rÁ   rÂ   rÃ   rÉ   )r4  r6  r¨  r‰  )rË   rÇ   r´  rÈ   rÍ   rÄ   rÁ   rÆ   rÂ   rÅ   rÃ   )rO   r   r  rý   ÚstartTagCaptionÚstartTagColgroupÚstartTagColÚstartTagRowGroupÚstartTagImplyTbodyrÅ  ÚstartTagStyleScriptrÈ  r¼  rù   r   r!  ÚendTagTableÚendTagIgnorerþ   r#  ré   r$  r)   r*   rO   ˜  s*   ö
ÿþz(getPhases.<locals>.InTablePhase.__init__c                 S   s8   | j jd jdvr| j j ¡  | j jd jdvs	d S d S )Nr€   )rÉ   rÍ   )rB   rŠ   rD   rH  rF   r)   r)   r*   ÚclearStackToTableContext°  s   ýz8getPhases.<locals>.InTablePhase.clearStackToTableContextc                 S   ó2   | j jd jdkr| j d¡ d S | jjsJ ‚d S )Nr€   rÍ   zeof-in-table©rB   rŠ   rD   rP   r‹   rX   rF   r)   r)   r*   r—   ¹  ó   z*getPhases.<locals>.InTablePhase.processEOFc                 S   ó4   | j j}| j jd | j _|| j j_| j j |¡ d S ©NÚinTableText)rP   re   rM   r×   r‘   ©rG   rŸ   r×   r)   r)   r*   r‘   À  ó   
z6getPhases.<locals>.InTablePhase.processSpaceCharactersc                 S   rD  rE  )rP   re   rM   r×   r�   rG  r)   r)   r*   r�   Æ  rH  z1getPhases.<locals>.InTablePhase.processCharactersc                 S   s&   d| j _| jjd  |¡ d| j _d S )NTr½   F)rB   ÚinsertFromTablerP   rM   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@  rB   râ  r–   r   rÖ   rP   rM   re   r§   r)   r)   r*   r8  Ó  s   z/getPhases.<locals>.InTablePhase.startTagCaptionc                 S   ó(   |   ¡  | j |¡ | jjd | j_d S )Nr»   ©r@  rB   rÖ   rP   rM   re   r§   r)   r)   r*   r9  Ù  ro  z0getPhases.<locals>.InTablePhase.startTagColgroupc                 S   r(  )NrÈ   r{   )r9  r  r§   r)   r)   r*   r:  Þ  r'  z+getPhases.<locals>.InTablePhase.startTagColc                 S   rJ  ©Nr¹   rK  r§   r)   r)   r*   r;  â  ro  z0getPhases.<locals>.InTablePhase.startTagRowGroupc                 S   r(  )NrÄ   r{   )r;  r  r§   r)   r)   r*   r<  ç  r'  z2getPhases.<locals>.InTablePhase.startTagImplyTbodyc                 S   s6   | j  ddddœ¡ | j j tdƒ¡ | j js|S d S )Nrû  rÉ   rü  )rP   r‹   re   r“   r  rX   r§   r)   r)   r*   rÅ  ë  s   ÿÿz-getPhases.<locals>.InTablePhase.startTagTablec                 S   r*  re  r,  r§   r)   r)   r*   r=  ò  rú   z3getPhases.<locals>.InTablePhase.startTagStyleScriptc                 S   sX   d|d v r%|d d   t¡dkr%| j d¡ | j |¡ | jj ¡  d S |  |¡ d S )Nr3   r�   r  z unexpected-hidden-input-in-table)	rs   r   rP   r‹   rB   rÖ   rŠ   rH  r   r§   r)   r)   r*   rÈ  õ  s   z-getPhases.<locals>.InTablePhase.startTagInputc                 S   sH   | j  d¡ | jjd u r"| j |¡ | jjd | j_| jj ¡  d S d S )Nzunexpected-form-in-tabler€   )rP   r‹   rB   rö  rÖ   rŠ   rH  r§   r)   r)   r*   r¼  ÿ  s   ýz,getPhases.<locals>.InTablePhase.startTagFormc                 S   ó<   | j  dd|d i¡ d| j_| j jd  |¡ d| j_d S )Nz)unexpected-start-tag-implies-table-voodoorD   Tr½   F)rP   r‹   rB   rI  rM   r’   r§   r)   r)   r*   r     ó   z-getPhases.<locals>.InTablePhase.startTagOtherc                 S   s®   | j jddd�rJ| j  ¡  | j jd jdkr%| j dd| j jd jdœ¡ | j jd jdkr=| j j ¡  | j jd jdks.| j j ¡  | j ¡  d S | jj	sPJ ‚| j ¡  d S )NrÉ   ró  r€   zend-tag-too-early-namedr  )
rB   rõ  r  rŠ   rD   rP   r‹   rH  rg   rX   r§   r)   r)   r*   r>    s   
ÿÿÿz+getPhases.<locals>.InTablePhase.endTagTablec                 S   r/  r\  rñ   r§   r)   r)   r*   r?    r^  z,getPhases.<locals>.InTablePhase.endTagIgnorec                 S   rM  )Nz'unexpected-end-tag-implies-table-voodoorD   Tr½   F)rP   r‹   rB   rI  rM   r“   r§   r)   r)   r*   r#     rN  z+getPhases.<locals>.InTablePhase.endTagOtherN)r=   r>   r?   rO   r@  r—   r‘   r�   rõ   r8  r9  r:  r;  r<  rÅ  r=  rÈ  r¼  r   r>  r?  r#  r)   r$  r)   r*   ÚInTablePhase–  s(    	
rO  c                       óP   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )z#getPhases.<locals>.InTableTextPhasec                    s   ˆ   | ||¡ d | _g | _d S r.   )rO   r×   ÚcharacterTokensré   r$  r)   r*   rO   (  s   
z,getPhases.<locals>.InTableTextPhase.__init__c                 S   sd   d  dd„ | jD ƒ¡}tdd„ |D ƒƒr%td |dœ}| jjd  |¡ n|r-| j |¡ g | _d S )Nr  c                 S   s   g | ]}|d  ‘qS )r�   r)   ©rC   r  r)   r)   r*   rH   .  ó    zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c                 S   rë  r)   rì  rR  r)   r)   r*   rH   /  rS  ry   r
  r¼   )ÚjoinrQ  rï  r   rP   rM   rõ   rB   )rG   r�   rŸ   r)   r)   r*   ÚflushCharacters-  s   
z3getPhases.<locals>.InTableTextPhase.flushCharactersc                 S   ó   |   ¡  | j| j_|S r.   ©rU  r×   rP   re   r§   r)   r)   r*   r”   6  ó   
z2getPhases.<locals>.InTableTextPhase.processCommentc                 S   s   |   ¡  | j| j_dS r  rW  rF   r)   r)   r*   r—   ;  rX  z.getPhases.<locals>.InTableTextPhase.processEOFc                 S   s    |d dkrd S | j  |¡ d S ©Nr�   rê  ©rQ  r–   r§   r)   r)   r*   r�   @  s   z5getPhases.<locals>.InTableTextPhase.processCharactersc                 S   ó   | j  |¡ d S r.   rZ  r§   r)   r)   r*   r‘   E  s   z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc                 S   rV  r.   rW  r§   r)   r)   r*   r’   J  rX  z3getPhases.<locals>.InTableTextPhase.processStartTagc                 S   rV  r.   rW  r§   r)   r)   r*   r“   O  rX  z1getPhases.<locals>.InTableTextPhase.processEndTagN)r=   r>   r?   rO   rU  r”   r—   r�   r‘   r’   r“   r)   r$  r)   r*   ÚInTableTextPhase'  s    	r\  c                       ó`   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )z!getPhases.<locals>.InCaptionPhasec                    óf   ˆ   | ||¡ t d| jfd| jfg¡| _| j| j_t d| jfd| j	fd| j
fg¡| _| j| j_d S )NrÍ   ©	rÇ   r´  rÈ   rÄ   rÁ   rÆ   rÂ   rÅ   rÃ   rÇ   rÉ   )
rË   r´  rÈ   rÍ   rÄ   rÁ   rÆ   rÂ   rÅ   rÃ   )rO   r   r  rý   ÚstartTagTableElementrù   r   r!  ÚendTagCaptionr>  r?  rþ   r#  ré   r$  r)   r*   rO   V  s    ÿþ
ÿýz*getPhases.<locals>.InCaptionPhase.__init__c                 S   ó   | j jddd� S )NrÇ   rÉ   ró  ©rB   rõ  rF   r)   r)   r*   ÚignoreEndTagCaptionh  rú   z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc                 S   ó   | j jd  ¡  d S r+  ©rP   rM   r—   rF   r)   r)   r*   r—   k  rö   z,getPhases.<locals>.InCaptionPhase.processEOFc                 S   r*  r+  ©rP   rM   r�   r§   r)   r)   r*   r�   n  rú   z3getPhases.<locals>.InCaptionPhase.processCharactersc                 S   ó0   | j  ¡  |  ¡ }| j j tdƒ¡ |s|S d S ©NrÇ   ©rP   r‹   rd  re   r“   r  ©rG   rŸ   ÚignoreEndTagr)   r)   r*   r`  q  s   
ÿz6getPhases.<locals>.InCaptionPhase.startTagTableElementc                 S   r*  r+  r,  r§   r)   r)   r*   r   y  rú   z/getPhases.<locals>.InCaptionPhase.startTagOtherc                 S   s¶   |   ¡ sN| j ¡  | jjd jdkr!| j dd| jjd jdœ¡ | jjd jdkr9| jj ¡  | jjd jdks*| jj ¡  | j ¡  | jj	d | j_
d S | jjsTJ ‚| j ¡  d S )Nr€   rÇ   r  r  r¼   )rd  rB   r  rŠ   rD   rP   r‹   rH  r1  rM   re   rX   r§   r)   r)   r*   ra  |  s    
ÿÿÿ
z/getPhases.<locals>.InCaptionPhase.endTagCaptionc                 S   rh  ri  rj  rk  r)   r)   r*   r>  Ž  s   
ÿz-getPhases.<locals>.InCaptionPhase.endTagTablec                 S   r/  r\  rñ   r§   r)   r)   r*   r?  •  r^  z.getPhases.<locals>.InCaptionPhase.endTagIgnorec                 S   r*  r+  ©rP   rM   r“   r§   r)   r)   r*   r#  ˜  rú   z-getPhases.<locals>.InCaptionPhase.endTagOtherN)r=   r>   r?   rO   rd  r—   r�   r`  r   ra  r>  r?  r#  r)   r$  r)   r*   ÚInCaptionPhaseT  s    rn  c                       r  )z%getPhases.<locals>.InColumnGroupPhasec                    s^   ˆ   | ||¡ t d| jfd| jfg¡| _| j| j_t d| jfd| j	fg¡| _
| j| j
_d S )NrÍ   r´  rÈ   )rO   r   r  rý   r:  rù   r   r!  ÚendTagColgroupÚ	endTagColrþ   r#  ré   r$  r)   r*   rO   ž  s   þ
þz.getPhases.<locals>.InColumnGroupPhase.__init__c                 S   s   | j jd jdkS )Nr€   rÍ   )rB   rŠ   rD   rF   r)   r)   r*   ÚignoreEndTagColgroup­  rú   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 )Nr€   rÍ   rÈ   T)rB   rŠ   rD   rP   rX   rq  ro  r  )rG   rl  r)   r)   r*   r—   °  s   ÿz0getPhases.<locals>.InColumnGroupPhase.processEOFc                 S   ó"   |   ¡ }|  tdƒ¡ |s|S d S ©NrÈ   ©rq  ro  r  rk  r)   r)   r*   r�   º  ó
   ÿz7getPhases.<locals>.InColumnGroupPhase.processCharactersc                 S   rE  rF  rG  r§   r)   r)   r*   r:  À  rI  z1getPhases.<locals>.InColumnGroupPhase.startTagColc                 S   rr  rs  rt  rk  r)   r)   r*   r   Å  ru  z3getPhases.<locals>.InColumnGroupPhase.startTagOtherc                 S   sB   |   ¡ r| jjs
J ‚| j ¡  d S | jj ¡  | jjd | j_d S ©Nr¼   )	rq  rP   rX   r‹   rB   rŠ   rH  rM   re   r§   r)   r)   r*   ro  Ë  s
   z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc                 S   s   | j  dddi¡ d S )Nz
no-end-tagrD   r´  rñ   r§   r)   r)   r*   rp  Ô  r  z/getPhases.<locals>.InColumnGroupPhase.endTagColc                 S   rr  rs  rt  rk  r)   r)   r*   r#  ×  ru  z1getPhases.<locals>.InColumnGroupPhase.endTagOtherN)r=   r>   r?   rO   rq  r—   r�   r:  r   ro  rp  r#  r)   r$  r)   r*   ÚInColumnGroupPhase›  s    
	rw  c                       ra  )z#getPhases.<locals>.InTableBodyPhasec                    sv   ˆ   | ||¡ t d| jfd| jfd| jfd| jfg¡| _| j| j_	t d| j
fd| jfd| jfg¡| _| j| j_	d S )NrÍ   rÃ   ©rÁ   rÂ   )rÇ   r´  rÈ   rÄ   rÆ   rÅ   r7  rÉ   )rË   rÇ   r´  rÈ   rÍ   rÁ   rÂ   rÃ   )rO   r   r  rý   Ú
startTagTrÚstartTagTableCellÚstartTagTableOtherrù   r   r!  ÚendTagTableRowGroupr>  r?  rþ   r#  ré   r$  r)   r*   rO   ß  s$   ÿü
ÿýz,getPhases.<locals>.InTableBodyPhase.__init__c                 S   sV   | j jd jdvr| j j ¡  | j jd jdvs	| j jd jdkr'| jjs)J ‚d S d S )Nr€   )rÄ   rÆ   rÅ   rÍ   rÍ   )rB   rŠ   rD   rH  rP   rX   rF   r)   r)   r*   ÚclearStackToTableBodyContextó  s   üÿz@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc                 S   re  rv  rf  rF   r)   r)   r*   r—   ý  rö   z.getPhases.<locals>.InTableBodyPhase.processEOFc                 S   r*  rv  rf  r§   r)   r)   r*   r‘      rú   z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc                 S   r*  rv  rg  r§   r)   r)   r*   r�     rú   z5getPhases.<locals>.InTableBodyPhase.processCharactersc                 S   rJ  )Nr¸   )r}  rB   rÖ   rP   rM   re   r§   r)   r)   r*   ry    ro  z.getPhases.<locals>.InTableBodyPhase.startTagTrc                 S   s*   | j  dd|d i¡ |  tddƒ¡ |S )Nzunexpected-cell-in-table-bodyrD   rÃ   r{   )rP   r‹   ry  r  r§   r)   r)   r*   rz    ó
   
ÿz5getPhases.<locals>.InTableBodyPhase.startTagTableCellc                 S   ón   | j jddd�s| j jddd�s| j jddd�r*|  ¡  |  t| j jd jƒ¡ |S | jjs0J ‚| j 	¡  d S ©NrÄ   rÉ   ró  rÅ   rÆ   r€   ©
rB   rõ  r}  r|  r  rŠ   rD   rP   rX   r‹   r§   r)   r)   r*   r{    s   ÿþÿz6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc                 S   r*  rv  r,  r§   r)   r)   r*   r     rú   z1getPhases.<locals>.InTableBodyPhase.startTagOtherc                 S   sV   | j j|d dd�r|  ¡  | j j ¡  | jjd | j_d S | j dd|d i¡ d S )NrD   rÉ   ró  r¼   ú unexpected-end-tag-in-table-body)	rB   rõ  r}  rŠ   rH  rP   rM   re   r‹   r§   r)   r)   r*   r|  "  s   
ÿz7getPhases.<locals>.InTableBodyPhase.endTagTableRowGroupc                 S   r  r€  r�  r§   r)   r)   r*   r>  +  s   ÿþÿz/getPhases.<locals>.InTableBodyPhase.endTagTablec                 S   r/  )Nr‚  rD   rñ   r§   r)   r)   r*   r?  8  r0  z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec                 S   r*  rv  rm  r§   r)   r)   r*   r#  <  rú   z/getPhases.<locals>.InTableBodyPhase.endTagOtherN)r=   r>   r?   rO   r}  r—   r‘   r�   ry  rz  r{  r   r|  r>  r?  r#  r)   r$  r)   r*   ÚInTableBodyPhaseÝ  s    
	rƒ  c                       s€   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )zgetPhases.<locals>.InRowPhasec                    sv   ˆ   | ||¡ t d| jfd| jfd| jfg¡| _| j| j_t d| j	fd| j
fd| jfd| jfg¡| _| j| j_d S )NrÍ   rx  )rÇ   r´  rÈ   rÄ   rÆ   rÅ   rÃ   rÃ   rÉ   r7  )rË   rÇ   r´  rÈ   rÍ   rÁ   rÂ   )rO   r   r  rý   rz  r{  rù   r   r!  ÚendTagTrr>  r|  r?  rþ   r#  ré   r$  r)   r*   rO   A  s$   ÿý
ÿüz&getPhases.<locals>.InRowPhase.__init__c                 S   sT   | j jd jdvr(| j dd| j jd ji¡ | j j ¡  | j jd jdvs	d S d S )Nr€   )rÃ   rÍ   z'unexpected-implied-end-tag-in-table-rowrD   )rB   rŠ   rD   rP   r‹   rH  rF   r)   r)   r*   ÚclearStackToTableRowContextU  s   ÿýz9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc                 S   rb  )NrÃ   rÉ   ró  rc  rF   r)   r)   r*   ÚignoreEndTagTr[  rú   z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc                 S   re  rv  rf  rF   r)   r)   r*   r—   _  rö   z(getPhases.<locals>.InRowPhase.processEOFc                 S   r*  rv  rf  r§   r)   r)   r*   r‘   b  rú   z4getPhases.<locals>.InRowPhase.processSpaceCharactersc                 S   r*  rv  rg  r§   r)   r)   r*   r�   e  rú   z/getPhases.<locals>.InRowPhase.processCharactersc                 S   s6   |   ¡  | j |¡ | jjd | j_| jj t¡ d S )Nr·   )	r…  rB   rÖ   rP   rM   re   râ  r–   r   r§   r)   r)   r*   rz  h  s   z/getPhases.<locals>.InRowPhase.startTagTableCellc                 S   rr  ©NrÃ   ©r†  r„  r  rk  r)   r)   r*   r{  n  s
   ÿz0getPhases.<locals>.InRowPhase.startTagTableOtherc                 S   r*  rv  r,  r§   r)   r)   r*   r   u  rú   z+getPhases.<locals>.InRowPhase.startTagOtherc                 S   sJ   |   ¡ s|  ¡  | jj ¡  | jjd | j_d S | jjsJ ‚| j 	¡  d S rL  )
r†  r…  rB   rŠ   rH  rP   rM   re   rX   r‹   r§   r)   r)   r*   r„  x  s   z&getPhases.<locals>.InRowPhase.endTagTrc                 S   rr  r‡  rˆ  rk  r)   r)   r*   r>  ‚  s
   ÿz)getPhases.<locals>.InRowPhase.endTagTablec                 S   s4   | j j|d dd�r|  tdƒ¡ |S | j ¡  d S )NrD   rÉ   ró  rÃ   )rB   rõ  r„  r  rP   r‹   r§   r)   r)   r*   r|  Š  s   z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc                 S   r/  )Nzunexpected-end-tag-in-table-rowrD   rñ   r§   r)   r)   r*   r?  ‘  r0  z*getPhases.<locals>.InRowPhase.endTagIgnorec                 S   r*  rv  rm  r§   r)   r)   r*   r#  •  rú   z)getPhases.<locals>.InRowPhase.endTagOtherN)r=   r>   r?   rO   r…  r†  r—   r‘   r�   rz  r{  r   r„  r>  r|  r?  r#  r)   r$  r)   r*   Ú
InRowPhase?  s    
r‰  c                       r]  )zgetPhases.<locals>.InCellPhasec                    r^  )NrÍ   r_  rx  )rË   rÇ   r´  rÈ   rÍ   r   )rO   r   r  rý   r{  rù   r   r!  ÚendTagTableCellr?  ÚendTagImplyrþ   r#  ré   r$  r)   r*   rO   š  s   ÿþ
ýz'getPhases.<locals>.InCellPhase.__init__c                 S   sH   | j jddd�r|  tdƒ¡ d S | j jddd�r"|  tdƒ¡ d S d S ©NrÁ   rÉ   ró  rÂ   )rB   rõ  rŠ  r  rF   r)   r)   r*   Ú	closeCell«  s
   ÿz(getPhases.<locals>.InCellPhase.closeCellc                 S   re  r+  rf  rF   r)   r)   r*   r—   ²  rö   z)getPhases.<locals>.InCellPhase.processEOFc                 S   r*  r+  rg  r§   r)   r)   r*   r�   µ  rú   z0getPhases.<locals>.InCellPhase.processCharactersc                 S   sF   | j jddd�s| j jddd�r|  ¡  |S | jjsJ ‚| j ¡  d S rŒ  )rB   rõ  r�  rP   rX   r‹   r§   r)   r)   r*   r{  ¸  s   ÿz1getPhases.<locals>.InCellPhase.startTagTableOtherc                 S   r*  r+  r,  r§   r)   r)   r*   r   Â  rú   z,getPhases.<locals>.InCellPhase.startTagOtherc                 S   s¶   | j j|d dd�rN| j  |d ¡ | j jd j|d kr9| j dd|d i¡ 	 | j j ¡ }|j|d kr7nq)n| j j ¡  | j  ¡  | jj	d | j_
d S | j dd|d i¡ d S )	NrD   rÉ   ró  r€   zunexpected-cell-end-tagTr¸   r]  )rB   rõ  r  rŠ   rD   rP   r‹   rH  r1  rM   re   rZ  r)   r)   r*   rŠ  Å  s    
ÿý
z.getPhases.<locals>.InCellPhase.endTagTableCellc                 S   r/  r\  rñ   r§   r)   r)   r*   r?  Ö  r^  z+getPhases.<locals>.InCellPhase.endTagIgnorec                 S   s.   | j j|d dd�r|  ¡  |S | j ¡  d S )NrD   rÉ   ró  )rB   rõ  r�  rP   r‹   r§   r)   r)   r*   r‹  Ù  s   z*getPhases.<locals>.InCellPhase.endTagImplyc                 S   r*  r+  rm  r§   r)   r)   r*   r#  á  rú   z*getPhases.<locals>.InCellPhase.endTagOtherN)r=   r>   r?   rO   r�  r—   r�   r{  r   rŠ  r?  r‹  r#  r)   r$  r)   r*   ÚInCellPhase˜  s    
rŽ  c                       ra  )z getPhases.<locals>.InSelectPhasec              	      s†   ˆ   | ||¡ t d| jfd| jfd| jfd| jfd| jfd| jfg¡| _	| j
| j	_t d| jfd| jfd| jfg¡| _| j| j_d S )NrÍ   r±  r²  rÀ   )r¨  r£  r¬  r6  )rO   r   r  rý   ÚstartTagOptionÚstartTagOptgrouprÏ  rÈ  r?  rù   r   r!  ÚendTagOptionÚendTagOptgroupÚendTagSelectrþ   r#  ré   r$  r)   r*   rO   å  s    ú
ýz)getPhases.<locals>.InSelectPhase.__init__c                 S   rA  )Nr€   rÍ   zeof-in-selectrB  rF   r)   r)   r*   r—   ú  rC  z+getPhases.<locals>.InSelectPhase.processEOFc                 S   s$   |d dkrd S | j  |d ¡ d S rY  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 r  ©rB   rŠ   rD   rH  rÖ   r§   r)   r)   r*   r�  	  s   z/getPhases.<locals>.InSelectPhase.startTagOptionc                 S   sL   | j jd jdkr| j j ¡  | j jd jdkr| j j ¡  | j  |¡ d S )Nr€   r±  r²  r”  r§   r)   r)   r*   r�  	  s
   z1getPhases.<locals>.InSelectPhase.startTagOptgroupc                 S   s   | j  d¡ |  tdƒ¡ d S )Nzunexpected-select-in-selectrÀ   )rP   r‹   r“  r  r§   r)   r)   r*   rÏ  	  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À   ró  )rP   r‹   rB   rõ  r“  r  rX   r§   r)   r)   r*   rÈ  	  s
   z.getPhases.<locals>.InSelectPhase.startTagInputc                 S   r*  re  r,  r§   r)   r)   r*   r?  	  rú   z/getPhases.<locals>.InSelectPhase.startTagScriptc                 S   r/  )Nzunexpected-start-tag-in-selectrD   rñ   r§   r)   r)   r*   r   !	  r0  z.getPhases.<locals>.InSelectPhase.startTagOtherc                 S   s8   | j jd jdkr| j j ¡  d S | j dddi¡ d S )Nr€   r±  úunexpected-end-tag-in-selectrD   ©rB   rŠ   rD   rH  rP   r‹   r§   r)   r)   r*   r‘  %	  s
   ÿz-getPhases.<locals>.InSelectPhase.endTagOptionc                 S   sh   | j jd jdkr| j jd jdkr| j j ¡  | j jd jdkr)| j j ¡  d S | j dddi¡ d S )Nr€   r±  éþÿÿÿr²  r•  rD   r–  r§   r)   r)   r*   r’  ,	  s   ÿz/getPhases.<locals>.InSelectPhase.endTagOptgroupc                 S   sd   | j jddd�r%| j j ¡ }|jdkr| j j ¡ }|jdks| j ¡  d S | jjs+J ‚| j ¡  d S )NrÀ   ró  )	rB   rõ  rŠ   rH  rD   rP   rg   rX   r‹   rZ  r)   r)   r*   r“  9	  s   

ÿz-getPhases.<locals>.InSelectPhase.endTagSelectc                 S   r/  )Nr•  rD   rñ   r§   r)   r)   r*   r#  D	  r0  z,getPhases.<locals>.InSelectPhase.endTagOtherN)r=   r>   r?   rO   r—   r�   r�  r�  rÏ  rÈ  r?  r   r‘  r’  r“  r#  r)   r$  r)   r*   ÚInSelectPhaseä  s    r˜  c                       óH   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )z'getPhases.<locals>.InSelectInTablePhasec                    óN   ˆ   | ||¡ t d| jfg¡| _| j| j_t d| jfg¡| _| j	| j_d S )N)rÇ   rÉ   rÄ   rÆ   rÅ   rÃ   rÁ   rÂ   )
rO   r   r  rÅ  rù   r   r!  r>  rþ   r#  ré   r$  r)   r*   rO   I	  s   ÿÿ
ÿÿz0getPhases.<locals>.InSelectInTablePhase.__init__c                 S   re  ©Nr¶   rf  rF   r)   r)   r*   r—   X	  rö   z2getPhases.<locals>.InSelectInTablePhase.processEOFc                 S   r*  r›  rg  r§   r)   r)   r*   r�   [	  rú   z9getPhases.<locals>.InSelectInTablePhase.processCharactersc                 S   s(   | j  dd|d i¡ |  tdƒ¡ |S )Nz5unexpected-table-element-start-tag-in-select-in-tablerD   rÀ   )rP   r‹   r#  r  r§   r)   r)   r*   rÅ  ^	  s   z5getPhases.<locals>.InSelectInTablePhase.startTagTablec                 S   r*  r›  r,  r§   r)   r)   r*   r   c	  rú   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-tablerD   rÉ   ró  rÀ   )rP   r‹   rB   rõ  r#  r  r§   r)   r)   r*   r>  f	  s
   þz3getPhases.<locals>.InSelectInTablePhase.endTagTablec                 S   r*  r›  rm  r§   r)   r)   r*   r#  l	  rú   z3getPhases.<locals>.InSelectInTablePhase.endTagOtherN)
r=   r>   r?   rO   r—   r�   rÅ  r   r>  r#  r)   r$  r)   r*   ÚInSelectInTablePhaseH	  s    rœ  c                       sH   e Zd Zeg d¢ƒZ‡ fdd„Zdd„ Z‡ fdd„Zdd	„ Zd
d„ Z	dS )z(getPhases.<locals>.InForeignContentPhase),rŽ  r�  ru  rË   r  rv  r�  r‹  r+   ry  rŒ  r‘  r¡  Úh1Úh2Úh3Úh4Úh5Úh6rÊ   r©  r“  r¢  rŠ  rˆ  r�  r5   rš  rƒ  r(   r‡  r  r”  r•  Úspanr—  r–  ÚsubÚsuprÉ   r˜  r™  r†  Úvarc                    s   ˆ   | ||¡ d S r.   )rO   ré   r$  r)   r*   rO   y	  rú   z1getPhases.<locals>.InForeignContentPhase.__init__c                 S   s  i 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"“i d#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdD“¥dEdFdGœ¥}|dH |v r||dH  |dH< d S d S )INÚaltglyphÚaltGlyphÚaltglyphdefÚaltGlyphDefÚaltglyphitemÚaltGlyphItemÚanimatecolorÚanimateColorÚanimatemotionÚanimateMotionÚanimatetransformÚanimateTransformÚclippathÚclipPathÚfeblendÚfeBlendÚfecolormatrixÚfeColorMatrixÚfecomponenttransferÚfeComponentTransferÚfecompositeÚfeCompositeÚfeconvolvematrixÚfeConvolveMatrixÚfediffuselightingÚfeDiffuseLightingÚfedisplacementmapÚfeDisplacementMapÚfedistantlightÚfeDistantLightÚfefloodÚfeFloodÚfefuncaÚfeFuncAÚfefuncbÚfeFuncBÚfefuncgÚfeFuncGÚfefuncrÚfeFuncRÚfegaussianblurÚfeGaussianBlurÚfeimageÚfeImageÚfemergeÚfeMergeÚfemergenodeÚfeMergeNodeÚfemorphologyÚfeMorphologyÚfeoffsetÚfeOffsetÚfepointlightÚfePointLightÚfespecularlightingÚfeSpecularLightingÚfespotlightÚfeSpotLightÚfetileÚfeTileÚfeturbulenceÚfeTurbulenceÚforeignobjectÚforeignObjectÚglyphrefÚglyphRefÚlineargradientÚlinearGradientÚradialGradientÚtextPath)ÚradialgradientÚtextpathrD   r)   )rG   rŸ   Úreplacementsr)   r)   r*   ÚadjustSVGTagNames|	  s’   ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Ý%ÿ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 )Nr�   rê  u   ï¿½c                 s   s   � | ]}|t vV  qd S r.   rì  rí  r)   r)   r*   rÞ   ©	  s   € zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rP   rj   rï  r�   r§   r$  r)   r*   r�   ¥	  s   
ÿz:getPhases.<locals>.InForeignContentPhase.processCharactersc                 S   sj  | j jd }|d | jv s!|d dkrrt|d  ¡ ƒtg d¢ƒ@ rr| j dd|d i¡ | j jd j| j jkrp| j 	| j jd ¡sp| j 
| j jd ¡sp| j j ¡  | j jd j| j jkrp| j 	| j jd ¡sp| j 
| j jd ¡rK|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 d S )Nr€   rD   r’  r�   )ÚcolorÚfaceÚsizez*unexpected-html-element-in-foreign-contentro   r…   rq   r‡   Trˆ   )rB   rŠ   ÚbreakoutElementsÚsetÚkeysrP   r‹   rq   rŽ   rv   rw   rH  r   r   rð  r   r   rÖ   )rG   rŸ   r¢   r)   r)   r*   r’   ­	  sH   ÿ
ÿÿþýüÿþý

þz8getPhases.<locals>.InForeignContentPhase.processStartTagc                 S   sø   t | jjƒd }| jjd }|j t¡|d kr#| j dd|d i¡ 	 |j t¡|d kr`| jj| jj	d krE| jj 
¡  | jjj| j_| jj ¡ |kr[| jjsSJ ‚| jj ¡ |ksMd }	 |S |d8 }| jj| }|j| jjkrrq#| jj |¡}	 |S )Nr   r€   rD   r]  TrF  )r�   rB   rŠ   rD   rs   r   rP   r‹   re   rM   rU  r×   rH  rq   rŽ   r“   )rG   rŸ   Ú	nodeIndexrÐ   r¡   r)   r)   r*   r“   È	  s,   ÿ	øz6getPhases.<locals>.InForeignContentPhase.processEndTagN)
r=   r>   r?   r�   rô  rO   rð  r�   r’   r“   r)   r$  r)   r*   ÚInForeignContentPhaseo	  s    	)rø  c                       rP  )z!getPhases.<locals>.AfterBodyPhasec                    rš  ©NrÍ   )
rO   r   r  rý   rù   r   r!  rÖ  rþ   r#  ré   r$  r)   r*   rO   ã	  s   ÿ
z*getPhases.<locals>.AfterBodyPhase.__init__c                 S   r   r.   r)   rF   r)   r)   r*   r—   î	  ó   z,getPhases.<locals>.AfterBodyPhase.processEOFc                 S   rì   )Nr   rí   r§   r)   r)   r*   r”   ò	  rï   z0getPhases.<locals>.AfterBodyPhase.processCommentc                 S   ó    | j  d¡ | j jd | j _|S )Nzunexpected-char-after-bodyr½   ©rP   r‹   rM   re   r§   r)   r)   r*   r�   ÷	  ó   z3getPhases.<locals>.AfterBodyPhase.processCharactersc                 S   r*  r+  r,  r§   r)   r)   r*   rý   ü	  rú   z.getPhases.<locals>.AfterBodyPhase.startTagHtmlc                 S   ó*   | j  dd|d i¡ | j jd | j _|S )Nzunexpected-start-tag-after-bodyrD   r½   rü  r§   r)   r)   r*   r   ÿ	  r~  z/getPhases.<locals>.AfterBodyPhase.startTagOtherc                 S   s,   | j jr| j  d¡ d S | j jd | j _d S )Nz'unexpected-end-tag-after-body-innerhtmlÚafterAfterBody)rP   rX   r‹   rM   re   )rG   rD   r)   r)   r*   rÖ  
  s   z,getPhases.<locals>.AfterBodyPhase.endTagHtmlc                 S   rþ  )Nzunexpected-end-tag-after-bodyrD   r½   rü  r§   r)   r)   r*   r#  
  r~  z-getPhases.<locals>.AfterBodyPhase.endTagOtherN)r=   r>   r?   rO   r—   r”   r�   rý   r   rÖ  r#  r)   r$  r)   r*   ÚAfterBodyPhaseâ	  s    r   c                       r  )z"getPhases.<locals>.InFramesetPhasec                    sf   ˆ   | ||¡ t d| jfd| jfd| jfd| jfg¡| _| j| j_	t d| j
fg¡| _| j| j_	d S )NrÍ   rÌ   rµ  r3  )rO   r   r  rý   rm  ÚstartTagFrameÚstartTagNoframesrù   r   r!  ÚendTagFramesetrþ   r#  ré   r$  r)   r*   rO   
  s   ü
ÿz+getPhases.<locals>.InFramesetPhase.__init__c                 S   rA  )Nr€   rÍ   zeof-in-framesetrB  rF   r)   r)   r*   r—   #
  rC  z-getPhases.<locals>.InFramesetPhase.processEOFc                 S   rð   )Nzunexpected-char-in-framesetrñ   r§   r)   r)   r*   r�   )
  rx   z4getPhases.<locals>.InFramesetPhase.processCharactersc                 S   r[  r.   )rB   rÖ   r§   r)   r)   r*   rm  ,
  rx   z3getPhases.<locals>.InFramesetPhase.startTagFramesetc                 S   s   | j  |¡ | j j ¡  d S r.   rG  r§   r)   r)   r*   r  /
  r5  z0getPhases.<locals>.InFramesetPhase.startTagFramec                 S   r*  r+  r,  r§   r)   r)   r*   r  3
  rú   z3getPhases.<locals>.InFramesetPhase.startTagNoframesc                 S   r/  )Nz unexpected-start-tag-in-framesetrD   rñ   r§   r)   r)   r*   r   6
  r0  z0getPhases.<locals>.InFramesetPhase.startTagOtherc                 S   sb   | j jd jdkr| j d¡ n| j j ¡  | jjs-| j jd jdkr/| jjd | j_d S d S d S )Nr€   rÍ   z)unexpected-frameset-in-frameset-innerhtmlrÌ   ÚafterFrameset)	rB   rŠ   rD   rP   r‹   rH  rX   rM   re   r§   r)   r)   r*   r  :
  s   üz1getPhases.<locals>.InFramesetPhase.endTagFramesetc                 S   r/  )Nzunexpected-end-tag-in-framesetrD   rñ   r§   r)   r)   r*   r#  F
  r0  z.getPhases.<locals>.InFramesetPhase.endTagOtherN)r=   r>   r?   rO   r—   r�   rm  r  r  r   r  r#  r)   r$  r)   r*   ÚInFramesetPhase
  s    r  c                       r™  )z%getPhases.<locals>.AfterFramesetPhasec                    sV   ˆ   | ||¡ t d| jfd| jfg¡| _| j| j_t d| jfg¡| _	| j
| j	_d S ©NrÍ   r3  )rO   r   r  rý   r  rù   r   r!  rÖ  rþ   r#  ré   r$  r)   r*   rO   L
  r%  z.getPhases.<locals>.AfterFramesetPhase.__init__c                 S   r   r.   r)   rF   r)   r)   r*   r—   Z
  rú  z0getPhases.<locals>.AfterFramesetPhase.processEOFc                 S   rð   )Nzunexpected-char-after-framesetrñ   r§   r)   r)   r*   r�   ^
  rx   z7getPhases.<locals>.AfterFramesetPhase.processCharactersc                 S   r*  re  r,  r§   r)   r)   r*   r  a
  rú   z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc                 S   r/  )Nz#unexpected-start-tag-after-framesetrD   rñ   r§   r)   r)   r*   r   d
  r0  z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc                 S   s   | j jd | j _d S )NÚafterAfterFrameset)rP   rM   re   r§   r)   r)   r*   rÖ  h
  rö   z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc                 S   r/  )Nz!unexpected-end-tag-after-framesetrD   rñ   r§   r)   r)   r*   r#  k
  r0  z1getPhases.<locals>.AfterFramesetPhase.endTagOtherN)
r=   r>   r?   rO   r—   r�   r  r   rÖ  r#  r)   r$  r)   r*   ÚAfterFramesetPhaseJ
  s    r  c                       rP  )z&getPhases.<locals>.AfterAfterBodyPhasec                    s0   ˆ   | ||¡ t d| jfg¡| _| j| j_d S rù  )rO   r   r  rý   rù   r   r!  ré   r$  r)   r*   rO   p
  s
   ÿz/getPhases.<locals>.AfterAfterBodyPhase.__init__c                 S   r   r.   r)   rF   r)   r)   r*   r—   x
  rë   z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc                 S   r  r.   r  r§   r)   r)   r*   r”   {
  r  z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc                 S   r*  r+  rf  r§   r)   r)   r*   r‘   ~
  rú   z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharactersc                 S   rû  )Núexpected-eof-but-got-charr½   rü  r§   r)   r)   r*   r�   �
  rý  z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc                 S   r*  r+  r,  r§   r)   r)   r*   rý   †
  rú   z3getPhases.<locals>.AfterAfterBodyPhase.startTagHtmlc                 S   rþ  )Núexpected-eof-but-got-start-tagrD   r½   rü  r§   r)   r)   r*   r   ‰
  r~  z4getPhases.<locals>.AfterAfterBodyPhase.startTagOtherc                 S   rþ  )Núexpected-eof-but-got-end-tagrD   r½   rü  r§   r)   r)   r*   r“   �
  r~  z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagN)r=   r>   r?   rO   r—   r”   r‘   r�   rý   r   r“   r)   r$  r)   r*   ÚAfterAfterBodyPhaseo
  s    r  c                       r  )z*getPhases.<locals>.AfterAfterFramesetPhasec                    s8   ˆ   | ||¡ t d| jfd| jfg¡| _| j| j_d S r  )rO   r   r  rý   ÚstartTagNoFramesrù   r   r!  ré   r$  r)   r*   rO   –
  s   þz3getPhases.<locals>.AfterAfterFramesetPhase.__init__c                 S   r   r.   r)   rF   r)   r)   r*   r—   Ÿ
  rë   z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc                 S   r  r.   r  r§   r)   r)   r*   r”   ¢
  r  z9getPhases.<locals>.AfterAfterFramesetPhase.processCommentc                 S   r*  r+  rf  r§   r)   r)   r*   r‘   ¥
  rú   zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc                 S   rð   )Nr	  rñ   r§   r)   r)   r*   r�   ¨
  rx   z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc                 S   r*  r+  r,  r§   r)   r)   r*   rý   «
  rú   z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc                 S   r*  re  r,  r§   r)   r)   r*   r  ®
  rú   z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc                 S   r/  )Nr
  rD   rñ   r§   r)   r)   r*   r   ±
  r0  z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc                 S   r/  )Nr  rD   rñ   r§   r)   r)   r*   r“   µ
  r0  z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagN)r=   r>   r?   rO   r—   r”   r‘   r�   rý   r  r   r“   r)   r$  r)   r*   ÚAfterAfterFramesetPhase•
  s    	r  r\   r[   r¿   r-  rU  rX  r½   rÕ   r¼   rF  rº   r»   r¹   r¸   r·   r¶   r  )r†   r  r¾   r  rÿ  r  )r   )rN   r^   rè   r  r  r1  r`  rk  rq  r2  r6  rO  r\  rn  rw  rƒ  r‰  rŽ  r˜  rœ  rø  r   r  r  r  r  r)   r$  r*   rL   œ  s–   ) #.g@C     X! -GBbYLd's/9%&%ÿþýüûúùø	÷
öõôóòñðïérL   c                    sB   t | d ƒt ˆ ƒ@ }|rt‡ fdd„| d  ¡ D ƒƒ| d< d S d S )Nr�   c                 3   s$   � | ]\}}ˆ   ||¡|fV  qd S r.   )rŒ   )rC   ÚkÚv©rï  r)   r*   rÞ   Ù
  s   € ÿz$adjust_attributes.<locals>.<genexpr>)r   r   r/   )rŸ   rï  Úneeds_adjustmentr)   r  r*   r²   Ö
  s   
ÿÿr²   r|   Fc                 C   s   |d u ri }t | | ||dœS )N)r3   rD   r�   r‡   )r   )rD   r3   rr   r‡   r)   r)   r*   r  Ý
  s
   
ÿr  c                   @   s   e Zd ZdZdS )r   zError in parsed documentN)r=   r>   r?   rÚ   r)   r)   r)   r*   r   å
  s    r   )r   T)r+   r   T)r|   NF).Ú
__future__r   r   r   Úsixr   r   r1   Úcollectionsr   r  r	   r
   r   Útreebuilders.baser   r   Ú	constantsr   r   r   r   r   r   r   r   r   r   r   r   r´   r   r   r   r   r#   r-   rA   rž  r"   ÚmemoizerL   r²   r  Ú	Exceptionr   r)   r)   r)   r*   Ú<module>   sR    H

  G
                  K
ÿ