U
    P^                    @   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)   A/tmp/pip-install-220asx0h/pip/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__)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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!   rB   errorsdict	getPhasesr/   phases)rG   rB   rI   r    debugr)   rF   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
   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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)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 )zName 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   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)rD   	namespacer   
attributes	translater   r   rG   elementr)   r)   r*   isHTMLIntegrationPoint   s    


z!HTMLParser.isHTMLIntegrationPointc                 C   s   |j |jftkS r.   )rq   rD   r   rt   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
CharactersSpaceCharactersStartTagEndTagCommentDoctype
ParseErrorr3   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AssertionError)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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)rY   rB   getDocumentrG   rW   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)rY   rB   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.   )rJ   r   rT   rW   positionrI   r~   r   )rG   	errorcoder   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   rz   r   r   )r   r   r   update)rG   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.   )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 ]}|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htmlr   r   T)r   r   r   r   )	rB   r   rD   rX   r   rq   r   rM   re   )rG   lastnewModesnodenodeName	new_phaser)   r)   r*   rg   `  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   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                    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)   )rC   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 )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 d 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 d S r.   )NotImplementedErrorrF   r)   r)   r*   r     s    z#getPhases.<locals>.Phase.processEOFc                 S   s   | j || j jd  d S )Nr   rB   insertCommentr   r   r)   r)   r*   r     s    z'getPhases.<locals>.Phase.processCommentc                 S   s   | j d d S )Nzunexpected-doctyperP   r   r   r)   r)   r*   r     s    z'getPhases.<locals>.Phase.processDoctypec                 S   s   | j |d  d S Nr   rB   
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 NrD   )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 )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   s   | j |d  |S r   )endTagHandlerr   r)   r)   r*   r     s    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   s   d S r.   r)   r   r)   r)   r*   r     s    z6getPhases.<locals>.InitialPhase.processSpaceCharactersc                 S   s   | j || j j d S r.   rB   r   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 )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     sX    
9<?@@
A
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   s   | j d |   |S )Nzexpected-doctype-but-got-charsrP   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-tagrD   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-tagrD   r   r   r)   r)   r*   r   \  s
    
z-getPhases.<locals>.InitialPhase.processEndTagc                 S   s   | j d |   dS )Nzexpected-doctype-but-got-eofTr   rF   r)   r)   r*   r   b  s    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   rz   r   )rB   
insertRootimpliedTagTokenrP   rM   re   rF   r)   r)   r*   rf   i  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc                 S   s   |    dS NTrf   rF   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 )NrD   r   T)rP   r]   rf   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 )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                       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  )rO   r   MethodDispatcherr   startTagHeadr   startTagOtherdefaultendTagImplyHeadr   endTagOtherr   r   r)   r*   rO     s    
z+getPhases.<locals>.BeforeHeadPhase.__init__c                 S   s   |  tdd dS )Nr   rz   Tr	  r  rF   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   rz   r  r   r)   r)   r*   r     s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc                 S   s   | j jd |S Nr   rP   rM   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 )Nr   inHead)rB   r   r   headPointerrP   rM   re   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-rootrD   r   r   r)   r)   r*   r    s    
z.getPhases.<locals>.BeforeHeadPhase.endTagOtherN)r=   r>   r?   rO   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   )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   s   |    dS r  r   rF   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   rB   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   r   r   	tentativecharsetcontentz
http-equivzcontent-typezutf-8)rB   r   r   r+  rP   rT   rW   rl   changeEncodingr`   r	   EncodingBytesencodeContentAttrParserr#   )rG   r   rr   r   rP   codecr)   r)   r*   r%    s     
z+getPhases.<locals>.InHeadPhase.startTagMetac                 S   s   | j |d d S )Nr   rP   r   r   r)   r)   r*   r     s    z,getPhases.<locals>.InHeadPhase.startTagTitlec                 S   s   | j |d d S )Nr   r4  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)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   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rP   rB   r   r+  rD   r   rM   re   rG   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-tagrD   r   r   r)   r)   r*   r    s    z*getPhases.<locals>.InHeadPhase.endTagOtherc                 S   s   |  td d S )Nr   )r&  r  rF   r)   r)   r*   r     s    z+getPhases.<locals>.InHeadPhase.anythingElseN)r=   r>   r?   rO   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  )rO   r   r  r   r$  startTagHeadNoscriptr   r
  r  endTagNoscriptendTagBrr   r  r   r  r)   r*   rO      s    
z/getPhases.<locals>.InHeadNoscriptPhase.__init__c                 S   s   | j d |   dS )Nzeof-in-head-noscriptTr   rF   r)   r)   r*   r   0  s    z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc                 S   s   | j jd |S Nr  )rP   rM   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@  rP   rM   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-tagrD   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-tagrD   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  r8  r9  r)   r)   r*   r>  N  s    z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc                 S   s"   | j dd|d i |   |S rD  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  rF   r)   r)   r*   r   [  s    z3getPhases.<locals>.InHeadNoscriptPhase.anythingElseN)r=   r>   r?   rO   r   r   r   r   r   r$  r=  r
  r>  r?  r  r   r)   r  r)   r*   InHeadNoscriptPhase  s   rE  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  )rO   r   r  r   startTagBodystartTagFramesetstartTagFromHeadr	  r   r
  r  r'  r   r  r   r  r)   r*   rO   `  s    	

z*getPhases.<locals>.AfterHeadPhase.__init__c                 S   s   |    dS r  r(  rF   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   )rP   rj   rB   r   rM   re   r   r)   r)   r*   rF  |  s    z.getPhases.<locals>.AfterHeadPhase.startTagBodyc                 S   s    | j | | jjd | j_d S )Nr   )rB   r   rP   rM   re   r   r)   r)   r*   rG    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-headrD   r  r   r   )
rP   r   rB   r   r   r  rM   r   rD   remover9  r)   r)   r*   rH    s    

z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc                 S   s   | j dd|d i d S rB  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   rz   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   rF  rG  rH  r	  r
  r'  r  r   r)   r  r)   r*   AfterHeadPhase_  s   
rJ  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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iframer  )noembedr  r   )rprt)optionoptgroupmathr   )r   colr   framer   r   r   r   r   r   r   )rK  rL  rM  rN  rt  rO  rP  dialogrQ  r+   rR  rS  rT  rU  rV  rW  rX  ra  rY  rZ  r[  r\  r`  r]  r^  r_  r(   )rd  re  rc  )rf  rg  rh  ri  rj  rk  rl  rs  rm  rn  ro  rp  rq  rr  r  )6rO   processSpaceCharactersNonPrer   r   r  r   startTagProcessInHeadrF  rG  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*   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kr@ qXq.| ||r.|| q.t|dkshtt|dkr| j j	|d  | j j| d S )Nr      )
rB   r   r   activeFormattingElementsr   r  r   r   r   rI  )rG   r   ru   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)rd  re  rc  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   sf   |d }| j | _|drH| jjd jdkrH| jjd  sH|dd  }|rb| j  | j| d S )Nr   
r   )r`  ra  r  r   )	r  r   r   rB   r   rD   
hasContent#reconstructActiveFormattingElementsr   )rG   r   r   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 )Nr    c                 S   s   g | ]}|t k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   s   | j jd |S r@  r  r   r)   r)   r*   r  *  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 )NrC  rD   r   r   Fr   )rP   r   r   rB   r   rD   rX   r   rj   r/   rr   r   r)   r)   r*   rF  -  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 )	NrC  rD   r   r   r   r   r   r   )rP   r   r   rB   r   rD   rX   r   rj   parentremoveChildr+  r   rM   re   r   r)   r)   r*   rG  8  s    "z/getPhases.<locals>.InBodyPhase.startTagFramesetc                 S   s.   | j jdddr| td | j | d S Nr(   rt  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(   rt  r  F)	rB   r  r  r  r   rP   rj   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 )NrC  rD   rb  r(   rt  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|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 )NFrc  re  rd  )rc  re  rd  rD   r{   )rK  r+   r(   r(   rt  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krR| jdd|d i | j j	  | j 
| d S )Nr(   rt  r  r   rC  rD   )rB   r  r  r  r   rD   r   rP   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 )Nrf  $unexpected-start-tag-implies-end-tag	startNameendName)rB   !elementInActiveFormattingElementsrP   r   r  r  r   rI  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rB| jdddd | td | j   | | d S )Nrs  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r2| jdddd | td |S | j   | j | d| j_d S )Nrt  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(   rt  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(   rt  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   r+  rP   rj   r   r)   r)   r*   r    s
    
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc                 S   s@   | j j}| | d|d kr<|d d tdkr<|| j _d S )Nr3   r   hidden)rP   rj   r  rs   r   )rG   r   rj   r)   r)   r*   r    s    
z,getPhases.<locals>.InBodyPhase.startTagInputc                 S   s$   | j | | j j  d|d< d S r)  r*  r   r)   r)   r*   r    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(   rt  r  Tr   F)	rB   r  r  r  r   r   r+  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newNamerz   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 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-tagrD   r  actionr   rb  rz   )rr   r  labelpromptz3This is a searchable index. Enter search keywords: rx   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| | n
| | 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   Nr4  r   r)   r)   r*   r    s    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krx| jjd | j_n| 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r2| j   | j jd jdkr2| 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   sZ   | j   | j| | j| td |d< | j | |d rV| j j  d|d< d S )Nro   rq   r   Tr   )	rB   r  rP   r   r   r   r   r   r+  r   r)   r)   r*   r  ,  s    
z+getPhases.<locals>.InBodyPhase.startTagMathc                 S   sZ   | j   | j| | j| td |d< | j | |d rV| j j  d|d< d S )Nr   rq   r   Tr   )	rB   r  rP   r   r   r   r   r   r+  r   r)   r)   r*   r  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-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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(   rt  r  rz   r;  rD   r{   r   )rB   r  r  r  rP   r   r  r  r   rD   r+  r9  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   r      )rd  re  rc  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   r9  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 }|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 )NrD   r`  r   end-tag-too-early)
r  r   rB   r  r  r   rD   rP   r   r+  )rG   r   inScoper   r)   r)   r*   r  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;  rD   rb  r   zend-tag-too-early-ignored)rB   r  r  rP   r   r  r   rI  r9  r)   r)   r*   r    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 )	NrD   rc  listr  r;  excluder   r  )rB   r  rP   r   r  r   rD   r+  )rG   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 )Nr   rD   r  )	r   rB   r  r  r   rD   rP   r   r+  )rG   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   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  rI  indexr  r   r+  	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rF| jdd|d i | j |d r| j j }|j|d kr~| j j }qb| j   d S )NrD   r   r  )	rB   r  r  r   rD   rP   r   r+  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  rz   )rP   r   rB   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 )Nr   rD   r  r;  )	rB   r   rD   r  rP   r   r+  r  r   r9  r)   r)   r*   r  g  s    
z*getPhases.<locals>.InBodyPhase.endTagOtherN)6r=   r>   r?   rO   r  r  r   r  r   r  r  rF  rG  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  r  r  r?  r  r)   r  r)   r*   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  )	rO   r   r  r   r
  r  endTagScriptr   r  r   r  r)   r*   rO   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-eofrD   r   T)rP   r   rB   r   rD   r+  r   re   rF   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 moderD   )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	  )rB   r   r+  rD   r   rP   r   re   r9  r)   r)   r*   r
    s    z)getPhases.<locals>.TextPhase.endTagScriptc                 S   s   | j j  | jj| j_d S r.   )rB   r   r+  rP   r   re   r   r)   r)   r*   r    s    z(getPhases.<locals>.TextPhase.endTagOtherN)	r=   r>   r?   rO   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   r  r   r   r   )r   r   r   r   )r  r  r  rb  )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   s$   | j jd jdkr | j j  q d S )Nr   )r   r   )rB   r   rD   r+  rF   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 )Nr   r   zeof-in-tablerB   r   rD   rP   r   rX   r   rF   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)rP   re   rM   r   r   rG   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  )rP   re   rM   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)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*   r    s    z/getPhases.<locals>.InTablePhase.startTagCaptionc                 S   s(   |    | j| | jjd | j_d S )Nr   r  rB   r   rP   rM   re   r   r)   r)   r*   r    s    z0getPhases.<locals>.InTablePhase.startTagColgroupc                 S   s   |  tdd |S )Nr   rz   )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   rz   )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  )rP   r   re   r   r  rX   r   r)   r)   r*   r    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   r   r  z unexpected-hidden-input-in-table)	rs   r   rP   r   rB   r   r   r+  r
  r   r)   r)   r*   r    s    z-getPhases.<locals>.InTablePhase.startTagInputc                 S   sD   | j d | jjd kr@| j| | jjd | j_| jj  d S )Nzunexpected-form-in-tabler   )rP   r   rB   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-voodoorD   Tr   F)rP   r   rB   r  rM   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  r   zend-tag-too-early-namedr  )rB   r  r  r   rD   rP   r   r+  rg   rX   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-voodoorD   Tr   F)rP   r   rB   r  rM   r   r   r)   r)   r*   r     s    z+getPhases.<locals>.InTablePhase.endTagOtherN)r=   r>   r?   rO   r  r   r   r   r   r  r  r  r  r  r  r  r  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.   )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 rJtd |d}| jjd | n|rZ| j| g | _d S )Nr   c                 S   s   g | ]}|d  qS )r   r)   rC   r  r)   r)   r*   rH   .  s     zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c                 S   s   g | ]}|t kqS r)   r  r  r)   r)   r*   rH   /  s     rx   r  r   )joinr  r  r   rP   rM   r   rB   )rG   r   r   r)   r)   r*   flushCharacters-  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc                 S   s   |    | j| j_|S r.   r!  r   rP   re   r   r)   r)   r*   r   6  s    
z2getPhases.<locals>.InTableTextPhase.processCommentc                 S   s   |    | j| j_dS r  r"  rF   r)   r)   r*   r   ;  s    
z.getPhases.<locals>.InTableTextPhase.processEOFc                 S   s    |d dkrd S | j | d S Nr   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)r=   r>   r?   rO   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   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   s   | j jddd S )Nr   r   r  rB   r  rF   r)   r)   r*   ignoreEndTagCaptionh  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc                 S   s   | j jd   d S r  rP   rM   r   rF   r)   r)   r*   r   k  s    z,getPhases.<locals>.InCaptionPhase.processEOFc                 S   s   | j jd |S r  rP   rM   r   r   r)   r)   r*   r   n  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc                 S   s0   | j   |  }| j jtd |s,|S d S Nr   rP   r   r*  re   r   r  rG   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 )Nr   r   r  r  r   )r*  rB   r  r   rD   rP   r   r+  r  rM   re   rX   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  rP   rM   r   r   r)   r)   r*   r    s    z-getPhases.<locals>.InCaptionPhase.endTagOtherN)r=   r>   r?   rO   r*  r   r   r'  r
  r(  r  r  r  r)   r  r)   r*   InCaptionPhaseT  s   r2  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   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  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 )Nr   r   r   T)	rB   r   rD   rP   rX   r   r5  r3  r  )rG   r0  r)   r)   r*   r     s    z0getPhases.<locals>.InColumnGroupPhase.processEOFc                 S   s"   |   }| td |s|S d S Nr   r5  r3  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 r6  r7  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   )
r5  rP   rX   r   r   rB   r   r+  rM   re   r   r)   r)   r*   r3    s
    z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc                 S   s   | j dddi d S )Nz
no-end-tagrD   r  r   r   r)   r)   r*   r4    s    z/getPhases.<locals>.InColumnGroupPhase.endTagColc                 S   s"   |   }| td |s|S d S r6  r7  r/  r)   r)   r*   r    s    z1getPhases.<locals>.InColumnGroupPhase.endTagOtherN)r=   r>   r?   rO   r5  r   r   r  r
  r3  r4  r  r)   r  r)   r*   InColumnGroupPhase  s   
	r9  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   r  r   r   r   r   r  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   sB   | j jd jdkr | j j  q | j jd jdkr>| jjs>td S )Nr   )r   r   r   r   r   )rB   r   rD   r+  rP   rX   r   rF   r)   r)   r*   clearStackToTableBodyContext  s    z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc                 S   s   | j jd   d S r8  r+  rF   r)   r)   r*   r     s    z.getPhases.<locals>.InTableBodyPhase.processEOFc                 S   s   | j jd |S r8  rA  r   r)   r)   r*   r      s    z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc                 S   s   | j jd |S r8  r,  r   r)   r)   r*   r     s    z5getPhases.<locals>.InTableBodyPhase.processCharactersc                 S   s(   |    | j| | jjd | j_d S )Nr   )r?  rB   r   rP   rM   re   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-bodyrD   r   rz   )rP   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   r   rB   r  r?  r>  r  r   rD   rP   rX   r   r   r   r)   r)   r*   r=    s    z6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc                 S   s   | j jd |S r8  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 )NrD   r   r  r    unexpected-end-tag-in-table-body)	rB   r  r?  r   r+  rP   rM   re   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@  rA  r   r)   r)   r*   r  +  s    z/getPhases.<locals>.InTableBodyPhase.endTagTablec                 S   s   | j dd|d i d S )NrB  rD   r   r   r)   r)   r*   r  8  s    
z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec                 S   s   | j jd |S r8  r1  r   r)   r)   r*   r  <  s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherN)r=   r>   r?   rO   r?  r   r   r   r;  r<  r=  r
  r>  r  r  r  r)   r  r)   r*   InTableBodyPhase  s   
	rC  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   r  r   r   r   r   r   r   r   r  )r   r   r  r   r   r   r   )rO   r   r  r   r<  r=  r   r
  r  endTagTrr  r>  r  r   r  r   r  r)   r*   rO   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 )Nr   )r   r   z'unexpected-implied-end-tag-in-table-rowrD   )rB   r   rD   rP   r   r+  rF   r)   r)   r*   clearStackToTableRowContextU  s
    z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc                 S   s   | j jddd S )Nr   r   r  r)  rF   r)   r)   r*   ignoreEndTagTr[  s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc                 S   s   | j jd   d S r8  r+  rF   r)   r)   r*   r   _  s    z(getPhases.<locals>.InRowPhase.processEOFc                 S   s   | j jd |S r8  rA  r   r)   r)   r*   r   b  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc                 S   s   | j jd |S r8  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   )	rE  rB   r   rP   rM   re   r  r   r   r   r)   r)   r*   r<  h  s    z/getPhases.<locals>.InRowPhase.startTagTableCellc                 S   s"   |   }| td |s|S d S Nr   rF  rD  r  r/  r)   r)   r*   r=  n  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc                 S   s   | j jd |S r8  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  )rF  rE  rB   r   r+  rP   rM   re   rX   r   r   r   r)   r)   r*   rD  x  s    z&getPhases.<locals>.InRowPhase.endTagTrc                 S   s"   |   }| td |s|S d S rG  rH  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 )NrD   r   r  r   )rB   r  rD  r  rP   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-rowrD   r   r   r)   r)   r*   r    s    
z*getPhases.<locals>.InRowPhase.endTagIgnorec                 S   s   | j jd |S r8  r1  r   r)   r)   r*   r    s    z)getPhases.<locals>.InRowPhase.endTagOtherN)r=   r>   r?   rO   rE  rF  r   r   r   r<  r=  r
  rD  r  r>  r  r  r)   r  r)   r*   
InRowPhase?  s   
rI  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   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   sB   | j jdddr | td n| j jdddr>| td d S Nr   r   r  r   )rB   r  rJ  r  rF   r)   r)   r*   	closeCell  s    z(getPhases.<locals>.InCellPhase.closeCellc                 S   s   | j jd   d S r  r+  rF   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 rL  )rB   r  rM  rP   rX   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 )NrD   r   r  r   zunexpected-cell-end-tagr   r;  )rB   r  r  r   rD   rP   r   r+  r  rM   re   r9  r)   r)   r*   rJ    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 )NrD   r   r  )rB   r  rM  rP   r   r   r)   r)   r*   rK    s    z*getPhases.<locals>.InCellPhase.endTagImplyc                 S   s   | j jd |S r  r1  r   r)   r)   r*   r    s    z*getPhases.<locals>.InCellPhase.endTagOtherN)r=   r>   r?   rO   rM  r   r   r=  r
  rJ  r  rK  r  r)   r  r)   r*   InCellPhase  s   
rN  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   r  r  r   )r  r|  r  r  )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   s0   | j jd jdkr | jd n| jjs,td S )Nr   r   zeof-in-selectr  rF   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  rB   r   rD   r+  r   r   r)   r)   r*   rO  	  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  rT  r   r)   r)   r*   rP  	  s
    z1getPhases.<locals>.InSelectPhase.startTagOptgroupc                 S   s   | j d | td d S )Nzunexpected-select-in-selectr   )rP   r   rS  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:td S )Nzunexpected-input-in-selectr   r  )rP   r   rB   r  rS  r  rX   r   r   r)   r)   r*   r  	  s
    z.getPhases.<locals>.InSelectPhase.startTagInputc                 S   s   | j jd |S r@  r  r   r)   r)   r*   r#  	  s    z/getPhases.<locals>.InSelectPhase.startTagScriptc                 S   s   | j dd|d i d S )Nzunexpected-start-tag-in-selectrD   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 )Nr   r  unexpected-end-tag-in-selectrD   rB   r   rD   r+  rP   r   r   r)   r)   r*   rQ  %	  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 )Nr   r  r  rU  rD   rV  r   r)   r)   r*   rR  ,	  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  )
rB   r  r   r+  rD   rP   rg   rX   r   r   r9  r)   r)   r*   rS  9	  s    
z-getPhases.<locals>.InSelectPhase.endTagSelectc                 S   s   | j dd|d i d S )NrU  rD   r   r   r)   r)   r*   r  D	  s    
z,getPhases.<locals>.InSelectPhase.endTagOtherN)r=   r>   r?   rO   r   r   rO  rP  r  r  r#  r
  rQ  rR  rS  r  r)   r  r)   r*   InSelectPhase  s   rX  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   )
rO   r   r  r  r   r
  r  r  r   r  r   r  r)   r*   rO   I	  s    
z0getPhases.<locals>.InSelectInTablePhase.__init__c                 S   s   | j jd   d S Nr   r+  rF   r)   r)   r*   r   X	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc                 S   s   | j jd |S rY  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-tablerD   r   )rP   r   r  r  r   r)   r)   r*   r  ^	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec                 S   s   | j jd |S rY  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-tablerD   r   r  r   )rP   r   rB   r  r  r  r   r)   r)   r*   r  f	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec                 S   s   | j jd |S rY  r1  r   r)   r)   r*   r  l	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOtherN)
r=   r>   r?   rO   r   r   r  r
  r  r  r)   r  r)   r*   InSelectInTablePhaseH	  s   rZ  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>.InForeignContentPhaserg  rh  rN  r   r  rO  ri  rd  r+   rR  re  rj  rz  h1h2h3h4h5h6r   r  rl  r{  rc  ra  rZ  r5   rs  r\  r(   r`  r  rm  rn  spanrp  ro  subsupr   rq  rr  r_  varc                    s     | || d S r.   )rO   r   r  r)   r*   rO   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 )'NaltGlyphaltGlyphDefaltGlyphItemanimateColoranimateMotionanimateTransformclipPathfeBlendfeColorMatrixfeComponentTransferfeCompositefeConvolveMatrixfeDiffuseLightingfeDisplacementMapfeDistantLightfeFloodfeFuncAfeFuncBfeFuncGfeFuncRfeGaussianBlurfeImagefeMergefeMergeNodefeMorphologyfeOffsetfePointLightfeSpecularLightingfeSpotLightfeTilefeTurbulenceforeignObjectglyphReflinearGradientradialGradienttextPath)$altglyphaltglyphdefaltglyphitemanimatecoloranimatemotionanimatetransformclippathfeblendfecolormatrixfecomponenttransferfecompositefeconvolvematrixfediffuselightingfedisplacementmapfedistantlightfefloodfefuncafefuncbfefuncgfefuncrfegaussianblurfeimagefemergefemergenodefemorphologyfeoffsetfepointlightfespecularlightingfespotlightfetilefeturbulenceforeignobjectglyphreflineargradientradialgradienttextpathrD   r)   )rG   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 )Nr   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)rP   rj   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 )Nr   rD   rk  r   colorfacesizez*unexpected-html-element-in-foreign-contentro   r   rq   r   Tr   )rB   r   breakoutElementssetkeysrP   r   rq   r   rv   rw   r+  r   r   r  r   r   r   )rG   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   r   rD   r;  r  )r   rB   r   rD   rs   r   rP   r   re   rM   r!  r   r+  r   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                       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   )
rO   r   r  r   r   r
  r  r  r   r  r   r  r)   r*   rO   	  s    
z*getPhases.<locals>.AfterBodyPhase.__init__c                 S   s   d S r.   r)   rF   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   rP   r   rM   re   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-bodyrD   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)rP   rX   r   rM   re   )rG   rD   r)   r)   r*   r  
  s    z,getPhases.<locals>.AfterBodyPhase.endTagHtmlc                 S   s*   | j dd|d i | j jd | j _|S )Nzunexpected-end-tag-after-bodyrD   r   r  r   r)   r)   r*   r  
  s
    
z-getPhases.<locals>.AfterBodyPhase.endTagOtherN)r=   r>   r?   rO   r   r   r   r   r
  r  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   r  r  )rO   r   r  r   rG  startTagFramestartTagNoframesr   r
  r  endTagFramesetr   r  r   r  r)   r*   rO   
  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 )Nr   r   zeof-in-framesetr  rF   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.   )rB   r   r   r)   r)   r*   rG  ,
  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-framesetrD   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 )Nr   r   z)unexpected-frameset-in-frameset-innerhtmlr   afterFrameset)	rB   r   rD   rP   r   r+  rX   rM   re   r   r)   r)   r*   r  :
  s    z1getPhases.<locals>.InFramesetPhase.endTagFramesetc                 S   s   | j dd|d i d S )Nzunexpected-end-tag-in-framesetrD   r   r   r)   r)   r*   r  F
  s    
z.getPhases.<locals>.InFramesetPhase.endTagOtherN)r=   r>   r?   rO   r   r   rG  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  )rO   r   r  r   r  r   r
  r  r  r   r  r   r  r)   r*   rO   L
  s    
z.getPhases.<locals>.AfterFramesetPhase.__init__c                 S   s   d S r.   r)   rF   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-framesetrD   r   r   r)   r)   r*   r
  d
  s    
z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc                 S   s   | j jd | j _d S )NafterAfterFrameset)rP   rM   re   r   r)   r)   r*   r  h
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc                 S   s   | j dd|d i d S )Nz!unexpected-end-tag-after-framesetrD   r   r   r)   r)   r*   r  k
  s    
z1getPhases.<locals>.AfterFramesetPhase.endTagOtherN)
r=   r>   r?   rO   r   r   r  r
  r  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  )rO   r   r  r   r   r
  r  r   r  r)   r*   rO   p
  s
    z/getPhases.<locals>.AfterAfterBodyPhase.__init__c                 S   s   d S r.   r)   rF   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  rA  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-tagrD   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-tagrD   r   r  r   r)   r)   r*   r   
  s
    
z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagN)r=   r>   r?   rO   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  )rO   r   r  r   startTagNoFramesr   r
  r  r   r  r)   r*   rO   
  s    z3getPhases.<locals>.AfterAfterFramesetPhase.__init__c                 S   s   d S r.   r)   rF   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  rA  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  rD   r   r   r)   r)   r*   r
  
  s    
z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc                 S   s   | j dd|d i d S )Nr  rD   r   r   r)   r)   r*   r   
  s    
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  r5  r7  r   r   r   r  r   r   r   r   r   r   r  r   r  r   r  r  r  )r   )rN   r^   r   r   r  r  r<  rE  rJ  r  r  r  r%  r2  r9  rC  rI  rN  rX  rZ  r  r  r  r  r  r  r)   r  r*   rL     sr    ) #.g@C     X! -GBbYLd's/9%&&rL   c                    s>   t | d t  @ }|r:t fdd| d  D | d< 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 k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   pip._vendor.sixr   r   r1   collectionsr   r   r	   r
   r   Ztreebuilders.baser   r   	constantsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   r-   rA   rw  r"   memoizerL   r   r  	Exceptionr~   r)   r)   r)   r*   <module>   sP   H

  G
                  K  
