o
    (g                    @   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i |S )a  Parse an HTML document as a string or file-like object into a tree

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

    :arg treebuilder: the treebuilder to use when parsing

    :arg namespaceHTMLElements: whether or not to namespace HTML elements

    :returns: parsed tree

    Example:

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

    namespaceHTMLElements)r
   getTreeBuilder
HTMLParserparse)doctreebuilderr   kwargstbp r(   h/var/www/python.lazyprojects.co.uk/venv/lib/python3.10/site-packages/pip/_vendor/html5lib/html5parser.pyr"      s   
r"   divc                 K   s,   t |}t||d}|j| fd|i|S )a#  Parse an HTML fragment as a string or file-like object into a tree

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

    :arg container: the container context to parse the fragment in

    :arg treebuilder: the treebuilder to use when parsing

    :arg namespaceHTMLElements: whether or not to namespace HTML elements

    :returns: parsed tree

    Example:

    >>> from html5lib.html5libparser import parseFragment
    >>> parseFragment('<b>this is a fragment</b>')
    <Element u'DOCUMENT_FRAGMENT' at 0x7feac484b090>

    r   	container)r
   r    r!   parseFragment)r#   r+   r$   r   r%   r&   r'   r(   r(   r)   r,   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u 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   sf   || _ || _|| _tj|fd| i|| _|   z|   W d S  ty2   |   |   Y d S w )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rO| j | _	| j	t
v r&| jj| j_n| j	tv r2| jj| j_n| j	dkr>| jj| j_n	 | jd | _| j  |   n	d| _	| jd | _d | _d | _d| _d S )NFz	no quirks	plaintext
beforeHtmlinitialT)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   sF   |j dkr|jtd krd|jv o|jd tdv S |j|j ftv S )Nannotation-xmlmathmlencoding)z	text/htmlzapplication/xhtml+xml)rC   	namespacer   
attributes	translater   r   rF   elementr(   r(   r)   isHTMLIntegrationPoint   s   


z!HTMLParser.isHTMLIntegrationPointc                 C   s   |j |jftv S r-   )ro   rC   r   rr   r(   r(   r)   isMathMLTextIntegrationPoint      z'HTMLParser.isMathMLTextIntegrationPointc                 C   sR  t d }t d }t d }t d }t d }t d }t d }| jD ]}d }	|}
|
d ur|
}	| jjr5| jjd nd }|r<|jnd }|rC|jnd }|
d	 }||kr\| |
d
 |
di  d }
nt| jjdks|| jj	ks| 
|r||kr}|d tddgvs|||fv s|td kr|dkr||kr|d dks| |r||||fv r| j}n| jd }||kr||
}
n1||kr||
}
n'||kr||
}
n||kr||
}
n||kr||
}
n	||kr||
}
|
d us)||kr|	d r|	d s| dd|	d i qd}g }|r'|| j | j }|r"| j|vs"J |sd S d S )N
CharactersSpaceCharactersStartTagEndTagCommentDoctype
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)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g|R i | | j S )a  Parse a HTML document into a well-formed tree

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

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

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

        :returns: parsed tree

        Example:

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

        FN)rW   rA   getDocumentrF   rU   argsr%   r(   r(   r)   r"     s   
zHTMLParser.parsec                 O   s$   | j |dg|R i | | j S )aZ  Parse a HTML fragment into a well-formed tree fragment

        :arg container: name of the element we're setting the innerHTML
            property if set to None, default to 'div'

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

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

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

        :returns: parsed tree

        Example:

        >>> from html5lib.html5libparser import HTMLParser
        >>> parser = HTMLParser()
        >>> parser.parseFragment('<b>this is a fragment</b>')
        <Element u'DOCUMENT_FRAGMENT' at 0x7feac484b090>

        T)rW   rA   getFragmentr   r(   r(   r)   r,     s   
zHTMLParser.parseFragmentXXX-undefined-errorc                 C   s@   |d u ri }| j | jj ||f | jrtt| | d S r-   )rI   r   rR   rU   positionrH   r}   r   )rF   	errorcoder   r(   r(   r)   r   ;  s   zHTMLParser.parseErrorc                 C      t |t d S r-   )adjust_attributesr   rF   r   r(   r(   r)   r   C     z!HTMLParser.adjustMathMLAttributesc                 C   r   r-   )r   r   r   r(   r(   r)   r   F  r   zHTMLParser.adjustSVGAttributesc                 C   r   r-   )r   adjustForeignAttributesMapr   r(   r(   r)   r   I  r   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 ]B}|j}d }|| j jd kr5| js0J d}| j}|dv r>| js>J |sH|j| j jkrHq||v rU| j||  } n
|r^| jd	 } nq|| _d S )NFinSelectinCellinRowinTableBody	inCaptioninColumnGroupinTableinBody
inFrameset
beforeHead)selecttdthtrtbodytheadtfootcaptioncolgrouptableheadbodyframesethtmlr~   r   T)r   r   r   r   )rA   r   rC   rV   ro   r   rK   rc   )rF   lastnewModesnodenodeName	new_phaser(   r(   r)   re   P  sF   



zHTMLParser.resetInsertionModec                 C   sR   |dv sJ | j | |dkr| jj| j_n| jj| j_| j| _| jd | _d S )N)RAWTEXTRCDATAr   text)	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                    sH  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}i d5|d6|d7|d8|d9|d:|d; d<|	d=|
d>d?|d@|dA|dB|dC|dD|dE|||||||dFS )GNc                    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rFt|dkrF|d }d|d  i}|d tv r$|d |d< | jj| jjjj | jj	j
j | j
j  j |f  | g|R i |S  | g|R i |S )Nprocessr   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 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   __startTagCache__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 r-   )NotImplementedErrorrE   r(   r(   r)   r        z#getPhases.<locals>.Phase.processEOFc                 S      | j || j jd  d S )Nr~   rA   insertCommentr   r   r(   r(   r)   r        z'getPhases.<locals>.Phase.processCommentc                 S      | j d d S )Nzunexpected-doctyperN   r   r   r(   r(   r)   r     rv   z'getPhases.<locals>.Phase.processDoctypec                 S      | j |d  d S Nr   rA   
insertTextr   r(   r(   r)   r        z*getPhases.<locals>.Phase.processCharactersc                 S   r   r   r   r   r(   r(   r)   r     r   z/getPhases.<locals>.Phase.processSpaceCharactersc                 S      |d }|| j v r| j | }||S | j|  }| j |< t| j t| jd kr?| j tt| j  t| j t| jd ks(||S NrC   g?)r   startTagHandlerr   popnextiterrF   r   rC   funcr(   r(   r)   r        

z(getPhases.<locals>.Phase.processStartTagc                 S   sf   | j js|d dkr| j d |d  D ]\}}|| jjd jvr,|| jjd j|< qd| j _d S )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   r   r   )r   endTagHandlerr   r   r   r   r   r(   r(   r)   r     r   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      d S r-   r(   r   r(   r(   r)   r     r   z6getPhases.<locals>.InitialPhase.processSpaceCharactersc                 S      | j || j j d S r-   rA   r   documentr   r(   r(   r)   r        z.getPhases.<locals>.InitialPhase.processCommentc                 S   s   |d }|d }|d }|d }|dks |d us |d ur&|dkr&| j d |d u r,d}| j| |dkr;|t}|r]|d dks]|d	s]|d
v s]|drU|d u s]|rb| dkrbd| j _n|dsp|drt|d urtd| j _| j j	d | j _
d S )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     sJ   
9
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      | j d |   |S )Nzexpected-doctype-but-got-charsrN   r   r  r   r(   r(   r)   r   ^     z1getPhases.<locals>.InitialPhase.processCharactersc                 S   "   | j dd|d i |   |S )Nz"expected-doctype-but-got-start-tagrC   r  r   r(   r(   r)   r   c  
   
z/getPhases.<locals>.InitialPhase.processStartTagc                 S   r  )Nz expected-doctype-but-got-end-tagrC   r  r   r(   r(   r)   r   i  r  z-getPhases.<locals>.InitialPhase.processEndTagc                 S      | j d |   dS )Nzexpected-doctype-but-got-eofTr  rE   r(   r(   r)   r   o  r  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   ry   r   )rA   
insertRootimpliedTagTokenrN   rK   rc   rE   r(   r(   r)   rd   x  s   z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc                 S      |    dS NTrd   rE   r(   r(   r)   r   }     z-getPhases.<locals>.BeforeHtmlPhase.processEOFc                 S   r  r-   r  r   r(   r(   r)   r     r  z1getPhases.<locals>.BeforeHtmlPhase.processCommentc                 S   r  r-   r(   r   r(   r(   r)   r     r   z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc                 S      |    |S r-   r  r   r(   r(   r)   r     r  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   s2   |d dvr| j dd|d i d S |   |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   ry   TstartTagHeadr  rE   r(   r(   r)   r        z-getPhases.<locals>.BeforeHeadPhase.processEOFc                 S   r  r-   r(   r   r(   r(   r)   r     r   z9getPhases.<locals>.BeforeHeadPhase.processSpaceCharactersc                 S      |  tdd |S Nr   ry   r   r   r(   r(   r)   r     r"  z4getPhases.<locals>.BeforeHeadPhase.processCharactersc                 S      | j jd |S Nr   rN   rK   r   r   r(   r(   r)   r        z/getPhases.<locals>.BeforeHeadPhase.startTagHtmlc                 S   s0   | j | | j jd | j _| jjd | j_d S )Nr~   inHead)rA   r   r   headPointerrN   rK   rc   r   r(   r(   r)   r!    s   z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc                 S   r#  r$  r   r   r(   r(   r)   startTagOther  r"  z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc                 S   r#  r$  r   r   r(   r(   r)   endTagImplyHead  r"  z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc                 S      | j dd|d i d S )Nzend-tag-after-implied-rootrC   r   r   r(   r(   r)   endTagOther     
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&    
r2  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   r  r  r  rE   r(   r(   r)   r     r  z)getPhases.<locals>.InHeadPhase.processEOFc                 S   r  r-   r3  r   r(   r(   r)   r     r  z0getPhases.<locals>.InHeadPhase.processCharactersc                 S   r%  r&  r'  r   r(   r(   r)   r     r(  z+getPhases.<locals>.InHeadPhase.startTagHtmlc                 S   r   )Nz!two-heads-are-not-better-than-oner   r   r(   r(   r)   r!    rv   z+getPhases.<locals>.InHeadPhase.startTagHeadc                 S   $   | j | | j j  d|d< d S NTr   rA   r   r   r   r   r(   r(   r)   startTagBaseLinkCommand     z6getPhases.<locals>.InHeadPhase.startTagBaseLinkCommandc                 S   s   | j | | j j  d|d< |d }| jjjjd dkr[d|v r.| jjj|d  d S d|v r]d|v r_|d 	 d	krat
|d d
}t
|}| }| jjj| d S d S d S d S d S )NTr   r   r   	tentativecharsetcontentz
http-equivzcontent-typezutf-8)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      | j |d d S )Nr   rN   r   r   r(   r(   r)   startTagTitle  r(  z,getPhases.<locals>.InHeadPhase.startTagTitlec                 S   rB  )Nr   rC  r   r(   r(   r)   startTagNoFramesStyle     z4getPhases.<locals>.InHeadPhase.startTagNoFramesStylec                 S   s:   | j jr| j |d d S | 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   r  r-   r3  r   r(   r(   r)   r+    r  z,getPhases.<locals>.InHeadPhase.startTagOtherc                 S   :   | j jj }|jdksJ d|j | j jd | j _d S )Nr   zExpected head got %s	afterHeadrN   rA   r   r   rC   rK   rc   rF   r   r   r(   r(   r)   
endTagHead
     z)getPhases.<locals>.InHeadPhase.endTagHeadc                 S   r  r-   r3  r   r(   r(   r)   endTagHtmlBodyBr  r  z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc                 S   r-  Nunexpected-end-tagrC   r   r   r(   r(   r)   r.       z*getPhases.<locals>.InHeadPhase.endTagOtherc                 S      |  td d S )Nr   )rO  r  rE   r(   r(   r)   r    r(  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!  r7  rA  rD  rE  rH  rJ  r+  rO  rQ  r.  r  r   r0  r   r1  r   r(   r(   r(   r)   InHeadPhase  sF    
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   r  )Nzeof-in-head-noscriptTr  rE   r(   r(   r)   r   /  r  z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc                 S   r%  Nr)  )rN   rK   r   r   r(   r(   r)   r   4  r(  z5getPhases.<locals>.InHeadNoscriptPhase.processCommentc                 S   r  )Nzchar-in-head-noscriptr  r   r(   r(   r)   r   7  r  z8getPhases.<locals>.InHeadNoscriptPhase.processCharactersc                 S   r%  ra  rN   rK   r   r   r(   r(   r)   r   <  r(  z=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharactersc                 S   r%  r&  r'  r   r(   r(   r)   r   ?  r(  z3getPhases.<locals>.InHeadNoscriptPhase.startTagHtmlc                 S   r%  ra  r'  r   r(   r(   r)   r7  B  r(  z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc                 S   r-  Nunexpected-start-tagrC   r   r   r(   r(   r)   startTagHeadNoscriptE  rT  z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc                 S   r  Nzunexpected-inhead-noscript-tagrC   r  r   r(   r(   r)   r+  H     z4getPhases.<locals>.InHeadNoscriptPhase.startTagOtherc                 S   rK  )NrY  zExpected noscript got %sr)  rM  rN  r(   r(   r)   endTagNoscriptM  rP  z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc                 S   r  rf  r  r   r(   r(   r)   endTagBrR  rg  z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc                 S   r-  rR  r   r   r(   r(   r)   r.  W  rT  z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc                 S   rU  )NrY  )rh  r  rE   r(   r(   r)   r  Z  rF  z3getPhases.<locals>.InHeadNoscriptPhase.anythingElser   )r\  r]  r_  r4   rW  rX  )r   rY  rY  r  N)r<   r=   r>   r  r   r   r   r   r   r   r7  re  r+  rh  ri  r.  r  r   r0  r   r1  r   r(   r(   r(   r)   InHeadNoscriptPhase,  s2    
rj  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   r  r  r3  rE   r(   r(   r)   r   n  r  z,getPhases.<locals>.AfterHeadPhase.processEOFc                 S   r  r-   r3  r   r(   r(   r)   r   r  r  z3getPhases.<locals>.AfterHeadPhase.processCharactersc                 S   r%  r&  r'  r   r(   r(   r)   r   v  r(  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     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   st   | j dd|d i | jj| jj | j jd | | jjd d d D ]}|jdkr7| jj	|  d S q&d S )Nz#unexpected-start-tag-out-of-my-headrC   r)  r~   r   )
rN   r   rA   r   r   r*  rK   r   rC   removerN  r(   r(   r)   startTagFromHead  s   

z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc                 S   r-  rc  r   r   r(   r(   r)   r!    rT  z.getPhases.<locals>.AfterHeadPhase.startTagHeadc                 S   r  r-   r3  r   r(   r(   r)   r+    r  z/getPhases.<locals>.AfterHeadPhase.startTagOtherc                 S   r  r-   r3  r   r(   r(   r)   rQ    r  z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc                 S   r-  rR  r   r   r(   r(   r)   r.    rT  z-getPhases.<locals>.AfterHeadPhase.endTagOtherc                 S   s.   | j tdd | jjd | j_d| j_d S )Nr   ry   r   T)rA   r   r  rN   rK   rc   rh   rE   r(   r(   r)   r    s   z.getPhases.<locals>.AfterHeadPhase.anythingElser   r   r   )	r[  r\  r]  r_  r4   rW  rZ  rX  rV  r   )r   r   r  N)r<   r=   r>   r  r   r   r   r   rk  rm  ro  r!  r+  rQ  r.  r  r   r0  r   r1  r   r(   r(   r(   r)   AfterHeadPhasek  s6    
	
rp  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 Z6e78g dh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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|i | | 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u r n| ||r*|| qt|dks3J t|dkrB| j j|d  | j j| d S )Nr~      )	rA   r   r   activeFormattingElementsr   rw  r   r   rn  )rF   r   rs   matchingElementsr   r(   r(   r)   addFormattingElement  s   
z3getPhases.<locals>.InBodyPhase.addFormattingElementc                 S   s@   t d}| jjd d d D ]}|j|vr| jd  d S qd S )N)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   sj   |d }| j | _|dr$| jjd jdv r$| jjd  s$|dd  }|r3| j  | j| d S d S )Nr   
r~   )prelistingtextarear   )	rr  r   r   rA   r   rC   
hasContent#reconstructActiveFormattingElementsr   )rF   r   r   r(   r(   r)   !processSpaceCharactersDropNewline  s   

z@getPhases.<locals>.InBodyPhase.processSpaceCharactersDropNewlinec                 S   s\   |d dkrd S | j   | j |d  | jjr*tdd |d D r,d| j_d S d S d S )Nr    c                 S      g | ]}|t vqS r(   r   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)   rr    s   
z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec                 S   r%  ra  r'  r   r(   r(   r)   startTagProcessInHead  r(  z4getPhases.<locals>.InBodyPhase.startTagProcessInHeadc                 S   s   | j dddi t| jjdks| jjd jdkr"| j js J d S d| j _|d  D ]\}}|| jjd j	vrB|| jjd j	|< q,d S )Nrd  rC   r   r   Fr   )
rN   r   r   rA   r   rC   rV   rh   r.   rp   r   r(   r(   r)   rk    s   z+getPhases.<locals>.InBodyPhase.startTagBodyc                 S   s   | j dddi t| jjdks| jjd jdkr"| j js J d S | j js(d S | jjd jr=| jjd j	| jjd  | jjd jdkrU| jj
  | jjd jdksF| j| | j jd | j _d S )	Nrd  rC   r   r   r   r~   r   r   )rN   r   r   rA   r   rC   rV   rh   parentremoveChildr   r   rK   rc   r   r(   r(   r)   rm    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'   r  r  F)	rA   r  r  r  r   rN   rh   r  r   r   r(   r(   r)   startTagPreListing  s
   z1getPhases.<locals>.InBodyPhase.startTagPreListingc                 S   s\   | j jr| jdddi d S | j jdddr| td | j | | j jd | j _d S )Nrd  rC   formr'   r  r  r~   )	rA   formPointerrN   r   r  r  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|v r/| j jt|jd  n|j	t
v r;|jdvr; nq| jjd	d
drN| j jtd	d | j| d S )NFr~  r}  r|  )r~  r}  r|  rC   rz   )addressr*   r'   r'   r  r  )rN   rh   reversedrA   r   rC   rc   r   r  	nameTupler   r  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 r  )	rA   r  r  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v r)| jdd|d i | j j	  | j 
| d S )Nr'   r  r  r~   rd  rC   )rA   r  r  r  r   rC   r   rN   r   r   r   r   r(   r(   r)   startTagHeadingB  s   z.getPhases.<locals>.InBodyPhase.startTagHeadingc                 S   s~   | j d}|r3| jdddd | td || j jv r&| j j| || j jv r3| j j| | j 	  | 
| d S )Na$unexpected-start-tag-implies-end-tag	startNameendName)rA   !elementInActiveFormattingElementsrN   r   endTagFormattingr  r   rn  ry  r  r{  )rF   r   afeAElementr(   r(   r)   	startTagAJ  s   
z(getPhases.<locals>.InBodyPhase.startTagAc                 S   s   | j   | | d S r-   )rA   r  r{  r   r(   r(   r)   startTagFormattingW  s   
z1getPhases.<locals>.InBodyPhase.startTagFormattingc                 S   sP   | j   | j dr!| jdddd | td | j   | | d S )Nnobrr  r  )rA   r  r  rN   r   r   r  r{  r   r(   r(   r)   startTagNobr[  s   

z+getPhases.<locals>.InBodyPhase.startTagNobrc                 S   sT   | j dr| jdddd | td |S | j   | j | d| j_d S )Nr  r  r  F)	rA   r  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   ry  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'   r  r  Fr   )rA   r  r  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'   r  r  Fr   )
rN   r]   rA   r  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   sH   | j j}| | d|d v r |d d tdkr"|| j _d S d S d S )Nr2   r   hidden)rN   rh   r  rq   r   )rF   r   rh   r(   r(   r)   startTagInput  s   
z,getPhases.<locals>.InBodyPhase.startTagInputc                 S   r4  r5  r6  r   r(   r(   r)   startTagParamSource  r8  z2getPhases.<locals>.InBodyPhase.startTagParamSourcec                 S   sJ   | j jdddr| td | j | | j j  d|d< d| j_d S )Nr'   r  r  Tr   F)	rA   r  r  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newNamery   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 v r|d d |d< | tdd|d | td	d | td
d d|d v rF|d d }nd}| td |d |d  }d|v r_|d= d|v rf|d= d|d< | tdd||d d | 	td
 | td	d | 	td d S )Nzdeprecated-tagrC   isindexactionr   r  ry   )rp   hrlabelpromptz3This is a searchable index. Enter search keywords: rw   r2   r   inputr   r  )
rN   r   rA   r  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| | d S | | d S r-   )rN   rP   r  r+  r   r(   r(   r)   rH    s   z/getPhases.<locals>.InBodyPhase.startTagNoscriptc                 S   s   | j |d dS )z8iframe, noembed noframes, noscript(if scripting enabled)r   NrC  r   r(   r(   r)   r    rF  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v r=| jjd | j_d S | 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r| j   | j jd jdkr| j  | j | d S )Nrubyr~   )rA   r  generateImpliedEndTagsr   rC   rN   r   r   r   r(   r(   r)   startTagRpRt  s
   

z+getPhases.<locals>.InBodyPhase.startTagRpRtc                 S   ^   | j   | j| | j| td |d< | j | |d r-| j j  d|d< d S d S )Nrm   ro   r   Tr   )	rA   r  rN   r   r   r   r   r   r   r   r(   r(   r)   startTagMath     
z+getPhases.<locals>.InBodyPhase.startTagMathc                 S   r  )Nr   ro   r   Tr   )	rA   r  rN   r   r   r   r   r   r   r   r(   r(   r)   startTagSvg  r  z*getPhases.<locals>.InBodyPhase.startTagSvgc                 S   s   | j dd|d i dS )a5   Elements that should be children of other elements that have a
            different insertion mode; here they are ignored
            "caption", "col", "colgroup", "frame", "frameset", "head",
            "option", "optgroup", "tbody", "td", "tfoot", "th", "thead",
            "tr", "noscript"
            zunexpected-start-tag-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s#| tdd | jdddi | tdd d S | j d | j jd j	dkr;| jdddi | j j
 }|j	dkrS| j j
 }|j	dksFd S d S )	Nr'   r  r  ry   rS  rC   rz   r~   )rA   r  r  r  rN   r   r  r  r   rC   r   rN  r(   r(   r)   r    s   
z&getPhases.<locals>.InBodyPhase.endTagPc                 S   s~   | j ds| j  d S | j jd jdkr5| j jdd  D ]}|jtdvr4| jdd|jd  nq| jjd | j_d S )Nr   r~      )r|  r}  r~  optgroupr  r'   rprtr   r   r   r   r   r   r   r   $expected-one-end-tag-but-got-anothergotNameexpectedName	afterBody)	rA   r  rN   r   r   rC   r   rK   rc   rN  r(   r(   r)   
endTagBody)  s   


z)getPhases.<locals>.InBodyPhase.endTagBodyc                 S   s"   | j dr| td |S d S )Nr   )rA   r  r  r  r   r(   r(   r)   
endTagHtml;  s   z)getPhases.<locals>.InBodyPhase.endTagHtmlc                 S   s   |d dkr
| j | _| j|d }|r| j  | jjd j|d kr/| jdd|d i |rM| jj	 }|j|d krO| jj	 }|j|d ks>d S d S d S )NrC   r  r~   end-tag-too-early)
rr  r   rA   r  r  r   rC   rN   r   r   )rF   r   inScoper   r(   r(   r)   endTagBlockA  s   
z*getPhases.<locals>.InBodyPhase.endTagBlockc                 S   sx   | j j}d | j _|d u s| j |s| jdddi d S | j   | j jd |kr3| jdddi | j j| d S )NrS  rC   r  r~   zend-tag-too-early-ignored)rA   r  r  rN   r   r  r   rn  rN  r(   r(   r)   
endTagFormO  s   
z)getPhases.<locals>.InBodyPhase.endTagFormc                 S   s   |d dkr	d}nd }| j j|d |ds"| jdd|d i d S | j j|d d | j jd j|d krA| jdd|d i | j j }|j|d kr]| j j }|j|d ksNd S d S )	NrC   r~  listr  rS  excluder~   r  )rA   r  rN   r   r  r   rC   r   )rF   r   r  r   r(   r(   r)   endTagListItem\  s   
z-getPhases.<locals>.InBodyPhase.endTagListItemc                 S   s   t D ]}| j|r| j   nq| jjd j|d kr(| jdd|d i t D ]!}| j|rK| jj }|jt vrH| jj }|jt vs= d S q*d S )Nr~   rC   r  )	r   rA   r  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 }|r"|| j jv r)| j |js)| | dS || j jvrC| jdd|d i | j j	| dS | j |jsW| jdd|d i dS || j jd krj| jd	d|d i | j j
|}d}| j j|d D ]}|jtv r|} nq{|du r| j j }||kr| j j }||ks| j j	| dS | j j|d  }| j j
|}| }	}
d}| j j
|
}|d
k r(|d7 }|d8 }| j j| }
|
| j jvr| j j	|
 q|
|krn>|	|kr| j j
|
d }|
 }|| j j| j j
|
< || j j| j j
|
< |}
|	jr|	j|	 |
|	 |
}	|d
k s|	jr2|	j|	 |jtdv rH| j  \}}||	| n||	 | }|| || | j j	| | j j|| | j j	| | j j| j j
|d | |dk sdS dS )z)The much-feared adoption agency algorithmr      r   rC   Nzadoption-agency-1.2zadoption-agency-4.4r~   zadoption-agency-1.3rx  r   r   r   r   r   )rA   r  r   r  rC   r.  rN   r   ry  rn  indexr  r   r   	cloneNoder  r  appendChildr   getTableMisnestedNodePositioninsertBeforereparentChildreninsert)rF   r   outerLoopCounterformattingElementafeIndexfurthestBlockrs   commonAncestorbookmarklastNoder   innerLoopCounterr  cloner  r  r(   r(   r)   r  |  s   





"


 z/getPhases.<locals>.InBodyPhase.endTagFormattingc                 S   s   | j |d r| j   | j jd j|d kr#| jdd|d i | j |d rL| j j }|j|d krE| j j }|j|d ks8| j   d S d S )NrC   r~   r  )	rA   r  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  ry   )rN   r   rA   r  r   r  r   r   r   r(   r(   r)   ri  +  s   
z'getPhases.<locals>.InBodyPhase.endTagBrc                 S   s   | j jd d d D ]O}|j|d krE| j j|d d | j jd j|d kr1| jdd|d i | j j |krB	 | j j |ks9 d S |jtv rX| jdd|d i  d S q	d S )Nr~   rC   r  rS  )	rA   r   rC   r  rN   r   r   r  r   rN  r(   r(   r)   r.  2  s   
z*getPhases.<locals>.InBodyPhase.endTagOtherr   )	r[  r\  r]  r^  r_  r4   rZ  rX  rV  r   r   )r  articleaside
blockquotecenterdetailsdirr*   dlfieldset
figcaptionfigurefooterheaderhgroupmainmenunavolr'   sectionsummaryul)r  r  r  )r~  r|  r}  rX   r  )bbigcodeemfontissmallstrikestrongttur  r  )appletmarqueeobjectxmpr   )arear  embedr  keygenwbr)paramsourcetrackr  r  r  r  r  iframerY  )noembedrW  r   )r  r  )r  r  mathr   )r   colr   framer   r   r   r   r   r   r   )r  r  r  r  r  r  r  dialogr	  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   rM   rw  r{  r   r  r   rr  r  rk  rm  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rH  r  r  r  r  r  r  r  r+  r  r  r  r  r  r  r  r  r  ri  r.  r   r0  r   r   r   r1  r   __classcell__r(   )rt  r  r   r)   rt    s*   
	
	 $ !"#$%&'()-rt  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   r   r   r   r   r(   r(   r)   r     r   z.getPhases.<locals>.TextPhase.processCharactersc                 S   s8   | j dd| jjd ji | jj  | j j| j _dS )Nz&expected-named-closing-tag-but-got-eofrC   r~   T)rN   r   rA   r   rC   r   r   rc   rE   r(   r(   r)   r     s   z'getPhases.<locals>.TextPhase.processEOFc                 S   s   J d|d  )NFz4Tried to process start tag %s in RCDATA/RAWTEXT moderC   r(   r   r(   r(   r)   r+    rv   z*getPhases.<locals>.TextPhase.startTagOtherc                 S   s*   | j j }|jdksJ | jj| j_d S )NrZ  )rA   r   r   rC   rN   r   rc   rN  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.       z(getPhases.<locals>.TextPhase.endTagOtherrZ  N)r<   r=   r>   r  r   r   r   r+  r7  r.  r   r0  r   r1  r   r(   r(   r(   r)   	TextPhase  s    

r9  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   s8   | j jd jdvr| j j  | j jd jdvs	d S d S )Nr~   )r   r   )rA   r   rC   r   rE   r(   r(   r)   clearStackToTableContext  s   z8getPhases.<locals>.InTablePhase.clearStackToTableContextc                 S   2   | j jd jdkr| jd d S | jjsJ d S )Nr~   r   zeof-in-tablerA   r   rC   rN   r   rV   rE   r(   r(   r)   r        z*getPhases.<locals>.InTablePhase.processEOFc                 S   4   | j j}| j jd | j _|| j j_| j j| d S NinTableText)rN   rc   rK   r   r   rF   r   r   r(   r(   r)   r        
z6getPhases.<locals>.InTablePhase.processSpaceCharactersc                 S   r>  r?  )rN   rc   rK   r   r   rA  r(   r(   r)   r     rB  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   ry  r   r   r   rN   rK   rc   r   r(   r(   r)   startTagCaption  s   z/getPhases.<locals>.InTablePhase.startTagCaptionc                 S   (   |    | j| | jjd | j_d S )Nr   r:  rA   r   rN   rK   rc   r   r(   r(   r)   startTagColgroup  rl  z0getPhases.<locals>.InTablePhase.startTagColgroupc                 S   r#  )Nr   ry   )rG  r  r   r(   r(   r)   startTagCol  r"  z+getPhases.<locals>.InTablePhase.startTagColc                 S   rE  Nr   rF  r   r(   r(   r)   startTagRowGroup  rl  z0getPhases.<locals>.InTablePhase.startTagRowGroupc                 S   r#  )Nr   ry   )rJ  r  r   r(   r(   r)   startTagImplyTbody  r"  z2getPhases.<locals>.InTablePhase.startTagImplyTbodyc                 S   s6   | j dddd | j jtd | j js|S d S )Nr  r   r  )rN   r   rc   r   r  rV   r   r(   r(   r)   r    s   z-getPhases.<locals>.InTablePhase.startTagTablec                 S   r%  ra  r'  r   r(   r(   r)   startTagStyleScript  r(  z3getPhases.<locals>.InTablePhase.startTagStyleScriptc                 S   sX   d|d v r%|d d  tdkr%| jd | j| | jj  d S | | d S )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   sH   | j d | jjd u r"| j| | jjd | j_| jj  d S d S )Nzunexpected-form-in-tabler~   )rN   r   rA   r  r   r   r   r   r(   r(   r)   r    s   z,getPhases.<locals>.InTablePhase.startTagFormc                 S   <   | j dd|d i d| j_| j jd | d| j_d S )Nz)unexpected-start-tag-implies-table-voodoorC   Tr   F)rN   r   rA   rC  rK   r   r   r(   r(   r)   r+       z-getPhases.<locals>.InTablePhase.startTagOtherc                 S   s   | j jdddrJ| j   | j jd jdkr%| jdd| j jd jd | j jd jdkr=| j j  | j jd jdks.| j j  | j  d S | jj	sPJ | j  d S )Nr   r  r~   zend-tag-too-early-namedr  )
rA   r  r  r   rC   rN   r   r   re   rV   r   r(   r(   r)   endTagTable  s   
z+getPhases.<locals>.InTablePhase.endTagTablec                 S   r-  rR  r   r   r(   r(   r)   endTagIgnore  rT  z,getPhases.<locals>.InTablePhase.endTagIgnorec                 S   rM  )Nz'unexpected-end-tag-implies-table-voodoorC   Tr   F)rN   r   rA   rC  rK   r   r   r(   r(   r)   r.    rN  z+getPhases.<locals>.InTablePhase.endTagOtherr   r   r   r2  r   r   r   )r   r   r   r   )rX  rZ  r  r  )r   r   r2  r   r   r   r   r   r   r   r   N)r<   r=   r>   r  r   r:  r   r   r   r   rD  rG  rH  rJ  rK  r  rL  r  r  r+  rO  rP  r.  r   r0  r   r   r1  r   r(   r  r(   r)   InTablePhase  sP    	

rS  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|i | d | _g | _d S r-   )rq  rM   r   rT  rs  )InTableTextPhaser   r(   r)   rM   6  s   
z,getPhases.<locals>.InTableTextPhase.__init__c                 S   sd   d dd | jD }tdd |D r%td |d}| jjd | n|r-| j| g | _d S )Nr
  c                 S   s   g | ]}|d  qS )r   r(   rB   r  r(   r(   r)   r  <      zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c                 S   r  r(   r  rV  r(   r(   r)   r  =  rW  rw   r  r   )joinrT  r  r   rN   rK   r   rA   )rF   r   r   r(   r(   r)   flushCharacters;  s   
z3getPhases.<locals>.InTableTextPhase.flushCharactersc                 S      |    | j| j_|S r-   rY  r   rN   rc   r   r(   r(   r)   r   D     
z2getPhases.<locals>.InTableTextPhase.processCommentc                 S   s   |    | j| j_dS r  r[  rE   r(   r(   r)   r   I  r\  z.getPhases.<locals>.InTableTextPhase.processEOFc                 S   s    |d dkrd S | j | d S Nr   r  rT  r   r   r(   r(   r)   r   N  s   z5getPhases.<locals>.InTableTextPhase.processCharactersc                 S      | j | d S r-   r^  r   r(   r(   r)   r   S  s   z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc                 S   rZ  r-   r[  r   r(   r(   r)   r   X  r\  z3getPhases.<locals>.InTableTextPhase.processStartTagc                 S   rZ  r-   r[  r   r(   r(   r)   r   ]  r\  z1getPhases.<locals>.InTableTextPhase.processEndTag)r<   r=   r>   r   rM   rY  r   r   r   r   r   r   r5  r(   )rU  r6  r)   rU  3  s    	rU  c                          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      | j jddd S )Nr   r   r  rA   r  rE   r(   r(   r)   ignoreEndTagCaptionf  r(  z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc                 S      | j jd   d S r&  rN   rK   r   rE   r(   r(   r)   r   i  r   z,getPhases.<locals>.InCaptionPhase.processEOFc                 S   r%  r&  rN   rK   r   r   r(   r(   r)   r   l  r(  z3getPhases.<locals>.InCaptionPhase.processCharactersc                 S   0   | j   |  }| j jtd |s|S d S Nr   rN   r   rc  rc   r   r  rF   r   ignoreEndTagr(   r(   r)   startTagTableElemento  s   
z6getPhases.<locals>.InCaptionPhase.startTagTableElementc                 S   r%  r&  r'  r   r(   r(   r)   r+  w  r(  z/getPhases.<locals>.InCaptionPhase.startTagOtherc                 S   s   |   sN| j  | jjd jdkr!| jdd| jjd jd | jjd jdkr9| jj  | jjd jdks*| jj  | j  | jj	d | j_
d S | jjsTJ | j  d S )Nr~   r   r  r  r   )rc  rA   r  r   rC   rN   r   r   r  rK   rc   rV   r   r(   r(   r)   endTagCaptionz  s    

z/getPhases.<locals>.InCaptionPhase.endTagCaptionc                 S   rg  rh  ri  rj  r(   r(   r)   rO    s   
z-getPhases.<locals>.InCaptionPhase.endTagTablec                 S   r-  rR  r   r   r(   r(   r)   rP    rT  z.getPhases.<locals>.InCaptionPhase.endTagIgnorec                 S   r%  r&  rN   rK   r   r   r(   r(   r)   r.    r(  z-getPhases.<locals>.InCaptionPhase.endTagOtherr   	r   r2  r   r   r   r   r   r   r   r   r   )
r   r2  r   r   r   r   r   r   r   r   N)r<   r=   r>   r  r   rc  r   r   rl  r+  rm  rO  rP  r.  r   r0  r   r   r1  r   r(   rR  r(   r)   InCaptionPhaseb  s4    
rp  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  r(  z:getPhases.<locals>.InColumnGroupPhase.ignoreEndTagColgroupc                 S   sD   | j jd jdkr| jjsJ d S |  }| td |s dS d S )Nr~   r   r   T)rA   r   rC   rN   rV   rq  endTagColgroupr  )rF   rk  r(   r(   r)   r     s   z0getPhases.<locals>.InColumnGroupPhase.processEOFc                 S   "   |   }| td |s|S d S Nr   rq  rr  r  rj  r(   r(   r)   r     
   z7getPhases.<locals>.InColumnGroupPhase.processCharactersc                 S   r4  r5  r6  r   r(   r(   r)   rH    r8  z1getPhases.<locals>.InColumnGroupPhase.startTagColc                 S   rs  rt  ru  rj  r(   r(   r)   r+    rv  z3getPhases.<locals>.InColumnGroupPhase.startTagOtherc                 S   sB   |   r| jjs
J | j  d S | jj  | jjd | j_d S Nr   )	rq  rN   rV   r   rA   r   r   rK   rc   r   r(   r(   r)   rr    s
   z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc                 S   s   | j dddi d S )Nz
no-end-tagrC   r2  r   r   r(   r(   r)   	endTagCol  r  z/getPhases.<locals>.InColumnGroupPhase.endTagColc                 S   rs  rt  ru  rj  r(   r(   r)   r.    rv  z1getPhases.<locals>.InColumnGroupPhase.endTagOtherr   r2  r   N)r<   r=   r>   r  r   rq  r   r   rH  r+  rr  rx  r.  r   r0  r   r   r1  r   r(   rR  r(   r)   InColumnGroupPhase  s(    
	
ry  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   sV   | j jd jdvr| j j  | j jd jdvs	| j jd jdkr'| jjs)J d S d S )Nr~   )r   r   r   r   r   )rA   r   rC   r   rN   rV   rE   r(   r(   r)   clearStackToTableBodyContext  s   z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc                 S   rd  rw  re  rE   r(   r(   r)   r     r   z.getPhases.<locals>.InTableBodyPhase.processEOFc                 S   r%  rw  rb  r   r(   r(   r)   r     r(  z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc                 S   r%  rw  rf  r   r(   r(   r)   r     r(  z5getPhases.<locals>.InTableBodyPhase.processCharactersc                 S   rE  )Nr   )rz  rA   r   rN   rK   rc   r   r(   r(   r)   
startTagTr   rl  z.getPhases.<locals>.InTableBodyPhase.startTagTrc                 S   s*   | j dd|d i | tdd |S )Nzunexpected-cell-in-table-bodyrC   r   ry   )rN   r   r{  r  r   r(   r(   r)   startTagTableCell  
   
z5getPhases.<locals>.InTableBodyPhase.startTagTableCellc                 S   n   | j jddds| j jddds| j jdddr*|   | t| j jd j |S | jjs0J | j	  d S Nr   r   r  r   r   r~   
rA   r  rz  endTagTableRowGroupr  r   rC   rN   rV   r   r   r(   r(   r)   startTagTableOther  s   z6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc                 S   r%  rw  r'  r   r(   r(   r)   r+    r(  z1getPhases.<locals>.InTableBodyPhase.startTagOtherc                 S   sV   | j j|d ddr|   | j j  | jjd | j_d S | jdd|d i d S )NrC   r   r  r    unexpected-end-tag-in-table-body)	rA   r  rz  r   r   rN   rK   rc   r   r   r(   r(   r)   r    s   
z7getPhases.<locals>.InTableBodyPhase.endTagTableRowGroupc                 S   r~  r  r  r   r(   r(   r)   rO  %  s   z/getPhases.<locals>.InTableBodyPhase.endTagTablec                 S   r-  )Nr  rC   r   r   r(   r(   r)   rP  2  r/  z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec                 S   r%  rw  rn  r   r(   r(   r)   r.  6  r(  z/getPhases.<locals>.InTableBodyPhase.endTagOtherr   r   r   r   )r   r2  r   r   r   r   rQ  r   )r   r   r2  r   r   r   r   r   N)r<   r=   r>   r  r   rz  r   r   r   r{  r|  r  r+  r  rO  rP  r.  r   r0  r   r   r1  r   r(   rR  r(   r)   InTableBodyPhase  s>    
	
r  c                       s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zed jfde
fdefgZee_edefdefd efd!efgZee_d"S )#zgetPhases.<locals>.InRowPhasec                 S   sT   | j jd jdvr(| jdd| j jd ji | j j  | j jd jdvs	d S d S )Nr~   )r   r   z'unexpected-implied-end-tag-in-table-rowrC   )rA   r   rC   rN   r   r   rE   r(   r(   r)   clearStackToTableRowContextO  s   z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc                 S   ra  )Nr   r   r  rb  rE   r(   r(   r)   ignoreEndTagTrU  r(  z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc                 S   rd  rw  re  rE   r(   r(   r)   r   Y  r   z(getPhases.<locals>.InRowPhase.processEOFc                 S   r%  rw  rb  r   r(   r(   r)   r   \  r(  z4getPhases.<locals>.InRowPhase.processSpaceCharactersc                 S   r%  rw  rf  r   r(   r(   r)   r   _  r(  z/getPhases.<locals>.InRowPhase.processCharactersc                 S   s6   |    | j| | jjd | j_| jjt d S )Nr   )	r  rA   r   rN   rK   rc   ry  r   r   r   r(   r(   r)   r|  b  s   z/getPhases.<locals>.InRowPhase.startTagTableCellc                 S   rs  Nr   r  endTagTrr  rj  r(   r(   r)   r  h  s
   z0getPhases.<locals>.InRowPhase.startTagTableOtherc                 S   r%  rw  r'  r   r(   r(   r)   r+  o  r(  z+getPhases.<locals>.InRowPhase.startTagOtherc                 S   sJ   |   s|   | jj  | jjd | j_d S | jjsJ | j	  d S rI  )
r  r  rA   r   r   rN   rK   rc   rV   r   r   r(   r(   r)   r  r  s   z&getPhases.<locals>.InRowPhase.endTagTrc                 S   rs  r  r  rj  r(   r(   r)   rO  |  s
   z)getPhases.<locals>.InRowPhase.endTagTablec                 S   s4   | j j|d ddr| td |S | j  d S )NrC   r   r  r   )rA   r  r  r  rN   r   r   r(   r(   r)   r    s   z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc                 S   r-  )Nzunexpected-end-tag-in-table-rowrC   r   r   r(   r(   r)   rP    r/  z*getPhases.<locals>.InRowPhase.endTagIgnorec                 S   r%  rw  rn  r   r(   r(   r)   r.    r(  z)getPhases.<locals>.InRowPhase.endTagOtherr   r  )r   r2  r   r   r   r   r   r   r   rQ  )r   r   r2  r   r   r   r   N)r<   r=   r>   r  r   r  r  r   r   r   r|  r  r+  r  rO  r  rP  r.  r   r0  r   r   r1  r   r(   rR  r(   r)   
InRowPhaseJ  s@    

r  c                       r`  )zgetPhases.<locals>.InCellPhasec                 S   sH   | j jdddr| td d S | j jdddr"| td d S d S Nr   r   r  r   )rA   r  endTagTableCellr  rE   r(   r(   r)   	closeCell  s
   z(getPhases.<locals>.InCellPhase.closeCellc                 S   rd  r&  re  rE   r(   r(   r)   r     r   z)getPhases.<locals>.InCellPhase.processEOFc                 S   r%  r&  rf  r   r(   r(   r)   r     r(  z0getPhases.<locals>.InCellPhase.processCharactersc                 S   sF   | j jddds| j jdddr|   |S | jjsJ | j  d S r  )rA   r  r  rN   rV   r   r   r(   r(   r)   r    s   z1getPhases.<locals>.InCellPhase.startTagTableOtherc                 S   r%  r&  r'  r   r(   r(   r)   r+    r(  z,getPhases.<locals>.InCellPhase.startTagOtherc                 S   s   | j j|d ddrN| j |d  | j jd j|d kr9| jdd|d i 	 | j j }|j|d kr7nq)n| j j  | j   | jj	d | j_
d S | jdd|d i d S )	NrC   r   r  r~   zunexpected-cell-end-tagTr   rS  )rA   r  r  r   rC   rN   r   r   r  rK   rc   rN  r(   r(   r)   r    s    

z.getPhases.<locals>.InCellPhase.endTagTableCellc                 S   r-  rR  r   r   r(   r(   r)   rP    rT  z+getPhases.<locals>.InCellPhase.endTagIgnorec                 S   s.   | j j|d ddr|   |S | j  d S )NrC   r   r  )rA   r  r  rN   r   r   r(   r(   r)   endTagImply  s   z*getPhases.<locals>.InCellPhase.endTagImplyc                 S   r%  r&  rn  r   r(   r(   r)   r.    r(  z*getPhases.<locals>.InCellPhase.endTagOtherr   ro  r  )r   r   r2  r   r   r  N)r<   r=   r>   r  r   r  r   r   r  r+  r  rP  r  r.  r   r0  r   r   r1  r   r(   rR  r(   r)   InCellPhase  s0    

r  c                	       s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Z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   r;  )Nr~   r   zeof-in-selectr<  rE   r(   r(   r)   r     r=  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  r  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J d S )Nzunexpected-input-in-selectr   r  )rN   r   rA   r  r  r  rV   r   r(   r(   r)   r  	  s
   z.getPhases.<locals>.InSelectPhase.startTagInputc                 S   r%  ra  r'  r   r(   r(   r)   rJ  	  r(  z/getPhases.<locals>.InSelectPhase.startTagScriptc                 S   r-  )Nzunexpected-start-tag-in-selectrC   r   r   r(   r(   r)   r+  	  r/  z.getPhases.<locals>.InSelectPhase.startTagOtherc                 S   s8   | j jd jdkr| j j  d S | jdddi d S )Nr~   r  unexpected-end-tag-in-selectrC   rA   r   rC   r   rN   r   r   r(   r(   r)   endTagOption	  s
   z-getPhases.<locals>.InSelectPhase.endTagOptionc                 S   sh   | j jd jdkr| j jd jdkr| j j  | j jd jdkr)| j j  d S | jdddi d S )Nr~   r  r  r  rC   r  r   r(   r(   r)   endTagOptgroup%	  s   z/getPhases.<locals>.InSelectPhase.endTagOptgroupc                 S   sd   | j jdddr%| j j }|jdkr| j j }|jdks| j  d S | jjs+J | j  d S )Nr   r  )	rA   r  r   r   rC   rN   re   rV   r   rN  r(   r(   r)   r  2	  s   

z-getPhases.<locals>.InSelectPhase.endTagSelectc                 S   r-  )Nr  rC   r   r   r(   r(   r)   r.  =	  r/  z,getPhases.<locals>.InSelectPhase.endTagOtherr   r  r  r   )r  r*  r  rZ  N)r<   r=   r>   r  r   r   r   r  r  r  r  rJ  r+  r  r  r  r.  r   r0  r   r   r1  r   r(   rR  r(   r)   InSelectPhase  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
edefgZee_ede	fgZe
e_dS )z'getPhases.<locals>.InSelectInTablePhasec                 S   rd  Nr   re  rE   r(   r(   r)   r   U	  r   z2getPhases.<locals>.InSelectInTablePhase.processEOFc                 S   r%  r  rf  r   r(   r(   r)   r   X	  r(  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   r%  r  r'  r   r(   r(   r)   r+  `	  r(  z5getPhases.<locals>.InSelectInTablePhase.startTagOtherc                 S   s@   | j dd|d i | jj|d ddr| td |S d S )Nz3unexpected-table-element-end-tag-in-select-in-tablerC   r   r  r   )rN   r   rA   r  r.  r  r   r(   r(   r)   rO  c	  s
   z3getPhases.<locals>.InSelectInTablePhase.endTagTablec                 S   r%  r  rn  r   r(   r(   r)   r.  i	  r(  z3getPhases.<locals>.InSelectInTablePhase.endTagOther)r   r   r   r   r   r   r   r   N)r<   r=   r>   r  r   r   r   r  r+  rO  r.  r   r0  r   r1  r   r(   r(   r(   r)   InSelectInTablePhaseR	  s(    
r  c                       sB   e Zd Ze Zeg dZdd Z fddZdd Z	dd	 Z
d
S )z(getPhases.<locals>.InForeignContentPhase),r  r  r  r   r  r  r  r|  r*   r
  r}  r  r)  h1h2h3h4h5h6r   r  r  r  r~  r  r  r4   r  r  r'   r  r  r  r  spanr!  r   subsupr   r"  r#  r  varc                 S   s  i ddddddddd	d
dddddddddddddddddddddd d!d"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdG}|dH |v r||dH  |dH< d S d S )INaltglyphaltGlyphaltglyphdefaltGlyphDefaltglyphitemaltGlyphItemanimatecoloranimateColoranimatemotionanimateMotionanimatetransformanimateTransformclippathclipPathfeblendfeBlendfecolormatrixfeColorMatrixfecomponenttransferfeComponentTransferfecompositefeCompositefeconvolvematrixfeConvolveMatrixfediffuselightingfeDiffuseLightingfedisplacementmapfeDisplacementMapfedistantlightfeDistantLightfefloodfeFloodfefuncafeFuncAfefuncbfeFuncBfefuncgfeFuncGfefuncrfeFuncRfegaussianblurfeGaussianBlurfeimagefeImagefemergefeMergefemergenodefeMergeNodefemorphologyfeMorphologyfeoffsetfeOffsetfepointlightfePointLightfespecularlightingfeSpecularLightingfespotlightfeSpotLightfetilefeTilefeturbulencefeTurbulenceforeignobjectforeignObjectglyphrefglyphReflineargradientlinearGradientradialGradienttextPath)radialgradienttextpathrC   r(   )rF   r   replacementsr(   r(   r)   adjustSVGTagNames	  s   	
 !"%z:getPhases.<locals>.InForeignContentPhase.adjustSVGTagNamesc                    sL   |d dkrd|d< n| j jrtdd |d D rd| j _ | | d S )Nr   r  u   �c                 s   s    | ]}|t vV  qd S r-   r  r  r(   r(   r)   	<genexpr>	  s    zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rN   rh   r  r   r   rR  r(   r)   r   	  s   
z:getPhases.<locals>.InForeignContentPhase.processCharactersc                 S   sf  | j jd }|d | jv s|d dkrpt|d  h d@ rp| jdd|d i | j jd j| j jkrn| j	| j jd sn| j
| j jd sn| j j  | j jd j| j jkrn| j	| j jd sn| j
| j jd rI|S |jtd kr~| j| n|jtd kr| | | j| | j| |j|d	< | j | |d
 r| j j  d|d< d S d S )Nr~   rC   r  r   >   facesizecolorz*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   	  sH   


z8getPhases.<locals>.InForeignContentPhase.processStartTagc                 S   s   t | jjd }| jjd }|jt|d kr#| jdd|d i 	 |jt|d kr`| jj| jj	d krE| jj
  | jjj| j_| jj |kr[| jjsSJ | jj |ksMd }	 |S |d8 }| jj| }|j| jjkrrq#| jj|}	 |S )Nr   r~   rC   rS  Tr@  )r   rA   r   rC   rq   r   rN   r   rc   rK   rY  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(   rR  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   r  r-   r(   rE   r(   r(   r)   r   	     z,getPhases.<locals>.AfterBodyPhase.processEOFc                 S   r   )Nr   r   r   r(   r(   r)   r   	  r   z0getPhases.<locals>.AfterBodyPhase.processCommentc                 S       | j d | j jd | j _|S )Nzunexpected-char-after-bodyr   rN   r   rK   rc   r   r(   r(   r)   r   	     z3getPhases.<locals>.AfterBodyPhase.processCharactersc                 S   r%  r&  r'  r   r(   r(   r)   r   	  r(  z.getPhases.<locals>.AfterBodyPhase.startTagHtmlc                 S   *   | j dd|d i | j jd | j _|S )Nzunexpected-start-tag-after-bodyrC   r   r  r   r(   r(   r)   r+  	  r}  z/getPhases.<locals>.AfterBodyPhase.startTagOtherc                 S   s,   | j jr| j d d S | j jd | j _d S )Nz'unexpected-end-tag-after-body-innerhtmlafterAfterBody)rN   rV   r   rK   rc   )rF   rC   r(   r(   r)   r  
  s   z,getPhases.<locals>.AfterBodyPhase.endTagHtmlc                 S   r  )Nzunexpected-end-tag-after-bodyrC   r   r  r   r(   r(   r)   r.  

  r}  z-getPhases.<locals>.AfterBodyPhase.endTagOtherr   N)r<   r=   r>   r  r   r   r   r   r   r+  r  r.  r   r0  r   r1  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   r;  )Nr~   r   zeof-in-framesetr<  rE   r(   r(   r)   r   
  r=  z-getPhases.<locals>.InFramesetPhase.processEOFc                 S   r   )Nzunexpected-char-in-framesetr   r   r(   r(   r)   r   "
  rv   z4getPhases.<locals>.InFramesetPhase.processCharactersc                 S   r_  r-   )rA   r   r   r(   r(   r)   rm  %
  rv   z3getPhases.<locals>.InFramesetPhase.startTagFramesetc                 S   s   | j | | j j  d S r-   r6  r   r(   r(   r)   startTagFrame(
  r8  z0getPhases.<locals>.InFramesetPhase.startTagFramec                 S   r%  r&  r'  r   r(   r(   r)   startTagNoframes,
  r(  z3getPhases.<locals>.InFramesetPhase.startTagNoframesc                 S   r-  )Nz unexpected-start-tag-in-framesetrC   r   r   r(   r(   r)   r+  /
  r/  z0getPhases.<locals>.InFramesetPhase.startTagOtherc                 S   sb   | j jd jdkr| jd n| j j  | jjs-| j jd jdkr/| jjd | j_d S d S d S )Nr~   r   z)unexpected-frameset-in-frameset-innerhtmlr   afterFrameset)	rA   r   rC   rN   r   r   rV   rK   rc   r   r(   r(   r)   endTagFrameset3
  s   z1getPhases.<locals>.InFramesetPhase.endTagFramesetc                 S   r-  )Nzunexpected-end-tag-in-framesetrC   r   r   r(   r(   r)   r.  ?
  r/  z.getPhases.<locals>.InFramesetPhase.endTagOtherr   r   r3  rW  N)r<   r=   r>   r  r   r   r   rm  r  r  r+  r  r.  r   r0  r   r   r1  r   r(   rR  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   r  r-   r(   rE   r(   r(   r)   r   T
  r  z0getPhases.<locals>.AfterFramesetPhase.processEOFc                 S   r   )Nzunexpected-char-after-framesetr   r   r(   r(   r)   r   X
  rv   z7getPhases.<locals>.AfterFramesetPhase.processCharactersc                 S   r%  ra  r'  r   r(   r(   r)   r  [
  r(  z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc                 S   r-  )Nz#unexpected-start-tag-after-framesetrC   r   r   r(   r(   r)   r+  ^
  r/  z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc                 S   s   | j jd | j _d S )NafterAfterFrameset)rN   rK   rc   r   r(   r(   r)   r  b
  r   z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc                 S   r-  )Nz!unexpected-end-tag-after-framesetrC   r   r   r(   r(   r)   r.  e
  r/  z1getPhases.<locals>.AfterFramesetPhase.endTagOtherr   rW  N)r<   r=   r>   r  r   r   r   r  r+  r  r.  r   r0  r   r   r1  r   r(   rR  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   r  r-   r(   rE   r(   r(   r)   r   w
  r   z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc                 S   r  r-   r  r   r(   r(   r)   r   z
  r  z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc                 S   r%  r&  rb  r   r(   r(   r)   r   }
  r(  z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharactersc                 S   r  )Nexpected-eof-but-got-charr   r  r   r(   r(   r)   r   
  r  z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc                 S   r%  r&  r'  r   r(   r(   r)   r   
  r(  z3getPhases.<locals>.AfterAfterBodyPhase.startTagHtmlc                 S   r  )Nexpected-eof-but-got-start-tagrC   r   r  r   r(   r(   r)   r+  
  r}  z4getPhases.<locals>.AfterAfterBodyPhase.startTagOtherc                 S   r  )Nexpected-eof-but-got-end-tagrC   r   r  r   r(   r(   r)   r   
  r}  z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagr   N)r<   r=   r>   r  r   r   r   r   r   r   r+  r   r   r0  r   r1  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   r  r-   r(   rE   r(   r(   r)   r   
  r   z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc                 S   r  r-   r  r   r(   r(   r)   r   
  r  z9getPhases.<locals>.AfterAfterFramesetPhase.processCommentc                 S   r%  r&  rb  r   r(   r(   r)   r   
  r(  zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc                 S   r   )Nr  r   r   r(   r(   r)   r   
  rv   z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc                 S   r%  r&  r'  r   r(   r(   r)   r   
  r(  z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc                 S   r%  ra  r'  r   r(   r(   r)   startTagNoFrames
  r(  z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc                 S   r-  )Nr	  rC   r   r   r(   r(   r)   r+  
  r/  z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc                 S   r-  )Nr
  rC   r   r   r(   r(   r)   r   
  r/  z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagr   rW  N)r<   r=   r>   r  r   r   r   r   r   r   r  r+  r   r   r0  r   r1  r(   r(   r(   r)   AfterAfterFramesetPhase
  s    
r  rZ   rY   r   r)  rG  rL  r   r   r   r@  r   r   r   r   r   r   r  )r   r  r   r  r  r  )r   )rL   r\   r   r  r  r2  r`  rj  rp  r9  rS  rp  ry  r  r  r  r  r  r  r   r  r  r  r  r(   )rt  rU  r  r)   rJ     s   H %-f?B     Y! /F@bYLc&r.8$%%	
rJ   c                    sJ   t | d t  @ }|r#t| d  fdd| d  D | d< d S 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   rz   Fc                 C   s   |d u 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)rz   NF),
__future__r   r   r   pip._vendor.sixr   r   r0   r
  r   r	   r
   treebuilders.baser   r   	constantsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r,   r@   r&  r!   memoizerJ   r   r  	Exceptionr}   r(   r(   r(   r)   <module>   sP    H

  8
                  _
