U
    
Ha                    @   s  d dl mZmZmZ d dlmZmZ d dlZddlm	Z	 ddlm
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  d ddZ!d!ddZ"dd Z#G dd de$Z%ej&dd Z'dd Z(d"ddZ)G dd de*Z+dS )#    )absolute_importdivisionunicode_literals)with_metaclassviewkeysN   )_inputstream)
_tokenizer)treebuilders)Marker)_utils)spaceCharactersasciiUpper2LowerspecialElementsheadingElementscdataElementsrcdataElements
tokenTypestagTokenTypes
namespaceshtmlIntegrationPointElements"mathmlTextIntegrationPointElementsadjustForeignAttributesadjustMathMLAttributesadjustSVGAttributesE_ReparseExceptionetreeTc                 K   s$   t |}t||d}|j| f|S )a  Parse an HTML document as a string or file-like object into a tree

    :arg doc: the document to parse as a string or file-like object

    :arg treebuilder: the treebuilder to use when parsing

    :arg namespaceHTMLElements: whether or not to namespace HTML elements

    :returns: parsed tree

    Example:

    >>> from html5lib.html5parser import parse
    >>> parse('<html><body><p>This is a doc</p></body></html>')
    <Element u'{http://www.w3.org/1999/xhtml}html' at 0x7feac4909db0>

    namespaceHTMLElements)r
   getTreeBuilder
HTMLParserparse)doctreebuilderr   kwargstbp r(   D/tmp/pip-unpacked-wheel-tx790h60/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,   1   s    
r,   c                    s   G  fdddt }|S )Nc                       s   e Zd Z fddZdS )z-method_decorator_metaclass.<locals>.Decoratedc                    s>   |  D ]$\}}t|tjr$ |}|||< qt| |||S N)items
isinstancetypesFunctionTypetype__new__)meta	classnamebases	classDictattributeName	attributefunctionr(   r)   r3   L   s
    
z5method_decorator_metaclass.<locals>.Decorated.__new__N)__name__
__module____qualname__r3   r(   r:   r(   r)   	DecoratedK   s   r?   )r2   )r;   r?   r(   r:   r)   method_decorator_metaclassJ   s    r@   c                   @   s   e Zd ZdZd'ddZd(dd	Zd
d Zedd Zdd Z	dd Z
dd Zdd Zdd Zd)ddZdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& ZdS )*r!   z]HTML parser

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

    NFTc                    sH   | _ |dkrtd}|| _g  _ fddt| D  _dS )a  
        :arg tree: a treebuilder class controlling the type of tree that will be
            returned. Built in treebuilders can be accessed through
            html5lib.treebuilders.getTreeBuilder(treeType)

        :arg strict: raise an exception when a parse error is encountered

        :arg namespaceHTMLElements: whether or not to namespace HTML elements

        :arg debug: whether or not to enable debug mode which logs things

        Example:

        >>> from html5lib.html5parser import HTMLParser
        >>> parser = HTMLParser()                     # generates parser with etree builder
        >>> parser = HTMLParser('lxml', strict=True)  # generates parser with lxml builder which is strict

        Nr   c                    s   i | ]\}}||  j qS r(   )tree).0nameclsselfr(   r)   
<dictcomp>y   s      z'HTMLParser.__init__.<locals>.<dictcomp>)strictr
   r    rA   errors	getPhasesr.   phases)rF   rA   rH   r   debugr(   rE   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   )rF   stream	innerHTMLr+   rP   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)rA   rS   firstStartTagrI   log
compatModerO   r+   lowerrV   r   rR   rcdataStatestater   rawtextStateplaintextStaterK   phaseinsertHtmlElementresetInsertionMode	lastPhasebeforeRCDataPhase
framesetOKrE   r(   r(   r)   rS      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

        rR   Nr   )hasattrrR   rU   charEncodingrC   rE   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)rC   	namespacer   
attributes	translater   r   rF   elementr(   r(   r)   isHTMLIntegrationPoint   s    


z!HTMLParser.isHTMLIntegrationPointc                 C   s   |j |jftkS r-   )ro   rC   r   rr   r(   r(   r)   isMathMLTextIntegrationPoint   s    z'HTMLParser.isMathMLTextIntegrationPointc                 C   sf  t d }t d }t d }t d }t d }t d }t d }| jD ]}d }	|}
|
d k	r|
}	| jjrn| jjd nd }|r||jnd }|r|jnd }|
d	 }||kr| |
d
 |
di  d }
qLt| jjdksb|| jj	ksb| 
|r||kr|d tddgksb|||fksb|td krF|dkrF||krF|d dksb| |rj||||fkrj| j}n
| jd }||kr||
}
qL||kr||
}
qL||kr||
}
qL||kr||
}
qL||kr||
}
qL||krL||
}
qL||kr>|	d r>|	d s>| dd|	d i q>d}g }|rb|| j | j }|r,| j|ks,tq,d S )N
CharactersSpaceCharactersStartTagEndTagCommentDoctype
ParseErrorr2   datadatavarsr   rC   mglyph
malignmarkrm   rl   svginForeignContentselfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   rR   rA   openElementsro   rC   
parseErrorgetlendefaultNamespaceru   	frozensetr   rt   rc   rK   processCharactersprocessSpaceCharactersprocessStartTagprocessEndTagprocessCommentprocessDoctypeappend
processEOFAssertionError)rF   CharactersTokenSpaceCharactersTokenStartTagTokenEndTagTokenCommentTokenDoctypeTokenParseErrorTokentoken
prev_token	new_tokencurrentNodecurrentNodeNamespacecurrentNodeNamer2   rc   	reprocessrK   r(   r(   r)   rT      s    



	









zHTMLParser.mainLoopc                 O   s    | j |ddf|| | j S )a  Parse a HTML document into a well-formed tree

        :arg stream: a file-like object or string containing the HTML to be parsed

            The optional encoding parameter must be a string that indicates
            the encoding.  If specified, that encoding will be used,
            regardless of any BOM or later declaration (such as in a meta
            element).

        :arg scripting: treat noscript elements as if JavaScript was turned on

        :returns: parsed tree

        Example:

        >>> from html5lib.html5parser import HTMLParser
        >>> parser = HTMLParser()
        >>> parser.parse('<html><body><p>This is a doc</p></body></html>')
        <Element u'{http://www.w3.org/1999/xhtml}html' at 0x7feac4909db0>

        FN)rW   rA   getDocumentrF   rU   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)rW   rA   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-   )rI   r   rR   rU   positionrH   r|   r   )rF   	errorcoder   r(   r(   r)   r   ;  s
    zHTMLParser.parseErrorc                 C   s   t |t d S r-   )adjust_attributesr   rF   r   r(   r(   r)   r   C  s    z!HTMLParser.adjustMathMLAttributesc                 C   s   t |t d S r-   )r   r   r   r(   r(   r)   r   F  s    zHTMLParser.adjustSVGAttributesc                 C   s   t |t d S r-   )r   adjustForeignAttributesMapr   r(   r(   r)   r   I  s    z"HTMLParser.adjustForeignAttributesc                 C   s   | j   d S r-   )rN   rc   r   r(   r(   r)   reparseTokenNormalL  s    zHTMLParser.reparseTokenNormalc                 C   s   d}ddddddddddd	d	d
dd}| j jd d d D ]}|j}d }|| j jd krj| js`td}| j}|dkr|| js|t|s|j| j jkrq8||kr| j||  } 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   )	rA   r   rC   rV   r   ro   r   rK   rc   )rF   lastnewModesnodenodeName	new_phaser(   r(   r)   re   P  sD    


zHTMLParser.resetInsertionModec                 C   sR   |dkst | j| |dkr.| jj| j_n| jj| j_| j| _| j	d | _d S )N)RAWTEXTRCDATAr   text)
r   rA   insertElementrR   ra   r`   r_   rc   originalPhaserK   )rF   r   contentTyper(   r(   r)   parseRCDataRawtext|  s    zHTMLParser.parseRCDataRawtext)NFTF)Fr*   F)r   N)r<   r=   r>   __doc__rM   rW   rS   propertyrk   rt   ru   rT   r"   r,   r   r   r   r   r   re   r   r(   r(   r(   r)   r!   V   s$   

"
	
C
,r!   c                    s   dd }dd }G dd dt || |G dd d}G d	d
 d
}G dd d}G dd d}G dd d}G dd d}G  fddd G dd d}	G fddd}
G fdddG fddd}G fddd}G fdd d }G fd!d"d"}G fd#d$d$}G fd%d&d&}G d'd( d(}G fd)d*d*}G d+d, d,}G fd-d.d.}G fd/d0d0}G d1d2 d2}G d3d4 d4}|||||| |	|
|||||||||||||d5S )6Nc                    s$   dd t  D  fdd}|S )z4Logger that records which phase processes each tokenc                 S   s   i | ]\}}||qS r(   r(   )rB   keyvaluer(   r(   r)   rG     s      z*getPhases.<locals>.log.<locals>.<dictcomp>c                    s    j drt|dkr|d }d|d  i}|d tkrH|d |d< | jj| jjjj | jj	j
j | j
j  j |f  | f||S  | f||S d S )Nprocessr   r2   rC   )r<   
startswithr   r   rN   r\   r   rR   r`   rc   	__class__)rF   r   r%   r   infor;   
type_namesr(   r)   wrapped  s    
z'getPhases.<locals>.log.<locals>.wrapped)r   r.   )r;   r   r(   r   r)   r\     s    zgetPhases.<locals>.logc                 S   s   | rt |S tS d S r-   )r@   r2   )use_metaclassmetaclass_funcr(   r(   r)   getMetaclass  s    zgetPhases.<locals>.getMetaclassc                   @   s\   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd ZdS )zgetPhases.<locals>.PhasezNBase class for helper object that implements each phase of processing
        )rN   rA   Z__startTagCacheZ__endTagCachec                 S   s   || _ || _i | _i | _d S r-   )rN   rA   _Phase__startTagCache_Phase__endTagCache)rF   rN   rA   r(   r(   r)   rM     s    z!getPhases.<locals>.Phase.__init__c                 S   s   t d S r-   )NotImplementedErrorrE   r(   r(   r)   r     s    z#getPhases.<locals>.Phase.processEOFc                 S   s   | j || j jd  d S )Nr}   rA   insertCommentr   r   r(   r(   r)   r     s    z'getPhases.<locals>.Phase.processCommentc                 S   s   | j d d S )Nzunexpected-doctyperN   r   r   r(   r(   r)   r     s    z'getPhases.<locals>.Phase.processDoctypec                 S   s   | j |d  d S Nr~   rA   
insertTextr   r(   r(   r)   r     s    z*getPhases.<locals>.Phase.processCharactersc                 S   s   | j |d  d S r   r   r   r(   r(   r)   r     s    z/getPhases.<locals>.Phase.processSpaceCharactersc                 S   sj   |d }|| j kr| j | }nD| j|  }| j |< t| j t| jd krb| j tt| j  q2||S NrC   g?)r   startTagHandlerr   popnextiterrF   r   rC   funcr(   r(   r)   r     s    
z(getPhases.<locals>.Phase.processStartTagc                 S   sf   | j js |d dkr | j d |d  D ],\}}|| jjd jkr,|| jjd j|< q,d| j _d S )NrC   r   znon-html-rootr~   r   F)rN   r[   r   r.   rA   r   rp   rF   r   attrr   r(   r(   r)   startTagHtml  s    z%getPhases.<locals>.Phase.startTagHtmlc                 S   sj   |d }|| j kr| j | }nD| j|  }| j |< t| j t| jd krb| j tt| j  q2||S r   )r   endTagHandlerr   r   r   r   r   r(   r(   r)   r     s    
z&getPhases.<locals>.Phase.processEndTagN)r<   r=   r>   r   	__slots__rM   r   r   r   r   r   r   r   r   r(   r(   r(   r)   Phase  s   
r   c                   @   sR   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd ZdS )zgetPhases.<locals>.InitialPhasec                 S   s   d S r-   r(   r   r(   r(   r)   r     s    z6getPhases.<locals>.InitialPhase.processSpaceCharactersc                 S   s   | j || j j d S r-   rA   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 )NrC   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 quirksrY   )rN   r   rA   insertDoctyperq   r   r   r^   r]   rK   rc   )rF   r   rC   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   rY   )rN   r]   rK   rc   rE   r(   r(   r)   anythingElseZ  s    z,getPhases.<locals>.InitialPhase.anythingElsec                 S   s   | j d |   |S )Nzexpected-doctype-but-got-charsrN   r   r   r   r(   r(   r)   r   ^  s    z1getPhases.<locals>.InitialPhase.processCharactersc                 S   s"   | j dd|d i |   |S )Nz"expected-doctype-but-got-start-tagrC   r   r   r(   r(   r)   r   c  s
    
z/getPhases.<locals>.InitialPhase.processStartTagc                 S   s"   | j dd|d i |   |S )Nz expected-doctype-but-got-end-tagrC   r   r   r(   r(   r)   r   i  s
    
z-getPhases.<locals>.InitialPhase.processEndTagc                 S   s   | j d |   dS )Nzexpected-doctype-but-got-eofTr   rE   r(   r(   r)   r   o  s    z*getPhases.<locals>.InitialPhase.processEOFN)r<   r=   r>   tupler   r   r   r   r   r   r   r   r   r(   r(   r(   r)   InitialPhase  s   _r  c                   @   sJ   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd ZdS )z"getPhases.<locals>.BeforeHtmlPhasec                 S   s&   | j tdd | jjd | j_d S )Nr   rx   r   )rA   
insertRootimpliedTagTokenrN   rK   rc   rE   r(   r(   r)   rd   x  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc                 S   s   |    dS NTrd   rE   r(   r(   r)   r   }  s    z-getPhases.<locals>.BeforeHtmlPhase.processEOFc                 S   s   | j || j j d S r-   r   r   r(   r(   r)   r     s    z1getPhases.<locals>.BeforeHtmlPhase.processCommentc                 S   s   d S r-   r(   r   r(   r(   r)   r     s    z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc                 S   s   |    |S r-   r  r   r(   r(   r)   r     s    z4getPhases.<locals>.BeforeHtmlPhase.processCharactersc                 S   s    |d dkrd| j _|   |S )NrC   r   T)rN   r[   rd   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 )NrC   r   r   r   brzunexpected-end-tag-before-html)rN   r   rd   r   r(   r(   r)   r     s    
z0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)r<   r=   r>   r   r   rd   r   r   r   r   r   r   r(   r(   r(   r)   BeforeHtmlPhaset  s   r  c                   @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zedefde	fgZe
e_edefgZee_dS )z"getPhases.<locals>.BeforeHeadPhasec                 S   s   |  tdd dS )Nr   rx   TstartTagHeadr  rE   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   rx   r	  r   r(   r(   r)   r     s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc                 S   s   | j jd |S Nr   rN   rK   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)rA   r   r   headPointerrN   rK   rc   r   r(   r(   r)   r
    s    z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc                 S   s   |  tdd |S r  r	  r   r(   r(   r)   startTagOther  s    z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc                 S   s   |  tdd |S r  r	  r   r(   r(   r)   endTagImplyHead  s    z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc                 S   s   | j dd|d i d S )Nzend-tag-after-implied-rootrC   r   r   r(   r(   r)   endTagOther  s    
z.getPhases.<locals>.BeforeHeadPhase.endTagOtherr   r   r  N)r<   r=   r>   r   r   r   r   r   r   r
  r  r  r  r   MethodDispatcherr   defaultr   r(   r(   r(   r)   BeforeHeadPhase  s$   r  c                   @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zedefd efd!efd"efd#efd$e	fd%e
fd&efgZee_ed&efd'efgZee_d(S ))zgetPhases.<locals>.InHeadPhasec                 S   s   |    dS r  r   rE   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   rA   r   r   r   r   r(   r(   r)   startTagBaseLinkCommand  s    z6getPhases.<locals>.InHeadPhase.startTagBaseLinkCommandc                 S   s   | j | | j j  d|d< |d }| jjjjd dk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)rA   r   r   r   rN   rR   rU   rj   changeEncodingr^   r   EncodingBytesencodeContentAttrParserr"   )rF   r   rp   r~   rN   codecr(   r(   r)   startTagMeta  s     
z+getPhases.<locals>.InHeadPhase.startTagMetac                 S   s   | j |d d S )Nr   rN   r   r   r(   r(   r)   startTagTitle  s    z,getPhases.<locals>.InHeadPhase.startTagTitlec                 S   s   | j |d d S )Nr   r#  r   r(   r(   r)   startTagNoFramesStyle  s    z4getPhases.<locals>.InHeadPhase.startTagNoFramesStylec                 S   s8   | j jr| j |d n| j| | j jd | j _d S )Nr   inHeadNoscript)rN   rP   r   rA   r   rK   rc   r   r(   r(   r)   startTagNoscript  s    z/getPhases.<locals>.InHeadPhase.startTagNoscriptc                 S   s<   | j | | jjj| jj_| jj| j_| jjd | j_d S )Nr   )	rA   r   rN   rR   scriptDataStater`   rc   r   rK   r   r(   r(   r)   startTagScript   s    z-getPhases.<locals>.InHeadPhase.startTagScriptc                 S   s   |    |S r-   r  r   r(   r(   r)   r    s    z,getPhases.<locals>.InHeadPhase.startTagOtherc                 S   s:   | j jj }|jdks&td|j | j jd | j _d S )Nr   zExpected head got %s	afterHeadrN   rA   r   r   rC   r   rK   rc   rF   r   r   r(   r(   r)   
endTagHead
  s    z)getPhases.<locals>.InHeadPhase.endTagHeadc                 S   s   |    |S r-   r  r   r(   r(   r)   endTagHtmlBodyBr  s    z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc                 S   s   | j dd|d i d S Nunexpected-end-tagrC   r   r   r(   r(   r)   r    s    z*getPhases.<locals>.InHeadPhase.endTagOtherc                 S   s   |  td d S )Nr   )r-  r  rE   r(   r(   r)   r     s    z+getPhases.<locals>.InHeadPhase.anythingElser   title)noframesstylenoscriptscript)basebasefontbgsoundcommandlinkr4   r   )r  r   r   N)r<   r=   r>   r   r   r   r   r   r
  r  r"  r$  r%  r'  r)  r  r-  r.  r  r   r   r  r   r  r   r(   r(   r(   r)   InHeadPhase  sD   r;  c                   @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zede	fde
fdefgZee_edefdefgZee_dS )z&getPhases.<locals>.InHeadNoscriptPhasec                 S   s   | j d |   dS )Nzeof-in-head-noscriptTr   rE   r(   r(   r)   r   /  s    z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc                 S   s   | j jd |S Nr  )rN   rK   r   r   r(   r(   r)   r   4  s    z5getPhases.<locals>.InHeadNoscriptPhase.processCommentc                 S   s   | j d |   |S )Nzchar-in-head-noscriptr   r   r(   r(   r)   r   7  s    z8getPhases.<locals>.InHeadNoscriptPhase.processCharactersc                 S   s   | j jd |S r<  rN   rK   r   r   r(   r(   r)   r   <  s    z=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharactersc                 S   s   | j jd |S r  r  r   r(   r(   r)   r   ?  s    z3getPhases.<locals>.InHeadNoscriptPhase.startTagHtmlc                 S   s   | j jd |S r<  r  r   r(   r(   r)   r  B  s    z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc                 S   s   | j dd|d i d S Nunexpected-start-tagrC   r   r   r(   r(   r)   startTagHeadNoscriptE  s    z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc                 S   s"   | j dd|d i |   |S Nzunexpected-inhead-noscript-tagrC   r   r   r(   r(   r)   r  H  s    z4getPhases.<locals>.InHeadNoscriptPhase.startTagOtherc                 S   s:   | j jj }|jdks&td|j | j jd | j _d S )Nr4  zExpected noscript got %sr  r+  r,  r(   r(   r)   endTagNoscriptM  s    z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc                 S   s"   | j dd|d i |   |S rA  r   r   r(   r(   r)   endTagBrR  s    z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc                 S   s   | j dd|d i d S r/  r   r   r(   r(   r)   r  W  s    z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc                 S   s   |  td d S )Nr4  )rB  r  rE   r(   r(   r)   r   Z  s    z3getPhases.<locals>.InHeadNoscriptPhase.anythingElser   )r7  r8  r:  r4   r2  r3  )r   r4  r4  r  N)r<   r=   r>   r   r   r   r   r   r   r   r  r@  r  rB  rC  r  r   r   r  r   r  r   r(   r(   r(   r)   InHeadNoscriptPhase,  s0   rD  c                   @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zedefdefde	fde
fdefgZee_edefgZee_dS )z!getPhases.<locals>.AfterHeadPhasec                 S   s   |    dS r  r  rE   r(   r(   r)   r   n  s    z,getPhases.<locals>.AfterHeadPhase.processEOFc                 S   s   |    |S r-   r  r   r(   r(   r)   r   r  s    z3getPhases.<locals>.AfterHeadPhase.processCharactersc                 S   s   | j jd |S r  r  r   r(   r(   r)   r   v  s    z.getPhases.<locals>.AfterHeadPhase.startTagHtmlc                 S   s(   d| j _| j| | j jd | j _d S )NFr   )rN   rh   rA   r   rK   rc   r   r(   r(   r)   startTagBodyy  s    z.getPhases.<locals>.AfterHeadPhase.startTagBodyc                 S   s    | j | | jjd | j_d S )Nr   )rA   r   rN   rK   rc   r   r(   r(   r)   startTagFrameset~  s    z2getPhases.<locals>.AfterHeadPhase.startTagFramesetc                 S   sr   | j dd|d i | jj| jj | j jd | | jjd d d D ] }|jdkrL| jj	|  qnqLd S )Nz#unexpected-start-tag-out-of-my-headrC   r  r}   r   )
rN   r   rA   r   r   r  rK   r   rC   remover,  r(   r(   r)   startTagFromHead  s    

z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc                 S   s   | j dd|d i d S r>  r   r   r(   r(   r)   r
    s    z.getPhases.<locals>.AfterHeadPhase.startTagHeadc                 S   s   |    |S r-   r  r   r(   r(   r)   r    s    z/getPhases.<locals>.AfterHeadPhase.startTagOtherc                 S   s   |    |S r-   r  r   r(   r(   r)   r.    s    z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc                 S   s   | j dd|d i d S r/  r   r   r(   r(   r)   r    s    z-getPhases.<locals>.AfterHeadPhase.endTagOtherc                 S   s.   | j tdd | jjd | j_d| j_d S )Nr   rx   r   T)rA   r   r  rN   rK   rc   rh   rE   r(   r(   r)   r     s    z.getPhases.<locals>.AfterHeadPhase.anythingElser   r   r   )	r6  r7  r8  r:  r4   r2  r5  r3  r1  r   )r   r   r  N)r<   r=   r>   r   r   r   r   r   rE  rF  rH  r
  r  r.  r  r   r   r  r   r  r   r(   r(   r(   r)   AfterHeadPhasek  s4   
	rI  c                $       s  e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddde Z5dfdg Z6e78dhj9fdiefdjefdkefdlefe:efdmefdnefdoefdpefdqefdrefdsefdtefduefdvefdwefdxefdyefdzefd{efd|efd}e fd~e!fde"fde#fde$fde&fde'fde%fde(fde)fde*fg!Z;e+e;_<e78dje-fdhe.fde/fdne0fde,fde1fe:e2fde3fdue4fde5fg
Z=e6e=_<  Z>S )zgetPhases.<locals>.InBodyPhase)r   c                    s   t  | j|| | j| _d S r-   )superrM   processSpaceCharactersNonPrer   rF   r   r%   )InBodyPhaser   r(   r)   rM     s    z'getPhases.<locals>.InBodyPhase.__init__c                 S   s$   |j |j ko"|j|jko"|j|jkS r-   )rC   ro   rp   )rF   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}      )
rA   r   r   activeFormattingElementsr   rP  r   r   r   rG  )rF   r   rs   matchingElementsr   r(   r(   r)   addFormattingElement  s    z3getPhases.<locals>.InBodyPhase.addFormattingElementc                 S   s>   t d}| jjd d d D ]}|j|kr| jd  q:qd S )N)dddtlir'   r   r   r   r   r   r   r   r   r}   z expected-closing-tag-but-got-eof)r   rA   r   rC   rN   r   )rF   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}   )prelistingtextarear   )	rK  r   r   rA   r   rC   
hasContent#reconstructActiveFormattingElementsr   )rF   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   rB   charr(   r(   r)   
<listcomp>  s   zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)rA   r^  r   rN   rh   anyr   r(   r(   r)   r     s    
z0getPhases.<locals>.InBodyPhase.processCharactersc                 S   s   | j   | j |d  d S r   )rA   r^  r   r   r(   r(   r)   rK    s    
z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec                 S   s   | j jd |S r<  r  r   r(   r(   r)   startTagProcessInHead  s    z4getPhases.<locals>.InBodyPhase.startTagProcessInHeadc                 S   s   | j dddi t| jjdks4| jjd jdkrB| j jstnBd| j _|d 	 D ],\}}|| jjd j
krV|| jjd j
|< qVd S )Nr?  rC   r   r   Fr~   )rN   r   r   rA   r   rC   rV   r   rh   r.   rp   r   r(   r(   r)   rE    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?  rC   r   r   r   r}   r   r   )rN   r   r   rA   r   rC   rV   r   rh   parentremoveChildr   r   rK   rc   r   r(   r(   r)   rF    s    "z/getPhases.<locals>.InBodyPhase.startTagFramesetc                 S   s.   | j jdddr| td | j | d S Nr'   buttonvariant)rA   elementInScopeendTagPr  r   r   r(   r(   r)   startTagCloseP  s    z-getPhases.<locals>.InBodyPhase.startTagClosePc                 S   s>   | j jdddr| td | j | d| j_| j| _d S )Nr'   rj  rk  F)	rA   rm  rn  r  r   rN   rh   r_  r   r   r(   r(   r)   startTagPreListing  s
    z1getPhases.<locals>.InBodyPhase.startTagPreListingc                 S   sZ   | j jr| jdddi n:| j jdddr:| td | j | | j jd | j _d S )Nr?  rC   formr'   rj  rk  r}   )	rA   formPointerrN   r   rm  rn  r  r   r   r   r(   r(   r)   startTagForm  s    z+getPhases.<locals>.InBodyPhase.startTagFormc                 S   s   d| j _dgddgddgd}||d  }t| jjD ]@}|j|kr^| j jt|jd  qx|j	t
kr6|jdkr6 qxq6| jjd	d
dr| j jtd	d | j| d S )NFrW  rV  rU  )rW  rV  rU  rC   ry   )addressr*   r'   r'   rj  rk  )rN   rh   reversedrA   r   rC   rc   r   r  	nameTupler   rm  r   )rF   r   stopNamesMap	stopNamesr   r(   r(   r)   startTagListItem&  s*    


z/getPhases.<locals>.InBodyPhase.startTagListItemc                 S   s>   | j jdddr| td | j | | jjj| jj_d S ri  )	rA   rm  rn  r  r   rN   rR   rb   r`   r   r(   r(   r)   startTagPlaintext<  s    z0getPhases.<locals>.InBodyPhase.startTagPlaintextc                 S   sb   | j jdddr| td | j jd jtkrR| jdd|d i | j j	  | j 
| d S )Nr'   rj  rk  r}   r?  rC   )rA   rm  rn  r  r   rC   r   rN   r   r   r   r   r(   r(   r)   startTagHeadingB  s    z.getPhases.<locals>.InBodyPhase.startTagHeadingc                 S   s~   | j d}|rf| jdddd | td || j jkrL| j j| || j jkrf| j j| | j 	  | 
| d S )Na$unexpected-start-tag-implies-end-tag	startNameendName)rA   !elementInActiveFormattingElementsrN   r   endTagFormattingr  r   rG  rR  r^  rT  )rF   r   afeAElementr(   r(   r)   	startTagAJ  s    
z(getPhases.<locals>.InBodyPhase.startTagAc                 S   s   | j   | | d S r-   )rA   r^  rT  r   r(   r(   r)   startTagFormattingW  s    
z1getPhases.<locals>.InBodyPhase.startTagFormattingc                 S   sP   | j   | j drB| jdddd | td | j   | | d S )Nnobrr}  r~  )rA   r^  rm  rN   r   r   r  rT  r   r(   r(   r)   startTagNobr[  s    

z+getPhases.<locals>.InBodyPhase.startTagNobrc                 S   sT   | j dr2| jdddd | td |S | j   | j | d| j_d S )Nrj  r}  r~  F)	rA   rm  rN   r   r   r  r^  r   rh   r   r(   r(   r)   startTagButtone  s    
z-getPhases.<locals>.InBodyPhase.startTagButtonc                 S   s0   | j   | j | | j jt d| j_d S NF)rA   r^  r   rR  r   r   rN   rh   r   r(   r(   r)   startTagAppletMarqueeObjectp  s    
z:getPhases.<locals>.InBodyPhase.startTagAppletMarqueeObjectc                 S   sB   | j jdddr| td | j   d| j_| j|d d S )Nr'   rj  rk  Fr   )rA   rm  rn  r  r^  rN   rh   r   r   r(   r(   r)   startTagXmpv  s
    
z*getPhases.<locals>.InBodyPhase.startTagXmpc                 S   sR   | j jdkr*| jjdddr*| td | j| d| j _| j jd | j _	d S )Nr   r'   rj  rk  Fr   )
rN   r]   rA   rm  r   r  r   rh   rK   rc   r   r(   r(   r)   startTagTable}  s    z,getPhases.<locals>.InBodyPhase.startTagTablec                 S   s6   | j   | j | | j j  d|d< d| j_d S )NTr   F)rA   r^  r   r   r   rN   rh   r   r(   r(   r)   startTagVoidFormatting  s
    
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc                 S   s@   | j j}| | d|d kr<|d d tdkr<|| j _d S )Nr2   r~   hidden)rN   rh   r  rq   r   )rF   r   rh   r(   r(   r)   startTagInput  s    
z,getPhases.<locals>.InBodyPhase.startTagInputc                 S   s$   | j | | j j  d|d< d S r  r  r   r(   r(   r)   startTagParamSource  s    z2getPhases.<locals>.InBodyPhase.startTagParamSourcec                 S   sJ   | j jdddr| td | j | | j j  d|d< d| j_d S )Nr'   rj  rk  Tr   F)	rA   rm  rn  r  r   r   r   rN   rh   r   r(   r(   r)   
startTagHr  s    z)getPhases.<locals>.InBodyPhase.startTagHrc                 S   s6   | j dddd | tdd|d |d d d S )	Nzunexpected-start-tag-treated-asimageimgoriginalNamenewNamerx   r~   r   rp   r   )rN   r   r   r  r   r(   r(   r)   startTagImage  s    
z,getPhases.<locals>.InBodyPhase.startTagImagec                 S   s  | j dddi | jjrd S i }d|d kr>|d d |d< | tdd|d | td	d | td
d d|d kr|d d }nd}| td |d |d  }d|kr|d= d|kr|d= d|d< | tdd||d d | 	td
 | td	d | 	td d S )Nzdeprecated-tagrC   isindexactionr~   rq  rx   )rp   hrlabelpromptz3This is a searchable index. Enter search keywords: rv   r2   r~   inputr   r  )
rN   r   rA   rr  r   r  r   r   copyr   )rF   r   
form_attrsr  rp   r(   r(   r)   startTagIsIndex  s<    

z.getPhases.<locals>.InBodyPhase.startTagIsIndexc                 S   s0   | j | | jjj| jj_| j| _d| j_d S r  )	rA   r   rN   rR   r_   r`   r_  r   rh   r   r(   r(   r)   startTagTextarea  s    z/getPhases.<locals>.InBodyPhase.startTagTextareac                 S   s   d| j _| | d S r  )rN   rh   startTagRawtextr   r(   r(   r)   startTagIFrame  s    z-getPhases.<locals>.InBodyPhase.startTagIFramec                 S   s"   | j jr| | n
| | d S r-   )rN   rP   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   Nr#  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}   option)	rA   r   rC   rN   rc   r   r  r^  r   r   r(   r(   r)   startTagOpt  s    
z*getPhases.<locals>.InBodyPhase.startTagOptc                 S   s   | j   | j | d| j_| jj| jjd | jjd | jjd | jjd | jjd | jjd fkrx| jjd | j_n| jjd	 | j_d S )
NFr   r   r   r   r   r   inSelectInTabler   )rA   r^  r   rN   rh   rc   rK   r   r(   r(   r)   startTagSelect  s    





z-getPhases.<locals>.InBodyPhase.startTagSelectc                 S   sB   | j dr2| j   | j jd jdkr2| j  | j | d S )Nrubyr}   )rA   rm  generateImpliedEndTagsr   rC   rN   r   r   r   r(   r(   r)   startTagRpRt  s
    

z+getPhases.<locals>.InBodyPhase.startTagRpRtc                 S   sZ   | j   | j| | j| td |d< | j | |d rV| j j  d|d< d S )Nrm   ro   r   Tr   )	rA   r^  rN   r   r   r   r   r   r   r   r(   r(   r)   startTagMath  s    
z+getPhases.<locals>.InBodyPhase.startTagMathc                 S   sZ   | j   | j| | j| td |d< | j | |d rV| j j  d|d< d S )Nr   ro   r   Tr   )	rA   r^  rN   r   r   r   r   r   r   r   r(   r(   r)   startTagSvg  s    
z*getPhases.<locals>.InBodyPhase.startTagSvgc                 S   s   | j dd|d i dS )a5   Elements that should be children of other elements that have a
            different insertion mode; here they are ignored
            "caption", "col", "colgroup", "frame", "frameset", "head",
            "option", "optgroup", "tbody", "td", "tfoot", "th", "thead",
            "tr", "noscript"
            zunexpected-start-tag-ignoredrC   Nr   r   r(   r(   r)   startTagMisplaced  s    z0getPhases.<locals>.InBodyPhase.startTagMisplacedc                 S   s   | j   | j | d S r-   )rA   r^  r   r   r(   r(   r)   r    s    
z,getPhases.<locals>.InBodyPhase.startTagOtherc                 S   s   | j jdddsD| tdd | jdddi | tdd nT| j d | j jd j	dkrt| jdddi | j j
 }|j	dkr| j j
 }qd S )	Nr'   rj  rk  rx   r0  rC   ry   r}   )rA   rm  ro  r  rN   r   rn  r  r   rC   r   r,  r(   r(   r)   rn    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}      )rU  rV  rW  optgroupr  r'   rprtr   r   r   r   r   r   r   r   $expected-one-end-tag-but-got-anothergotNameexpectedName	afterBody)	rA   rm  rN   r   r   rC   r   rK   rc   r,  r(   r(   r)   
endTagBody)  s    

z)getPhases.<locals>.InBodyPhase.endTagBodyc                 S   s"   | j dr| td |S d S )Nr   )rA   rm  r  r  r   r(   r(   r)   
endTagHtml;  s    z)getPhases.<locals>.InBodyPhase.endTagHtmlc                 S   s   |d dkr| j | _| j|d }|r2| j  | jjd j|d kr^| jdd|d i |r| jj	 }|j|d kr| jj	 }qnd S )NrC   rZ  r}   end-tag-too-early)
rK  r   rA   rm  r  r   rC   rN   r   r   )rF   r   inScoper   r(   r(   r)   endTagBlockA  s    
z*getPhases.<locals>.InBodyPhase.endTagBlockc                 S   sv   | j j}d | j _|d ks$| j |s8| jdddi n:| j   | j jd |krd| jdddi | j j| d S )Nr0  rC   rq  r}   zend-tag-too-early-ignored)rA   rr  rm  rN   r   r  r   rG  r,  r(   r(   r)   
endTagFormO  s    
z)getPhases.<locals>.InBodyPhase.endTagFormc                 S   s   |d dkrd}nd }| j j|d |dsB| jdd|d i nf| j j|d d | j jd j|d kr| jdd|d i | j j }|j|d kr| j j }qd S )	NrC   rW  listrk  r0  excluder}   r  )rA   rm  rN   r   r  r   rC   r   )rF   r   rl  r   r(   r(   r)   endTagListItem\  s    
z-getPhases.<locals>.InBodyPhase.endTagListItemc                 S   s   t D ]}| j|r| j   q$q| jjd j|d krP| jdd|d i t D ]8}| j|rT| jj }|jt kr| jj }qp qqTd S )Nr}   rC   r  )	r   rA   rm  r  r   rC   rN   r   r   )rF   r   itemr(   r(   r)   endTagHeadingm  s    

z,getPhases.<locals>.InBodyPhase.endTagHeadingc                 S   s  d}|dk r
|d7 }| j |d }|rD|| j jkrR| j |jsR| | dS || j jkr| jdd|d i | j j	| dS | j |js| jdd|d i dS || j jd kr| jd	d|d i | j j
|}d}| j j|d D ]}|jtkr|} qq|dkrR| j j }||kr@| j j }q&| j j	| dS | j j|d  }| j j
|}| }	}
d}| j j
|
}|d
k rX|d7 }|d8 }| j j| }
|
| j jkr| j j	|
 q|
|krސqX|	|kr| j j
|
d }|
 }|| j j| j j
|
< || j j| j j
|
< |}
|	jrF|	j|	 |
|	 |
}	q|	jrl|	j|	 |jtdkr| j  \}}||	| n
||	 | }|| || | j j	| | j j|| | j j	| | j j| j j
|d | qdS )z)The much-feared adoption agency algorithmr      r   rC   Nzadoption-agency-1.2zadoption-agency-4.4r}   zadoption-agency-1.3rQ  r   r   r   r   r   )rA   r  r   rm  rC   r  rN   r   rR  rG  indexrv  r   r   	cloneNoderg  rh  appendChildr   getTableMisnestedNodePositioninsertBeforereparentChildreninsert)rF   r   outerLoopCounterformattingElementafeIndexfurthestBlockrs   commonAncestorbookmarklastNoder   innerLoopCounterr  clonerg  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 )NrC   r}   r  )	rA   rm  r  r   rC   rN   r   r   clearActiveFormattingElements)rF   r   rs   r(   r(   r)   endTagAppletMarqueeObject  s    
z8getPhases.<locals>.InBodyPhase.endTagAppletMarqueeObjectc                 S   s@   | j dddd | j  | jtdd | jj  d S )Nzunexpected-end-tag-treated-asr  z
br elementr  rx   )rN   r   rA   r^  r   r  r   r   r   r(   r(   r)   rC  +  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}   rC   r  r0  )	rA   r   rC   r  rN   r   r   rv  r   r,  r(   r(   r)   r  2  s    
z*getPhases.<locals>.InBodyPhase.endTagOtherr   )	r6  r7  r8  r9  r:  r4   r5  r3  r1  r   r   )rt  articleaside
blockquotecenterdetailsdirr*   dlfieldset
figcaptionfigurefooterheaderhgroupmainmenunavolr'   sectionsummaryul)rZ  r[  rq  )rW  rU  rV  rX   r|  )bbigcodeemfontissmallstrikestrongttur  rj  )appletmarqueeobjectxmpr   )arear  embedr  keygenwbr)paramsourcetrackr  r  r  r  r\  iframer4  )noembedr2  r   )r  r  )r  r  mathr   )r   colr   framer   r   r   r   r   r   r   )rt  r  r  r  rj  r  r  dialogr  r*   r  r  r  r  r  r  r  r[  r  r  r  r  rZ  r  r  r  r'   )rU  rV  rW  )r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )?r<   r=   r>   r   rM   rP  rT  r   r_  r   rK  rf  rE  rF  ro  rp  rs  ry  rz  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r  r  r  r  r  r  r  r  rn  r  r  r  r  r  r  r  r  rC  r  r   r  r   r   r   r  r   __classcell__r(   )rM  r   r   r)   rM    s   
	
	 $-rM  c                   @   s`   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	e
g Zee_e
defgZe	e_dS )zgetPhases.<locals>.TextPhasec                 S   s   | j |d  d S r   r   r   r(   r(   r)   r     s    z.getPhases.<locals>.TextPhase.processCharactersc                 S   s8   | j dd| jjd ji | jj  | j j| j _dS )Nz&expected-named-closing-tag-but-got-eofrC   r}   T)rN   r   rA   r   rC   r   r   rc   rE   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 moderC   )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 )Nr5  )rA   r   r   rC   r   rN   r   rc   r,  r(   r(   r)   endTagScript  s    z)getPhases.<locals>.TextPhase.endTagScriptc                 S   s   | j j  | jj| j_d S r-   )rA   r   r   rN   r   rc   r   r(   r(   r)   r    s    z(getPhases.<locals>.TextPhase.endTagOtherr5  N)r<   r=   r>   r   r   r   r   r  r  r  r   r  r   r  r   r(   r(   r(   r)   	TextPhase  s   
r  c                       s  e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zed% jfd&e
fd'efd(efd)efd*efd+efd,efd-efd.efg
Zee_ed+efd/efgZee_d0S )1zgetPhases.<locals>.InTablePhasec                 S   s$   | j jd jdkr | j j  q d S )Nr}   )r   r   )rA   r   rC   r   rE   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rA   r   rC   rN   r   rV   r   rE   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)rN   rc   rK   r   r   rF   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  )rN   rc   rK   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)rA   insertFromTablerN   rK   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  rA   rR  r   r   r   rN   rK   rc   r   r(   r(   r)   startTagCaption  s    z/getPhases.<locals>.InTablePhase.startTagCaptionc                 S   s(   |    | j| | jjd | j_d S )Nr   r  rA   r   rN   rK   rc   r   r(   r(   r)   startTagColgroup  s    z0getPhases.<locals>.InTablePhase.startTagColgroupc                 S   s   |  tdd |S )Nr   rx   )r  r  r   r(   r(   r)   startTagCol  s    z+getPhases.<locals>.InTablePhase.startTagColc                 S   s(   |    | j| | jjd | j_d S Nr   r  r   r(   r(   r)   startTagRowGroup  s    z0getPhases.<locals>.InTablePhase.startTagRowGroupc                 S   s   |  tdd |S )Nr   rx   )r  r  r   r(   r(   r)   startTagImplyTbody  s    z2getPhases.<locals>.InTablePhase.startTagImplyTbodyc                 S   s6   | j dddd | j jtd | j js2|S d S )Nr}  r   r~  )rN   r   rc   r   r  rV   r   r(   r(   r)   r    s    z-getPhases.<locals>.InTablePhase.startTagTablec                 S   s   | j jd |S r<  r  r   r(   r(   r)   startTagStyleScript  s    z3getPhases.<locals>.InTablePhase.startTagStyleScriptc                 S   sV   d|d krH|d d  tdkrH| jd | j| | jj  n
| | d S )Nr2   r~   r  z unexpected-hidden-input-in-table)	rq   r   rN   r   rA   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}   )rN   r   rA   rr  r   r   r   r   r(   r(   r)   rs    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-voodoorC   Tr   F)rN   r   rA   r  rK   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   rk  r}   zend-tag-too-early-namedr  )rA   rm  r  r   rC   rN   r   r   re   rV   r   r   r(   r(   r)   endTagTable  s    
z+getPhases.<locals>.InTablePhase.endTagTablec                 S   s   | j dd|d i d S r/  r   r   r(   r(   r)   endTagIgnore  s    z,getPhases.<locals>.InTablePhase.endTagIgnorec                 S   s<   | j dd|d i d| j_| j jd | d| j_d S )Nz'unexpected-end-tag-implies-table-voodoorC   Tr   F)rN   r   rA   r  rK   r   r   r(   r(   r)   r    s    z+getPhases.<locals>.InTablePhase.endTagOtherr   r   r   r  r   r   r   )r   r   r   r   )r3  r5  r  rq  )r   r   r  r   r   r   r   r   r   r   r   N)r<   r=   r>   r   r   r  r   r   r   r   r  r  r  r  r  r  r  r  rs  r  r  r  r  r   r  r   r   r  r   r(   r   r(   r)   InTablePhase  sN   	
r!  c                       sZ   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Z  ZS )z#getPhases.<locals>.InTableTextPhase)r   characterTokensc                    s"   t  | j|| d | _g | _d S r-   )rJ  rM   r   r"  rL  )InTableTextPhaser   r(   r)   rM   6  s    z,getPhases.<locals>.InTableTextPhase.__init__c                 S   sd   d dd | jD }tdd |D rJtd |d}| jjd | n|rZ| j| g | _d S )Nr   c                 S   s   g | ]}|d  qS )r~   r(   rB   r  r(   r(   r)   rd  <  s     zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c                 S   s   g | ]}|t kqS r(   ra  r$  r(   r(   r)   rd  =  s     rv   r  r   )joinr"  re  r   rN   rK   r   rA   )rF   r~   r   r(   r(   r)   flushCharacters;  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc                 S   s   |    | j| j_|S r-   r&  r   rN   rc   r   r(   r(   r)   r   D  s    
z2getPhases.<locals>.InTableTextPhase.processCommentc                 S   s   |    | j| j_dS r  r'  rE   r(   r(   r)   r   I  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   N  s    z5getPhases.<locals>.InTableTextPhase.processCharactersc                 S   s   | j | d S r-   r)  r   r(   r(   r)   r   S  s    z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc                 S   s   |    | j| j_|S r-   r'  r   r(   r(   r)   r   X  s    
z3getPhases.<locals>.InTableTextPhase.processStartTagc                 S   s   |    | j| j_|S r-   r'  r   r(   r(   r)   r   ]  s    
z1getPhases.<locals>.InTableTextPhase.processEndTag)r<   r=   r>   r   rM   r&  r   r   r   r   r   r   r  r(   )r#  r  r)   r#  3  s   	r#  c                       s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zed jfdefgZe	e_ede
fdefdefgZee_dS )z!getPhases.<locals>.InCaptionPhasec                 S   s   | j jddd S )Nr   r   rk  rA   rm  rE   r(   r(   r)   ignoreEndTagCaptionf  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc                 S   s   | j jd   d S r  rN   rK   r   rE   r(   r(   r)   r   i  s    z,getPhases.<locals>.InCaptionPhase.processEOFc                 S   s   | j jd |S r  rN   rK   r   r   r(   r(   r)   r   l  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc                 S   s0   | j   |  }| j jtd |s,|S d S Nr   rN   r   r+  rc   r   r  rF   r   ignoreEndTagr(   r(   r)   startTagTableElemento  s
    
z6getPhases.<locals>.InCaptionPhase.startTagTableElementc                 S   s   | j jd |S r  r  r   r(   r(   r)   r  w  s    z/getPhases.<locals>.InCaptionPhase.startTagOtherc                 S   s   |   s| j  | jjd jdkrB| jdd| jjd jd | jjd jdkrb| jj  qB| jj  | j  | jj	d | j_
n| jjst| j  d S )Nr}   r   r  r  r   )r+  rA   r  r   rC   rN   r   r   r  rK   rc   rV   r   r   r(   r(   r)   endTagCaptionz  s    

z/getPhases.<locals>.InCaptionPhase.endTagCaptionc                 S   s0   | j   |  }| j jtd |s,|S d S r.  r/  r0  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  rN   rK   r   r   r(   r(   r)   r    s    z-getPhases.<locals>.InCaptionPhase.endTagOtherr   	r   r  r   r   r   r   r   r   r   r   r   )
r   r  r   r   r   r   r   r   r   r   N)r<   r=   r>   r   r   r+  r   r   r2  r  r3  r  r  r  r   r  r   r   r  r   r(   r   r(   r)   InCaptionPhaseb  s2   r6  c                       s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zed jfdefgZe	e_ede
fdefgZee_dS )z%getPhases.<locals>.InColumnGroupPhasec                 S   s   | j jd jdkS )Nr}   r   )rA   r   rC   rE   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)	rA   r   rC   rN   rV   r   r7  endTagColgroupr  )rF   r1  r(   r(   r)   r     s    z0getPhases.<locals>.InColumnGroupPhase.processEOFc                 S   s"   |   }| td |s|S d S Nr   r7  r8  r  r0  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 r9  r:  r0  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   )
r7  rN   rV   r   r   rA   r   r   rK   rc   r   r(   r(   r)   r8    s
    z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc                 S   s   | j dddi d S )Nz
no-end-tagrC   r  r   r   r(   r(   r)   	endTagCol  s    z/getPhases.<locals>.InColumnGroupPhase.endTagColc                 S   s"   |   }| td |s|S d S r9  r:  r0  r(   r(   r)   r    s    z1getPhases.<locals>.InColumnGroupPhase.endTagOtherr   r  r   N)r<   r=   r>   r   r   r7  r   r   r  r  r8  r<  r  r   r  r   r   r  r   r(   r   r(   r)   InColumnGroupPhase  s&   
	r=  c                       s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zed jfde	fde
fdefgZee_edefdefdefgZee_d S )!z#getPhases.<locals>.InTableBodyPhasec                 S   sB   | j jd jdkr | j j  q | j jd jdkr>| jjs>td S )Nr}   )r   r   r   r   r   )rA   r   rC   r   rN   rV   r   rE   r(   r(   r)   clearStackToTableBodyContext  s    z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc                 S   s   | j jd   d S r;  r,  rE   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>  rA   r   rN   rK   rc   r   r(   r(   r)   
startTagTr   s    z.getPhases.<locals>.InTableBodyPhase.startTagTrc                 S   s*   | j dd|d i | tdd |S )Nzunexpected-cell-in-table-bodyrC   r   rx   )rN   r   r?  r  r   r(   r(   r)   startTagTableCell  s
    
z5getPhases.<locals>.InTableBodyPhase.startTagTableCellc                 S   sn   | j jddds0| j jddds0| j jdddrT|   | t| j jd j |S | jjs`t	| j
  d S Nr   r   rk  r   r   r}   rA   rm  r>  endTagTableRowGroupr  r   rC   rN   rV   r   r   r   r(   r(   r)   startTagTableOther  s    z6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc                 S   s   | j jd |S r;  r  r   r(   r(   r)   r    s    z1getPhases.<locals>.InTableBodyPhase.startTagOtherc                 S   sT   | j j|d ddr:|   | j j  | jjd | j_n| jdd|d i d S )NrC   r   rk  r    unexpected-end-tag-in-table-body)	rA   rm  r>  r   r   rN   rK   rc   r   r   r(   r(   r)   rC    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 rA  rB  r   r(   r(   r)   r  %  s    z/getPhases.<locals>.InTableBodyPhase.endTagTablec                 S   s   | j dd|d i d S )NrE  rC   r   r   r(   r(   r)   r  2  s    
z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec                 S   s   | j jd |S r;  r4  r   r(   r(   r)   r  6  s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherr   r   r   r   )r   r  r   r   r   r   r  r   )r   r   r  r   r   r   r   r   N)r<   r=   r>   r   r   r>  r   r   r   r?  r@  rD  r  rC  r  r  r  r   r  r   r   r  r   r(   r   r(   r)   InTableBodyPhase  s<   
	rG  c                       s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zed jfde
fdefgZee_edefdefd efd!efgZee_d"S )#zgetPhases.<locals>.InRowPhasec                 S   s@   | j jd jdkr<| jdd| j jd ji | j j  q d S )Nr}   )r   r   z'unexpected-implied-end-tag-in-table-rowrC   )rA   r   rC   rN   r   r   rE   r(   r(   r)   clearStackToTableRowContextO  s
    z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc                 S   s   | j jddd S )Nr   r   rk  r*  rE   r(   r(   r)   ignoreEndTagTrU  s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc                 S   s   | j jd   d S r;  r,  rE   r(   r(   r)   r   Y  s    z(getPhases.<locals>.InRowPhase.processEOFc                 S   s   | j jd |S r;  r=  r   r(   r(   r)   r   \  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc                 S   s   | j jd |S r;  r-  r   r(   r(   r)   r   _  s    z/getPhases.<locals>.InRowPhase.processCharactersc                 S   s6   |    | j| | jjd | j_| jjt d S )Nr   )	rH  rA   r   rN   rK   rc   rR  r   r   r   r(   r(   r)   r@  b  s    z/getPhases.<locals>.InRowPhase.startTagTableCellc                 S   s"   |   }| td |s|S d S Nr   rI  endTagTrr  r0  r(   r(   r)   rD  h  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc                 S   s   | j jd |S r;  r  r   r(   r(   r)   r  o  s    z+getPhases.<locals>.InRowPhase.startTagOtherc                 S   sH   |   s.|   | jj  | jjd | j_n| jjs:t	| j
  d S r  )rI  rH  rA   r   r   rN   rK   rc   rV   r   r   r   r(   r(   r)   rL  r  s    z&getPhases.<locals>.InRowPhase.endTagTrc                 S   s"   |   }| td |s|S d S rJ  rK  r0  r(   r(   r)   r  |  s    z)getPhases.<locals>.InRowPhase.endTagTablec                 S   s4   | j j|d ddr&| td |S | j  d S )NrC   r   rk  r   )rA   rm  rL  r  rN   r   r   r(   r(   r)   rC    s    z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc                 S   s   | j dd|d i d S )Nzunexpected-end-tag-in-table-rowrC   r   r   r(   r(   r)   r    s    
z*getPhases.<locals>.InRowPhase.endTagIgnorec                 S   s   | j jd |S r;  r4  r   r(   r(   r)   r    s    z)getPhases.<locals>.InRowPhase.endTagOtherr   rF  )r   r  r   r   r   r   r   r   r   r  )r   r   r  r   r   r   r   N)r<   r=   r>   r   r   rH  rI  r   r   r   r@  rD  r  rL  r  rC  r  r  r   r  r   r   r  r   r(   r   r(   r)   
InRowPhaseJ  s>   
rM  c                       s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zed jfdefgZe	e_ede
fdefdefgZee_dS )zgetPhases.<locals>.InCellPhasec                 S   sB   | j jdddr | td n| j jdddr>| td d S Nr   r   rk  r   )rA   rm  endTagTableCellr  rE   r(   r(   r)   	closeCell  s    z(getPhases.<locals>.InCellPhase.closeCellc                 S   s   | j jd   d S r  r,  rE   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 rN  )rA   rm  rP  rN   rV   r   r   r   r(   r(   r)   rD    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 )NrC   r   rk  r}   zunexpected-cell-end-tagr   r0  )rA   rm  r  r   rC   rN   r   r   r  rK   rc   r,  r(   r(   r)   rO    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 )NrC   r   rk  )rA   rm  rP  rN   r   r   r(   r(   r)   endTagImply  s    z*getPhases.<locals>.InCellPhase.endTagImplyc                 S   s   | j jd |S r  r4  r   r(   r(   r)   r    s    z*getPhases.<locals>.InCellPhase.endTagOtherr   r5  rF  )r   r   r  r   r   r  N)r<   r=   r>   r   r   rP  r   r   rD  r  rO  r  rQ  r  r   r  r   r   r  r   r(   r   r(   r)   InCellPhase  s.   
rR  c                	       s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zed jfdefdefde	fde
fdefgZee_edefdefdefgZee_dS ) z getPhases.<locals>.InSelectPhasec                 S   s0   | j jd jdkr | jd n| jjs,td S )Nr}   r   zeof-in-selectr  rE   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  rA   r   rC   r   r   r   r(   r(   r)   startTagOption  s    z/getPhases.<locals>.InSelectPhase.startTagOptionc                 S   sL   | j jd jdkr| j j  | j jd jdkr<| j j  | j | d S )Nr}   r  r  rS  r   r(   r(   r)   startTagOptgroup	  s
    z1getPhases.<locals>.InSelectPhase.startTagOptgroupc                 S   s   | j d | td d S )Nzunexpected-select-in-selectr   )rN   r   endTagSelectr  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   rk  )rN   r   rA   rm  rV  r  rV   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-selectrC   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-selectrC   rA   r   rC   r   rN   r   r   r(   r(   r)   endTagOption	  s
    z-getPhases.<locals>.InSelectPhase.endTagOptionc                 S   sf   | j jd jdkr0| j jd jdkr0| j j  | j jd jdkrP| j j  n| jdddi d S )Nr}   r  r  rW  rC   rX  r   r(   r(   r)   endTagOptgroup%	  s    z/getPhases.<locals>.InSelectPhase.endTagOptgroupc                 S   sZ   | j jdddr@| j j }|jdkr4| j j }q| j  n| jjsLt| j	  d S )Nr   rk  )
rA   rm  r   r   rC   rN   re   rV   r   r   r,  r(   r(   r)   rV  2	  s    
z-getPhases.<locals>.InSelectPhase.endTagSelectc                 S   s   | j dd|d i d S )NrW  rC   r   r   r(   r(   r)   r  =	  s    
z,getPhases.<locals>.InSelectPhase.endTagOtherr   r  r  r   )r  r   r\  r5  N)r<   r=   r>   r   r   r   r   rT  rU  r  r  r)  r  rY  r[  rV  r  r   r  r   r   r  r   r(   r   r(   r)   InSelectPhase  s8   r\  c                   @   sn   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
edefgZee_ede	fgZe
e_dS )z'getPhases.<locals>.InSelectInTablePhasec                 S   s   | j jd   d S Nr   r,  rE   r(   r(   r)   r   U	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc                 S   s   | j jd |S r]  r-  r   r(   r(   r)   r   X	  s    z9getPhases.<locals>.InSelectInTablePhase.processCharactersc                 S   s(   | j dd|d i | td |S )Nz5unexpected-table-element-start-tag-in-select-in-tablerC   r   )rN   r   r  r  r   r(   r(   r)   r  [	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec                 S   s   | j jd |S r]  r  r   r(   r(   r)   r  `	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagOtherc                 S   s@   | j dd|d i | jj|d ddr<| td |S d S )Nz3unexpected-table-element-end-tag-in-select-in-tablerC   r   rk  r   )rN   r   rA   rm  r  r  r   r(   r(   r)   r  c	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec                 S   s   | j jd |S r]  r4  r   r(   r(   r)   r  i	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOther)r   r   r   r   r   r   r   r   N)r<   r=   r>   r   r   r   r   r  r  r  r  r   r  r   r  r   r(   r(   r(   r)   InSelectInTablePhaseR	  s&   r^  c                -       s   e Zd Ze Zeddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,g,Zd-d. Z fd/d0Zd1d2 Z	d3d4 Z
d5S )6z(getPhases.<locals>.InForeignContentPhaser  r  r  r   r  r  r  rU  r*   r  rV  r  r  h1h2h3h4h5h6r   r  r  r  rW  r[  r  r4   r  r  r'   rZ  r  r  r  spanr  r  subsupr   r  r  r  varc              %   S   sn   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%$}|d& |krj||d&  |d&< d S )'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textpathrC   r(   )rF   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-   ra  rb  r(   r(   r)   	<genexpr>	  s     zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rN   rh   re  r   r   r   r(   r)   r   	  s    
z:getPhases.<locals>.InForeignContentPhase.processCharactersc                 S   s*  | j jd }|d | jks@|d dkrt|d  dddh@ r| jdd|d i | j jd j| j jkr| j	| j jd s| j
| j jd s| j j  qV|S |jtd	 kr| j| n$|jtd
 kr| | | j| | j| |j|d< | j | |d r&| j j  d|d< d S )Nr}   rC   r  r~   colorfacesizez*unexpected-html-element-in-foreign-contentrm   r   ro   r   Tr   )rA   r   breakoutElementssetkeysrN   r   ro   r   rt   ru   r   r   r   r  r   r   r   )rF   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}   rC   r0  r  )r   rA   r   rC   rq   r   rN   r   rc   rK   r&  r   r   r   ro   r   r   )rF   r   	nodeIndexr   r   r(   r(   r)   r   	  s&    z6getPhases.<locals>.InForeignContentPhase.processEndTagN)r<   r=   r>   r   r   r   r  r  r   r   r   r(   r   r(   r)   InForeignContentPhasex	  s\                                   	)r  c                   @   sv   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd ZedefgZe	e_ede
fgZee_dS )z!getPhases.<locals>.AfterBodyPhasec                 S   s   d S r-   r(   rE   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   rN   r   rK   rc   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-bodyrC   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)rN   rV   r   rK   rc   )rF   rC   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-bodyrC   r   r  r   r(   r(   r)   r  

  s
    
z-getPhases.<locals>.AfterBodyPhase.endTagOtherr   N)r<   r=   r>   r   r   r   r   r   r   r  r  r  r   r  r   r  r   r(   r(   r(   r)   AfterBodyPhase	  s   r  c                       s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zed jfdefdefde	fgZe
e_edefgZee_dS )z"getPhases.<locals>.InFramesetPhasec                 S   s0   | j jd jdkr | jd n| jjs,td S )Nr}   r   zeof-in-framesetr  rE   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-   )rA   r   r   r(   r(   r)   rF  %
  s    z3getPhases.<locals>.InFramesetPhase.startTagFramesetc                 S   s   | j | | j j  d S r-   r  r   r(   r(   r)   startTagFrame(
  s    z0getPhases.<locals>.InFramesetPhase.startTagFramec                 S   s   | j jd |S r  r  r   r(   r(   r)   startTagNoframes,
  s    z3getPhases.<locals>.InFramesetPhase.startTagNoframesc                 S   s   | j dd|d i d S )Nz unexpected-start-tag-in-framesetrC   r   r   r(   r(   r)   r  /
  s    
z0getPhases.<locals>.InFramesetPhase.startTagOtherc                 S   sZ   | j jd jdkr | jd n| j j  | jjsV| j jd jdkrV| jjd | j_d S )Nr}   r   z)unexpected-frameset-in-frameset-innerhtmlr   afterFrameset)	rA   r   rC   rN   r   r   rV   rK   rc   r   r(   r(   r)   endTagFrameset3
  s    z1getPhases.<locals>.InFramesetPhase.endTagFramesetc                 S   s   | j dd|d i d S )Nzunexpected-end-tag-in-framesetrC   r   r   r(   r(   r)   r  ?
  s    
z.getPhases.<locals>.InFramesetPhase.endTagOtherr   r   r	  r2  N)r<   r=   r>   r   r   r   r   rF  r  r  r  r  r  r   r  r   r   r  r   r(   r   r(   r)   InFramesetPhase
  s(   r  c                       sv   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
ed jfdefgZee_ede	fgZe
e_dS )z%getPhases.<locals>.AfterFramesetPhasec                 S   s   d S r-   r(   rE   r(   r(   r)   r   T
  s    z0getPhases.<locals>.AfterFramesetPhase.processEOFc                 S   s   | j d d S )Nzunexpected-char-after-framesetr   r   r(   r(   r)   r   X
  s    z7getPhases.<locals>.AfterFramesetPhase.processCharactersc                 S   s   | j jd |S r<  r  r   r(   r(   r)   r  [
  s    z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc                 S   s   | j dd|d i d S )Nz#unexpected-start-tag-after-framesetrC   r   r   r(   r(   r)   r  ^
  s    
z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc                 S   s   | j jd | j _d S )NafterAfterFrameset)rN   rK   rc   r   r(   r(   r)   r  b
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc                 S   s   | j dd|d i d S )Nz!unexpected-end-tag-after-framesetrC   r   r   r(   r(   r)   r  e
  s    
z1getPhases.<locals>.AfterFramesetPhase.endTagOtherr   r2  N)r<   r=   r>   r   r   r   r   r  r  r  r  r   r  r   r   r  r   r(   r   r(   r)   AfterFramesetPhaseP
  s    r  c                   @   s`   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zede	fgZe
e_dS )z&getPhases.<locals>.AfterAfterBodyPhasec                 S   s   d S r-   r(   rE   r(   r(   r)   r   w
  s    z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc                 S   s   | j || j j d S r-   r   r   r(   r(   r)   r   z
  s    z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc                 S   s   | j jd |S r  r=  r   r(   r(   r)   r   }
  s    z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharactersc                 S   s    | j d | j jd | j _|S )Nexpected-eof-but-got-charr   r  r   r(   r(   r)   r   
  s    z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc                 S   s   | j jd |S r  r  r   r(   r(   r)   r   
  s    z3getPhases.<locals>.AfterAfterBodyPhase.startTagHtmlc                 S   s*   | j dd|d i | j jd | j _|S )Nexpected-eof-but-got-start-tagrC   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-tagrC   r   r  r   r(   r(   r)   r   
  s
    
z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagr   N)r<   r=   r>   r   r   r   r   r   r   r   r  r   r   r  r   r  r(   r(   r(   r)   AfterAfterBodyPhaset
  s   r  c                   @   sn   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zede	fde
fgZee_dS )z*getPhases.<locals>.AfterAfterFramesetPhasec                 S   s   d S r-   r(   rE   r(   r(   r)   r   
  s    z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc                 S   s   | j || j j d S r-   r   r   r(   r(   r)   r   
  s    z9getPhases.<locals>.AfterAfterFramesetPhase.processCommentc                 S   s   | j jd |S r  r=  r   r(   r(   r)   r   
  s    zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc                 S   s   | j d d S )Nr  r   r   r(   r(   r)   r   
  s    z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc                 S   s   | j jd |S r  r  r   r(   r(   r)   r   
  s    z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc                 S   s   | j jd |S r<  r  r   r(   r(   r)   startTagNoFrames
  s    z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc                 S   s   | j dd|d i d S )Nr  rC   r   r   r(   r(   r)   r  
  s    
z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc                 S   s   | j dd|d i d S )Nr  rC   r   r   r(   r(   r)   r   
  s    
z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagr   r2  N)r<   r=   r>   r   r   r   r   r   r   r   r  r  r   r   r  r   r  r(   r(   r(   r)   AfterAfterFramesetPhase
  s   r  )rZ   rY   r   r  r&  r*  r   r   r   r  r   r   r   r   r   r   r  r   r  r   r  r  r  )r   )rL   r\   r   r  r  r  r;  rD  rI  r  r!  r6  r=  rG  rM  rR  r\  r^  r  r  r  r  r  r  r(   )rM  r#  r   r)   rJ     sr    H %-f?B     Y! /F@bYLc&r.8$%&rJ   c                    sF   t | d t  @ }|rBt| d  fdd| d  D | d< d S )Nr~   c                 3   s"   | ]\}}  |||fV  qd S r-   )r   )rB   kvr  r(   r)   r  
  s   z$adjust_attributes.<locals>.<genexpr>)r   r2   r.   )r   r  needs_adjustmentr(   r  r)   r   
  s
    
r   ry   Fc                 C   s   |d kri }t | | ||dS )N)r2   rC   r~   r   )r   )rC   r2   rp   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)ry   NF),
__future__r   r   r   Zpip._vendor.sixr   r   r0   r   r   r	   r
   Ztreebuilders.baser   r   	constantsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r,   r@   r  r!   memoizerJ   r   r  	Exceptionr|   r(   r(   r(   r)   <module>   sN   H

  8
                  _  
