o
    ̷6i                    @   s  d dl mZmZmZ d dl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)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/hoanhtaovolam_webdjango/env/lib/python3.10/site-packages/bleach/_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(   r2   L   s
   
z5method_decorator_metaclass.<locals>.Decorated.__new__N)__name__
__module____qualname__r2   r'   r9   r'   r(   	DecoratedK   s    r>   )r1   )r:   r>   r'   r9   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)rE   r@   rG   r   debugr'   rD   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   )rE   stream	innerHTMLr*   rO   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@   rR   firstStartTagrH   log
compatModerN   r*   lowerrU   r   rQ   rcdataStatestater   rawtextStateplaintextStaterJ   phaseinsertHtmlElementresetInsertionMode	lastPhasebeforeRCDataPhase
framesetOKrD   r'   r'   r(   rR      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

        rQ   Nr   )hasattrrQ   rT   charEncodingrB   rD   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)rB   	namespacer   
attributes	translater   r   rE   elementr'   r'   r(   isHTMLIntegrationPoint   s   


z!HTMLParser.isHTMLIntegrationPointc                 C   s   |j |jftv S r,   )rn   rB   r   rq   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
ParseErrorr1   datadatavarsr   rB   mglyph
malignmarkrl   rk   svginForeignContentselfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   rQ   r@   openElementsrn   rB   
parseErrorgetlendefaultNamespacert   	frozensetr   rs   rb   rJ   processCharactersprocessSpaceCharactersprocessStartTagprocessEndTagprocessCommentprocessDoctypeappend
processEOF)rE   CharactersTokenSpaceCharactersTokenStartTagTokenEndTagTokenCommentTokenDoctypeTokenParseErrorTokentoken
prev_token	new_tokencurrentNodecurrentNodeNamespacecurrentNodeNamer1   rb   	reprocessrJ   r'   r'   r(   rS      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)rV   r@   getDocumentrE   rT   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)rV   r@   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,   )rH   r   rQ   rT   positionrG   r|   r   )rE   	errorcoder   r'   r'   r(   r   ;  s   zHTMLParser.parseErrorc                 C      t |t d S r,   )adjust_attributesr   rE   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,   )rM   rb   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   )r@   r   rB   rU   rn   r   rJ   rb   )rE   lastnewModesnodenodeName	new_phaser'   r'   r(   rd   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@   insertElementrQ   r`   r_   r^   rb   originalPhaserJ   )rE   r   contentTyper'   r'   r(   parseRCDataRawtext|  s   zHTMLParser.parseRCDataRawtext)NFTF)Fr)   F)r   N)r;   r<   r=   __doc__rL   rV   rR   propertyrj   rs   rt   rS   r!   r+   r   r   r   r   r   rd   r   r'   r'   r'   r(   r    V   s&    

"
	
C
,r    c                    sF  dd }dd }G dd d|| |d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d0d1d1}G d2d3 d3}G d4d5 d5}i d6|d7|d8|d9|d:|d;|d< d=|	d>|
d?d@|dA|dB|dC|dD|dE|dF|||||||dGS )HNc                    s$   dd t  D  fdd}|S )z4Logger that records which phase processes each tokenc                 S   s   i | ]\}}||qS r'   r'   )rA   keyvaluer'   r'   r(   rF     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   r1   rB   )r;   
startswithr   r   rM   r[   r   rQ   r_   rb   	__class__)rE   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?   r1   )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
        )rM   r@   __startTagCache__endTagCachec                 S   s   || _ || _i | _i | _d S r,   )rM   r@   _Phase__startTagCache_Phase__endTagCache)rE   rM   r@   r'   r'   r(   rL     s   
z!getPhases.<locals>.Phase.__init__c                 S   s   t r,   )NotImplementedErrorrD   r'   r'   r(   r        z#getPhases.<locals>.Phase.processEOFc                 S      | j || j jd  d S )Nr}   r@   insertCommentr   r   r'   r'   r(   r        z'getPhases.<locals>.Phase.processCommentc                 S      | j d d S )Nzunexpected-doctyperM   r   r   r'   r'   r(   r     ru   z'getPhases.<locals>.Phase.processDoctypec                 S      | j |d  d S Nr~   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 NrB   g?)r   startTagHandlerr   popnextiterrE   r   rB   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 )NrB   r   znon-html-rootr~   r   F)rM   rZ   r   r-   r@   r   ro   rE   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__rL   r   r   r   r   r   r   r   r   r'   r'   r'   r(   Phase  s    
r   )	metaclassc                   @   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 )NrB   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 quirksrX   )rM   r   r@   insertDoctyperp   r   r   r]   r\   rJ   rb   )rE   r   rB   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  rX   )rM   r\   rJ   rb   rD   r'   r'   r(   anythingElseZ  s   z,getPhases.<locals>.InitialPhase.anythingElsec                 S      | j d |   |S )Nzexpected-doctype-but-got-charsrM   r   r  r   r'   r'   r(   r   ^     z1getPhases.<locals>.InitialPhase.processCharactersc                 S   "   | j dd|d i |   |S )Nz"expected-doctype-but-got-start-tagrB   r  r   r'   r'   r(   r   c  
   
z/getPhases.<locals>.InitialPhase.processStartTagc                 S   r  )Nz expected-doctype-but-got-end-tagrB   r  r   r'   r'   r(   r   i  r  z-getPhases.<locals>.InitialPhase.processEndTagc                 S      | j d |   dS )Nzexpected-doctype-but-got-eofTr  rD   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   rx   r   )r@   
insertRootimpliedTagTokenrM   rJ   rb   rD   r'   r'   r(   rc   x  s   z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc                 S      |    dS NTrc   rD   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 )NrB   r   T)rM   rZ   rc   r   r'   r'   r(   r     s   z2getPhases.<locals>.BeforeHtmlPhase.processStartTagc                 S   s2   |d dvr| j dd|d i d S |   |S )NrB   r   r   r   brzunexpected-end-tag-before-html)rM   r   rc   r   r'   r'   r(   r     s   
z0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)r;   r<   r=   r  r   rc   r   r   r   r   r   r   r'   r'   r'   r(   BeforeHtmlPhaset  s    r  c                   @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zedefde	fgZe
e_edefgZee_dS )z"getPhases.<locals>.BeforeHeadPhasec                 S   s   |  tdd dS )Nr   rx   TstartTagHeadr  rD   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   rx   r   r   r'   r'   r(   r     r"  z4getPhases.<locals>.BeforeHeadPhase.processCharactersc                 S      | j jd |S Nr   rM   rJ   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)r@   r   r   headPointerrM   rJ   rb   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-rootrB   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  rD   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!    ru   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   r~   r   	tentativecharsetcontentz
http-equivzcontent-typezutf-8)r@   r   r   r   rM   rQ   rT   ri   changeEncodingr]   r   EncodingBytesencodeContentAttrParserr!   )rE   r   ro   r~   rM   codecr'   r'   r(   startTagMeta  s$   
z+getPhases.<locals>.InHeadPhase.startTagMetac                 S      | j |d d S )Nr   rM   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)rM   rO   r   r@   r   rJ   rb   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   rM   rQ   scriptDataStater_   rb   r   rJ   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rM   r@   r   r   rB   rJ   rb   rE   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-tagrB   r   r   r'   r'   r(   r.       z*getPhases.<locals>.InHeadPhase.endTagOtherc                 S      |  td d S )Nr   )rO  r  rD   r'   r'   r(   r    r(  z+getPhases.<locals>.InHeadPhase.anythingElser   title)noframesstylenoscriptscript)basebasefontbgsoundcommandlinkr3   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  rD   r'   r'   r(   r   /  r  z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc                 S   r%  Nr)  )rM   rJ   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  rM   rJ   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-tagrB   r   r   r'   r'   r(   startTagHeadNoscriptE  rT  z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc                 S   r  Nzunexpected-inhead-noscript-tagrB   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  rD   r'   r'   r(   r  Z  rF  z3getPhases.<locals>.InHeadNoscriptPhase.anythingElser   )r\  r]  r_  r3   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  rD   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   )rM   rg   r@   r   rJ   rb   r   r'   r'   r(   startTagBodyy     z.getPhases.<locals>.AfterHeadPhase.startTagBodyc                 S   s    | j | | jjd | j_d S )Nr   )r@   r   rM   rJ   rb   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-headrB   r)  r}   r   )
rM   r   r@   r   r   r*  rJ   r   rB   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   rx   r   T)r@   r   r  rM   rJ   rb   rg   rD   r'   r'   r(   r    s   z.getPhases.<locals>.AfterHeadPhase.anythingElser   r   r   )	r[  r\  r]  r_  r3   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,   )superrL   processSpaceCharactersNonPrer   rE   r   r$   )InBodyPhaser   r'   r(   rL     s   z'getPhases.<locals>.InBodyPhase.__init__c                 S   s$   |j |j ko|j|jko|j|jkS r,   )rB   rn   ro   )rE   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}      )	r@   r   r   activeFormattingElementsr
   rw  r   r   rn  )rE   r   rr   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   r@   r   rB   rM   r   )rE   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   r@   r   rB   
hasContent#reconstructActiveFormattingElementsr   )rE   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   rA   charr'   r'   r(   
<listcomp>  s    zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r@   r  r   rM   rg   anyr   r'   r'   r(   r     s   
z0getPhases.<locals>.InBodyPhase.processCharactersc                 S   s   | j   | j |d  d S r   )r@   r  r   r   r'   r'   r(   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  rB   r   r   Fr~   )
rM   r   r   r@   r   rB   rU   rg   r-   ro   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  rB   r   r   r   r}   r   r   )rM   r   r   r@   r   rB   rU   rg   parentremoveChildr   r   rJ   rb   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)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&   r  r  F)	r@   r  r  r  r   rM   rg   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  rB   formr&   r  r  r}   )	r@   formPointerrM   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|  rB   ry   )addressr)   r&   r&   r  r  )rM   rg   reversedr@   r   rB   rb   r   r  	nameTupler   r  r   )rE   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  )	r@   r  r  r  r   rM   rQ   ra   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  rB   )r@   r  r  r  r   rB   r   rM   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)r@   !elementInActiveFormattingElementsrM   r   endTagFormattingr  r   rn  ry  r  r{  )rE   r   afeAElementr'   r'   r(   	startTagAJ  s   
z(getPhases.<locals>.InBodyPhase.startTagAc                 S   s   | j   | | d S r,   )r@   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  )r@   r  r  rM   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)	r@   r  rM   r   r   r  r  r   rg   r   r'   r'   r(   startTagButtone  s   
z-getPhases.<locals>.InBodyPhase.startTagButtonc                 S   s0   | j   | j | | j jt d| j_d S NF)r@   r  r   ry  r   r
   rM   rg   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   )r@   r  r  r  r  rM   rg   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   )
rM   r\   r@   r  r   r  r   rg   rJ   rb   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@   r  r   r   r   rM   rg   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 )Nr1   r~   hidden)rM   rg   r  rp   r   )rE   r   rg   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)	r@   r  r  r  r   r   r   rM   rg   r   r'   r'   r(   
startTagHr  s   z)getPhases.<locals>.InBodyPhase.startTagHrc                 S   s6   | j dddd | tdd|d |d d d S )	Nzunexpected-start-tag-treated-asimageimgoriginalNamenewNamerx   r~   r   ro   r   )rM   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-tagrB   isindexactionr~   r  rx   )ro   hrlabelpromptz3This is a searchable index. Enter search keywords: rv   r1   r~   inputr   r  )
rM   r   r@   r  r   r  r   r   copyr   )rE   r   
form_attrsr  ro   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   rM   rQ   r^   r_   r  r   rg   r   r'   r'   r(   startTagTextarea  s   z/getPhases.<locals>.InBodyPhase.startTagTextareac                 S   s   d| j _| | d S r  )rM   rg   startTagRawtextr   r'   r'   r(   startTagIFrame  s   z-getPhases.<locals>.InBodyPhase.startTagIFramec                 S   s$   | j jr| | d S | | d S r,   )rM   rO   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)	r@   r   rB   rM   rb   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   )r@   r  r   rM   rg   rb   rJ   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}   )r@   r  generateImpliedEndTagsr   rB   rM   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 )Nrl   rn   r   Tr   )	r@   r  rM   r   r   r   r   r   r   r   r'   r'   r(   startTagMath     
z+getPhases.<locals>.InBodyPhase.startTagMathc                 S   r  )Nr   rn   r   Tr   )	r@   r  rM   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-ignoredrB   Nr   r   r'   r'   r(   startTagMisplaced  s   z0getPhases.<locals>.InBodyPhase.startTagMisplacedc                 S   s   | j   | j | d S r,   )r@   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  rx   rS  rB   ry   r}   )r@   r  r  r  rM   r   r  r  r   rB   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)	r@   r  rM   r   r   rB   r   rJ   rb   rN  r'   r'   r(   
endTagBody)  s   


z)getPhases.<locals>.InBodyPhase.endTagBodyc                 S   s"   | j dr| td |S d S )Nr   )r@   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 )NrB   r  r}   end-tag-too-early)
rr  r   r@   r  r  r   rB   rM   r   r   )rE   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  rB   r  r}   zend-tag-too-early-ignored)r@   r  r  rM   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 )	NrB   r~  listr  rS  excluder}   r  )r@   r  rM   r   r  r   rB   r   )rE   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}   rB   r  )	r   r@   r  r  r   rB   rM   r   r   )rE   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   rB   Nzadoption-agency-1.2zadoption-agency-4.4r}   zadoption-agency-1.3rx  r   r   r   r   r   )r@   r  r   r  rB   r.  rM   r   ry  rn  indexr  r   r   	cloneNoder  r  appendChildr   getTableMisnestedNodePositioninsertBeforereparentChildreninsert)rE   r   outerLoopCounterformattingElementafeIndexfurthestBlockrr   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 )NrB   r}   r  )	r@   r  r  r   rB   rM   r   r   clearActiveFormattingElements)rE   r   rr   r'   r'   r(   endTagAppletMarqueeObject  s   
z8getPhases.<locals>.InBodyPhase.endTagAppletMarqueeObjectc                 S   s@   | j dddd | j  | jtdd | jj  d S )Nzunexpected-end-tag-treated-asr  z
br elementr  rx   )rM   r   r@   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}   rB   r  rS  )	r@   r   rB   r  rM   r   r   r  r   rN  r'   r'   r(   r.  2  s   
z*getPhases.<locals>.InBodyPhase.endTagOtherr   )	r[  r\  r]  r^  r_  r3   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}  rW   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   rL   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-eofrB   r}   T)rM   r   r@   r   rB   r   r   rb   rD   r'   r'   r(   r     s   z'getPhases.<locals>.TextPhase.processEOFc                 S   s   J d|d  )NFz4Tried to process start tag %s in RCDATA/RAWTEXT moderB   r'   r   r'   r'   r(   r+    ru   z*getPhases.<locals>.TextPhase.startTagOtherc                 S   s*   | j j }|jdksJ | jj| j_d S )NrZ  )r@   r   r   rB   rM   r   rb   rN  r'   r'   r(   endTagScript  s   z)getPhases.<locals>.TextPhase.endTagScriptc                 S   s   | j j  | jj| j_d S r,   )r@   r   r   rM   r   rb   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   )r@   r   rB   r   rD   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r@   r   rB   rM   r   rU   rD   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)rM   rb   rJ   r   r   rE   r   r   r'   r'   r(   r        
z6getPhases.<locals>.InTablePhase.processSpaceCharactersc                 S   r>  r?  )rM   rb   rJ   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)r@   insertFromTablerM   rJ   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@   ry  r   r
   r   rM   rJ   rb   r   r'   r'   r(   startTagCaption  s   z/getPhases.<locals>.InTablePhase.startTagCaptionc                 S   (   |    | j| | jjd | j_d S )Nr   r:  r@   r   rM   rJ   rb   r   r'   r'   r(   startTagColgroup  rl  z0getPhases.<locals>.InTablePhase.startTagColgroupc                 S   r#  )Nr   rx   )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   rx   )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  )rM   r   rb   r   r  rU   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 )Nr1   r~   r  z unexpected-hidden-input-in-table)	rp   r   rM   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-tabler}   )rM   r   r@   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-voodoorB   Tr   F)rM   r   r@   rC  rJ   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  )
r@   r  r  r   rB   rM   r   r   rd   rU   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-voodoorB   Tr   F)rM   r   r@   rC  rJ   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  rL   r   rT  rs  )InTableTextPhaser   r'   r(   rL   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'   rA   r  r'   r'   r(   r  <      zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c                 S   r  r'   r  rV  r'   r'   r(   r  =  rW  rv   r  r   )joinrT  r  r   rM   rJ   r   r@   )rE   r~   r   r'   r'   r(   flushCharacters;  s   
z3getPhases.<locals>.InTableTextPhase.flushCharactersc                 S      |    | j| j_|S r,   rY  r   rM   rb   r   r'   r'   r(   r   D     
z2getPhases.<locals>.InTableTextPhase.processCommentc                 S   s   |    | j| j_dS r  r[  rD   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   rL   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  r@   r  rD   r'   r'   r(   ignoreEndTagCaptionf  r(  z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc                 S      | j jd   d S r&  rM   rJ   r   rD   r'   r'   r(   r   i  r   z,getPhases.<locals>.InCaptionPhase.processEOFc                 S   r%  r&  rM   rJ   r   r   r'   r'   r(   r   l  r(  z3getPhases.<locals>.InCaptionPhase.processCharactersc                 S   0   | j   |  }| j jtd |s|S d S Nr   rM   r   rc  rb   r   r  rE   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  r@   r  r   rB   rM   r   r   r  rJ   rb   rU   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&  rM   rJ   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   )r@   r   rB   rD   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)r@   r   rB   rM   rU   rq  endTagColgroupr  )rE   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  rM   rU   r   r@   r   r   rJ   rb   r   r'   r'   r(   rr    s
   z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc                 S   s   | j dddi d S )Nz
no-end-tagrB   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   )r@   r   rB   r   rM   rU   rD   r'   r'   r(   clearStackToTableBodyContext  s   z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc                 S   rd  rw  re  rD   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  r@   r   rM   rJ   rb   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-bodyrB   r   rx   )rM   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}   
r@   r  rz  endTagTableRowGroupr  r   rB   rM   rU   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 )NrB   r   r  r    unexpected-end-tag-in-table-body)	r@   r  rz  r   r   rM   rJ   rb   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  rB   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-rowrB   )r@   r   rB   rM   r   r   rD   r'   r'   r(   clearStackToTableRowContextO  s   z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc                 S   ra  )Nr   r   r  rb  rD   r'   r'   r(   ignoreEndTagTrU  r(  z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc                 S   rd  rw  re  rD   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  r@   r   rM   rJ   rb   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  r@   r   r   rM   rJ   rb   rU   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 )NrB   r   r  r   )r@   r  r  r  rM   r   r   r'   r'   r(   r    s   z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc                 S   r-  )Nzunexpected-end-tag-in-table-rowrB   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   )r@   r  endTagTableCellr  rD   r'   r'   r(   	closeCell  s
   z(getPhases.<locals>.InCellPhase.closeCellc                 S   rd  r&  re  rD   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  )r@   r  r  rM   rU   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 )	NrB   r   r  r}   zunexpected-cell-end-tagTr   rS  )r@   r  r  r   rB   rM   r   r   r  rJ   rb   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 )NrB   r   r  )r@   r  r  rM   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<  rD   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   rB   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   )rM   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  )rM   r   r@   r  r  r  rU   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-selectrB   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-selectrB   r@   r   rB   r   rM   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  rB   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  )	r@   r  r   r   rB   rM   rd   rU   r   rN  r'   r'   r(   r  2	  s   

z-getPhases.<locals>.InSelectPhase.endTagSelectc                 S   r-  )Nr  rB   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  rD   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-tablerB   r   )rM   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-tablerB   r   r  r   )rM   r   r@   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  r3   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textpathrB   r'   )rE   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)rM   rg   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}   rB   r  r~   >   facesizecolorz*unexpected-html-element-in-foreign-contentrl   r   rn   r   Tr   )r@   r   breakoutElementssetkeysrM   r   rn   r   rs   rt   r   r   r   r  r   r   r   )rE   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}   rB   rS  Tr@  )r   r@   r   rB   rp   r   rM   r   rb   rJ   rY  r   r   rn   r   r   )rE   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'   rD   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   rM   r   rJ   rb   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-bodyrB   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)rM   rU   r   rJ   rb   )rE   rB   r'   r'   r(   r  
  s   z,getPhases.<locals>.AfterBodyPhase.endTagHtmlc                 S   r  )Nzunexpected-end-tag-after-bodyrB   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<  rD   r'   r'   r(   r   
  r=  z-getPhases.<locals>.InFramesetPhase.processEOFc                 S   r   )Nzunexpected-char-in-framesetr   r   r'   r'   r(   r   "
  ru   z4getPhases.<locals>.InFramesetPhase.processCharactersc                 S   r_  r,   )r@   r   r   r'   r'   r(   rm  %
  ru   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-framesetrB   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)	r@   r   rB   rM   r   r   rU   rJ   rb   r   r'   r'   r(   endTagFrameset3
  s   z1getPhases.<locals>.InFramesetPhase.endTagFramesetc                 S   r-  )Nzunexpected-end-tag-in-framesetrB   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'   rD   r'   r'   r(   r   T
  r  z0getPhases.<locals>.AfterFramesetPhase.processEOFc                 S   r   )Nzunexpected-char-after-framesetr   r   r'   r'   r(   r   X
  ru   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-framesetrB   r   r   r'   r'   r(   r+  ^
  r/  z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc                 S   s   | j jd | j _d S )NafterAfterFrameset)rM   rJ   rb   r   r'   r'   r(   r  b
  r   z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc                 S   r-  )Nz!unexpected-end-tag-after-framesetrB   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'   rD   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-tagrB   r   r  r   r'   r'   r(   r+  
  r}  z4getPhases.<locals>.AfterAfterBodyPhase.startTagOtherc                 S   r  )Nexpected-eof-but-got-end-tagrB   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'   rD   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   
  ru   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	  rB   r   r   r'   r'   r(   r+  
  r/  z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc                 S   r-  )Nr
  rB   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  rY   rX   r   r)  rG  rL  r   r   r   r@  r   r   r   r   r   r   r  )r   r  r   r  r  r  r'   )rK   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(   rI     s   H %-f?B     Y! /F@bYLc&r.8$%%	
rI   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   )rA   kvr  r'   r(   r  
  s    z$adjust_attributes.<locals>.<genexpr>)r   r1   r-   )r   r  needs_adjustmentr'   r  r(   r   
  s   
r   ry   Fc                 C   s   |d u ri }t | | ||dS )N)r1   rB   r~   r   )r   )rB   r1   ro   r   r'   r'   r(   r  
  s
   
r  c                   @   s   e Zd ZdZdS )r|   zError in parsed documentN)r;   r<   r=   r   r'   r'   r'   r(   r|   
  s    r|   )r   T)r)   r   T)ry   NF)+
__future__r   r   r   bleach.six_shimr   r/   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    memoizerI   r   r  	Exceptionr|   r'   r'   r'   r(   <module>   sP    H

  8
                  _
