o
    1c                    @   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(   Y/var/www/html/django/env/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basesZ	classDictZattributeName	attributefunctionr(   r)   r3   L   s
   
z5method_decorator_metaclass.<locals>.Decorated.__new__N)__name__
__module____qualname__r3   r(   r8   r(   r)   	DecoratedK   s    r=   )r2   )r9   r=   r(   r8   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    r?   errors	getPhasesr.   phases)rD   r?   rF   r   debugr(   rC   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	   ZHTMLTokenizer	tokenizerresetmainLoopr   )rD   stream	innerHTMLr+   rN   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)r?   rP   firstStartTagrG   log
compatModerM   r+   lowerrS   r   rO   rcdataStatestater   rawtextStateplaintextStaterI   phaseinsertHtmlElementresetInsertionModeZ	lastPhaseZbeforeRCDataPhase
framesetOKrC   r(   r(   r)   rP      s,   






zHTMLParser.resetc                 C   s   t | dsdS | jjjd jS )zName of the character encoding that was used to decode the input stream, or
        :obj:`None` if that is not determined yet

        rO   Nr   )hasattrrO   rR   charEncodingrA   rC   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)rA   	namespacer   
attributes	translater   r   rD   elementr(   r(   r)   isHTMLIntegrationPoint   s   


z!HTMLParser.isHTMLIntegrationPointc                 C   s   |j |jftv S r-   )rj   rA   r   rm   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
CharactersZSpaceCharactersStartTagEndTagCommentZDoctype
ParseErrorr2   datadatavarsr   rA   ZmglyphZ
malignmarkrh   rg   svginForeignContentselfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   rO   r?   openElementsrj   rA   
parseErrorgetlendefaultNamespacerp   	frozensetr   ro   r`   rI   processCharactersprocessSpaceCharactersprocessStartTagprocessEndTagprocessCommentprocessDoctypeappend
processEOF)rD   ZCharactersTokenZSpaceCharactersTokenZStartTagTokenZEndTagTokenZCommentTokenZDoctypeTokenZParseErrorTokentokenZ
prev_token	new_tokencurrentNodeZcurrentNodeNamespaceZcurrentNodeNamer2   r`   Z	reprocessrI   r(   r(   r)   rQ      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)rT   r?   ZgetDocumentrD   rR   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)rT   r?   Z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-   )rG   r   rO   rR   positionrF   rv   r   )rD   	errorcodery   r(   r(   r)   r   ;  s   zHTMLParser.parseErrorc                 C      t |t d S r-   )adjust_attributesr   rD   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-   )rL   r`   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htmlrw   r   T)r   r   r   r   )r?   r~   rA   rS   rj   r   rI   r`   )rD   lastZnewModesnodeZnodeNameZ	new_phaser(   r(   r)   rb   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)	r?   insertElementrO   r^   r]   r\   r`   originalPhaserI   )rD   r   ZcontentTyper(   r(   r)   parseRCDataRawtext|  s   zHTMLParser.parseRCDataRawtext)NFTF)Fr*   F)r   N)r:   r;   r<   __doc__rK   rT   rP   propertyrf   ro   rp   rQ   r"   r,   r   r   r   r   r   rb   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(   )r@   keyvaluer(   r(   r)   rE     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   rA   )r:   
startswithr   r   rL   rY   r   rO   r]   r`   	__class__)rD   r   r%   r   infor9   Z
type_namesr(   r)   wrapped  s   
z'getPhases.<locals>.log.<locals>.wrapped)r   r.   )r9   r   r(   r   r)   rY     s   zgetPhases.<locals>.logc                 S   s   | rt |S tS r-   )r>   r2   )Zuse_metaclassZ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
        )rL   r?   Z__startTagCacheZ__endTagCachec                 S   s   || _ || _i | _i | _d S r-   )rL   r?   _Phase__startTagCache_Phase__endTagCache)rD   rL   r?   r(   r(   r)   rK     s   
z!getPhases.<locals>.Phase.__init__c                 S   s   t r-   )NotImplementedErrorrC   r(   r(   r)   r        z#getPhases.<locals>.Phase.processEOFc                 S      | j || j jd  d S )Nrw   r?   insertCommentr~   r   r(   r(   r)   r        z'getPhases.<locals>.Phase.processCommentc                 S      | j d d S )Nzunexpected-doctyperL   r   r   r(   r(   r)   r     rq   z'getPhases.<locals>.Phase.processDoctypec                 S      | j |d  d S Nrx   r?   
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 NrA   g?)r   startTagHandlerr   popnextiterrD   r   rA   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 )NrA   r   znon-html-rootrx   r   F)rL   rX   r   r.   r?   r~   rk   rD   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__rK   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-   r?   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 )NrA   publicIdsystemIdcorrectr   zabout:legacy-compatzunknown-doctype )7z*+//silmaril//dtd html pro v0r11 19970101//z4-//advasoft ltd//dtd html 3.0 aswedit + extensions//z*-//as//dtd html 3.0 aswedit + extensions//z-//ietf//dtd html 2.0 level 1//z-//ietf//dtd html 2.0 level 2//z&-//ietf//dtd html 2.0 strict level 1//z&-//ietf//dtd html 2.0 strict level 2//z-//ietf//dtd html 2.0 strict//z-//ietf//dtd html 2.0//z-//ietf//dtd html 2.1e//z-//ietf//dtd html 3.0//z-//ietf//dtd html 3.2 final//z-//ietf//dtd html 3.2//z-//ietf//dtd html 3//z-//ietf//dtd html level 0//z-//ietf//dtd html level 1//z-//ietf//dtd html level 2//z-//ietf//dtd html level 3//z"-//ietf//dtd html strict level 0//z"-//ietf//dtd html strict level 1//z"-//ietf//dtd html strict level 2//z"-//ietf//dtd html strict level 3//z-//ietf//dtd html strict//z-//ietf//dtd html//z(-//metrius//dtd metrius presentational//z5-//microsoft//dtd internet explorer 2.0 html strict//z.-//microsoft//dtd internet explorer 2.0 html//z0-//microsoft//dtd internet explorer 2.0 tables//z5-//microsoft//dtd internet explorer 3.0 html strict//z.-//microsoft//dtd internet explorer 3.0 html//z0-//microsoft//dtd internet explorer 3.0 tables//z#-//netscape comm. corp.//dtd html//z*-//netscape comm. corp.//dtd strict html//z*-//o'reilly and associates//dtd html 2.0//z3-//o'reilly and associates//dtd html extended 1.0//z;-//o'reilly and associates//dtd html extended relaxed 1.0//zN-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//zE-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//z$-//spyglass//dtd html 2.0 extended//z+-//sq//dtd html 2.0 hotmetal + extensions//z--//sun microsystems corp.//dtd hotjava html//z4-//sun microsystems corp.//dtd hotjava strict html//z-//w3c//dtd html 3 1995-03-24//z-//w3c//dtd html 3.2 draft//z-//w3c//dtd html 3.2 final//z-//w3c//dtd html 3.2//z-//w3c//dtd html 3.2s draft//z-//w3c//dtd html 4.0 frameset//z#-//w3c//dtd html 4.0 transitional//z(-//w3c//dtd html experimental 19960712//z&-//w3c//dtd html experimental 970421//z-//w3c//dtd w3 html//z-//w3o//dtd w3 html 3.0//z#-//webtechs//dtd mozilla html 2.0//z-//webtechs//dtd mozilla html//)z$-//w3o//dtd w3 html strict 3.0//en//z"-/w3c/dtd html 4.0 transitional/enr   )z -//w3c//dtd html 4.01 frameset//z$-//w3c//dtd html 4.01 transitional//z:http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtdquirks)z -//w3c//dtd xhtml 1.0 frameset//z$-//w3c//dtd xhtml 1.0 transitional//zlimited quirksrV   )rL   r   r?   ZinsertDoctyperl   r   r   r[   rZ   rI   r`   )rD   r   rA   r   r   r   r(   r(   r)   r     sX   
9<?@
@
Az.getPhases.<locals>.InitialPhase.processDoctypec                 S   s   d| j _| j jd | j _d S )Nr   rV   )rL   rZ   rI   r`   rC   r(   r(   r)   anythingElseZ  s   z,getPhases.<locals>.InitialPhase.anythingElsec                 S      | j d |   |S )Nzexpected-doctype-but-got-charsrL   r   r   r   r(   r(   r)   r   ^     z1getPhases.<locals>.InitialPhase.processCharactersc                 S   "   | j dd|d i |   |S )Nz"expected-doctype-but-got-start-tagrA   r   r   r(   r(   r)   r   c  
   
z/getPhases.<locals>.InitialPhase.processStartTagc                 S   r   )Nz expected-doctype-but-got-end-tagrA   r   r   r(   r(   r)   r   i  r   z-getPhases.<locals>.InitialPhase.processEndTagc                 S      | j d |   dS )Nzexpected-doctype-but-got-eofTr   rC   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   rs   r   )r?   Z
insertRootimpliedTagTokenrL   rI   r`   rC   r(   r(   r)   ra   x  s   z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc                 S      |    dS NTra   rC   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 )NrA   r   T)rL   rX   ra   r   r(   r(   r)   r     s   z2getPhases.<locals>.BeforeHtmlPhase.processStartTagc                 S   s2   |d dvr| j dd|d i d S |   |S )NrA   r   r   r   brzunexpected-end-tag-before-html)rL   r   ra   r   r(   r(   r)   r     s   
z0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)r:   r;   r<   r   r   ra   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   rs   TstartTagHeadr   rC   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   rs   r   r   r(   r(   r)   r     r  z4getPhases.<locals>.BeforeHeadPhase.processCharactersc                 S      | j jd |S Nr   rL   rI   r   r   r(   r(   r)   r        z/getPhases.<locals>.BeforeHeadPhase.startTagHtmlc                 S   s0   | j | | j jd | j _| jjd | j_d S )Nrw   inHead)r?   r   r~   headPointerrL   rI   r`   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-rootrA   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&    
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   r   r   r   rC   r(   r(   r)   r     r   z)getPhases.<locals>.InHeadPhase.processEOFc                 S   r   r-   r  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     rq   z+getPhases.<locals>.InHeadPhase.startTagHeadc                 S   $   | j | | j j  d|d< d S NTr}   r?   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}   rx   r   Z	tentativecharsetcontentz
http-equivzcontent-typezutf-8)r?   r   r~   r   rL   rO   rR   re   ZchangeEncodingr[   r   ZEncodingBytesencodeZContentAttrParserr"   )rD   r   rk   rx   rL   codecr(   r(   r)   startTagMeta  s$   
z+getPhases.<locals>.InHeadPhase.startTagMetac                 S      | j |d d S )Nr   rL   r   r   r(   r(   r)   startTagTitle  r  z,getPhases.<locals>.InHeadPhase.startTagTitlec                 S   r  )Nr   r  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)rL   rN   r   r?   r   rI   r`   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   )	r?   r   rL   rO   ZscriptDataStater]   r`   r   rI   r   r(   r(   r)   startTagScript   s   z-getPhases.<locals>.InHeadPhase.startTagScriptc                 S   r   r-   r  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rL   r?   r~   r   rA   rI   r`   rD   r   r   r(   r(   r)   
endTagHead
     z)getPhases.<locals>.InHeadPhase.endTagHeadc                 S   r   r-   r  r   r(   r(   r)   endTagHtmlBodyBr  r   z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc                 S   r  Nunexpected-end-tagrA   r   r   r(   r(   r)   r       z*getPhases.<locals>.InHeadPhase.endTagOtherc                 S      |  td d S )Nr   )r)  r   rC   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   r  r  r  r   r#  r$  r
  r)  r+  r  r   r   r  r   r  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   rC   r(   r(   r)   r   /  r   z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc                 S   r  Nr  )rL   rI   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  r;  rL   rI   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  r;  r  r   r(   r(   r)   r  B  r  z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc                 S   r  Nunexpected-start-tagrA   r   r   r(   r(   r)   startTagHeadNoscriptE  r.  z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc                 S   r   Nzunexpected-inhead-noscript-tagrA   r   r   r(   r(   r)   r
  H     z4getPhases.<locals>.InHeadNoscriptPhase.startTagOtherc                 S   r%  )Nr3  zExpected noscript got %sr  r'  r(  r(   r(   r)   endTagNoscriptM  r*  z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc                 S   r   r@  r   r   r(   r(   r)   endTagBrR  rA  z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc                 S   r  r,  r   r   r(   r(   r)   r  W  r.  z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc                 S   r/  )Nr3  )rB  r   rC   r(   r(   r)   r   Z  r!  z3getPhases.<locals>.InHeadNoscriptPhase.anythingElser   )r6  r7  r9  r4   r1  r2  )r   r3  r3  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,  s2    
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   r   r   r  rC   r(   r(   r)   r   n  r   z,getPhases.<locals>.AfterHeadPhase.processEOFc                 S   r   r-   r  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   )rL   rc   r?   r   rI   r`   r   r(   r(   r)   startTagBodyy     z.getPhases.<locals>.AfterHeadPhase.startTagBodyc                 S   s    | j | | jjd | j_d S )Nr   )r?   r   rL   rI   r`   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-headrA   r  rw   r   )
rL   r   r?   r~   r   r	  rI   r   rA   remover(  r(   r(   r)   startTagFromHead  s   

z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc                 S   r  r=  r   r   r(   r(   r)   r     r.  z.getPhases.<locals>.AfterHeadPhase.startTagHeadc                 S   r   r-   r  r   r(   r(   r)   r
    r   z/getPhases.<locals>.AfterHeadPhase.startTagOtherc                 S   r   r-   r  r   r(   r(   r)   r+    r   z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc                 S   r  r,  r   r   r(   r(   r)   r    r.  z-getPhases.<locals>.AfterHeadPhase.endTagOtherc                 S   s.   | j tdd | jjd | j_d| j_d S )Nr   rs   r   T)r?   r   r   rL   rI   r`   rc   rC   r(   r(   r)   r     s   z.getPhases.<locals>.AfterHeadPhase.anythingElser   r   r   )	r5  r6  r7  r9  r4   r1  r4  r2  r0  r   )r   r   r   N)r:   r;   r<   r   r   r   r   r   rE  rG  rI  r   r
  r+  r  r   r   r  r   r  r   r(   r(   r(   r)   AfterHeadPhasek  s6    
	
rJ  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-   )superrK   processSpaceCharactersNonPrer   rD   r   r%   )InBodyPhaser   r(   r)   rK     s   z'getPhases.<locals>.InBodyPhase.__init__c                 S   s$   |j |j ko|j|jko|j|jkS r-   )rA   rj   rk   )rD   Znode1Znode2r(   r(   r)   isMatchingFormattingElement  s
   

z:getPhases.<locals>.InBodyPhase.isMatchingFormattingElementc                 S   s   | j | | j jd }g }| j jd d d D ]}|tu r n| ||r*|| qt|dks3J t|dkrB| j j|d  | j j| d S )Nrw      )	r?   r   r~   activeFormattingElementsr   rO  r   r   rH  )rD   r   rn   Z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   rw   z expected-closing-tag-but-got-eof)r   r?   r~   rA   rL   r   )rD   Z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 )Nrx   
rw   )prelistingtextarear   )	rL  r   r   r?   r~   rA   Z
hasContent#reconstructActiveFormattingElementsr   )rD   r   rx   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 )Nrx    c                 S      g | ]}|t vqS r(   r   r@   charr(   r(   r)   
<listcomp>  s    zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r?   rZ  r   rL   rc   anyr   r(   r(   r)   r     s   
z0getPhases.<locals>.InBodyPhase.processCharactersc                 S   s   | j   | j |d  d S r   )r?   rZ  r   r   r(   r(   r)   rL    s   
z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec                 S   r  r;  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 )Nr>  rA   r   r   Frx   )
rL   r   r   r?   r~   rA   rS   rc   r.   rk   r   r(   r(   r)   rE    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 )	Nr>  rA   r   r   r   rw   r   r   )rL   r   r   r?   r~   rA   rS   rc   parentremoveChildr   r   rI   r`   r   r(   r(   r)   rG    s   "z/getPhases.<locals>.InBodyPhase.startTagFramesetc                 S   s.   | j jdddr| td | j | d S Nr'   buttonvariant)r?   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'   rg  rh  F)	r?   rj  rk  r   r   rL   rc   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 )Nr>  rA   formr'   rg  rh  rw   )	r?   formPointerrL   r   rj  rk  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 )NFrU  rT  rS  )rU  rT  rS  rA   rt   )addressr*   r'   r'   rg  rh  )rL   rc   reversedr?   r~   rA   r`   r   r   	nameTupler   rj  r   )rD   r   ZstopNamesMapZ	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 rf  )	r?   rj  rk  r   r   rL   rO   r_   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'   rg  rh  rw   r>  rA   )r?   rj  rk  r   r~   rA   r   rL   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Z	startNameZendName)r?   !elementInActiveFormattingElementsrL   r   endTagFormattingr   r~   rH  rQ  rZ  rR  )rD   r   ZafeAElementr(   r(   r)   	startTagAJ  s   
z(getPhases.<locals>.InBodyPhase.startTagAc                 S   s   | j   | | d S r-   )r?   rZ  rR  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nobrrx  ry  )r?   rZ  rj  rL   r   r   r   rR  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 )Nrg  rx  ry  F)	r?   rj  rL   r   r   r   rZ  r   rc   r   r(   r(   r)   startTagButtone  s   
z-getPhases.<locals>.InBodyPhase.startTagButtonc                 S   s0   | j   | j | | j jt d| j_d S NF)r?   rZ  r   rQ  r   r   rL   rc   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'   rg  rh  Fr   )r?   rj  rk  r   rZ  rL   rc   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'   rg  rh  Fr   )
rL   rZ   r?   rj  r   r   r   rc   rI   r`   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)r?   rZ  r   r~   r   rL   rc   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   rx   hidden)rL   rc   r  rl   r   )rD   r   rc   r(   r(   r)   startTagInput  s   
z,getPhases.<locals>.InBodyPhase.startTagInputc                 S   r  r  r  r   r(   r(   r)   startTagParamSource  r  z2getPhases.<locals>.InBodyPhase.startTagParamSourcec                 S   sJ   | j jdddr| td | j | | j j  d|d< d| j_d S )Nr'   rg  rh  Tr}   F)	r?   rj  rk  r   r   r~   r   rL   rc   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ZoriginalNameZnewNamers   rx   r|   rk   r|   )rL   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-tagrA   isindexactionrx   rn  rs   )rk   hrlabelpromptz3This is a searchable index. Enter search keywords: rr   r2   rx   inputr|   r  )
rL   r   r?   ro  r   r   r   r   copyr   )rD   r   Z
form_attrsr  rk   r(   r(   r)   startTagIsIndex  s<   

z.getPhases.<locals>.InBodyPhase.startTagIsIndexc                 S   s0   | j | | jjj| jj_| j| _d| j_d S r  )	r?   r   rL   rO   r\   r]   r[  r   rc   r   r(   r(   r)   startTagTextarea  s   z/getPhases.<locals>.InBodyPhase.startTagTextareac                 S   s   d| j _| | d S r  )rL   rc   startTagRawtextr   r(   r(   r)   startTagIFrame  s   z-getPhases.<locals>.InBodyPhase.startTagIFramec                 S   s$   | j jr| | d S | | d S r-   )rL   rN   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    r!  z.getPhases.<locals>.InBodyPhase.startTagRawtextc                 S   s@   | j jd jdkr| jjtd | j   | jj | d S Nrw   option)	r?   r~   rA   rL   r`   r   r   rZ  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   )r?   rZ  r   rL   rc   r`   rI   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rubyrw   )r?   rj  generateImpliedEndTagsr~   rA   rL   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 )Nrh   rj   r|   Tr}   )	r?   rZ  rL   r   r   r   r   r~   r   r   r(   r(   r)   startTagMath     
z+getPhases.<locals>.InBodyPhase.startTagMathc                 S   r  )Nrz   rj   r|   Tr}   )	r?   rZ  rL   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-ignoredrA   Nr   r   r(   r(   r)   startTagMisplaced  s   z0getPhases.<locals>.InBodyPhase.startTagMisplacedc                 S   s   | j   | j | d S r-   )r?   rZ  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'   rg  rh  rs   r-  rA   rt   rw   )r?   rj  rl  r   rL   r   rk  r  r~   rA   r   r(  r(   r(   r)   rk    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   rw      )rS  rT  rU  optgroupr  r'   rprtr   r   r   r   r   r   r   r   $expected-one-end-tag-but-got-anotherZgotNameZexpectedName	afterBody)	r?   rj  rL   r   r~   rA   r   rI   r`   r(  r(   r(   r)   
endTagBody)  s   


z)getPhases.<locals>.InBodyPhase.endTagBodyc                 S   s"   | j dr| td |S d S )Nr   )r?   rj  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 )NrA   rW  rw   end-tag-too-early)
rL  r   r?   rj  r  r~   rA   rL   r   r   )rD   r   Z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 )Nr-  rA   rn  rw   zend-tag-too-early-ignored)r?   ro  rj  rL   r   r  r~   rH  r(  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 )	NrA   rU  listrh  r-  excluderw   r  )r?   rj  rL   r   r  r~   rA   r   )rD   r   ri  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 )Nrw   rA   r  )	r   r?   rj  r  r~   rA   rL   r   r   )rD   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   rA   Nzadoption-agency-1.2zadoption-agency-4.4rw   zadoption-agency-1.3rP  r   r   r   r   r   )r?   rz  r~   rj  rA   r  rL   r   rQ  rH  indexrs  r   r   Z	cloneNoderd  re  ZappendChildr   ZgetTableMisnestedNodePositioninsertBeforeZreparentChildreninsert)rD   r   ZouterLoopCounterZformattingElementZafeIndexZfurthestBlockrn   ZcommonAncestorbookmarkZlastNoder   ZinnerLoopCounterr  clonerd  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 )NrA   rw   r  )	r?   rj  r  r~   rA   rL   r   r   clearActiveFormattingElements)rD   r   rn   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  rs   )rL   r   r?   rZ  r   r   r~   r   r   r(   r(   r)   rC  +  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 )Nrw   rA   r  r-  )	r?   r~   rA   r  rL   r   r   rs  r   r(  r(   r(   r)   r  2  s   
z*getPhases.<locals>.InBodyPhase.endTagOtherr   )	r5  r6  r7  r8  r9  r4   r4  r2  r0  r   r   )rq  articleaside
blockquotecenterdetailsdirr*   dlfieldset
figcaptionfigurefooterheaderhgroupmainmenunavolr'   sectionsummaryul)rW  rX  rn  )rU  rS  rT  rU   rw  )bbigcodeemfontissmallstrikestrongttur~  rg  )ZappletZmarqueeobjectZxmpr   )arear   embedr  keygenZwbr)paramsourcetrackr  r  r  r  rY  Ziframer3  )Znoembedr1  r   )r  r  )r  r  mathrz   )r   colr   framer   r   r   r   r   r   r   )rq  r  r  r  rg  r  r  Zdialogr  r*   r  r  r  r  r  r  r  rX  r  r  r  r  rW  r  r  r  r'   )rS  rT  rU  )rw  r  r  r  r  r  r  r~  r  r  r  r  r  r  r   )?r:   r;   r<   r   rK   rO  rR  r   r[  r   rL  rc  rE  rG  rl  rm  rp  rt  ru  rv  r|  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r  r  r  r  r  r  r  r
  rk  r  r  r  r  r  r  r{  r  rC  r  r   r  r   r   r   r  r   __classcell__r(   )rN  r   r   r)   rN    s*   
	
	 $ !"#$%&'()-rN  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-eofrA   rw   T)rL   r   r?   r~   rA   r   r   r`   rC   r(   r(   r)   r     s   z'getPhases.<locals>.TextPhase.processEOFc                 S   s   J d|d  )NFz4Tried to process start tag %s in RCDATA/RAWTEXT moderA   r(   r   r(   r(   r)   r
    rq   z*getPhases.<locals>.TextPhase.startTagOtherc                 S   s*   | j j }|jdksJ | jj| j_d S )Nr4  )r?   r~   r   rA   rL   r   r`   r(  r(   r(   r)   endTagScript  s   z)getPhases.<locals>.TextPhase.endTagScriptc                 S   s   | j j  | jj| j_d S r-   )r?   r~   r   rL   r   r`   r   r(   r(   r)   r       z(getPhases.<locals>.TextPhase.endTagOtherr4  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   s8   | j jd jdvr| j j  | j jd jdvs	d S d S )Nrw   )r   r   )r?   r~   rA   r   rC   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 )Nrw   r   zeof-in-tabler?   r~   rA   rL   r   rS   rC   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)rL   r`   rI   r   r   rD   r   r   r(   r(   r)   r        
z6getPhases.<locals>.InTablePhase.processSpaceCharactersc                 S   r  r  )rL   r`   rI   r   r   r  r(   r(   r)   r     r  z1getPhases.<locals>.InTablePhase.processCharactersc                 S   s&   d| j _| jjd | d| j _d S )NTr   F)r?   insertFromTablerL   rI   r   r   r(   r(   r)   r     s   z*getPhases.<locals>.InTablePhase.insertTextc                 S   s6   |    | jjt | j| | jjd | j_d S )Nr   )	r  r?   rQ  r   r   r   rL   rI   r`   r   r(   r(   r)   startTagCaption  s   z/getPhases.<locals>.InTablePhase.startTagCaptionc                 S   (   |    | j| | jjd | j_d S )Nr   r  r?   r   rL   rI   r`   r   r(   r(   r)   startTagColgroup  rF  z0getPhases.<locals>.InTablePhase.startTagColgroupc                 S   r  )Nr   rs   )r  r   r   r(   r(   r)   startTagCol  r  z+getPhases.<locals>.InTablePhase.startTagColc                 S   r  Nr   r  r   r(   r(   r)   startTagRowGroup  rF  z0getPhases.<locals>.InTablePhase.startTagRowGroupc                 S   r  )Nr   rs   )r  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 )Nrx  r   ry  )rL   r   r`   r   r   rS   r   r(   r(   r)   r    s   z-getPhases.<locals>.InTablePhase.startTagTablec                 S   r  r;  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   rx   r  z unexpected-hidden-input-in-table)	rl   r   rL   r   r?   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-tablerw   )rL   r   r?   ro  r   r~   r   r   r(   r(   r)   rp    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-voodoorA   Tr   F)rL   r   r?   r  rI   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   rh  rw   zend-tag-too-early-namedr  )
r?   rj  r  r~   rA   rL   r   r   rb   rS   r   r(   r(   r)   endTagTable  s   
z+getPhases.<locals>.InTablePhase.endTagTablec                 S   r  r,  r   r   r(   r(   r)   endTagIgnore  r.  z,getPhases.<locals>.InTablePhase.endTagIgnorec                 S   r  )Nz'unexpected-end-tag-implies-table-voodoorA   Tr   F)rL   r   r?   r  rI   r   r   r(   r(   r)   r    r  z+getPhases.<locals>.InTablePhase.endTagOtherr   r   r   r  r   r   r   )r   r   r   r   )r2  r4  r  rn  )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  rp  r
  r  r  r  r   r  r   r   r  r   r(   r   r(   r)   InTablePhase  sP    	

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|i | d | _g | _d S r-   )rK  rK   r   r  rM  )InTableTextPhaser   r(   r)   rK   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 )rx   r(   r@   r  r(   r(   r)   ra  <      zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c                 S   r]  r(   r^  r  r(   r(   r)   ra  =  r  rr   r  r   )joinr  rb  r   rL   rI   r   r?   )rD   rx   r   r(   r(   r)   flushCharacters;  s   
z3getPhases.<locals>.InTableTextPhase.flushCharactersc                 S      |    | j| j_|S r-   r  r   rL   r`   r   r(   r(   r)   r   D     
z2getPhases.<locals>.InTableTextPhase.processCommentc                 S   s   |    | j| j_dS r   r  rC   r(   r(   r)   r   I  r  z.getPhases.<locals>.InTableTextPhase.processEOFc                 S   s    |d dkrd S | j | d S Nrx   r\  r  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   r  r-   r  r   r(   r(   r)   r   X  r  z3getPhases.<locals>.InTableTextPhase.processStartTagc                 S   r  r-   r  r   r(   r(   r)   r   ]  r  z1getPhases.<locals>.InTableTextPhase.processEndTag)r:   r;   r<   r   rK   r  r   r   r   r   r   r   r  r(   )r  r  r)   r  3  s    	r  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   rh  r?   rj  rC   r(   r(   r)   ignoreEndTagCaptionf  r  z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc                 S      | j jd   d S r  rL   rI   r   rC   r(   r(   r)   r   i  r   z,getPhases.<locals>.InCaptionPhase.processEOFc                 S   r  r  rL   rI   r   r   r(   r(   r)   r   l  r  z3getPhases.<locals>.InCaptionPhase.processCharactersc                 S   0   | j   |  }| j jtd |s|S d S Nr   rL   r   r  r`   r   r   rD   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 )Nrw   r   r  r  r   )r  r?   r  r~   rA   rL   r   r   r  rI   r`   rS   r   r(   r(   r)   endTagCaptionz  s    

z/getPhases.<locals>.InCaptionPhase.endTagCaptionc                 S   r  r   r!  r"  r(   r(   r)   r    s   
z-getPhases.<locals>.InCaptionPhase.endTagTablec                 S   r  r,  r   r   r(   r(   r)   r    r.  z.getPhases.<locals>.InCaptionPhase.endTagIgnorec                 S   r  r  rL   rI   r   r   r(   r(   r)   r    r  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   r$  r
  r%  r  r  r  r   r  r   r   r  r   r(   r
  r(   r)   InCaptionPhaseb  s4    
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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 )Nrw   r   )r?   r~   rA   rC   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 )Nrw   r   r   T)r?   r~   rA   rL   rS   r)  endTagColgroupr   )rD   r#  r(   r(   r)   r     s   z0getPhases.<locals>.InColumnGroupPhase.processEOFc                 S   "   |   }| td |s|S d S Nr   r)  r*  r   r"  r(   r(   r)   r     
   z7getPhases.<locals>.InColumnGroupPhase.processCharactersc                 S   r  r  r  r   r(   r(   r)   r     r  z1getPhases.<locals>.InColumnGroupPhase.startTagColc                 S   r+  r,  r-  r"  r(   r(   r)   r
    r.  z3getPhases.<locals>.InColumnGroupPhase.startTagOtherc                 S   sB   |   r| jjs
J | j  d S | jj  | jjd | j_d S Nr   )	r)  rL   rS   r   r?   r~   r   rI   r`   r   r(   r(   r)   r*    s
   z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc                 S   s   | j dddi d S )Nz
no-end-tagrA   r  r   r   r(   r(   r)   	endTagCol  r   z/getPhases.<locals>.InColumnGroupPhase.endTagColc                 S   r+  r,  r-  r"  r(   r(   r)   r    r.  z1getPhases.<locals>.InColumnGroupPhase.endTagOtherr   r  r   N)r:   r;   r<   r   r   r)  r   r   r   r
  r*  r0  r  r   r  r   r   r  r   r(   r
  r(   r)   InColumnGroupPhase  s(    
	
r1  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 )Nrw   )r   r   r   r   r   )r?   r~   rA   r   rL   rS   rC   r(   r(   r)   clearStackToTableBodyContext  s   z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc                 S   r  r/  r  rC   r(   r(   r)   r     r   z.getPhases.<locals>.InTableBodyPhase.processEOFc                 S   r  r/  r<  r   r(   r(   r)   r     r  z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc                 S   r  r/  r  r   r(   r(   r)   r     r  z5getPhases.<locals>.InTableBodyPhase.processCharactersc                 S   r  )Nr   )r2  r?   r   rL   rI   r`   r   r(   r(   r)   
startTagTr   rF  z.getPhases.<locals>.InTableBodyPhase.startTagTrc                 S   s*   | j dd|d i | tdd |S )Nzunexpected-cell-in-table-bodyrA   r   rs   )rL   r   r3  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   rh  r   r   rw   
r?   rj  r2  endTagTableRowGroupr   r~   rA   rL   rS   r   r   r(   r(   r)   startTagTableOther  s   z6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc                 S   r  r/  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 )NrA   r   rh  r    unexpected-end-tag-in-table-body)	r?   rj  r2  r~   r   rL   rI   r`   r   r   r(   r(   r)   r9    s   
z7getPhases.<locals>.InTableBodyPhase.endTagTableRowGroupc                 S   r6  r7  r8  r   r(   r(   r)   r  %  s   z/getPhases.<locals>.InTableBodyPhase.endTagTablec                 S   r  )Nr;  rA   r   r   r(   r(   r)   r  2  r  z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec                 S   r  r/  r&  r   r(   r(   r)   r  6  r  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   r2  r   r   r   r3  r4  r:  r
  r9  r  r  r  r   r  r   r   r  r   r(   r
  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 )Nrw   )r   r   z'unexpected-implied-end-tag-in-table-rowrA   )r?   r~   rA   rL   r   r   rC   r(   r(   r)   clearStackToTableRowContextO  s   z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc                 S   r  )Nr   r   rh  r  rC   r(   r(   r)   ignoreEndTagTrU  r  z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc                 S   r  r/  r  rC   r(   r(   r)   r   Y  r   z(getPhases.<locals>.InRowPhase.processEOFc                 S   r  r/  r<  r   r(   r(   r)   r   \  r  z4getPhases.<locals>.InRowPhase.processSpaceCharactersc                 S   r  r/  r  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>  r?   r   rL   rI   r`   rQ  r   r   r   r(   r(   r)   r4  b  s   z/getPhases.<locals>.InRowPhase.startTagTableCellc                 S   r+  Nr   r?  endTagTrr   r"  r(   r(   r)   r:  h  s
   z0getPhases.<locals>.InRowPhase.startTagTableOtherc                 S   r  r/  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 r  )
r?  r>  r?   r~   r   rL   rI   r`   rS   r   r   r(   r(   r)   rB  r  s   z&getPhases.<locals>.InRowPhase.endTagTrc                 S   r+  r@  rA  r"  r(   r(   r)   r  |  s
   z)getPhases.<locals>.InRowPhase.endTagTablec                 S   s4   | j j|d ddr| td |S | j  d S )NrA   r   rh  r   )r?   rj  rB  r   rL   r   r   r(   r(   r)   r9    s   z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc                 S   r  )Nzunexpected-end-tag-in-table-rowrA   r   r   r(   r(   r)   r    r  z*getPhases.<locals>.InRowPhase.endTagIgnorec                 S   r  r/  r&  r   r(   r(   r)   r    r  z)getPhases.<locals>.InRowPhase.endTagOtherr   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   r4  r:  r
  rB  r  r9  r  r  r   r  r   r   r  r   r(   r
  r(   r)   
InRowPhaseJ  s@    

rC  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   rh  r   )r?   rj  endTagTableCellr   rC   r(   r(   r)   	closeCell  s
   z(getPhases.<locals>.InCellPhase.closeCellc                 S   r  r  r  rC   r(   r(   r)   r     r   z)getPhases.<locals>.InCellPhase.processEOFc                 S   r  r  r  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 rD  )r?   rj  rF  rL   rS   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 )	NrA   r   rh  rw   zunexpected-cell-end-tagTr   r-  )r?   rj  r  r~   rA   rL   r   r   r  rI   r`   r(  r(   r(   r)   rE    s    

z.getPhases.<locals>.InCellPhase.endTagTableCellc                 S   r  r,  r   r   r(   r(   r)   r    r.  z+getPhases.<locals>.InCellPhase.endTagIgnorec                 S   s.   | j j|d ddr|   |S | j  d S )NrA   r   rh  )r?   rj  rF  rL   r   r   r(   r(   r)   endTagImply  s   z*getPhases.<locals>.InCellPhase.endTagImplyc                 S   r  r  r&  r   r(   r(   r)   r    r  z*getPhases.<locals>.InCellPhase.endTagOtherr   r'  r<  )r   r   r  r   r   r  N)r:   r;   r<   r   r   rF  r   r   r:  r
  rE  r  rG  r  r   r  r   r   r  r   r(   r
  r(   r)   InCellPhase  s0    

rH  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  )Nrw   r   zeof-in-selectr  rC   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  r?   r~   rA   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 )Nrw   r  r  rI  r   r(   r(   r)   startTagOptgroup	  s
   z1getPhases.<locals>.InSelectPhase.startTagOptgroupc                 S   s   | j d | td d S )Nzunexpected-select-in-selectr   )rL   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   rh  )rL   r   r?   rj  rL  r   rS   r   r(   r(   r)   r  	  s
   z.getPhases.<locals>.InSelectPhase.startTagInputc                 S   r  r;  r  r   r(   r(   r)   r$  	  r  z/getPhases.<locals>.InSelectPhase.startTagScriptc                 S   r  )Nzunexpected-start-tag-in-selectrA   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 )Nrw   r  unexpected-end-tag-in-selectrA   r?   r~   rA   r   rL   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 )Nrw   r  r  rM  rA   rN  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   rh  )	r?   rj  r~   r   rA   rL   rb   rS   r   r(  r(   r(   r)   rL  2	  s   

z-getPhases.<locals>.InSelectPhase.endTagSelectc                 S   r  )NrM  rA   r   r   r(   r(   r)   r  =	  r  z,getPhases.<locals>.InSelectPhase.endTagOtherr   r  r  r   )r  r  rY  r4  N)r:   r;   r<   r   r   r   r   rJ  rK  r  r  r$  r
  rO  rQ  rL  r  r   r  r   r   r  r   r(   r
  r(   r)   InSelectPhase  s:    
rR  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   r  Nr   r  rC   r(   r(   r)   r   U	  r   z2getPhases.<locals>.InSelectInTablePhase.processEOFc                 S   r  rS  r  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-tablerA   r   )rL   r   r  r   r   r(   r(   r)   r  [	  s   z5getPhases.<locals>.InSelectInTablePhase.startTagTablec                 S   r  rS  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-tablerA   r   rh  r   )rL   r   r?   rj  r  r   r   r(   r(   r)   r  c	  s
   z3getPhases.<locals>.InSelectInTablePhase.endTagTablec                 S   r  rS  r&  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
  r  r  r   r  r   r  r   r(   r(   r(   r)   InSelectInTablePhaseR	  s(    
rT  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  rS  r*   r  rT  r  r  Zh1Zh2Zh3Zh4Zh5Zh6r   r  r  r  rU  rX  r  r4   r~  r  r'   rW  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 )INZaltglyphZaltGlyphZaltglyphdefZaltGlyphDefZaltglyphitemZaltGlyphItemZanimatecolorZanimateColorZanimatemotionZanimateMotionZanimatetransformZanimateTransformZclippathZclipPathZfeblendZfeBlendZfecolormatrixZfeColorMatrixZfecomponenttransferZfeComponentTransferZfecompositeZfeCompositeZfeconvolvematrixZfeConvolveMatrixZfediffuselightingZfeDiffuseLightingZfedisplacementmapZfeDisplacementMapZfedistantlightZfeDistantLightZfefloodZfeFloodZfefuncaZfeFuncAZfefuncbZfeFuncBZfefuncgZfeFuncGZfefuncrZfeFuncRZfegaussianblurZfeGaussianBlurZfeimageZfeImageZfemergeZfeMergeZfemergenodeZfeMergeNodeZfemorphologyZfeMorphologyZfeoffsetZfeOffsetZfepointlightZfePointLightZfespecularlightingZfeSpecularLightingZfespotlightZfeSpotLightZfetileZfeTileZfeturbulenceZfeTurbulenceZforeignobjectZforeignObjectZglyphrefZglyphRefZlineargradientZlinearGradientZradialGradientZtextPath)ZradialgradientZtextpathrA   r(   )rD   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 )Nrx   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)rL   rc   rb  r   r   r
  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 )Nrw   rA   r  rx   >   facesizecolorz*unexpected-html-element-in-foreign-contentrh   rz   rj   r|   Tr}   )r?   r~   breakoutElementssetkeysrL   r   rj   r   ro   rp   r   r   r   rZ  r   r   r   )rD   r   r   r(   r(   r)   r   	  sJ   



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   rw   rA   r-  Tr  )r   r?   r~   rA   rl   r   rL   r   r`   rI   r  r   r   rj   r   r   )rD   r   Z	nodeIndexr   r   r(   r(   r)   r   	  s,   	z6getPhases.<locals>.InForeignContentPhase.processEndTagN)r:   r;   r<   r   r   r   r_  rZ  r   r   r   r(   r
  r(   r)   InForeignContentPhasex	  s    	)rb  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(   rC   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   rL   r   rI   r`   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-bodyrA   r   re  r   r(   r(   r)   r
  	  r5  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)rL   rS   r   rI   r`   )rD   rA   r(   r(   r)   r  
  s   z,getPhases.<locals>.AfterBodyPhase.endTagHtmlc                 S   rg  )Nzunexpected-end-tag-after-bodyrA   r   re  r   r(   r(   r)   r  

  r5  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    
ri  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  )Nrw   r   zeof-in-framesetr  rC   r(   r(   r)   r   
  r  z-getPhases.<locals>.InFramesetPhase.processEOFc                 S   r   )Nzunexpected-char-in-framesetr   r   r(   r(   r)   r   "
  rq   z4getPhases.<locals>.InFramesetPhase.processCharactersc                 S   r  r-   )r?   r   r   r(   r(   r)   rG  %
  rq   z3getPhases.<locals>.InFramesetPhase.startTagFramesetc                 S   s   | j | | j j  d S r-   r  r   r(   r(   r)   startTagFrame(
  r  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-framesetrA   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 )Nrw   r   z)unexpected-frameset-in-frameset-innerhtmlr   afterFrameset)	r?   r~   rA   rL   r   r   rS   rI   r`   r   r(   r(   r)   endTagFrameset3
  s   z1getPhases.<locals>.InFramesetPhase.endTagFramesetc                 S   r  )Nzunexpected-end-tag-in-framesetrA   r   r   r(   r(   r)   r  ?
  r  z.getPhases.<locals>.InFramesetPhase.endTagOtherr   r   r  r1  N)r:   r;   r<   r   r   r   r   rG  rj  rk  r
  rm  r  r   r  r   r   r  r   r(   r
  r(   r)   InFramesetPhase
  s*    
rn  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(   rC   r(   r(   r)   r   T
  rc  z0getPhases.<locals>.AfterFramesetPhase.processEOFc                 S   r   )Nzunexpected-char-after-framesetr   r   r(   r(   r)   r   X
  rq   z7getPhases.<locals>.AfterFramesetPhase.processCharactersc                 S   r  r;  r  r   r(   r(   r)   rk  [
  r  z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc                 S   r  )Nz#unexpected-start-tag-after-framesetrA   r   r   r(   r(   r)   r
  ^
  r  z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc                 S   s   | j jd | j _d S )NafterAfterFrameset)rL   rI   r`   r   r(   r(   r)   r  b
  r   z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc                 S   r  )Nz!unexpected-end-tag-after-framesetrA   r   r   r(   r(   r)   r  e
  r  z1getPhases.<locals>.AfterFramesetPhase.endTagOtherr   r1  N)r:   r;   r<   r   r   r   r   rk  r
  r  r  r   r  r   r   r  r   r(   r
  r(   r)   AfterFramesetPhaseP
  s"    
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ede	fgZe
e_dS )z&getPhases.<locals>.AfterAfterBodyPhasec                 S   r   r-   r(   rC   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  r<  r   r(   r(   r)   r   }
  r  z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharactersc                 S   rd  )Nexpected-eof-but-got-charr   re  r   r(   r(   r)   r   
  rf  z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc                 S   r  r  r  r   r(   r(   r)   r   
  r  z3getPhases.<locals>.AfterAfterBodyPhase.startTagHtmlc                 S   rg  )Nexpected-eof-but-got-start-tagrA   r   re  r   r(   r(   r)   r
  
  r5  z4getPhases.<locals>.AfterAfterBodyPhase.startTagOtherc                 S   rg  )Nexpected-eof-but-got-end-tagrA   r   re  r   r(   r(   r)   r   
  r5  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    
rt  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(   rC   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  r<  r   r(   r(   r)   r   
  r  zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc                 S   r   )Nrq  r   r   r(   r(   r)   r   
  rq   z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc                 S   r  r  r  r   r(   r(   r)   r   
  r  z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc                 S   r  r;  r  r   r(   r(   r)   startTagNoFrames
  r  z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc                 S   r  )Nrr  rA   r   r   r(   r(   r)   r
  
  r  z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc                 S   r  )Nrs  rA   r   r   r(   r(   r)   r   
  r  z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagr   r1  N)r:   r;   r<   r   r   r   r   r   r   r   ru  r
  r   r   r  r   r  r(   r(   r(   r)   AfterAfterFramesetPhase
  s    
rv  rW   rV   r   r  r"  r&  r   r   r   r  r   r   r   r   r   r   r  )r{   r  r   rl  rh  ro  )r   )rJ   rY   r   r   r   r  r:  rD  rJ  r  r  r(  r1  r=  rC  rH  rR  rT  rb  ri  rn  rp  rt  rv  r(   )rN  r  r   r)   rH     s   H %-f?B     Y! /F@bYLc&r.8$%%	
rH   c                    sJ   t | d t  @ }|r#t| d  fdd| d  D | d< d S d S )Nrx   c                 3   s$    | ]\}}  |||fV  qd S r-   )r   )r@   kvrY  r(   r)   r[  
  s    z$adjust_attributes.<locals>.<genexpr>)r   r2   r.   )r   rY  Zneeds_adjustmentr(   ry  r)   r   
  s   
r   rt   Fc                 C   s   |d u ri }t | | ||dS )N)r2   rA   rx   r|   )r   )rA   r2   rk   r|   r(   r(   r)   r   
  s
   
r   c                   @   s   e Zd ZdZdS )rv   zError in parsed documentN)r:   r;   r<   r   r(   r(   r(   r)   rv   
  s    rv   )r   T)r*   r   T)rt   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!   memoizerH   r   r   	Exceptionrv   r(   r(   r(   r)   <module>   sP    H

  8
                  _
