<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
U
    .e                    @   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|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)   D/usr/lib/python3.8/site-packages/pip/_vendor/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__)metaZ	classnamebasesZ	classDictZattributeNameZ	attributefunctionr)   r*   r4   M   s
    
z5method_decorator_metaclass.<locals>.Decorated.__new__N)__name__
__module____qualname__r4   r)   r7   r)   r*   	DecoratedL   s   r<   )r3   )r8   r<   r)   r7   r*   method_decorator_metaclassK   s    r=   c                   @   s   e Zd ZdZd+ddZd,dd	Zd
d Zedd Zdd Z	dd Z
dd Zdd Zdd Zdd Zd-ddZdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* ZdS ).r"   z]HTML parser

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

    NFTc                    sL   | _ |dk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!   r>   errorsdict	getPhasesr/   phases)rC   r>   rE   r    debugr)   rB   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   )rC   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   firstStartTagrF   log
compatModerM   r,   lowerrS   r   rO   rcdataStatestater   rawtextStateplaintextStaterI   phaseinsertHtmlElementresetInsertionModeZ	lastPhaseZbeforeRCDataPhase
framesetOKrB   r)   r)   r*   rP      s*    





zHTMLParser.resetc                 C   s   t | dsdS | jjjd jS )zName 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   charEncodingr@   rB   r)   r)   r*   documentEncoding   s    
zHTMLParser.documentEncodingc                 C   sJ   |j dkr6|jtd kr6d|jko4|jd tdkS |j|j ftkS d S )Nannotation-xmlmathmlencoding)z	text/htmlzapplication/xhtml+xml)r@   	namespacer   
attributes	translater   r   rC   elementr)   r)   r*   isHTMLIntegrationPoint   s    


z!HTMLParser.isHTMLIntegrationPointc                 C   s   |j |jftkS r.   )rj   r@   r   rm   r)   r)   r*   isMathMLTextIntegrationPoint   s    z'HTMLParser.isMathMLTextIntegrationPointc                 C   sh  t d }t d }t d }t d }t d }t d }t d }|  D ]}d }	|}
|
d k	r|
}	| jjrp| jjd nd }|r~|jnd }|r|jnd }|
d	 }||kr| |
d
 |
di  d }
qNt| jjdksd|| jj	ksd| 
|r||kr
|d tddgksd|||fksd|td krH|dkrH||krH|d dksd| |rl||||fkrl| j}n
| jd }||kr||
}
qN||kr||
}
qN||kr||
}
qN||kr||
}
qN||kr||
}
qN||krN||
}
qN||kr@|	d r@|	d s@| dd|	d i q@d}g }|rd|| j | j }|r.| j|ks.tq.d S )N
CharactersZSpaceCharactersStartTagEndTagCommentZDoctype
ParseErrorr3   datadatavarsr   r@   ZmglyphZ
malignmarkrh   rg   svginForeignContentselfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   normalizedTokensr>   openElementsrj   r@   
parseErrorgetlendefaultNamespacerp   	frozensetr   ro   r`   rI   processCharactersprocessSpaceCharactersprocessStartTagprocessEndTagprocessCommentprocessDoctypeappend
processEOFAssertionError)rC   ZCharactersTokenZSpaceCharactersTokenZStartTagTokenZEndTagTokenZCommentTokenZDoctypeTokenZParseErrorTokentokenZ
prev_token	new_tokencurrentNodeZcurrentNodeNamespaceZcurrentNodeNamer3   r`   Z	reprocessrI   r)   r)   r*   rQ      s    



	









zHTMLParser.mainLoopc                 c   s   | j D ]}| |V  qd S r.   )rO   normalizeTokenrC   r   r)   r)   r*   r}     s    
zHTMLParser.normalizedTokensc                 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rC   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.   )rF   r   rO   rR   ZpositionrE   ru   r   )rC   Z	errorcoderx   r)   r)   r*   r   @  s
    zHTMLParser.parseErrorc                 C   sT   |d t d krP|d }t||d< t|t|d krP|d |d d d  |S )Nr3   rr   rw   rv   )r   r   r   update)rC   r   rawr)   r)   r*   r   H  s    zHTMLParser.normalizeTokenc                 C   s   t |t d S r.   )adjust_attributesr   r   r)   r)   r*   r   S  s    z!HTMLParser.adjustMathMLAttributesc                 C   s   t |t d S r.   )r   r   r   r)   r)   r*   r   V  s    zHTMLParser.adjustSVGAttributesc                 C   s   t |t d S r.   )r   adjustForeignAttributesMapr   r)   r)   r*   r   Y  s    z"HTMLParser.adjustForeignAttributesc                 C   s   | j   d S r.   )rL   r`   r   r)   r)   r*   reparseTokenNormal\  s    zHTMLParser.reparseTokenNormalc                 C   s   d}ddddddddddd	d	d
dd}| 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||  } qq8|r8| jd	 } qq8|| _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~   r@   rS   r   rj   r   rI   r`   )rC   ZlastZnewModesnodeZnodeNameZ	new_phaser)   r)   r*   rb   `  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   )rC   r   ZcontentTyper)   r)   r*   parseRCDataRawtext  s    zHTMLParser.parseRCDataRawtext)NFTF)Fr+   F)r   N)r9   r:   r;   __doc__rK   rT   rP   propertyrf   ro   rp   rQ   r}   r#   r-   r   r   r   r   r   r   rb   r   r)   r)   r)   r*   r"   W   s(   

"
	
C
,r"   c                    s"  dd }dd }G dd dt || | G dd d }G d	d
 d
 }G  fddd }G  fddd }G  fddd }G  fddd }G  fddd }	G  fddd }
G  fddd }G  fddd }G  fddd }G  fddd }G  fdd d  }G  fd!d"d" }G  fd#d$d$ }G  fd%d&d& }G  fd'd(d( }G  fd)d*d* }G  fd+d,d, }G  fd-d.d. }G  fd/d0d0 }G  fd1d2d2 }G  fd3d4d4 }|||||||	|
|||||||||||||||d5S )6Nc                    s(   t dd t D  fdd}|S )z4Logger that records which phase processes each tokenc                 s   s   | ]\}}||fV  qd S r.   r)   )r?   keyvaluer)   r)   r*   	<genexpr>  s     z)getPhases.<locals>.log.<locals>.<genexpr>c                    s    j drt|dkr|d }zd|d  i}W n    Y nX |d tkr\|d |d< | jj| jjjj | jj	j
j | j
j  j |f  | f||S  | f||S d S )NZprocessr   r3   r@   )r9   
startswithr   r   rL   rY   r   rO   r]   r`   	__class__)rC   r   r&   r   infor8   Z
type_namesr)   r*   wrapped  s     
z'getPhases.<locals>.log.<locals>.wrapped)rG   r   r/   )r8   r   r)   r   r*   rY     s
    zgetPhases.<locals>.logc                 S   s   | rt |S tS d S r.   )r=   r3   )Zuse_metaclassZ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.   )rL   r>   rC   rL   r>   r)   r)   r*   rK     s    z!getPhases.<locals>.Phase.__init__c                 S   s   t d S r.   )NotImplementedErrorrB   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   s   | j |d  |S Nr@   )startTagHandlerr   r)   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 )Nr@   r   znon-html-rootrw   r   F)rL   rX   r   r/   r>   r~   rk   rC   r   attrr   r)   r)   r*   startTagHtml  s    z%getPhases.<locals>.Phase.startTagHtmlc                 S   s   | j |d  |S r   )endTagHandlerr   r)   r)   r*   r     s    z&getPhases.<locals>.Phase.processEndTagN)r9   r:   r;   r   rK   r   r   r   r   r   r   r   r   r)   r)   r)   r*   Phase  s   
r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )zgetPhases.<locals>.InitialPhasec                 S   s   d S 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rd| j _n$|ds|dr|d k	rd| j _| j j	d | j _
d S )Nr@   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`   )rC   r   r@   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`   rB   r)   r)   r*   anythingElseM  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   Q  s    z1getPhases.<locals>.InitialPhase.processCharactersc                 S   s"   | j dd|d i |   |S )Nz"expected-doctype-but-got-start-tagr@   r   r   r)   r)   r*   r   V  s
    
z/getPhases.<locals>.InitialPhase.processStartTagc                 S   s"   | j dd|d i |   |S )Nz expected-doctype-but-got-end-tagr@   r   r   r)   r)   r*   r   \  s
    
z-getPhases.<locals>.InitialPhase.processEndTagc                 S   s   | j d |   dS )Nzexpected-doctype-but-got-eofTr   rB   r)   r)   r*   r   b  s    z*getPhases.<locals>.InitialPhase.processEOFN)r9   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   rr   r   )r>   Z
insertRootimpliedTagTokenrL   rI   r`   rB   r)   r)   r*   ra   i  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc                 S   s   |    dS NTra   rB   r)   r)   r*   r   n  s    z-getPhases.<locals>.BeforeHtmlPhase.processEOFc                 S   s   | j || j j d S r.   r   r   r)   r)   r*   r   r  s    z1getPhases.<locals>.BeforeHtmlPhase.processCommentc                 S   s   d S r.   r)   r   r)   r)   r*   r   u  s    z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc                 S   s   |    |S r.   r   r   r)   r)   r*   r   x  s    z4getPhases.<locals>.BeforeHtmlPhase.processCharactersc                 S   s    |d dkrd| j _|   |S )Nr@   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 )Nr@   r   r   r   brzunexpected-end-tag-before-html)rL   r   ra   r   r)   r)   r*   r     s    
z0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)
r9   r:   r;   ra   r   r   r   r   r   r   r)   r)   r)   r*   BeforeHtmlPhaseg  s   r   c                       sX   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )z"getPhases.<locals>.BeforeHeadPhasec                    sV     | || td| jfd| jfg| _| j| j_td| jfg| _	| j
| j	_d S )Nr   r   r   )rK   r   MethodDispatcherr   startTagHeadr   startTagOtherdefaultendTagImplyHeadr   endTagOtherr   r   r)   r*   rK     s    
z+getPhases.<locals>.BeforeHeadPhase.__init__c                 S   s   |  tdd dS )Nr   rr   Tr   r   rB   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*   r     s    z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc                 S   s   |  tdd |S r   r   r   r)   r)   r*   r     s    z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc                 S   s   | j dd|d i d S )Nzend-tag-after-implied-rootr@   r   r   r)   r)   r*   r     s    
z.getPhases.<locals>.BeforeHeadPhase.endTagOtherN)r9   r:   r;   rK   r   r   r   r   r   r   r   r   r)   r   r)   r*   BeforeHeadPhase  s   r   c                       s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"zgetPhases.<locals>.InHeadPhasec                    s     | || 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   )rK   r   r   r   startTagTitlestartTagNoFramesStylestartTagNoscriptstartTagScriptstartTagBaseLinkCommandstartTagMetar   r   r   r   
endTagHeadendTagHtmlBodyBrr   r   r   r   r)   r*   rK     s&    
z'getPhases.<locals>.InHeadPhase.__init__c                 S   s   |    dS r   r   rB   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~   popr   r)   r)   r*   r     s    z6getPhases.<locals>.InHeadPhase.startTagBaseLinkCommandc                 S   s   | j | | j j  d|d< |d }| jjjjd dkrd|krZ| jjj|d  nVd|krd|kr|d 	 d	krt
|d d
}t
|}| }| jjj| d S )NTr|   rw   r   Z	tentativecharsetZcontentz
http-equivzcontent-typezutf-8)r>   r   r~   r  rL   rO   rR   re   ZchangeEncodingr[   r	   ZEncodingBytesencodeZContentAttrParserr#   )rC   r   rk   rw   rL   codecr)   r)   r*   r     s     
z+getPhases.<locals>.InHeadPhase.startTagMetac                 S   s   | j |d d S )Nr   rL   r   r   r)   r)   r*   r     s    z,getPhases.<locals>.InHeadPhase.startTagTitlec                 S   s   | j |d d S )Nr   r	  r   r)   r)   r*   r     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*   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   )	r>   r   rL   rO   ZscriptDataStater]   r`   r   rI   r   r)   r)   r*   r     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  r@   r   rI   r`   rC   r   r   r)   r)   r*   r     s    z)getPhases.<locals>.InHeadPhase.endTagHeadc                 S   s   |    |S r.   r  r   r)   r)   r*   r    s    z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc                 S   s   | j dd|d i d S Nunexpected-end-tagr@   r   r   r)   r)   r*   r     s    z*getPhases.<locals>.InHeadPhase.endTagOtherc                 S   s   |  td d S )Nr   )r   r   rB   r)   r)   r*   r     s    z+getPhases.<locals>.InHeadPhase.anythingElseN)r9   r:   r;   rK   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r)   r   r)   r*   InHeadPhase  s    r  c                       sx   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )z&getPhases.<locals>.InHeadNoscriptPhasec                    sf     | || 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   )r   r   r   r5   r   r   )r   r   r   r   )rK   r   r   r   r   startTagHeadNoscriptr   r   r   endTagNoscriptendTagBrr   r   r   r   r)   r*   rK      s    
z/getPhases.<locals>.InHeadNoscriptPhase.__init__c                 S   s   | j d |   dS )Nzeof-in-head-noscriptTr   rB   r)   r)   r*   r   0  s    z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc                 S   s   | j jd |S Nr   )rL   rI   r   r   r)   r)   r*   r   5  s    z5getPhases.<locals>.InHeadNoscriptPhase.processCommentc                 S   s   | j d |   |S )Nzchar-in-head-noscriptr   r   r)   r)   r*   r   8  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   C  s    z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc                 S   s   | j dd|d i d S Nunexpected-start-tagr@   r   r   r)   r)   r*   r  F  s    z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc                 S   s"   | j dd|d i |   |S Nzunexpected-inhead-noscript-tagr@   r   r   r)   r)   r*   r   I  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*   r  N  s    z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc                 S   s"   | j dd|d i |   |S r  r   r   r)   r)   r*   r  S  s    z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc                 S   s   | j dd|d i d S r  r   r   r)   r)   r*   r   X  s    z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc                 S   s   |  td d S )Nr   )r  r   rB   r)   r)   r*   r   [  s    z3getPhases.<locals>.InHeadNoscriptPhase.anythingElseN)r9   r:   r;   rK   r   r   r   r   r   r   r  r   r  r  r   r   r)   r   r)   r*   InHeadNoscriptPhase  s   r  c                       sp   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
d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   )	r   r   r   r   r5   r   r   r   r   r   )r   r   r   )rK   r   r   r   startTagBodystartTagFramesetstartTagFromHeadr   r   r   r   r  r   r   r   r   r)   r*   rK   `  s    	

z*getPhases.<locals>.AfterHeadPhase.__init__c                 S   s   |    dS r   r  rB   r)   r)   r*   r   q  s    z,getPhases.<locals>.AfterHeadPhase.processEOFc                 S   s   |    |S r.   r  r   r)   r)   r*   r   u  s    z3getPhases.<locals>.AfterHeadPhase.processCharactersc                 S   s   | j jd |S r   r   r   r)   r)   r*   r   y  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*   r  |  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*   r    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-headr@   r   rv   r   )
rL   r   r>   r~   r   r   rI   r   r@   remover  r)   r)   r*   r    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   rB   r)   r)   r*   r     s    z.getPhases.<locals>.AfterHeadPhase.anythingElseN)r9   r:   r;   rK   r   r   r   r  r  r  r   r   r  r   r   r)   r   r)   r*   AfterHeadPhase_  s   
r  c                       s  e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'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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g!| _'| 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   )	r   r   r   r   r   r5   r   r   r   r   r   )addressarticleaside
blockquotecenterdetailsdirr+   dlfieldset
figcaptionfigurefooterheaderhgroupmainmenunavolr(   sectionsummaryul)prelistingform)lidddtrU   a)bbigcodeemfontissmallstrikestrongttunobrbutton)ZappletZmarqueeobjectZxmpr   )Zarear   embedimgkeygenZwbr)ZparamsourceZtrackinputhrimageisindextextareaZiframer   )Znoembedr   r   )rprt)optionoptgroupZmathry   )r   colr   framer   r   r   r   r   r   r   )r  r   r!  r"  rH  r#  r$  Zdialogr%  r+   r&  r'  r(  r)  r*  r+  r,  r5  r-  r.  r/  r0  r4  r1  r2  r3  r(   )r8  r9  r7  )r:  r;  r<  r=  r>  r?  r@  rG  rA  rB  rC  rD  rE  rF  r   )6rK   processSpaceCharactersNonPrer   r   r   r   startTagProcessInHeadr  r  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endTagAppletMarqueeObjectr  r   r   r   r   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.   )r@   rj   rk   )rC   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  )rC   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)r8  r9  r7  r(   r   r   r   r   r   r   r   r   rv   z expected-closing-tag-but-got-eof)r   r>   r~   r@   rL   r   )rC   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   )r4  r5  rR  r   )	rY  r   r   r>   r~   r@   Z
hasContent#reconstructActiveFormattingElementsr   )rC   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*   rD   "  s   zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r>   r  r   rL   rc   anyr   r)   r)   r*   r     s    
z0getPhases.<locals>.InBodyPhase.processCharactersc                 S   s   | j   | j |d  d S r   )r>   r  r   r   r)   r)   r*   rY  &  s    
z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec                 S   s   | j jd |S r  r   r   r)   r)   r*   rZ  *  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stnBd| j _|d 	 D ],\}}|| jjd j
krV|| jjd j
|< qVd S )Nr  r@   r   r   Frw   )rL   r   r   r>   r~   r@   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st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  r@   r   r   r   rv   r   r   )rL   r   r   r>   r~   r@   rS   r   rc   parentremoveChildr  r   rI   r`   r   r)   r)   r*   r  8  s    "z/getPhases.<locals>.InBodyPhase.startTagFramesetc                 S   s.   | j jdddr| td | j | d S Nr(   rH  variant)r>   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(   rH  r  F)	r>   r  r{  r   r   rL   rc   r  r   r   r)   r)   r*   r]  K  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  r@   r6  r(   rH  r  rv   )	r>   formPointerrL   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|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 )NFr7  r9  r8  )r7  r9  r8  r@   rs   )r  r+   r(   r(   rH  r  )rL   rc   reversedr>   r~   r@   r`   r   r   	nameTupler   r  r   )rC   r   ZstopNamesMapZ	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  )	r>   r  r{  r   r   rL   rO   r_   r]   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krR| jdd|d i | j j	  | j 
| d S )Nr(   rH  r  rv   r  r@   )r>   r  r{  r   r~   r@   r   rL   r   r  r   r   r)   r)   r*   r\  w  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 )Nr:  $unexpected-start-tag-implies-end-tagZ	startNameZendName)r>   !elementInActiveFormattingElementsrL   r   r~  r   r~   r  r  r  r  )rC   r   ZafeAElementr)   r)   r*   ra    s    
z(getPhases.<locals>.InBodyPhase.startTagAc                 S   s   | j   | | d S r.   )r>   r  r  r   r)   r)   r*   rb    s    
z1getPhases.<locals>.InBodyPhase.startTagFormattingc                 S   sP   | j   | j drB| jdddd | td | j   | | d S )NrG  r  r  )r>   r  r  rL   r   r   r   r  r   r)   r)   r*   rc    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 )NrH  r  r  F)	r>   r  rL   r   r   r   r  r   rc   r   r)   r)   r*   rd    s    
z-getPhases.<locals>.InBodyPhase.startTagButtonc                 S   s0   | j   | j | | j jt d| j_d S NF)r>   r  r   r  r   r   rL   rc   r   r)   r)   r*   re    s    
z:getPhases.<locals>.InBodyPhase.startTagAppletMarqueeObjectc                 S   sB   | j jdddr| td | j   d| j_| j|d d S )Nr(   rH  r  Fr   )r>   r  r{  r   r  rL   rc   r   r   r)   r)   r*   rf    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(   rH  r  Fr   )
rL   rZ   r>   r  r   r   r   rc   rI   r`   r   r)   r)   r*   rg    s    z,getPhases.<locals>.InBodyPhase.startTagTablec                 S   s6   | j   | j | | j j  d|d< d| j_d S )NTr|   F)r>   r  r   r~   r  rL   rc   r   r)   r)   r*   rh    s
    
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc                 S   s@   | j j}| | d|d kr<|d d tdkr<|| j _d S )Nr3   rw   hidden)rL   rc   rh  rl   r   )rC   r   rc   r)   r)   r*   rj    s    
z,getPhases.<locals>.InBodyPhase.startTagInputc                 S   s$   | j | | j j  d|d< d S r  r  r   r)   r)   r*   ri    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(   rH  r  Tr|   F)	r>   r  r{  r   r   r~   r  rL   rc   r   r)   r)   r*   rk    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-asrP  rK  ZoriginalNameZnewNamerr   rw   r{   rk   r{   )rL   r   r   r   r   r)   r)   r*   rl    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-tagr@   rQ  actionrw   r6  rr   )rk   rO  Zlabelpromptz3This is a searchable index. Enter search keywords: rq   r3   rw   rN  r{   r  )
rL   r   r>   r  r   r   r   r   copyr   )rC   r   Z
form_attrsr  rk   r)   r)   r*   rm    s<    

z.getPhases.<locals>.InBodyPhase.startTagIsIndexc                 S   s0   | j | | jjj| jj_| j| _d| j_d S r  )	r>   r   rL   rO   r\   r]   r  r   rc   r   r)   r)   r*   rn    s    z/getPhases.<locals>.InBodyPhase.startTagTextareac                 S   s   d| j _| | d S r  )rL   rc   rp  r   r)   r)   r*   ro    s    z-getPhases.<locals>.InBodyPhase.startTagIFramec                 S   s"   | j jr| | n
| | d S r.   )rL   rN   rp  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*   rp    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   rU  )	r>   r~   r@   rL   r`   r   r   r  r   r   r)   r)   r*   rs    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>   r  r   rL   rc   r`   rI   r   r)   r)   r*   rq    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>   r  generateImpliedEndTagsr~   r@   rL   r   r   r   r)   r)   r*   rr  %  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>   r  rL   r   r   r   r   r~   r  r   r)   r)   r*   rt  ,  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>   r  rL   r   r   r   r   r~   r  r   r)   r)   r*   ru  8  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-ignoredr@   Nr   r   r)   r)   r*   rv  D  s    z0getPhases.<locals>.InBodyPhase.startTagMisplacedc                 S   s   | j   | j | d S r.   )r>   r  r   r   r)   r)   r*   r   M  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
 }qd S )	Nr(   rH  r  rr   r  r@   rs   rv   )r>   r  r[  r   rL   r   r{  r  r~   r@   r  r  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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      )r8  r9  r7  rV  rU  r(   rS  rT  r   r   r   r   r   r   r   r   $expected-one-end-tag-but-got-anotherZgotNameZexpectedName	afterBody)	r>   r  rL   r   r~   r@   r   rI   r`   r  r)   r)   r*   rw  ^  s    

z)getPhases.<locals>.InBodyPhase.endTagBodyc                 S   s"   | j dr| td |S d S )Nr   )r>   r  rw  r   r   r)   r)   r*   rx  p  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 )Nr@   r4  rv   end-tag-too-early)
rY  r   r>   r  r  r~   r@   rL   r   r  )rC   r   ZinScoper   r)   r)   r*   ry  v  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  r@   r6  rv   zend-tag-too-early-ignored)r>   r  r  rL   r   r  r~   r  r  r)   r)   r*   rz    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 }qd S )	Nr@   r7  listr  r  excluderv   r  )r>   r  rL   r   r  r~   r@   r  )rC   r   r  r   r)   r)   r*   r|    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 qqTd S )Nrv   r@   r  )	r   r>   r  r  r~   r@   rL   r   r  )rC   r   itemr)   r)   r*   r}    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   r@   Nzadoption-agency-1.2zadoption-agency-4.4rv   zadoption-agency-1.3r  r   r   r   r   r   )r>   r  r~   r  r@   r   rL   r   r  r  indexr  r   r  Z	cloneNoder  r  ZappendChildr   ZgetTableMisnestedNodePositioninsertBeforeZreparentChildreninsert)rC   r   ZouterLoopCounterZformattingElementZafeIndexZfurthestBlockrn   ZcommonAncestorZbookmarkZlastNoder   ZinnerLoopCounterr  Zcloner  r  r)   r)   r*   r~    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 )Nr@   rv   r  )	r>   r  r  r~   r@   rL   r   r  clearActiveFormattingElements)rC   r   rn   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  rr   )rL   r   r>   r  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 qq|jtkr| jdd|d i  qqd S )Nrv   r@   r  r  )	r>   r~   r@   r  rL   r   r  r  r   r  r)   r)   r*   r   g  s    
z*getPhases.<locals>.InBodyPhase.endTagOtherN)6r9   r:   r;   rK   r  r  r   r  r   rY  rZ  r  r  r[  r]  r^  r_  r`  r\  ra  rb  rc  rd  re  rf  rg  rh  rj  ri  rk  rl  rm  rn  ro  r   rp  rs  rq  rr  rt  ru  rv  r   r{  rw  rx  ry  rz  r|  r}  r~  r  r  r   r)   r   r)   r*   InBodyPhase  sh   G
	
	 $r  c                       s@   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd ZdS )zgetPhases.<locals>.TextPhasec                    sF     | || tg | _| j| j_td| jfg| _| j| j_d S Nr   )	rK   r   r   r   r   r   endTagScriptr   r   r   r   r)   r*   rK   v  s    
z%getPhases.<locals>.TextPhase.__init__c                 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-eofr@   rv   T)rL   r   r>   r~   r@   r  r   r`   rB   r)   r)   r*   r     s    z'getPhases.<locals>.TextPhase.processEOFc                 S   s   dst d|d  d S )NFz4Tried to process start tag %s in RCDATA/RAWTEXT moder@   )r   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 r  )r>   r~   r  r@   r   rL   r   r`   r  r)   r)   r*   r    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.endTagOtherN)	r9   r:   r;   rK   r   r   r   r  r   r)   r   r)   r*   	TextPhaseu  s   r  c                       s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'S )(zgetPhases.<locals>.InTablePhasec                    s     | || 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   rW  r   r   r   )r   r   r   r   )r   r   rN  r6  )r   r   rW  r   r   r   r   r   r   r   r   )rK   r   r   r   startTagCaptionstartTagColgroupstartTagColstartTagRowGroupstartTagImplyTbodyrg  startTagStyleScriptrj  r^  r   r   r   endTagTableendTagIgnorer   r   r   r   r)   r*   rK     s*    
z(getPhases.<locals>.InTablePhase.__init__c                 S   s$   | j jd jdkr | j j  q d S )Nrv   )r   r   )r>   r~   r@   r  rB   r)   r)   r*   clearStackToTableContext  s    z8getPhases.<locals>.InTablePhase.clearStackToTableContextc                 S   s0   | j jd jdkr | jd n| jjs,td S )Nrv   r   zeof-in-tabler>   r~   r@   rL   r   rS   r   rB   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   rC   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*   r    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*   r    s    z0getPhases.<locals>.InTablePhase.startTagColgroupc                 S   s   |  tdd |S )Nr   rr   )r  r   r   r)   r)   r*   r    s    z+getPhases.<locals>.InTablePhase.startTagColc                 S   s(   |    | j| | jjd | j_d S Nr   r  r   r)   r)   r*   r    s    z0getPhases.<locals>.InTablePhase.startTagRowGroupc                 S   s   |  tdd |S )Nr   rr   )r  r   r   r)   r)   r*   r    s    z2getPhases.<locals>.InTablePhase.startTagImplyTbodyc                 S   s6   | j dddd | j jtd | j js2|S d S )Nr  r   r  )rL   r   r`   r   r   rS   r   r)   r)   r*   rg    s    z-getPhases.<locals>.InTablePhase.startTagTablec                 S   s   | j jd |S r  r   r   r)   r)   r*   r    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 )Nr3   rw   r  z unexpected-hidden-input-in-table)	rl   r   rL   r   r>   r   r~   r  r   r   r)   r)   r*   rj    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>   r  r   r~   r  r   r)   r)   r*   r^    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-voodoor@   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	st
| j  d S )Nr   r  rv   zend-tag-too-early-namedr  )r>   r  r  r~   r@   rL   r   r  rb   rS   r   r   r)   r)   r*   r    s    
z+getPhases.<locals>.InTablePhase.endTagTablec                 S   s   | j dd|d i d S r  r   r   r)   r)   r*   r    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-voodoor@   Tr   F)rL   r   r>   r  rI   r   r   r)   r)   r*   r      s    z+getPhases.<locals>.InTablePhase.endTagOtherN)r9   r:   r;   rK   r  r   r   r   r   r  r  r  r  r  rg  r  rj  r^  r   r  r  r   r)   r   r)   r*   InTablePhase  s&   	
r  c                       sP   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )z#getPhases.<locals>.InTableTextPhasec                    s     | || d | _g | _d S r.   )rK   r   characterTokensr   r   r)   r*   rK   (  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*   rD   .  s     zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c                 S   s   g | ]}|t kqS r)   r  r  r)   r)   r*   rD   /  s     rq   r  r   )joinr  r  r   rL   rI   r   r>   )rC   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   6  s    
z2getPhases.<locals>.InTableTextPhase.processCommentc                 S   s   |    | j| j_dS r   r  rB   r)   r)   r*   r   ;  s    
z.getPhases.<locals>.InTableTextPhase.processEOFc                 S   s    |d dkrd S | j | d S Nrw   r  r  r   r   r)   r)   r*   r   @  s    z5getPhases.<locals>.InTableTextPhase.processCharactersc                 S   s   | j | d S r.   r  r   r)   r)   r*   r   E  s    z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc                 S   s   |    | j| j_|S r.   r  r   r)   r)   r*   r   J  s    
z3getPhases.<locals>.InTableTextPhase.processStartTagc                 S   s   |    | j| j_|S r.   r  r   r)   r)   r*   r   O  s    
z1getPhases.<locals>.InTableTextPhase.processEndTagN)r9   r:   r;   rK   r  r   r   r   r   r   r   r)   r   r)   r*   InTableTextPhase'  s   	r  c                       s`   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )z!getPhases.<locals>.InCaptionPhasec                    sf     | || 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   rW  r   r   r   r   r   r   r   r   r   )
r   rW  r   r   r   r   r   r   r   r   )rK   r   r   r   startTagTableElementr   r   r   endTagCaptionr  r  r   r   r   r   r)   r*   rK   V  s     
z*getPhases.<locals>.InCaptionPhase.__init__c                 S   s   | j jddd S )Nr   r   r  r>   r  rB   r)   r)   r*   ignoreEndTagCaptionh  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc                 S   s   | j jd   d S r   rL   rI   r   rB   r)   r)   r*   r   k  s    z,getPhases.<locals>.InCaptionPhase.processEOFc                 S   s   | j jd |S r   rL   rI   r   r   r)   r)   r*   r   n  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc                 S   s0   | j   |  }| j jtd |s,|S d S Nr   rL   r   r  r`   r   r   rC   r   ignoreEndTagr)   r)   r*   r  q  s
    
z6getPhases.<locals>.InCaptionPhase.startTagTableElementc                 S   s   | j jd |S r   r   r   r)   r)   r*   r   y  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st| j  d S )Nrv   r   r  r  r   )r  r>   r  r~   r@   rL   r   r  r  rI   r`   rS   r   r   r)   r)   r*   r  |  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.endTagOtherN)r9   r:   r;   rK   r  r   r   r  r   r  r  r  r   r)   r   r)   r*   InCaptionPhaseT  s   r  c                       sX   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )z%getPhases.<locals>.InColumnGroupPhasec                    s^     | || td| jfd| jfg| _| j| j_td| jfd| j	fg| _
| j| j
_d S )Nr   rW  r   )rK   r   r   r   r  r   r   r   endTagColgroup	endTagColr   r   r   r   r)   r*   rK     s    
z.getPhases.<locals>.InColumnGroupPhase.__init__c                 S   s   | j jd jdkS )Nrv   r   )r>   r~   r@   rB   r)   r)   r*   ignoreEndTagColgroup  s    z:getPhases.<locals>.InColumnGroupPhase.ignoreEndTagColgroupc                 S   sD   | j jd jdkr"| jjstd S |  }| td |s@dS d S )Nrv   r   r   T)	r>   r~   r@   rL   rS   r   r  r  r   )rC   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-tagr@   rW  r   r   r)   r)   r*   r    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.endTagOtherN)r9   r:   r;   rK   r  r   r   r  r   r  r  r   r)   r   r)   r*   InColumnGroupPhase  s   
	r  c                       sx   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )z#getPhases.<locals>.InTableBodyPhasec                    sv     | || 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   rW  r   r   r   r   r  r   )r   r   rW  r   r   r   r   r   )rK   r   r   r   
startTagTrstartTagTableCellstartTagTableOtherr   r   r   endTagTableRowGroupr  r  r   r   r   r   r)   r*   rK     s$    
z,getPhases.<locals>.InTableBodyPhase.__init__c                 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~   r@   r  rL   rS   r   rB   r)   r)   r*   clearStackToTableBodyContext  s    z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc                 S   s   | j jd   d S r  r  rB   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*   r    s    z.getPhases.<locals>.InTableBodyPhase.startTagTrc                 S   s*   | j dd|d i | tdd |S )Nzunexpected-cell-in-table-bodyr@   r   rr   )rL   r   r  r   r   r)   r)   r*   r    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   r  r   r   rv   r>   r  r  r  r   r~   r@   rL   rS   r   r   r   r)   r)   r*   r    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 )Nr@   r   r  r    unexpected-end-tag-in-table-body)	r>   r  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  r@   r   r   r)   r)   r*   r  8  s    
z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec                 S   s   | j jd |S r  r  r   r)   r)   r*   r   <  s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherN)r9   r:   r;   rK   r  r   r   r   r  r  r  r   r  r  r  r   r)   r   r)   r*   InTableBodyPhase  s   
	r  c                       s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )zgetPhases.<locals>.InRowPhasec                    sv     | || 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   r  )r   rW  r   r   r   r   r   r   r   r  )r   r   rW  r   r   r   r   )rK   r   r   r   r  r  r   r   r   endTagTrr  r  r  r   r   r   r   r)   r*   rK   A  s$    
z&getPhases.<locals>.InRowPhase.__init__c                 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-rowr@   )r>   r~   r@   rL   r   r  rB   r)   r)   r*   clearStackToTableRowContextU  s
    z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc                 S   s   | j jddd S )Nr   r   r  r  rB   r)   r)   r*   ignoreEndTagTr[  s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc                 S   s   | j jd   d S r  r  rB   r)   r)   r*   r   _  s    z(getPhases.<locals>.InRowPhase.processEOFc                 S   s   | j jd |S r  r  r   r)   r)   r*   r   b  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc                 S   s   | j jd |S r  r  r   r)   r)   r*   r   e  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  h  s    z/getPhases.<locals>.InRowPhase.startTagTableCellc                 S   s"   |   }| td |s|S d S Nr   r  r  r   r  r)   r)   r*   r  n  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc                 S   s   | j jd |S r  r   r   r)   r)   r*   r   u  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  x  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 )Nr@   r   r  r   )r>   r  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-rowr@   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.endTagOtherN)r9   r:   r;   rK   r  r  r   r   r   r  r  r   r  r  r  r  r   r)   r   r)   r*   
InRowPhase?  s   
r  c                       s`   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )zgetPhases.<locals>.InCellPhasec                    sf     | || 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   rW  r   r   r  )rK   r   r   r   r  r   r   r   endTagTableCellr  endTagImplyr   r   r   r   r)   r*   rK     s    
z'getPhases.<locals>.InCellPhase.__init__c                 S   sB   | j jdddr | td n| j jdddr>| td d S Nr   r   r  r   )r>   r  r  r   rB   r)   r)   r*   	closeCell  s    z(getPhases.<locals>.InCellPhase.closeCellc                 S   s   | j jd   d S r   r  rB   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>   r  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 )Nr@   r   r  rv   zunexpected-cell-end-tagr   r  )r>   r  r  r~   r@   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 )Nr@   r   r  )r>   r  r  rL   r   r   r)   r)   r*   r    s    z*getPhases.<locals>.InCellPhase.endTagImplyc                 S   s   | j jd |S r   r  r   r)   r)   r*   r     s    z*getPhases.<locals>.InCellPhase.endTagOtherN)r9   r:   r;   rK   r  r   r   r  r   r  r  r  r   r)   r   r)   r*   InCellPhase  s   
r  c                       sx   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )z getPhases.<locals>.InSelectPhasec              	      s     | || 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   rU  rV  r   )rN  rL  rR  r   )rK   r   r   r   startTagOptionstartTagOptgrouprq  rj  r   r   r   r   endTagOptionendTagOptgroupendTagSelectr   r   r   r   r)   r*   rK     s     
z)getPhases.<locals>.InSelectPhase.__init__c                 S   s0   | j jd jdkr | jd n| jjs,td S )Nrv   r   zeof-in-selectr  rB   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 r  r>   r~   r@   r  r   r   r)   r)   r*   r  	  s    z/getPhases.<locals>.InSelectPhase.startTagOptionc                 S   sL   | j jd jdkr| j j  | j jd jdkr<| j j  | j | d S )Nrv   rU  rV  r  r   r)   r)   r*   r  	  s
    z1getPhases.<locals>.InSelectPhase.startTagOptgroupc                 S   s   | j d | td d S )Nzunexpected-select-in-selectr   )rL   r   r  r   r   r)   r)   r*   rq  	  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   r  )rL   r   r>   r  r  r   rS   r   r   r)   r)   r*   rj  	  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-selectr@   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-selectr@   r>   r~   r@   r  rL   r   r   r)   r)   r*   r  %	  s
    z-getPhases.<locals>.InSelectPhase.endTagOptionc                 S   sf   | j jd jdkr0| j jd jdkr0| j j  | j jd jdkrP| j j  n| jdddi d S )Nrv   rU  rV  r   r@   r  r   r)   r)   r*   r  ,	  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   r  )
r>   r  r~   r  r@   rL   rb   rS   r   r   r  r)   r)   r*   r  9	  s    
z-getPhases.<locals>.InSelectPhase.endTagSelectc                 S   s   | j dd|d i d S )Nr   r@   r   r   r)   r)   r*   r   D	  s    
z,getPhases.<locals>.InSelectPhase.endTagOtherN)r9   r:   r;   rK   r   r   r  r  rq  rj  r   r   r  r  r  r   r)   r   r)   r*   InSelectPhase  s   r  c                       sH   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )z'getPhases.<locals>.InSelectInTablePhasec                    sN     | || 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   )
rK   r   r   rg  r   r   r   r  r   r   r   r   r)   r*   rK   I	  s    
z0getPhases.<locals>.InSelectInTablePhase.__init__c                 S   s   | j jd   d S Nr   r  rB   r)   r)   r*   r   X	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc                 S   s   | j jd |S r  r  r   r)   r)   r*   r   [	  s    z9getPhases.<locals>.InSelectInTablePhase.processCharactersc                 S   s(   | j dd|d i | td |S )Nz5unexpected-table-element-start-tag-in-select-in-tabler@   r   )rL   r   r   r   r   r)   r)   r*   rg  ^	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec                 S   s   | j jd |S r  r   r   r)   r)   r*   r   c	  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-tabler@   r   r  r   )rL   r   r>   r  r   r   r   r)   r)   r*   r  f	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec                 S   s   | j jd |S r  r  r   r)   r)   r*   r   l	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOtherN)
r9   r:   r;   rK   r   r   rg  r   r  r   r)   r   r)   r*   InSelectInTablePhaseH	  s   r  c                -       s   e Zd Zeddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,g,Z fd-d.Zd/d0 Z fd1d2Zd3d4 Zd5d6 Z	d7S )8z(getPhases.<locals>.InForeignContentPhaser;  r<  r"  r   r   r#  r=  r8  r+   r&  r9  r>  rJ  Zh1Zh2Zh3Zh4Zh5Zh6r   rO  r@  rK  r7  r5  r.  r5   rG  r0  r(   r4  r  rA  rB  spanrD  rC  subZsupr   rE  rF  r3  varc                    s     | || d S r.   )rK   r   r   r)   r*   rK   y	  s    z1getPhases.<locals>.InForeignContentPhase.__init__c              %   S   sn   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%$}|d& |krj||d&  |d&< d S )'NZaltGlyphZaltGlyphDefZaltGlyphItemZanimateColorZanimateMotionZanimateTransformZclipPathZfeBlendZfeColorMatrixZfeComponentTransferZfeCompositeZfeConvolveMatrixZfeDiffuseLightingZfeDisplacementMapZfeDistantLightZfeFloodZfeFuncAZfeFuncBZfeFuncGZfeFuncRZfeGaussianBlurZfeImageZfeMergeZfeMergeNodeZfeMorphologyZfeOffsetZfePointLightZfeSpecularLightingZfeSpotLightZfeTileZfeTurbulenceZforeignObjectZglyphRefZlinearGradientZradialGradientZtextPath)$ZaltglyphZaltglyphdefZaltglyphitemZanimatecolorZanimatemotionZanimatetransformZclippathZfeblendZfecolormatrixZfecomponenttransferZfecompositeZfeconvolvematrixZfediffuselightingZfedisplacementmapZfedistantlightZfefloodZfefuncaZfefuncbZfefuncgZfefuncrZfegaussianblurZfeimageZfemergeZfemergenodeZfemorphologyZfeoffsetZfepointlightZfespecularlightingZfespotlightZfetileZfeturbulenceZforeignobjectZglyphrefZlineargradientZradialgradientZtextpathr@   r)   )rC   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   r  u   �c                 s   s   | ]}|t kV  qd S r.   r  r  r)   r)   r*   r   	  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sD|d dkrt|d  tdddg@ 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  qZ|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   r@   r?  rw   Z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   )rC   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stqd }q|d8 }| jj| }|j| jjkrqFqF| jj|}qqF|S )Nr   rv   r@   r  r  )r   r>   r~   r@   rl   r   rL   r   r`   rI   r  r   r  r   rj   r   r   )rC   r   Z	nodeIndexr   r   r)   r)   r*   r   	  s&    z6getPhases.<locals>.InForeignContentPhase.processEndTagN)
r9   r:   r;   r   r  rK   r
  r   r   r   r)   r   r)   r*   InForeignContentPhaseo	  s\                                   	)r  c                       sP   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )z!getPhases.<locals>.AfterBodyPhasec                    sN     | || td| jfg| _| j| j_td| jfg| _| j	| j_d S Nr   )
rK   r   r   r   r   r   r   rx  r   r   r   r   r)   r*   rK   	  s    
z*getPhases.<locals>.AfterBodyPhase.__init__c                 S   s   d S r.   r)   rB   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-bodyr@   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`   )rC   r@   r)   r)   r*   rx  
  s    z,getPhases.<locals>.AfterBodyPhase.endTagHtmlc                 S   s*   | j dd|d i | j jd | j _|S )Nzunexpected-end-tag-after-bodyr@   r   r  r   r)   r)   r*   r   
  s
    
z-getPhases.<locals>.AfterBodyPhase.endTagOtherN)r9   r:   r;   rK   r   r   r   r   r   rx  r   r)   r   r)   r*   AfterBodyPhase	  s   r  c                       sX   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )z"getPhases.<locals>.InFramesetPhasec                    sf     | || 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   rX  r   )rK   r   r   r   r  startTagFramestartTagNoframesr   r   r   endTagFramesetr   r   r   r   r)   r*   rK   
  s    
z+getPhases.<locals>.InFramesetPhase.__init__c                 S   s0   | j jd jdkr | jd n| jjs,td S )Nrv   r   zeof-in-framesetr  rB   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*   r  /
  s    z0getPhases.<locals>.InFramesetPhase.startTagFramec                 S   s   | j jd |S r   r   r   r)   r)   r*   r  3
  s    z3getPhases.<locals>.InFramesetPhase.startTagNoframesc                 S   s   | j dd|d i d S )Nz unexpected-start-tag-in-framesetr@   r   r   r)   r)   r*   r   6
  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~   r@   rL   r   r  rS   rI   r`   r   r)   r)   r*   r  :
  s    z1getPhases.<locals>.InFramesetPhase.endTagFramesetc                 S   s   | j dd|d i d S )Nzunexpected-end-tag-in-framesetr@   r   r   r)   r)   r*   r   F
  s    
z.getPhases.<locals>.InFramesetPhase.endTagOtherN)r9   r:   r;   rK   r   r   r  r  r  r   r  r   r)   r   r)   r*   InFramesetPhase
  s   r  c                       sH   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )z%getPhases.<locals>.AfterFramesetPhasec                    sV     | || td| jfd| jfg| _| j| j_td| jfg| _	| j
| j	_d S Nr   r   )rK   r   r   r   r  r   r   r   rx  r   r   r   r   r)   r*   rK   L
  s    
z.getPhases.<locals>.AfterFramesetPhase.__init__c                 S   s   d S r.   r)   rB   r)   r)   r*   r   Z
  s    z0getPhases.<locals>.AfterFramesetPhase.processEOFc                 S   s   | j d d S )Nzunexpected-char-after-framesetr   r   r)   r)   r*   r   ^
  s    z7getPhases.<locals>.AfterFramesetPhase.processCharactersc                 S   s   | j jd |S r  r   r   r)   r)   r*   r  a
  s    z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc                 S   s   | j dd|d i d S )Nz#unexpected-start-tag-after-framesetr@   r   r   r)   r)   r*   r   d
  s    
z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc                 S   s   | j jd | j _d S )NafterAfterFrameset)rL   rI   r`   r   r)   r)   r*   rx  h
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc                 S   s   | j dd|d i d S )Nz!unexpected-end-tag-after-framesetr@   r   r   r)   r)   r*   r   k
  s    
z1getPhases.<locals>.AfterFramesetPhase.endTagOtherN)
r9   r:   r;   rK   r   r   r  r   rx  r   r)   r   r)   r*   AfterFramesetPhaseJ
  s   r  c                       sP   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )z&getPhases.<locals>.AfterAfterBodyPhasec                    s0     | || td| jfg| _| j| j_d S r  )rK   r   r   r   r   r   r   r   r   r)   r*   rK   p
  s
    z/getPhases.<locals>.AfterAfterBodyPhase.__init__c                 S   s   d S r.   r)   rB   r)   r)   r*   r   x
  s    z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc                 S   s   | j || j j d S r.   r   r   r)   r)   r*   r   {
  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-tagr@   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-tagr@   r   r  r   r)   r)   r*   r   
  s
    
z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagN)r9   r:   r;   rK   r   r   r   r   r   r   r   r)   r   r)   r*   AfterAfterBodyPhaseo
  s   r  c                       sX   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )z*getPhases.<locals>.AfterAfterFramesetPhasec                    s8     | || td| jfd| jfg| _| j| j_d S r  )rK   r   r   r   startTagNoFramesr   r   r   r   r   r)   r*   rK   
  s    z3getPhases.<locals>.AfterAfterFramesetPhase.__init__c                 S   s   d S r.   r)   rB   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*   r   
  s    z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc                 S   s   | j dd|d i d S )Nr  r@   r   r   r)   r)   r*   r   
  s    
z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc                 S   s   | j dd|d i d S )Nr  r@   r   r   r)   r)   r*   r   
  s    
z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagN)r9   r:   r;   rK   r   r   r   r   r   r   r   r   r)   r   r)   r*   AfterAfterFramesetPhase
  s   	r!  )rW   rV   r   r   r
  r  r   r   r   r  r   r   r   r   r   r   r  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  r  r  r  r!  r)   r   r*   rH     sr    ) #.g@C     X! -GBbYLd's/9%&&rH   c                    s>   t | d t  @ }|r:t 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   r   r/   )r   r	  Zneeds_adjustmentr)   r$  r*   r   
  s
    
r   rs   Fc                 C   s   |d kri }t | | ||dS )N)r3   r@   rw   r{   )r   )r@   r3   rk   r{   r)   r)   r*   r   
  s
    
r   c                   @   s   e Zd ZdZdS )ru   zError in parsed documentN)r9   r:   r;   r   r)   r)   r)   r*   ru   
  s   ru   )r   T)r+   r   T)rs   NF).Z
__future__r   r   r   Zpip._vendor.sixr   r   r1   collectionsr   r   r	   r
   r   Ztreebuilders.baser   r   Z	constantsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   r-   r=   rI  r"   ZmemoizerH   r   r   	Exceptionru   r)   r)   r)   r*   <module>   sP   H

  G
                  K  
