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

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

    :arg treebuilder: the treebuilder to use when parsing

    :arg namespaceHTMLElements: whether or not to namespace HTML elements

    :returns: parsed tree

    Example:

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

    )namespaceHTMLElements)r   getTreeBuilder
HTMLParserparse)doctreebuilderr   kwargstbp r(   A/tmp/pip-install-65viz3iy/pip/pip/_vendor/html5lib/html5parser.pyr"      s    
r"   divc             K   s,   t j|}t||d}|j| fd|i|S )a#  Parse an HTML fragment as a string or file-like object into a tree

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

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

    :arg treebuilder: the treebuilder to use when parsing

    :arg namespaceHTMLElements: whether or not to namespace HTML elements

    :returns: parsed tree

    Example:

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

    )r   	container)r   r    r!   parseFragment)r#   r+   r$   r   r%   r&   r'   r(   r(   r)   r,   2   s    
r,   c                s   G  fdddt }|S )Nc                   s   e Zd Z fddZdS )z-method_decorator_metaclass.<locals>.Decoratedc                sB   x0|j  D ]$\}}t|tjr& |}|||< q
W tj| |||S )N)items
isinstancetypesFunctionTypetype__new__)meta	classnamebases	classDictattributeName	attribute)functionr(   r)   r2   M   s
    z5method_decorator_metaclass.<locals>.Decorated.__new__N)__name__
__module____qualname__r2   r(   )r9   r(   r)   	DecoratedL   s   r=   )r1   )r9   r=   r(   )r9   r)   method_decorator_metaclassK   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 Zd-ddZdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* ZdS ).r!   z]HTML parser

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

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

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

        :arg namespaceHTMLElements: whether or not to namespace HTML elements

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

        Example:

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

        Nr   c                s    g | ]\}}||  j fqS r(   )tree).0namecls)selfr(   r)   
<listcomp>z   s    z'HTMLParser.__init__.<locals>.<listcomp>)	strictr   r    r?   errorsdict	getPhasesr-   phases)rC   r?   rE   r   debugr(   )rC   r)   __init__^   s    

zHTMLParser.__init__r*   c             K   sh   || _ || _|| _tj|fd| i|| _| j  y| j  W n$ tk
rb   | j  | j  Y nX d S )Nparser)	innerHTMLModer+   	scriptingr
   HTMLTokenizer	tokenizerresetmainLoopr   )rC   stream	innerHTMLr+   rN   r%   r(   r(   r)   _parse}   s    zHTMLParser._parsec             C   s   | j j  d| _g | _g | _d| _| jr| jj | _	| j	t
krL| jj| j_n0| j	tkrd| jj| j_n| j	dkr|| jj| j_n | jd | _| jj  | j  nd| _	| jd | _d | _d | _d| _d S )NFz	no quirks	plaintext
beforeHtmlinitialT)r?   rQ   firstStartTagrF   log
compatModerM   r+   lowerrT   r   rP   rcdataStatestater   rawtextStateplaintextStaterI   phaseinsertHtmlElementresetInsertionMode	lastPhasebeforeRCDataPhase
framesetOK)rC   r(   r(   r)   rQ      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

        rP   Nr   )hasattrrP   rS   charEncodingrA   )rC   r(   r(   r)   documentEncoding   s    
zHTMLParser.documentEncodingc             C   sJ   |j dkr6|jtd kr6d|jko4|jd jtdkS |j|j ftkS d S )Nzannotation-xmlmathmlencoding	text/htmlapplication/xhtml+xml)rl   rm   )rA   	namespacer   
attributes	translater   r   )rC   elementr(   r(   r)   isHTMLIntegrationPoint   s    


z!HTMLParser.isHTMLIntegrationPointc             C   s   |j |jftkS )N)rn   rA   r   )rC   rq   r(   r(   r)   isMathMLTextIntegrationPoint   s    z'HTMLParser.isMathMLTextIntegrationPointc             C   sz  t d }t d }t d }t d }t d }t d }t d }x| j D ]}d }	|}
x|
d k	r |
}	| jjrx| jjd nd }|r|jnd }|r|jnd }|
d	 }||kr| j|
d
 |
jdi  d }
qVt| jjdksl|| jj	ksl| j
|r ||kr|d tddgksl|||fksl|td krP|dkrP||krP|d dksl| j|rt||||fkrt| j}n
| jd }||kr|j|
}
qV||kr|j|
}
qV||kr|j|
}
qV||kr|j|
}
qV||kr|j|
}
qV||krV|j|
}
qVW ||krD|	d rD|	d  rD| jdd|	d i qDW d}g }x8|rt|j| j | jj }|r>| j|ks>tq>W d S )N
CharactersSpaceCharactersStartTagEndTagCommentDoctype
ParseErrorr   r1   datadatavarsr   rA   mglyph
malignmarkrj   zannotation-xmlsvginForeignContentselfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   normalizedTokensr?   openElementsrn   rA   
parseErrorgetlendefaultNamespacers   	frozensetr   rr   ra   rI   processCharactersprocessSpaceCharactersprocessStartTagprocessEndTagprocessCommentprocessDoctypeappend
processEOFAssertionError)rC   CharactersTokenSpaceCharactersTokenStartTagTokenEndTagTokenCommentTokenDoctypeTokenParseErrorTokentoken
prev_token	new_tokencurrentNodecurrentNodeNamespacecurrentNodeNamer1   ra   	reprocessrI   r(   r(   r)   rR      sp    










zHTMLParser.mainLoopc             c   s    x| j D ]}| j|V  qW d S )N)rP   normalizeToken)rC   r   r(   r(   r)   r     s    zHTMLParser.normalizedTokensc             O   s    | j |ddf|| | j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)rU   r?   getDocument)rC   rS   argsr%   r(   r(   r)   r"     s    zHTMLParser.parsec             O   s   | j |df|| | j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)rU   r?   getFragment)rC   rS   r   r%   r(   r(   r)   r,   $  s    zHTMLParser.parseFragmentXXX-undefined-errorc             C   s@   |d kri }| j j| jjj ||f | jr<tt| | d S )N)rF   r   rP   rS   positionrE   rz   r   )rC   	errorcoder|   r(   r(   r)   r   @  s
    zHTMLParser.parseErrorc             C   sT   |d t d krP|d }t||d< t|t|d krP|d j|d d d  |S )Nr1   rv   r{   r   r   )r   r   r   update)rC   r   rawr(   r(   r)   r   H  s    zHTMLParser.normalizeTokenc             C   s   t |t d S )N)adjust_attributesr   )rC   r   r(   r(   r)   r   S  s    z!HTMLParser.adjustMathMLAttributesc             C   s   t |t d S )N)r   r   )rC   r   r(   r(   r)   r   V  s    zHTMLParser.adjustSVGAttributesc             C   s   t |t d S )N)r   adjustForeignAttributesMap)rC   r   r(   r(   r)   r   Y  s    z"HTMLParser.adjustForeignAttributesc             C   s   | j j  d S )N)rL   ra   )rC   r   r(   r(   r)   reparseTokenNormal\  s    zHTMLParser.reparseTokenNormalc             C   s   d}ddddddddddd	d	d
dd}x| j jd d d D ]}|j}d }|| j jd krl| jsbtd}| j}|dkr~| js~t| r|j| j jkrq:||kr| j||  }P q:|r:| jd	 }P q:W || _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   Tr   r   r   r   r   )r   r   r   r   )	r?   r   rA   rT   r   rn   r   rI   ra   )rC   lastnewModesnodenodeName	new_phaser(   r(   r)   rc   `  sB    


zHTMLParser.resetInsertionModec             C   sR   |dkst | jj| |dkr.| jj| j_n| jj| j_| j| _| j	d | _d S )NRAWTEXTRCDATAtext)r   r   )
r   r?   insertElementrP   r_   r^   r]   ra   originalPhaserI   )rC   r   contentTyper(   r(   r)   parseRCDataRawtext  s    zHTMLParser.parseRCDataRawtext)NFTF)Fr*   F)r   N)r:   r;   r<   __doc__rK   rU   rQ   propertyri   rr   rs   rR   r   r"   r,   r   r   r   r   r   r   rc   r   r(   r(   r(   r)   r!   W   s&   

"

C
,r!   c                s"  dd }dd }G dd dt || | G dd d }G d	d
 d
 }G  fddd }G  fddd }G  fddd }G  fddd }G  fddd }	G  fddd }
G  fddd }G  fddd }G  fddd }G  fddd }G  fdd d  }G  fd!d"d" }G  fd#d$d$ }G  fd%d&d& }G  fd'd(d( }G  fd)d*d* }G  fd+d,d, }G  fd-d.d. }G  fd/d0d0 }G  fd1d2d2 }G  fd3d4d4 }|||||||	|
|||||||||||||||d5S )6Nc                s(   t dd tj D  fdd}|S )z4Logger that records which phase processes each tokenc             s   s   | ]\}}||fV  qd S )Nr(   )r@   keyvaluer(   r(   r)   	<genexpr>  s    z)getPhases.<locals>.log.<locals>.<genexpr>c                s    j jdrt|dkr|d }yd|d  i}W n    Y nX |d tkr\|d |d< | jjj| jjjj | jj	j
j | j
j  j |f  | f||S  | f||S d S )Nprocessr   r1   rA   )r:   
startswithr   r   rL   rZ   r   rP   r^   ra   	__class__)rC   r   r%   r   info)r9   
type_namesr(   r)   wrapped  s    
z'getPhases.<locals>.log.<locals>.wrapped)rG   r   r-   )r9   r   r(   )r9   r   r)   rZ     s    zgetPhases.<locals>.logc             S   s   | rt |S tS d S )N)r>   r1   )use_metaclassmetaclass_funcr(   r(   r)   getMetaclass  s    zgetPhases.<locals>.getMetaclassc               @   sX   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd ZdS )zgetPhases.<locals>.PhasezNBase class for helper object that implements each phase of processing
        c             S   s   || _ || _d S )N)rL   r?   )rC   rL   r?   r(   r(   r)   rK     s    z!getPhases.<locals>.Phase.__init__c             S   s   t d S )N)NotImplementedError)rC   r(   r(   r)   r     s    z#getPhases.<locals>.Phase.processEOFc             S   s   | j j|| j jd  d S )Nr   r   )r?   insertCommentr   )rC   r   r(   r(   r)   r     s    z'getPhases.<locals>.Phase.processCommentc             S   s   | j jd d S )Nzunexpected-doctype)rL   r   )rC   r   r(   r(   r)   r     s    z'getPhases.<locals>.Phase.processDoctypec             S   s   | j j|d  d S )Nr{   )r?   
insertText)rC   r   r(   r(   r)   r     s    z*getPhases.<locals>.Phase.processCharactersc             S   s   | j j|d  d S )Nr{   )r?   r   )rC   r   r(   r(   r)   r     s    z/getPhases.<locals>.Phase.processSpaceCharactersc             S   s   | j |d  |S )NrA   )startTagHandler)rC   r   r(   r(   r)   r     s    z(getPhases.<locals>.Phase.processStartTagc             S   sl   | j j r"|d dkr"| j jd x<|d j D ],\}}|| jjd jkr0|| jjd j|< q0W d| j _d S )NrA   r   znon-html-rootr{   r   F)rL   rY   r   r-   r?   r   ro   )rC   r   attrr   r(   r(   r)   startTagHtml  s    z%getPhases.<locals>.Phase.startTagHtmlc             S   s   | j |d  |S )NrA   )endTagHandler)rC   r   r(   r(   r)   r     s    z&getPhases.<locals>.Phase.processEndTagN)r:   r;   r<   r   rK   r   r   r   r   r   r   r   r   r(   r(   r(   r)   Phase  s   
r   c               @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )zgetPhases.<locals>.InitialPhasec             S   s   d S )Nr(   )rC   r   r(   r(   r)   r     s    z6getPhases.<locals>.InitialPhase.processSpaceCharactersc             S   s   | j j|| j j d S )N)r?   r   document)rC   r   r(   r(   r)   r     s    z.getPhases.<locals>.InitialPhase.processCommentc          8   S   s  |d }|d }|d }|d }|dks@|d k	s@|d k	rL|dkrL| j jd |d krXd}| jj| |dkrv|jt}|  s|d dk s|jdJ s|dKk s|jdL r|d k s| r|j dDk rdE| j _n*|jdM s|jdNr |d k	r dH| j _| j j	dI | j _
d S )ONrA   publicIdsystemIdcorrectr   zabout:legacy-compatzunknown-doctype *+//silmaril//dtd html pro v0r11 19970101//4-//advasoft ltd//dtd html 3.0 aswedit + extensions//*-//as//dtd html 3.0 aswedit + extensions//-//ietf//dtd html 2.0 level 1//-//ietf//dtd html 2.0 level 2//&-//ietf//dtd html 2.0 strict level 1//&-//ietf//dtd html 2.0 strict level 2//-//ietf//dtd html 2.0 strict//-//ietf//dtd html 2.0//-//ietf//dtd html 2.1e//-//ietf//dtd html 3.0//-//ietf//dtd html 3.2 final//-//ietf//dtd html 3.2//-//ietf//dtd html 3//-//ietf//dtd html level 0//-//ietf//dtd html level 1//-//ietf//dtd html level 2//-//ietf//dtd html level 3//"-//ietf//dtd html strict level 0//"-//ietf//dtd html strict level 1//"-//ietf//dtd html strict level 2//"-//ietf//dtd html strict level 3//-//ietf//dtd html strict//-//ietf//dtd html//(-//metrius//dtd metrius presentational//5-//microsoft//dtd internet explorer 2.0 html strict//.-//microsoft//dtd internet explorer 2.0 html//0-//microsoft//dtd internet explorer 2.0 tables//5-//microsoft//dtd internet explorer 3.0 html strict//.-//microsoft//dtd internet explorer 3.0 html//0-//microsoft//dtd internet explorer 3.0 tables//#-//netscape comm. corp.//dtd html//*-//netscape comm. corp.//dtd strict html//*-//o'reilly and associates//dtd html 2.0//3-//o'reilly and associates//dtd html extended 1.0//;-//o'reilly and associates//dtd html extended relaxed 1.0//N-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//E-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//$-//spyglass//dtd html 2.0 extended//+-//sq//dtd html 2.0 hotmetal + extensions//--//sun microsystems corp.//dtd hotjava html//4-//sun microsystems corp.//dtd hotjava strict html//-//w3c//dtd html 3 1995-03-24//-//w3c//dtd html 3.2 draft//-//w3c//dtd html 3.2 final//-//w3c//dtd html 3.2//-//w3c//dtd html 3.2s draft//-//w3c//dtd html 4.0 frameset//#-//w3c//dtd html 4.0 transitional//(-//w3c//dtd html experimental 19960712//&-//w3c//dtd html experimental 970421//-//w3c//dtd w3 html//-//w3o//dtd w3 html 3.0//#-//webtechs//dtd mozilla html 2.0//-//webtechs//dtd mozilla html//$-//w3o//dtd w3 html strict 3.0//en//"-/w3c/dtd html 4.0 transitional/en -//w3c//dtd html 4.01 frameset//$-//w3c//dtd html 4.01 transitional//z:http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtdquirks -//w3c//dtd xhtml 1.0 frameset//$-//w3c//dtd xhtml 1.0 transitional//zlimited quirksrW   )7r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  )r$  r%  r   )r&  r'  )r)  r*  )r&  r'  )rL   r   r?   insertDoctyperp   r   r   r\   r[   rI   ra   )rC   r   rA   r   r   r   r(   r(   r)   r     s    
                                                        

  
z.getPhases.<locals>.InitialPhase.processDoctypec             S   s   d| j _| j jd | j _d S )Nr(  rW   )rL   r[   rI   ra   )rC   r(   r(   r)   anythingElseM  s    z,getPhases.<locals>.InitialPhase.anythingElsec             S   s   | j jd | j  |S )Nzexpected-doctype-but-got-chars)rL   r   r,  )rC   r   r(   r(   r)   r   Q  s    z1getPhases.<locals>.InitialPhase.processCharactersc             S   s"   | j jdd|d i | j  |S )Nz"expected-doctype-but-got-start-tagrA   )rL   r   r,  )rC   r   r(   r(   r)   r   V  s    z/getPhases.<locals>.InitialPhase.processStartTagc             S   s"   | j jdd|d i | j  |S )Nz expected-doctype-but-got-end-tagrA   )rL   r   r,  )rC   r   r(   r(   r)   r   \  s    z-getPhases.<locals>.InitialPhase.processEndTagc             S   s   | j jd | j  dS )Nzexpected-doctype-but-got-eofT)rL   r   r,  )rC   r(   r(   r)   r   b  s    z*getPhases.<locals>.InitialPhase.processEOFN)r:   r;   r<   r   r   r   r,  r   r   r   r   r(   r(   r(   r)   InitialPhase  s   _r-  c               @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )z"getPhases.<locals>.BeforeHtmlPhasec             S   s&   | j jtdd | jjd | j_d S )Nr   rv   r   )r?   
insertRootimpliedTagTokenrL   rI   ra   )rC   r(   r(   r)   rb   i  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc             S   s   | j   dS )NT)rb   )rC   r(   r(   r)   r   n  s    z-getPhases.<locals>.BeforeHtmlPhase.processEOFc             S   s   | j j|| j j d S )N)r?   r   r   )rC   r   r(   r(   r)   r   r  s    z1getPhases.<locals>.BeforeHtmlPhase.processCommentc             S   s   d S )Nr(   )rC   r   r(   r(   r)   r   u  s    z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc             S   s   | j   |S )N)rb   )rC   r   r(   r(   r)   r   x  s    z4getPhases.<locals>.BeforeHtmlPhase.processCharactersc             S   s    |d dkrd| j _| j  |S )NrA   r   T)rL   rY   rb   )rC   r   r(   r(   r)   r   |  s    z2getPhases.<locals>.BeforeHtmlPhase.processStartTagc             S   s4   |d dkr$| j jdd|d i n| j  |S d S )NrA   r   r   r   brzunexpected-end-tag-before-html)r   r   r   r0  )rL   r   rb   )rC   r   r(   r(   r)   r     s
    z0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)
r:   r;   r<   rb   r   r   r   r   r   r   r(   r(   r(   r)   BeforeHtmlPhaseg  s   r1  c                   sX   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )z"getPhases.<locals>.BeforeHeadPhasec                sV    j | || tjd| jfd| jfg| _| j| j_tjd| jfg| _	| j
| j	_d S )Nr   r   r   r0  )r   r   r   r0  )rK   r   MethodDispatcherr   startTagHeadr   startTagOtherdefaultendTagImplyHeadr   endTagOther)rC   rL   r?   )r   r(   r)   rK     s    
z+getPhases.<locals>.BeforeHeadPhase.__init__c             S   s   | j tdd dS )Nr   rv   T)r3  r/  )rC   r(   r(   r)   r     s    z-getPhases.<locals>.BeforeHeadPhase.processEOFc             S   s   d S )Nr(   )rC   r   r(   r(   r)   r     s    z9getPhases.<locals>.BeforeHeadPhase.processSpaceCharactersc             S   s   | j tdd |S )Nr   rv   )r3  r/  )rC   r   r(   r(   r)   r     s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r     s    z/getPhases.<locals>.BeforeHeadPhase.startTagHtmlc             S   s0   | j j| | j jd | j _| jjd | j_d S )Nr   inHeadr   )r?   r   r   headPointerrL   rI   ra   )rC   r   r(   r(   r)   r3    s    z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc             S   s   | j tdd |S )Nr   rv   )r3  r/  )rC   r   r(   r(   r)   r4    s    z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc             S   s   | j tdd |S )Nr   rv   )r3  r/  )rC   r   r(   r(   r)   r6    s    z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc             S   s   | j jdd|d i d S )Nzend-tag-after-implied-rootrA   )rL   r   )rC   r   r(   r(   r)   r7    s    z.getPhases.<locals>.BeforeHeadPhase.endTagOtherN)r:   r;   r<   rK   r   r   r   r   r3  r4  r6  r7  r(   )r   r(   r)   BeforeHeadPhase  s   r:  c                   s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"zgetPhases.<locals>.InHeadPhasec                s    j | || tjd| jfd| jfd| jfd| jfd| jfd| jfd| j	fd| j
fg| _| j| j_tjd| jfd| jfg| _| j| j_d S )Nr   titlenoframesstylenoscriptscriptbasebasefontbgsoundcommandlinkr3   r   r0  r   )r<  r=  )r@  rA  rB  rC  rD  )r0  r   r   )rK   r   r2  r   startTagTitlestartTagNoFramesStylestartTagNoscriptstartTagScriptstartTagBaseLinkCommandstartTagMetar3  r   r4  r5  
endTagHeadendTagHtmlBodyBrr   r7  )rC   rL   r?   )r   r(   r)   rK     s     
z'getPhases.<locals>.InHeadPhase.__init__c             S   s   | j   dS )NT)r,  )rC   r(   r(   r)   r     s    z)getPhases.<locals>.InHeadPhase.processEOFc             S   s   | j   |S )N)r,  )rC   r   r(   r(   r)   r     s    z0getPhases.<locals>.InHeadPhase.processCharactersc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r     s    z+getPhases.<locals>.InHeadPhase.startTagHtmlc             S   s   | j jd d S )Nz!two-heads-are-not-better-than-one)rL   r   )rC   r   r(   r(   r)   r3    s    z+getPhases.<locals>.InHeadPhase.startTagHeadc             S   s$   | j j| | j jj  d|d< d S )NTr   )r?   r   r   pop)rC   r   r(   r(   r)   rI    s    z6getPhases.<locals>.InHeadPhase.startTagBaseLinkCommandc             S   s   | j j| | j jj  d|d< |d }| jjjjd dkrd|krZ| jjjj|d  nVd|krd|kr|d j	 d	krt
j|d jd
}t
j|}|j }| jjjj| d S )NTr   r{   r   	tentativecharsetcontentz
http-equivzcontent-typezutf-8)r?   r   r   rM  rL   rP   rS   rh   changeEncodingr\   r	   EncodingBytesencodeContentAttrParserr"   )rC   r   ro   r{   rL   codecr(   r(   r)   rJ    s    
z+getPhases.<locals>.InHeadPhase.startTagMetac             S   s   | j j|d d S )Nr   )rL   r   )rC   r   r(   r(   r)   rE    s    z,getPhases.<locals>.InHeadPhase.startTagTitlec             S   s   | j j|d d S )Nr   )rL   r   )rC   r   r(   r(   r)   rF    s    z4getPhases.<locals>.InHeadPhase.startTagNoFramesStylec             S   s8   | j jr| j j|d n| jj| | j jd | j _d S )Nr   inHeadNoscript)rL   rN   r   r?   r   rI   ra   )rC   r   r(   r(   r)   rG    s    z/getPhases.<locals>.InHeadPhase.startTagNoscriptc             S   s<   | j j| | jjj| jj_| jj| j_| jjd | j_d S )Nr   )	r?   r   rL   rP   scriptDataStater^   ra   r   rI   )rC   r   r(   r(   r)   rH    s    z-getPhases.<locals>.InHeadPhase.startTagScriptc             S   s   | j   |S )N)r,  )rC   r   r(   r(   r)   r4    s    z,getPhases.<locals>.InHeadPhase.startTagOtherc             S   s:   | j jjj }|jdks&td|j | j jd | j _d S )Nr   zExpected head got %s	afterHead)rL   r?   r   rM  rA   r   rI   ra   )rC   r   r   r(   r(   r)   rK    s    z)getPhases.<locals>.InHeadPhase.endTagHeadc             S   s   | j   |S )N)r,  )rC   r   r(   r(   r)   rL    s    z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc             S   s   | j jdd|d i d S )Nzunexpected-end-tagrA   )rL   r   )rC   r   r(   r(   r)   r7    s    z*getPhases.<locals>.InHeadPhase.endTagOtherc             S   s   | j td d S )Nr   )rK  r/  )rC   r(   r(   r)   r,    s    z+getPhases.<locals>.InHeadPhase.anythingElseN)r:   r;   r<   rK   r   r   r   r3  rI  rJ  rE  rF  rG  rH  r4  rK  rL  r7  r,  r(   )r   r(   r)   InHeadPhase  s    rY  c                   sx   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )z&getPhases.<locals>.InHeadNoscriptPhasec                sf    j | || tjd| jfd| jfd| jfg| _| j| j_tjd	| j	fd
| j
fg| _| j| j_d S )Nr   rA  rB  rD  r3   r<  r=  r   r>  r0  )rA  rB  rD  r3   r<  r=  )r   r>  )rK   r   r2  r   rI  startTagHeadNoscriptr   r4  r5  endTagNoscriptendTagBrr   r7  )rC   rL   r?   )r   r(   r)   rK      s    
z/getPhases.<locals>.InHeadNoscriptPhase.__init__c             S   s   | j jd | j  dS )Nzeof-in-head-noscriptT)rL   r   r,  )rC   r(   r(   r)   r   0  s    z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc             S   s   | j jd j|S )Nr8  )rL   rI   r   )rC   r   r(   r(   r)   r   5  s    z5getPhases.<locals>.InHeadNoscriptPhase.processCommentc             S   s   | j jd | j  |S )Nzchar-in-head-noscript)rL   r   r,  )rC   r   r(   r(   r)   r   8  s    z8getPhases.<locals>.InHeadNoscriptPhase.processCharactersc             S   s   | j jd j|S )Nr8  )rL   rI   r   )rC   r   r(   r(   r)   r   =  s    z=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharactersc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r   @  s    z3getPhases.<locals>.InHeadNoscriptPhase.startTagHtmlc             S   s   | j jd j|S )Nr8  )rL   rI   r   )rC   r   r(   r(   r)   rI  C  s    z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc             S   s   | j jdd|d i d S )Nzunexpected-start-tagrA   )rL   r   )rC   r   r(   r(   r)   rZ  F  s    z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc             S   s"   | j jdd|d i | j  |S )Nzunexpected-inhead-noscript-tagrA   )rL   r   r,  )rC   r   r(   r(   r)   r4  I  s    z4getPhases.<locals>.InHeadNoscriptPhase.startTagOtherc             S   s:   | j jjj }|jdks&td|j | j jd | j _d S )Nr>  zExpected noscript got %sr8  )rL   r?   r   rM  rA   r   rI   ra   )rC   r   r   r(   r(   r)   r[  N  s    z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc             S   s"   | j jdd|d i | j  |S )Nzunexpected-inhead-noscript-tagrA   )rL   r   r,  )rC   r   r(   r(   r)   r\  S  s    z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc             S   s   | j jdd|d i d S )Nzunexpected-end-tagrA   )rL   r   )rC   r   r(   r(   r)   r7  X  s    z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc             S   s   | j td d S )Nr>  )r[  r/  )rC   r(   r(   r)   r,  [  s    z3getPhases.<locals>.InHeadNoscriptPhase.anythingElseN)r:   r;   r<   rK   r   r   r   r   r   rI  rZ  r4  r[  r\  r7  r,  r(   )r   r(   r)   InHeadNoscriptPhase  s   r]  c                   sp   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )z!getPhases.<locals>.AfterHeadPhasec                sn    j | || tjd| jfd| jfd| jfd| jfd| jfg| _| j	| j_
tjd| jfg| _| j| j_
d S )Nr   r   r   r@  rA  rB  rD  r3   r<  r?  r=  r;  r   r0  )	r@  rA  rB  rD  r3   r<  r?  r=  r;  )r   r   r0  )rK   r   r2  r   startTagBodystartTagFramesetstartTagFromHeadr3  r   r4  r5  rL  r   r7  )rC   rL   r?   )r   r(   r)   rK   `  s     
z*getPhases.<locals>.AfterHeadPhase.__init__c             S   s   | j   dS )NT)r,  )rC   r(   r(   r)   r   q  s    z,getPhases.<locals>.AfterHeadPhase.processEOFc             S   s   | j   |S )N)r,  )rC   r   r(   r(   r)   r   u  s    z3getPhases.<locals>.AfterHeadPhase.processCharactersc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r   y  s    z.getPhases.<locals>.AfterHeadPhase.startTagHtmlc             S   s(   d| j _| jj| | j jd | j _d S )NFr   )rL   rf   r?   r   rI   ra   )rC   r   r(   r(   r)   r^  |  s    z.getPhases.<locals>.AfterHeadPhase.startTagBodyc             S   s    | j j| | jjd | j_d S )Nr   )r?   r   rL   rI   ra   )rC   r   r(   r(   r)   r_    s    z2getPhases.<locals>.AfterHeadPhase.startTagFramesetc             S   st   | j jdd|d i | jjj| jj | j jd j| x4| jjd d d D ]}|jdkrN| jjj	| P qNW d S )Nz#unexpected-start-tag-out-of-my-headrA   r8  r   r   r   )
rL   r   r?   r   r   r9  rI   r   rA   remove)rC   r   r   r(   r(   r)   r`    s    
z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc             S   s   | j jdd|d i d S )Nzunexpected-start-tagrA   )rL   r   )rC   r   r(   r(   r)   r3    s    z.getPhases.<locals>.AfterHeadPhase.startTagHeadc             S   s   | j   |S )N)r,  )rC   r   r(   r(   r)   r4    s    z/getPhases.<locals>.AfterHeadPhase.startTagOtherc             S   s   | j   |S )N)r,  )rC   r   r(   r(   r)   rL    s    z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc             S   s   | j jdd|d i d S )Nzunexpected-end-tagrA   )rL   r   )rC   r   r(   r(   r)   r7    s    z-getPhases.<locals>.AfterHeadPhase.endTagOtherc             S   s.   | j jtdd | jjd | j_d| j_d S )Nr   rv   r   T)r?   r   r/  rL   rI   ra   rf   )rC   r(   r(   r)   r,    s    z.getPhases.<locals>.AfterHeadPhase.anythingElseN)r:   r;   r<   rK   r   r   r   r^  r_  r`  r3  r4  rL  r7  r,  r(   )r   r(   r)   AfterHeadPhase_  s   
rb  c                   s  e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgS )hzgetPhases.<locals>.InBodyPhasec          ,      s   j | || | j| _tjd| jfdd| jfd| jfd| jfde| j	ft
| jfdf| jfd&| jfdg| jfd*| jfd+| jfdh| jfd8| jfd9| jfdi| jfd=| jfd>| jfdj| jfdk| jfdH| jfdI| jfdJ| jfdK| jfdL| jfdM| jfdN| jfdl| j fdQ| j!fdm| j"fdn| j#fdV| j$fdW| j%fdo| j&fg!| _'| j(| j'_)tjd| j*fd| j+fdp| j,fd&| j-fd | j.fdq| j/ft
| j0fdr| j1fds| j2fd@| j3fg
| _4| j5| j4_)d S )tNr   r@  rA  rB  rC  rD  r3   r?  r=  r;  r   r   addressarticleaside
blockquotecenterdetailsdirr*   dlfieldset
figcaptionfigurefooterheaderhgroupmainmenunavolr'   sectionsummaryulprelistingformlidddtrV   abbigcodeemfontissmallstrikestrongttunobrbuttonappletmarqueeobjectxmpr   arear0  embedimgkeygenwbrparamsourcetrackinputhrimageisindextextareaiframer>  noembedr<  r   rprtoptionoptgroupmathr   r   colr   framer   r   r   r   r   r   r   dialog)	r@  rA  rB  rC  rD  r3   r?  r=  r;  )rc  rd  re  rf  rg  rh  ri  r*   rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  r'   ru  rv  rw  )rx  ry  )r{  r|  r}  )r  r  r  r  r  r  r  r  r  r  r  r  )r  r  r  )r  r0  r  r  r  r  )r  r  r  )r  r<  )r  r  )r  r  )r   r  r   r  r   r   r   r   r   r   r   )rc  rd  re  rf  r  rg  rh  r  ri  r*   rj  rk  rl  rm  rn  ro  rp  ry  rq  rr  rs  rt  rx  ru  rv  rw  )r|  r}  r{  )r~  r  r  r  r  r  r  r  r  r  r  r  r  r  )r  r  r  )6rK   processSpaceCharactersNonPrer   r   r2  r   startTagProcessInHeadr^  r_  startTagClosePr   startTagHeadingstartTagPreListingstartTagFormstartTagListItemstartTagPlaintext	startTagAstartTagFormattingstartTagNobrstartTagButtonstartTagAppletMarqueeObjectstartTagXmpstartTagTablestartTagVoidFormattingstartTagParamSourcestartTagInput
startTagHrstartTagImagestartTagIsIndexstartTagTextareastartTagIFramerG  startTagRawtextstartTagSelectstartTagRpRtstartTagOptstartTagMathstartTagSvgstartTagMisplacedr   r4  r5  
endTagBody
endTagHtmlendTagBlock
endTagFormendTagPendTagListItemendTagHeadingendTagFormattingendTagAppletMarqueeObjectr\  r   r7  )rC   rL   r?   )r   r(   r)   rK     s~           
    z'getPhases.<locals>.InBodyPhase.__init__c             S   s$   |j |j ko"|j|jko"|j|jkS )N)rA   rn   ro   )rC   node1node2r(   r(   r)   isMatchingFormattingElement  s    z:getPhases.<locals>.InBodyPhase.isMatchingFormattingElementc             S   s   | j j| | j jd }g }x<| j jd d d D ]&}|tkr@P q0| j||r0|j| q0W t|dksjtt|dkr| j jj	|d  | j jj| d S )Nr      r   r   r   )
r?   r   r   activeFormattingElementsr   r  r   r   r   ra  )rC   r   rq   matchingElementsr   r(   r(   r)   addFormattingElement  s    z3getPhases.<locals>.InBodyPhase.addFormattingElementc             S   s@   t d}x2| jjd d d D ]}|j|kr| jjd P qW d S )Nr|  r}  r{  r'   r   r   r   r   r   r   r   r   r   z expected-closing-tag-but-got-eof)r|  r}  r{  r'   r   r   r   r   r   r   r   r   r   )r   r?   r   rA   rL   r   )rC   allowed_elementsr   r(   r(   r)   r     s     
z)getPhases.<locals>.InBodyPhase.processEOFc             S   sh   |d }| j | _|jdrJ| jjd jdkrJ| jjd	 j  rJ|dd  }|rd| jj  | jj| d S )
Nr{   
r   rx  ry  r  r   )rx  ry  r  r   )	r  r   r   r?   r   rA   
hasContent#reconstructActiveFormattingElementsr   )rC   r   r{   r(   r(   r)   !processSpaceCharactersDropNewline  s    

z@getPhases.<locals>.InBodyPhase.processSpaceCharactersDropNewlinec             S   sT   |d dkrd S | j j  | j j|d  | jjrPtdd |d D rPd| j_d S )Nr{    c             S   s   g | ]}|t kqS r(   )r   )r@   charr(   r(   r)   rD   "  s   zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r?   r  r   rL   rf   any)rC   r   r(   r(   r)   r     s    
z0getPhases.<locals>.InBodyPhase.processCharactersc             S   s   | j j  | j j|d  d S )Nr{   )r?   r  r   )rC   r   r(   r(   r)   r  &  s    
z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec             S   s   | j jd j|S )Nr8  )rL   rI   r   )rC   r   r(   r(   r)   r  *  s    z4getPhases.<locals>.InBodyPhase.startTagProcessInHeadc             S   s   | j jdddi t| jjdks4| jjd jdkrB| j jstnFd| j _x<|d j	 D ],\}}|| jjd j
krX|| jjd j
|< qXW d S )Nzunexpected-start-tagrA   r   r   Fr{   )rL   r   r   r?   r   rA   rT   r   rf   r-   ro   )rC   r   r   r   r(   r(   r)   r^  -  s    z+getPhases.<locals>.InBodyPhase.startTagBodyc             S   s   | j jdddi t| jjdks4| jjd jdkrB| j jstnt| j jsLnj| jjd j	rv| jjd j	j
| jjd  x"| jjd jdkr| jjj  qxW | jj| | j jd | j _d S )	Nzunexpected-start-tagrA   r   r   r   r   r   r   )rL   r   r   r?   r   rA   rT   r   rf   parentremoveChildrM  r   rI   ra   )rC   r   r(   r(   r)   r_  8  s    "z/getPhases.<locals>.InBodyPhase.startTagFramesetc             S   s.   | j jdddr| jtd | j j| d S )Nr'   r  )variant)r?   elementInScoper  r/  r   )rC   r   r(   r(   r)   r  F  s    z-getPhases.<locals>.InBodyPhase.startTagClosePc             S   s>   | j jdddr| jtd | j j| d| j_| j| _d S )Nr'   r  )r  F)	r?   r  r  r/  r   rL   rf   r  r   )rC   r   r(   r(   r)   r  K  s
    z1getPhases.<locals>.InBodyPhase.startTagPreListingc             S   sZ   | j jr| jjdddi n:| j jdddr:| jtd | j j| | j jd | j _d S )	Nzunexpected-start-tagrA   rz  r'   r  )r  r   r   )	r?   formPointerrL   r   r  r  r/  r   r   )rC   r   r(   r(   r)   r  R  s    z+getPhases.<locals>.InBodyPhase.startTagFormc             S   s   d| j _dgddgddgd}||d  }xLt| jjD ]<}|j|kr^| j jjt|jd P |j	t
kr8|jdkr8P q8W | jjd
ddr| j jjtd
d | jj| d S )NFr{  r}  r|  )r{  r}  r|  rA   rw   rc  r*   r'   r  )r  )rc  r*   r'   )rL   rf   reversedr?   r   rA   ra   r   r/  	nameTupler   r  r   )rC   r   stopNamesMap	stopNamesr   r(   r(   r)   r  [  s"    


z/getPhases.<locals>.InBodyPhase.startTagListItemc             S   s>   | j jdddr| jtd | j j| | jjj| jj_d S )Nr'   r  )r  )	r?   r  r  r/  r   rL   rP   r`   r^   )rC   r   r(   r(   r)   r  q  s    z0getPhases.<locals>.InBodyPhase.startTagPlaintextc             S   sb   | j jdddr| jtd | j jd jtkrR| jjdd|d i | j jj	  | j j
| d S )Nr'   r  )r  r   zunexpected-start-tagrA   r   )r?   r  r  r/  r   rA   r   rL   r   rM  r   )rC   r   r(   r(   r)   r  w  s    z.getPhases.<locals>.InBodyPhase.startTagHeadingc             S   s~   | j jd}|rf| jjdddd | jtd || j jkrL| j jj| || j jkrf| j jj| | j j	  | j
| d S )Nr~  z$unexpected-start-tag-implies-end-tag)	startNameendName)r?   !elementInActiveFormattingElementsrL   r   r  r/  r   ra  r  r  r  )rC   r   afeAElementr(   r(   r)   r    s    
z(getPhases.<locals>.InBodyPhase.startTagAc             S   s   | j j  | j| d S )N)r?   r  r  )rC   r   r(   r(   r)   r    s    
z1getPhases.<locals>.InBodyPhase.startTagFormattingc             S   sP   | j j  | j jdrB| jjdddd | jtd | j j  | j| d S )Nr  z$unexpected-start-tag-implies-end-tag)r  r  )r?   r  r  rL   r   r   r/  r  )rC   r   r(   r(   r)   r    s    

z+getPhases.<locals>.InBodyPhase.startTagNobrc             S   sT   | j jdr2| jjdddd | jtd |S | j j  | j j| d| j_d S )Nr  z$unexpected-start-tag-implies-end-tag)r  r  F)	r?   r  rL   r   r   r/  r  r   rf   )rC   r   r(   r(   r)   r    s    
z-getPhases.<locals>.InBodyPhase.startTagButtonc             S   s0   | j j  | j j| | j jjt d| j_d S )NF)r?   r  r   r  r   r   rL   rf   )rC   r   r(   r(   r)   r    s    
z:getPhases.<locals>.InBodyPhase.startTagAppletMarqueeObjectc             S   sB   | j jdddr| jtd | j j  d| j_| jj|d d S )Nr'   r  )r  Fr   )r?   r  r  r/  r  rL   rf   r   )rC   r   r(   r(   r)   r    s
    
z*getPhases.<locals>.InBodyPhase.startTagXmpc             S   sR   | j jdkr*| jjdddr*| jtd | jj| d| j _| j jd | j _	d S )Nr(  r'   r  )r  Fr   )
rL   r[   r?   r  r   r/  r   rf   rI   ra   )rC   r   r(   r(   r)   r    s    z,getPhases.<locals>.InBodyPhase.startTagTablec             S   s6   | j j  | j j| | j jj  d|d< d| j_d S )NTr   F)r?   r  r   r   rM  rL   rf   )rC   r   r(   r(   r)   r    s
    
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc             S   s@   | j j}| j| d|d kr<|d d jtdkr<|| j _d S )Nr1   r{   hidden)rL   rf   r  rp   r   )rC   r   rf   r(   r(   r)   r    s
    
z,getPhases.<locals>.InBodyPhase.startTagInputc             S   s$   | j j| | j jj  d|d< d S )NTr   )r?   r   r   rM  )rC   r   r(   r(   r)   r    s    z2getPhases.<locals>.InBodyPhase.startTagParamSourcec             S   sJ   | j jdddr| jtd | j j| | j jj  d|d< d| j_d S )Nr'   r  )r  Tr   F)	r?   r  r  r/  r   r   rM  rL   rf   )rC   r   r(   r(   r)   r    s    z)getPhases.<locals>.InBodyPhase.startTagHrc             S   s6   | j jdddd | jtdd|d |d d d S )	Nzunexpected-start-tag-treated-asr  r  )originalNamenewNamerv   r{   r   )ro   r   )rL   r   r   r/  )rC   r   r(   r(   r)   r    s
    
z,getPhases.<locals>.InBodyPhase.startTagImagec             S   s  | j jdddi | jjrd S i }d|d kr>|d d |d< | jtdd|d | jtd	d | jtd
d d|d kr|d d }nd}| jtd |d |d j }d|kr|d= d|kr|d= d|d< | jtdd||d d | j	td
 | jtd	d | j	td d S )Nzdeprecated-tagrA   r  actionr{   rz  rv   )ro   r  labelpromptz3This is a searchable index. Enter search keywords: rt   )r1   r{   r  r   )ro   r   )
rL   r   r?   r  r   r/  r   r   copyr   )rC   r   
form_attrsr  ro   r(   r(   r)   r    s6    


z.getPhases.<locals>.InBodyPhase.startTagIsIndexc             S   s0   | j j| | jjj| jj_| j| _d| j_d S )NF)	r?   r   rL   rP   r]   r^   r  r   rf   )rC   r   r(   r(   r)   r    s    z/getPhases.<locals>.InBodyPhase.startTagTextareac             S   s   d| j _| j| d S )NF)rL   rf   r  )rC   r   r(   r(   r)   r    s    z-getPhases.<locals>.InBodyPhase.startTagIFramec             S   s"   | j jr| j| n
| j| d S )N)rL   rN   r  r4  )rC   r   r(   r(   r)   rG    s    z/getPhases.<locals>.InBodyPhase.startTagNoscriptc             S   s   | j j|d dS )z8iframe, noembed noframes, noscript(if scripting enabled)r   N)rL   r   )rC   r   r(   r(   r)   r    s    z.getPhases.<locals>.InBodyPhase.startTagRawtextc             S   s@   | j jd jdkr$| jjjtd | j j  | jj j| d S )Nr   r  r   )	r?   r   rA   rL   ra   r   r/  r  r   )rC   r   r(   r(   r)   r    s    
z*getPhases.<locals>.InBodyPhase.startTagOptc             S   s   | j j  | j j| d| j_| jj| jjd | jjd | jjd | jjd | jjd | jjd fkrx| jjd | j_n| jjd	 | j_d S )
NFr   r   r   r   r   r   inSelectInTabler   )r?   r  r   rL   rf   ra   rI   )rC   r   r(   r(   r)   r    s    




z-getPhases.<locals>.InBodyPhase.startTagSelectc             S   sB   | j jdr2| j j  | j jd jdkr2| jj  | j j| d S )Nrubyr   r   )r?   r  generateImpliedEndTagsr   rA   rL   r   r   )rC   r   r(   r(   r)   r  %  s
    

z+getPhases.<locals>.InBodyPhase.startTagRpRtc             S   sZ   | j j  | jj| | jj| td |d< | j j| |d rV| j jj  d|d< d S )Nrj   rn   r   Tr   )	r?   r  rL   r   r   r   r   r   rM  )rC   r   r(   r(   r)   r  ,  s    
z+getPhases.<locals>.InBodyPhase.startTagMathc             S   sZ   | j j  | jj| | jj| td |d< | j j| |d rV| j jj  d|d< d S )Nr   rn   r   Tr   )	r?   r  rL   r   r   r   r   r   rM  )rC   r   r(   r(   r)   r  8  s    
z*getPhases.<locals>.InBodyPhase.startTagSvgc             S   s   | j 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   N)rL   r   )rC   r   r(   r(   r)   r  D  s    z0getPhases.<locals>.InBodyPhase.startTagMisplacedc             S   s   | j j  | j j| d S )N)r?   r  r   )rC   r   r(   r(   r)   r4  M  s    
z,getPhases.<locals>.InBodyPhase.startTagOtherc             S   s   | j jdddsD| jtdd | jjdddi | jtdd nX| j jd | j jd	 j	dkrt| jjdddi | j jj
 }x|j	dkr| j jj
 }qW d S )
Nr'   r  )r  rv   zunexpected-end-tagrA   rw   r   r   )r?   r  r  r/  rL   r   r  r  r   rA   rM  )rC   r   r   r(   r(   r)   r  Q  s    z&getPhases.<locals>.InBodyPhase.endTagPc             S   s   | j jds| jj  d S | j jd jdkrlx>| j jdd  D ]*}|jtdkr>| jjdd|jd P q>W | jjd | j_d S )Nr   r      r|  r}  r{  r  r  r'   r  r  r   r   r   r   r   r   r   z$expected-one-end-tag-but-got-another)gotNameexpectedName	afterBodyr   )r|  r}  r{  r  r  r'   r  r  r   r   r   r   r   r   r   r   )	r?   r  rL   r   r   rA   r   rI   ra   )rC   r   r   r(   r(   r)   r  ^  s    
   z)getPhases.<locals>.InBodyPhase.endTagBodyc             S   s"   | j jdr| jtd |S d S )Nr   )r?   r  r  r/  )rC   r   r(   r(   r)   r  p  s    z)getPhases.<locals>.InBodyPhase.endTagHtmlc             S   s   |d dkr| j | _| jj|d }|r2| jj  | jjd j|d kr^| jjdd|d i |r| jjj	 }x|j|d kr| jjj	 }qpW d S )NrA   rx  r   zend-tag-too-earlyr   )
r  r   r?   r  r  r   rA   rL   r   rM  )rC   r   inScoper   r(   r(   r)   r  v  s    
z*getPhases.<locals>.InBodyPhase.endTagBlockc             S   sx   | j j}d | j _|d ks&| j j| r:| jjdddi n:| j j  | j jd |krf| jjdddi | j jj| d S )Nzunexpected-end-tagrA   rz  r   zend-tag-too-early-ignoredr   )r?   r  r  rL   r   r  r   ra  )rC   r   r   r(   r(   r)   r    s    

z)getPhases.<locals>.InBodyPhase.endTagFormc             S   s   |d dkrd}nd }| j j|d |dsB| jjdd|d i nj| j j|d d | j jd	 j|d kr| jjdd|d i | j jj }x|j|d kr| j jj }qW d S )
NrA   r{  list)r  zunexpected-end-tag)excluder   zend-tag-too-earlyr   )r?   r  rL   r   r  r   rA   rM  )rC   r   r  r   r(   r(   r)   r    s    z-getPhases.<locals>.InBodyPhase.endTagListItemc             S   s   x$t D ]}| jj|r| jj  P qW | jjd j|d krR| jjdd|d i xBt D ]:}| jj|rX| jjj }x|jt kr| jjj }qvW P qXW d S )Nr   rA   zend-tag-too-earlyr   )	r   r?   r  r  r   rA   rL   r   rM  )rC   r   itemr(   r(   r)   r    s    


z,getPhases.<locals>.InBodyPhase.endTagHeadingc             S   s"  d}x|dk r|d7 }| j j|d }| sL|| j jkrZ| j j|j rZ| j| dS || j jkr| jjdd|d i | j jj	| dS | j j|js| jjdd|d i dS || j jd kr| jjdd|d i | j jj
|}d}x,| j j|d D ]}|jtkr |}P q W |dkrb| j jj }x||krN| j jj }q4W | j jj	| dS | j j|d  }| j jj
|}| }	}
d}| j jj
|
}x|d	k rh|d7 }|d8 }| j j| }
|
| j jkr| j jj	|
 q|
|krP |	|kr
| j jj
|
d }|
j }|| j j| j jj
|
< || j j| j jj
|
< |}
|	jrV|	jj|	 |
j|	 |
}	qW |	jr~|	jj|	 |jtdkr| j j \}}|j|	| n
|j|	 |j }|j| |j| | j jj	| | j jj|| | j jj	| | j jj| j jj
|d | qW dS )z)The much-feared adoption agency algorithmr      r   rA   Nzadoption-agency-1.2zadoption-agency-4.4zadoption-agency-1.3r  r   r   r   r   r   r   )r   r   r   r   r   )r?   r  r   r  rA   r7  rL   r   r  ra  indexr  r   rM  	cloneNoder  r  appendChildr   getTableMisnestedNodePositioninsertBeforereparentChildreninsert)rC   r   outerLoopCounterformattingElementafeIndexfurthestBlockrq   commonAncestorbookmarklastNoder   innerLoopCounterr  cloner  r  r(   r(   r)   r    s    











z/getPhases.<locals>.InBodyPhase.endTagFormattingc             S   s   | j j|d r| j j  | j jd j|d krF| jjdd|d i | j j|d r| j jj }x|j|d kr| j jj }qdW | j j  d S )NrA   r   zend-tag-too-earlyr   )	r?   r  r  r   rA   rL   r   rM  clearActiveFormattingElements)rC   r   rq   r(   r(   r)   r  T  s    
z8getPhases.<locals>.InBodyPhase.endTagAppletMarqueeObjectc             S   s@   | j jdddd | jj  | jjtdd | jjj  d S )Nzunexpected-end-tag-treated-asr0  z
br element)r  r  rv   )rL   r   r?   r  r   r/  r   rM  )rC   r   r(   r(   r)   r\  `  s
    
z'getPhases.<locals>.InBodyPhase.endTagBrc             S   s   x| j jd d d D ]}|j|d kr~| j j|d d | j jd j|d krd| jjdd|d i x| j jj |krxqfW P q|jtkr| jjdd|d i P qW d S )Nr   rA   )r  zunexpected-end-tagr   r   )	r?   r   rA   r  rL   r   rM  r  r   )rC   r   r   r(   r(   r)   r7  g  s    
z*getPhases.<locals>.InBodyPhase.endTagOtherN)6r:   r;   r<   rK   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  rG  r  r  r  r  r  r  r  r4  r  r  r  r  r  r  r  r  r  r\  r7  r(   )r   r(   r)   InBodyPhase  sh   G
	
	 $r  c                   s@   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd ZdS )zgetPhases.<locals>.TextPhasec                sF    j | || tjg | _| j| j_tjd| jfg| _| j| j_d S )Nr?  )	rK   r   r2  r   r4  r5  endTagScriptr   r7  )rC   rL   r?   )r   r(   r)   rK   v  s    
z%getPhases.<locals>.TextPhase.__init__c             S   s   | j j|d  d S )Nr{   )r?   r   )rC   r   r(   r(   r)   r   ~  s    z.getPhases.<locals>.TextPhase.processCharactersc             S   s8   | j jdd| jjd ji | jjj  | j j| j _dS )Nz&expected-named-closing-tag-but-got-eofrA   r   Tr   )rL   r   r?   r   rA   rM  r   ra   )rC   r(   r(   r)   r     s
    z'getPhases.<locals>.TextPhase.processEOFc             S   s   dst d|d  d S )NFz4Tried to process start tag %s in RCDATA/RAWTEXT moderA   )r   )rC   r   r(   r(   r)   r4    s    z*getPhases.<locals>.TextPhase.startTagOtherc             S   s*   | j jj }|jdkst| jj| j_d S )Nr?  )r?   r   rM  rA   r   rL   r   ra   )rC   r   r   r(   r(   r)   r    s    z)getPhases.<locals>.TextPhase.endTagScriptc             S   s   | j jj  | jj| j_d S )N)r?   r   rM  rL   r   ra   )rC   r   r(   r(   r)   r7    s    z(getPhases.<locals>.TextPhase.endTagOtherN)	r:   r;   r<   rK   r   r   r4  r  r7  r(   )r   r(   r)   	TextPhaseu  s   r  c                   s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'S )(zgetPhases.<locals>.InTablePhasec                s    j | || tjd| jfd| jfd| jfd| jfd| jfd| jfd| j	fd| j
fd| jfd| jfg
| _| j| j_tjd| jfd| jfg| _| j| j_d S )Nr   r   r   r  r   r   r   r   r   r   r   r=  r?  r  rz  r   )r   r   r   )r   r   r   )r=  r?  )r   r   r  r   r   r   r   r   r   r   r   )rK   r   r2  r   startTagCaptionstartTagColgroupstartTagColstartTagRowGroupstartTagImplyTbodyr  startTagStyleScriptr  r  r   r4  r5  endTagTableendTagIgnorer   r7  )rC   rL   r?   )r   r(   r)   rK     s$    
 z(getPhases.<locals>.InTablePhase.__init__c             S   s(   x"| j jd jdkr"| j jj  qW d S )Nr   r   r   r   )r   r   )r?   r   rA   rM  )rC   r(   r(   r)   clearStackToTableContext  s    z8getPhases.<locals>.InTablePhase.clearStackToTableContextc             S   s0   | j jd jdkr | jjd n| jjs,td S )Nr   r   zeof-in-tabler   )r?   r   rA   rL   r   rT   r   )rC   r(   r(   r)   r     s    z*getPhases.<locals>.InTablePhase.processEOFc             S   s4   | j j}| j jd | j _|| j j_| j jj| d S )NinTableText)rL   ra   rI   r   r   )rC   r   r   r(   r(   r)   r     s    
z6getPhases.<locals>.InTablePhase.processSpaceCharactersc             S   s4   | j j}| j jd | j _|| j j_| j jj| d S )Nr  )rL   ra   rI   r   r   )rC   r   r   r(   r(   r)   r     s    
z1getPhases.<locals>.InTablePhase.processCharactersc             S   s&   d| j _| jjd j| d| j _d S )NTr   F)r?   insertFromTablerL   rI   r   )rC   r   r(   r(   r)   r     s    z*getPhases.<locals>.InTablePhase.insertTextc             S   s6   | j   | jjjt | jj| | jjd | j_d S )Nr   )	r  r?   r  r   r   r   rL   rI   ra   )rC   r   r(   r(   r)   r    s    z/getPhases.<locals>.InTablePhase.startTagCaptionc             S   s(   | j   | jj| | jjd | j_d S )Nr   )r  r?   r   rL   rI   ra   )rC   r   r(   r(   r)   r    s    z0getPhases.<locals>.InTablePhase.startTagColgroupc             S   s   | j tdd |S )Nr   rv   )r  r/  )rC   r   r(   r(   r)   r    s    z+getPhases.<locals>.InTablePhase.startTagColc             S   s(   | j   | jj| | jjd | j_d S )Nr   )r  r?   r   rL   rI   ra   )rC   r   r(   r(   r)   r    s    z0getPhases.<locals>.InTablePhase.startTagRowGroupc             S   s   | j tdd |S )Nr   rv   )r  r/  )rC   r   r(   r(   r)   r    s    z2getPhases.<locals>.InTablePhase.startTagImplyTbodyc             S   s6   | j jdddd | j jjtd | j js2|S d S )Nz$unexpected-start-tag-implies-end-tagr   )r  r  )rL   r   ra   r   r/  rT   )rC   r   r(   r(   r)   r    s
    z-getPhases.<locals>.InTablePhase.startTagTablec             S   s   | j jd j|S )Nr8  )rL   rI   r   )rC   r   r(   r(   r)   r    s    z3getPhases.<locals>.InTablePhase.startTagStyleScriptc             S   sV   d|d krH|d d j tdkrH| jjd | jj| | jjj  n
| j| d S )Nr1   r{   r  z unexpected-hidden-input-in-table)	rp   r   rL   r   r?   r   r   rM  r4  )rC   r   r(   r(   r)   r    s    z-getPhases.<locals>.InTablePhase.startTagInputc             S   sD   | j jd | jjd kr@| jj| | jjd | j_| jjj  d S )Nzunexpected-form-in-tabler   r   )rL   r   r?   r  r   r   rM  )rC   r   r(   r(   r)   r    s
    z,getPhases.<locals>.InTablePhase.startTagFormc             S   s<   | j jdd|d i d| j_| j jd j| d| j_d S )Nz)unexpected-start-tag-implies-table-voodoorA   Tr   F)rL   r   r?   r  rI   r   )rC   r   r(   r(   r)   r4    s    z-getPhases.<locals>.InTablePhase.startTagOtherc             S   s   | j jdddr| j j  | j jd jdkrJ| jjdd| j jd jd x"| j jd jdkrl| j jj  qLW | j jj  | jj  n| jj	st
| jj  d S )	Nr   )r  r   zend-tag-too-early-named)r  r  r   r   r   )r?   r  r  r   rA   rL   r   rM  rc   rT   r   )rC   r   r(   r(   r)   r    s    
z+getPhases.<locals>.InTablePhase.endTagTablec             S   s   | j jdd|d i d S )Nzunexpected-end-tagrA   )rL   r   )rC   r   r(   r(   r)   r    s    z,getPhases.<locals>.InTablePhase.endTagIgnorec             S   s<   | j jdd|d i d| j_| j jd j| d| j_d S )Nz'unexpected-end-tag-implies-table-voodoorA   Tr   F)rL   r   r?   r  rI   r   )rC   r   r(   r(   r)   r7     s    z+getPhases.<locals>.InTablePhase.endTagOtherN)r:   r;   r<   rK   r  r   r   r   r   r  r  r  r  r  r  r  r  r  r4  r  r  r7  r(   )r   r(   r)   InTablePhase  s&   	
r  c                   sP   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )z#getPhases.<locals>.InTableTextPhasec                s    j | || d | _g | _d S )N)rK   r   characterTokens)rC   rL   r?   )r   r(   r)   rK   (  s    z,getPhases.<locals>.InTableTextPhase.__init__c             S   sd   dj dd | jD }tdd |D rJtd |d}| jjd j| n|rZ| jj| g | _d S )Nr   c             S   s   g | ]}|d  qS )r{   r(   )r@   r  r(   r(   r)   rD   .  s    zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c             S   s   g | ]}|t kqS r(   )r   )r@   r  r(   r(   r)   rD   /  s    rt   )r1   r{   r   )joinr  r  r   rL   rI   r   r?   )rC   r{   r   r(   r(   r)   flushCharacters-  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc             S   s   | j   | j| j_|S )N)r!  r   rL   ra   )rC   r   r(   r(   r)   r   6  s    
z2getPhases.<locals>.InTableTextPhase.processCommentc             S   s   | j   | j| j_dS )NT)r!  r   rL   ra   )rC   r(   r(   r)   r   ;  s    
z.getPhases.<locals>.InTableTextPhase.processEOFc             S   s    |d dkrd S | j j| d S )Nr{   r  )r  r   )rC   r   r(   r(   r)   r   @  s    z5getPhases.<locals>.InTableTextPhase.processCharactersc             S   s   | j j| d S )N)r  r   )rC   r   r(   r(   r)   r   E  s    z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc             S   s   | j   | j| j_|S )N)r!  r   rL   ra   )rC   r   r(   r(   r)   r   J  s    
z3getPhases.<locals>.InTableTextPhase.processStartTagc             S   s   | j   | j| j_|S )N)r!  r   rL   ra   )rC   r   r(   r(   r)   r   O  s    
z1getPhases.<locals>.InTableTextPhase.processEndTagN)r:   r;   r<   rK   r!  r   r   r   r   r   r   r(   )r   r(   r)   InTableTextPhase'  s   	r"  c                   s`   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )z!getPhases.<locals>.InCaptionPhasec                sf    j | || tjd| jfd| jfg| _| j| j_tjd| jfd| j	fd| j
fg| _| j| j_d S )Nr   r   r  r   r   r   r   r   r   r   r   r   )	r   r  r   r   r   r   r   r   r   )
r   r  r   r   r   r   r   r   r   r   )rK   r   r2  r   startTagTableElementr   r4  r5  endTagCaptionr  r  r   r7  )rC   rL   r?   )r   r(   r)   rK   V  s     
 z*getPhases.<locals>.InCaptionPhase.__init__c             S   s   | j jddd S )Nr   r   )r  )r?   r  )rC   r(   r(   r)   ignoreEndTagCaptionh  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc             S   s   | j jd j  d S )Nr   )rL   rI   r   )rC   r(   r(   r)   r   k  s    z,getPhases.<locals>.InCaptionPhase.processEOFc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r   n  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc             S   s0   | j j  | j }| j jjtd |s,|S d S )Nr   )rL   r   r%  ra   r   r/  )rC   r   ignoreEndTagr(   r(   r)   r#  q  s
    
z6getPhases.<locals>.InCaptionPhase.startTagTableElementc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r4  y  s    z/getPhases.<locals>.InCaptionPhase.startTagOtherc             S   s   | j  s| jj  | jjd jdkrB| jjdd| jjd jd x"| jjd jdkrd| jjj  qDW | jjj  | jj  | jj	d | j_
n| jjst| jj  d S )	Nr   r   z$expected-one-end-tag-but-got-another)r  r  r   r   r   r   )r%  r?   r  r   rA   rL   r   rM  r  rI   ra   rT   r   )rC   r   r(   r(   r)   r$  |  s    

z/getPhases.<locals>.InCaptionPhase.endTagCaptionc             S   s0   | j j  | j }| j jjtd |s,|S d S )Nr   )rL   r   r%  ra   r   r/  )rC   r   r&  r(   r(   r)   r    s
    
z-getPhases.<locals>.InCaptionPhase.endTagTablec             S   s   | j jdd|d i d S )Nzunexpected-end-tagrA   )rL   r   )rC   r   r(   r(   r)   r    s    z.getPhases.<locals>.InCaptionPhase.endTagIgnorec             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r7    s    z-getPhases.<locals>.InCaptionPhase.endTagOtherN)r:   r;   r<   rK   r%  r   r   r#  r4  r$  r  r  r7  r(   )r   r(   r)   InCaptionPhaseT  s   r'  c                   sX   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )z%getPhases.<locals>.InColumnGroupPhasec                s^    j | || tjd| jfd| jfg| _| j| j_tjd| jfd| j	fg| _
| j| j
_d S )Nr   r  r   )rK   r   r2  r   r  r   r4  r5  endTagColgroup	endTagColr   r7  )rC   rL   r?   )r   r(   r)   rK     s    
z.getPhases.<locals>.InColumnGroupPhase.__init__c             S   s   | j jd jdkS )Nr   r   r   )r?   r   rA   )rC   r(   r(   r)   ignoreEndTagColgroup  s    z:getPhases.<locals>.InColumnGroupPhase.ignoreEndTagColgroupc             S   sD   | j jd jdkr"| jjstd S | j }| jtd |s@dS d S )Nr   r   r   Tr   )	r?   r   rA   rL   rT   r   r*  r(  r/  )rC   r&  r(   r(   r)   r     s    z0getPhases.<locals>.InColumnGroupPhase.processEOFc             S   s"   | j  }| jtd |s|S d S )Nr   )r*  r(  r/  )rC   r   r&  r(   r(   r)   r     s    z7getPhases.<locals>.InColumnGroupPhase.processCharactersc             S   s$   | j j| | j jj  d|d< d S )NTr   )r?   r   r   rM  )rC   r   r(   r(   r)   r    s    z1getPhases.<locals>.InColumnGroupPhase.startTagColc             S   s"   | j  }| jtd |s|S d S )Nr   )r*  r(  r/  )rC   r   r&  r(   r(   r)   r4    s    z3getPhases.<locals>.InColumnGroupPhase.startTagOtherc             S   s@   | j  r | jjst| jj  n| jjj  | jjd | j_	d S )Nr   )
r*  rL   rT   r   r   r?   r   rM  rI   ra   )rC   r   r(   r(   r)   r(    s
    z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc             S   s   | j jdddi d S )Nz
no-end-tagrA   r  )rL   r   )rC   r   r(   r(   r)   r)    s    z/getPhases.<locals>.InColumnGroupPhase.endTagColc             S   s"   | j  }| jtd |s|S d S )Nr   )r*  r(  r/  )rC   r   r&  r(   r(   r)   r7    s    z1getPhases.<locals>.InColumnGroupPhase.endTagOtherN)r:   r;   r<   rK   r*  r   r   r  r4  r(  r)  r7  r(   )r   r(   r)   InColumnGroupPhase  s   
	r+  c                   sx   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )z#getPhases.<locals>.InTableBodyPhasec                sv    j | || tjd| jfd| jfd| jfd| jfg| _| j| j_	tjd| j
fd| jfd| jfg| _| j| j_	d S )Nr   r   r   r   r   r  r   r   r   r   r   r   )r   r   )r   r  r   r   r   r   )r   r   r   )r   r   r  r   r   r   r   r   )rK   r   r2  r   
startTagTrstartTagTableCellstartTagTableOtherr   r4  r5  endTagTableRowGroupr  r  r   r7  )rC   rL   r?   )r   r(   r)   rK     s    
 z,getPhases.<locals>.InTableBodyPhase.__init__c             S   sF   x"| j jd jdkr"| j jj  qW | j jd jdkrB| jjsBtd S )	Nr   r   r   r   r   r   )r   r   r   r   r   )r?   r   rA   rM  rL   rT   r   )rC   r(   r(   r)   clearStackToTableBodyContext  s
    z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc             S   s   | j jd j  d S )Nr   )rL   rI   r   )rC   r(   r(   r)   r     s    z.getPhases.<locals>.InTableBodyPhase.processEOFc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r      s    z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r     s    z5getPhases.<locals>.InTableBodyPhase.processCharactersc             S   s(   | j   | jj| | jjd | j_d S )Nr   )r0  r?   r   rL   rI   ra   )rC   r   r(   r(   r)   r,    s    z.getPhases.<locals>.InTableBodyPhase.startTagTrc             S   s*   | j jdd|d i | jtdd |S )Nzunexpected-cell-in-table-bodyrA   r   rv   )rL   r   r,  r/  )rC   r   r(   r(   r)   r-    s    z5getPhases.<locals>.InTableBodyPhase.startTagTableCellc             S   sn   | j jddds0| j jddds0| j jdddrT| j  | jt| j jd j |S | jjs`t	| jj
  d S )Nr   r   )r  r   r   r   r   )r?   r  r0  r/  r/  r   rA   rL   rT   r   r   )rC   r   r(   r(   r)   r.    s    z6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r4    s    z1getPhases.<locals>.InTableBodyPhase.startTagOtherc             S   sT   | j j|d ddr:| j  | j jj  | jjd | j_n| jjdd|d i d S )NrA   r   )r  r   z unexpected-end-tag-in-table-body)	r?   r  r0  r   rM  rL   rI   ra   r   )rC   r   r(   r(   r)   r/  "  s    z7getPhases.<locals>.InTableBodyPhase.endTagTableRowGroupc             S   sn   | j jddds0| j jddds0| j jdddrT| j  | jt| j jd j |S | jjs`t	| jj
  d S )Nr   r   )r  r   r   r   r   )r?   r  r0  r/  r/  r   rA   rL   rT   r   r   )rC   r   r(   r(   r)   r  +  s    z/getPhases.<locals>.InTableBodyPhase.endTagTablec             S   s   | j jdd|d i d S )Nz unexpected-end-tag-in-table-bodyrA   )rL   r   )rC   r   r(   r(   r)   r  8  s    z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r7  <  s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherN)r:   r;   r<   rK   r0  r   r   r   r,  r-  r.  r4  r/  r  r  r7  r(   )r   r(   r)   InTableBodyPhase  s   
	r1  c                   s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )zgetPhases.<locals>.InRowPhasec                sv    j | || tjd| jfd| jfd| jfg| _| j| j_tjd
| j	fd| j
fd| jfd| jfg| _| j| j_d S )Nr   r   r   r   r  r   r   r   r   r   r   r   )r   r   )r   r  r   r   r   r   r   )r   r   r   )r   r   r  r   r   r   r   )rK   r   r2  r   r-  r.  r   r4  r5  endTagTrr  r/  r  r   r7  )rC   rL   r?   )r   r(   r)   rK   A  s     
z&getPhases.<locals>.InRowPhase.__init__c             S   sD   x>| j jd jdkr>| jjdd| j jd ji | j jj  qW d S )	Nr   r   r   z'unexpected-implied-end-tag-in-table-rowrA   r   )r   r   r   )r?   r   rA   rL   r   rM  )rC   r(   r(   r)   clearStackToTableRowContextU  s    z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc             S   s   | j jddd S )Nr   r   )r  )r?   r  )rC   r(   r(   r)   ignoreEndTagTr[  s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc             S   s   | j jd j  d S )Nr   )rL   rI   r   )rC   r(   r(   r)   r   _  s    z(getPhases.<locals>.InRowPhase.processEOFc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r   b  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r   e  s    z/getPhases.<locals>.InRowPhase.processCharactersc             S   s6   | j   | jj| | jjd | j_| jjjt d S )Nr   )	r3  r?   r   rL   rI   ra   r  r   r   )rC   r   r(   r(   r)   r-  h  s    z/getPhases.<locals>.InRowPhase.startTagTableCellc             S   s"   | j  }| jtd |s|S d S )Nr   )r4  r2  r/  )rC   r   r&  r(   r(   r)   r.  n  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r4  u  s    z+getPhases.<locals>.InRowPhase.startTagOtherc             S   sH   | j  s.| j  | jjj  | jjd | j_n| jjs:t	| jj
  d S )Nr   )r4  r3  r?   r   rM  rL   rI   ra   rT   r   r   )rC   r   r(   r(   r)   r2  x  s    z&getPhases.<locals>.InRowPhase.endTagTrc             S   s"   | j  }| jtd |s|S d S )Nr   )r4  r2  r/  )rC   r   r&  r(   r(   r)   r    s    z)getPhases.<locals>.InRowPhase.endTagTablec             S   s4   | j j|d ddr&| jtd |S | jj  d S )NrA   r   )r  r   )r?   r  r2  r/  rL   r   )rC   r   r(   r(   r)   r/    s    z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc             S   s   | j jdd|d i d S )Nzunexpected-end-tag-in-table-rowrA   )rL   r   )rC   r   r(   r(   r)   r    s    z*getPhases.<locals>.InRowPhase.endTagIgnorec             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r7    s    z)getPhases.<locals>.InRowPhase.endTagOtherN)r:   r;   r<   rK   r3  r4  r   r   r   r-  r.  r4  r2  r  r/  r  r7  r(   )r   r(   r)   
InRowPhase?  s   
r5  c                   s`   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )zgetPhases.<locals>.InCellPhasec                sf    j | || tjd| jfd| jfg| _| j| j_tjd| jfd| j	fd| j
fg| _| j| j_d S )Nr   r   r  r   r   r   r   r   r   r   r   r   )	r   r  r   r   r   r   r   r   r   )r   r   )r   r   r  r   r   )r   r   r   r   r   )rK   r   r2  r   r.  r   r4  r5  endTagTableCellr  endTagImplyr   r7  )rC   rL   r?   )r   r(   r)   rK     s     
z'getPhases.<locals>.InCellPhase.__init__c             S   sB   | j jdddr | jtd n| j jdddr>| jtd d S )Nr   r   )r  r   )r?   r  r6  r/  )rC   r(   r(   r)   	closeCell  s    z(getPhases.<locals>.InCellPhase.closeCellc             S   s   | j jd j  d S )Nr   )rL   rI   r   )rC   r(   r(   r)   r     s    z)getPhases.<locals>.InCellPhase.processEOFc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r     s    z0getPhases.<locals>.InCellPhase.processCharactersc             S   sF   | j jddds | j jdddr,| j  |S | jjs8t| jj  d S )Nr   r   )r  r   )r?   r  r8  rL   rT   r   r   )rC   r   r(   r(   r)   r.    s    z1getPhases.<locals>.InCellPhase.startTagTableOtherc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r4    s    z,getPhases.<locals>.InCellPhase.startTagOtherc             S   s   | j j|d ddr| j j|d  | j jd j|d krt| jjdd|d i x.| j jj }|j|d krRP qRW n| j jj  | j j  | jj	d | j_
n| jjdd|d i d S )	NrA   r   )r  r   zunexpected-cell-end-tagr   zunexpected-end-tagr   )r?   r  r  r   rA   rL   r   rM  r  rI   ra   )rC   r   r   r(   r(   r)   r6    s    
z.getPhases.<locals>.InCellPhase.endTagTableCellc             S   s   | j jdd|d i d S )Nzunexpected-end-tagrA   )rL   r   )rC   r   r(   r(   r)   r    s    z+getPhases.<locals>.InCellPhase.endTagIgnorec             S   s.   | j j|d ddr | j  |S | jj  d S )NrA   r   )r  )r?   r  r8  rL   r   )rC   r   r(   r(   r)   r7    s    z*getPhases.<locals>.InCellPhase.endTagImplyc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r7    s    z*getPhases.<locals>.InCellPhase.endTagOtherN)r:   r;   r<   rK   r8  r   r   r.  r4  r6  r  r7  r7  r(   )r   r(   r)   InCellPhase  s   
r9  c                   sx   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )z getPhases.<locals>.InSelectPhasec                s    j | || tjd| jfd| jfd| jfd| jfd	| jfd| jfg| _	| j
| j	_tjd| jfd| jfd| jfg| _| j| j_d S )
Nr   r  r  r   r  r  r  r?  )r  r  r  )rK   r   r2  r   startTagOptionstartTagOptgroupr  r  rH  r   r4  r5  endTagOptionendTagOptgroupendTagSelectr   r7  )rC   rL   r?   )r   r(   r)   rK     s    
z)getPhases.<locals>.InSelectPhase.__init__c             S   s0   | j jd jdkr | jjd n| jjs,td S )Nr   r   zeof-in-selectr   )r?   r   rA   rL   r   rT   r   )rC   r(   r(   r)   r     s    z+getPhases.<locals>.InSelectPhase.processEOFc             S   s$   |d dkrd S | j j|d  d S )Nr{   r  )r?   r   )rC   r   r(   r(   r)   r    	  s    z2getPhases.<locals>.InSelectPhase.processCharactersc             S   s.   | j jd jdkr| j jj  | j j| d S )Nr   r  r   )r?   r   rA   rM  r   )rC   r   r(   r(   r)   r:  	  s    z/getPhases.<locals>.InSelectPhase.startTagOptionc             S   sL   | j jd jdkr| j jj  | j jd jdkr<| j jj  | j j| d S )Nr   r  r  r   r   )r?   r   rA   rM  r   )rC   r   r(   r(   r)   r;  	  s
    z1getPhases.<locals>.InSelectPhase.startTagOptgroupc             S   s   | j jd | jtd d S )Nzunexpected-select-in-selectr   )rL   r   r>  r/  )rC   r   r(   r(   r)   r  	  s    z/getPhases.<locals>.InSelectPhase.startTagSelectc             S   s>   | j jd | jjdddr.| jtd |S | j js:td S )Nzunexpected-input-in-selectr   )r  )rL   r   r?   r  r>  r/  rT   r   )rC   r   r(   r(   r)   r  	  s
    z.getPhases.<locals>.InSelectPhase.startTagInputc             S   s   | j jd j|S )Nr8  )rL   rI   r   )rC   r   r(   r(   r)   rH  	  s    z/getPhases.<locals>.InSelectPhase.startTagScriptc             S   s   | j jdd|d i d S )Nzunexpected-start-tag-in-selectrA   )rL   r   )rC   r   r(   r(   r)   r4  !	  s    z.getPhases.<locals>.InSelectPhase.startTagOtherc             S   s6   | j jd jdkr | j jj  n| jjdddi d S )Nr   r  zunexpected-end-tag-in-selectrA   r   )r?   r   rA   rM  rL   r   )rC   r   r(   r(   r)   r<  %	  s    z-getPhases.<locals>.InSelectPhase.endTagOptionc             S   sf   | j jd jdkr0| j jd jdkr0| j jj  | j jd	 jdkrP| j jj  n| jjdddi d S )
Nr   r  r  r  zunexpected-end-tag-in-selectrA   r   r   )r?   r   rA   rM  rL   r   )rC   r   r(   r(   r)   r=  ,	  s    z/getPhases.<locals>.InSelectPhase.endTagOptgroupc             S   s^   | j jdddrD| j jj }x|jdkr6| j jj }qW | jj  n| jjsPt| jj	  d S )Nr   )r  )
r?   r  r   rM  rA   rL   rc   rT   r   r   )rC   r   r   r(   r(   r)   r>  9	  s    z-getPhases.<locals>.InSelectPhase.endTagSelectc             S   s   | j jdd|d i d S )Nzunexpected-end-tag-in-selectrA   )rL   r   )rC   r   r(   r(   r)   r7  D	  s    z,getPhases.<locals>.InSelectPhase.endTagOtherN)r:   r;   r<   rK   r   r   r:  r;  r  r  rH  r4  r<  r=  r>  r7  r(   )r   r(   r)   InSelectPhase  s   r@  c                   sH   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )z'getPhases.<locals>.InSelectInTablePhasec          	      sN    j | || tjd	| jfg| _| j| j_tjd
| jfg| _| j	| j_d S )Nr   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )
rK   r   r2  r  r   r4  r5  r  r   r7  )rC   rL   r?   )r   r(   r)   rK   I	  s    
z0getPhases.<locals>.InSelectInTablePhase.__init__c             S   s   | j jd j  d S )Nr   )rL   rI   r   )rC   r(   r(   r)   r   X	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r   [	  s    z9getPhases.<locals>.InSelectInTablePhase.processCharactersc             S   s(   | j jdd|d i | jtd |S )Nz5unexpected-table-element-start-tag-in-select-in-tablerA   r   )rL   r   r7  r/  )rC   r   r(   r(   r)   r  ^	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r4  c	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagOtherc             S   s@   | j jdd|d i | jj|d ddr<| jtd |S d S )Nz3unexpected-table-element-end-tag-in-select-in-tablerA   r   )r  r   )rL   r   r?   r  r7  r/  )rC   r   r(   r(   r)   r  f	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r7  l	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOtherN)
r:   r;   r<   rK   r   r   r  r4  r  r7  r(   )r   r(   r)   InSelectInTablePhaseH	  s   rA  c            -       s   e Zd Zeddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,g,Z fd-d.Zd/d0 Z fd1d2Zd3d4 Zd5d6 Z	d7S )8z(getPhases.<locals>.InForeignContentPhaser  r  rf  r   r0  rg  r  r|  r*   rj  r}  r  r  h1h2h3h4h5h6r   r  r  r  r{  ry  rr  r3   r  rt  r'   rx  r  r  r  spanr  r  subsupr   r  r  rw  varc                s    j | || d S )N)rK   )rC   rL   r?   )r   r(   r)   rK   y	  s    z1getPhases.<locals>.InForeignContentPhase.__init__c          %   S   sn   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%$}|d& |krj||d&  |d&< d S )'NaltGlyphaltGlyphDefaltGlyphItemanimateColoranimateMotionanimateTransformclipPathfeBlendfeColorMatrixfeComponentTransferfeCompositefeConvolveMatrixfeDiffuseLightingfeDisplacementMapfeDistantLightfeFloodfeFuncAfeFuncBfeFuncGfeFuncRfeGaussianBlurfeImagefeMergefeMergeNodefeMorphologyfeOffsetfePointLightfeSpecularLightingfeSpotLightfeTilefeTurbulenceforeignObjectglyphReflinearGradientradialGradienttextPath)$altglyphaltglyphdefaltglyphitemanimatecoloranimatemotionanimatetransformclippathfeblendfecolormatrixfecomponenttransferfecompositefeconvolvematrixfediffuselightingfedisplacementmapfedistantlightfefloodfefuncafefuncbfefuncgfefuncrfegaussianblurfeimagefemergefemergenodefemorphologyfeoffsetfepointlightfespecularlightingfespotlightfetilefeturbulenceforeignobjectglyphreflineargradientradialgradienttextpathrA   r(   )rC   r   replacementsr(   r(   r)   adjustSVGTagNames|	  sL    z:getPhases.<locals>.InForeignContentPhase.adjustSVGTagNamesc                sL   |d dkrd|d< n&| j jr<tdd |d D r<d| j _ j| | d S )Nr{   r  u   �c             s   s   | ]}|t kV  qd S )N)r   )r@   r  r(   r(   r)   r   	  s    zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rL   rf   r  r   )rC   r   )r   r(   r)   r   	  s    
z:getPhases.<locals>.InForeignContentPhase.processCharactersc             S   s6  | j jd }|d | jksD|d dkrt|d j tdddg@ r| jjdd|d i xR| j jd j| j jkr| jj	| j jd  r| jj
| j jd  r| j jj  q\W |S |jtd	 kr| jj| n$|jtd
 kr| j| | jj| | jj| |j|d< | j j| |d r2| j jj  d|d< d S )Nr   rA   r  r{   colorfacesizez*unexpected-html-element-in-foreign-contentrj   r   rn   r   Tr   r   r   r   r   )r?   r   breakoutElementssetkeysrL   r   rn   r   rr   rs   rM  r   r   r  r   r   r   )rC   r   r   r(   r(   r)   r   	  s.    



z8getPhases.<locals>.InForeignContentPhase.processStartTagc             S   s   t | jjd }| jjd }|jjt|d krF| jjdd|d i x|jjt|d kr| jj| jj	d kr| jjj
  | jjj| j_x | jjj |kr| jjstqW d }P |d8 }| jj| }|j| jjkrqHqH| jjj|}P qHW |S )Nr   rA   zunexpected-end-tagr  r   )r   r?   r   rA   rp   r   rL   r   ra   rI   r!  r   rM  r   rn   r   r   )rC   r   	nodeIndexr   r   r(   r(   r)   r   	  s(    z6getPhases.<locals>.InForeignContentPhase.processEndTagN)
r:   r;   r<   r   r  rK   r  r   r   r   r(   )r   r(   r)   InForeignContentPhaseo	  s   


)r  c                   sP   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )z!getPhases.<locals>.AfterBodyPhasec                sN    j | || tjd| jfg| _| j| j_tjd| jfg| _| j	| j_d S )Nr   )
rK   r   r2  r   r   r4  r5  r  r   r7  )rC   rL   r?   )r   r(   r)   rK   	  s    
z*getPhases.<locals>.AfterBodyPhase.__init__c             S   s   d S )Nr(   )rC   r(   r(   r)   r   	  s    z,getPhases.<locals>.AfterBodyPhase.processEOFc             S   s   | j j|| j jd  d S )Nr   )r?   r   r   )rC   r   r(   r(   r)   r   	  s    z0getPhases.<locals>.AfterBodyPhase.processCommentc             S   s    | j jd | j jd | j _|S )Nzunexpected-char-after-bodyr   )rL   r   rI   ra   )rC   r   r(   r(   r)   r   	  s    z3getPhases.<locals>.AfterBodyPhase.processCharactersc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r   	  s    z.getPhases.<locals>.AfterBodyPhase.startTagHtmlc             S   s*   | j jdd|d i | j jd | j _|S )Nzunexpected-start-tag-after-bodyrA   r   )rL   r   rI   ra   )rC   r   r(   r(   r)   r4  	  s    z/getPhases.<locals>.AfterBodyPhase.startTagOtherc             S   s*   | j jr| j jd n| j jd | j _d S )Nz'unexpected-end-tag-after-body-innerhtmlafterAfterBody)rL   rT   r   rI   ra   )rC   rA   r(   r(   r)   r  
  s    z,getPhases.<locals>.AfterBodyPhase.endTagHtmlc             S   s*   | j jdd|d i | j jd | j _|S )Nzunexpected-end-tag-after-bodyrA   r   )rL   r   rI   ra   )rC   r   r(   r(   r)   r7  
  s    z-getPhases.<locals>.AfterBodyPhase.endTagOtherN)r:   r;   r<   rK   r   r   r   r   r4  r  r7  r(   )r   r(   r)   AfterBodyPhase	  s   r  c                   sX   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )z"getPhases.<locals>.InFramesetPhasec                sf    j | || tjd| jfd| jfd| jfd| jfg| _| j| j_	tjd| j
fg| _| j| j_	d S )Nr   r   r  r<  )rK   r   r2  r   r_  startTagFramestartTagNoframesr   r4  r5  endTagFramesetr   r7  )rC   rL   r?   )r   r(   r)   rK   
  s    
z+getPhases.<locals>.InFramesetPhase.__init__c             S   s0   | j jd jdkr | jjd n| jjs,td S )Nr   r   zeof-in-framesetr   )r?   r   rA   rL   r   rT   r   )rC   r(   r(   r)   r   #
  s    z-getPhases.<locals>.InFramesetPhase.processEOFc             S   s   | j jd d S )Nzunexpected-char-in-frameset)rL   r   )rC   r   r(   r(   r)   r   )
  s    z4getPhases.<locals>.InFramesetPhase.processCharactersc             S   s   | j j| d S )N)r?   r   )rC   r   r(   r(   r)   r_  ,
  s    z3getPhases.<locals>.InFramesetPhase.startTagFramesetc             S   s   | j j| | j jj  d S )N)r?   r   r   rM  )rC   r   r(   r(   r)   r  /
  s    z0getPhases.<locals>.InFramesetPhase.startTagFramec             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r  3
  s    z3getPhases.<locals>.InFramesetPhase.startTagNoframesc             S   s   | j jdd|d i d S )Nz unexpected-start-tag-in-framesetrA   )rL   r   )rC   r   r(   r(   r)   r4  6
  s    z0getPhases.<locals>.InFramesetPhase.startTagOtherc             S   s\   | j jd jdkr | jjd n| j jj  | jj rX| j jd jdkrX| jjd | j_d S )Nr   r   z)unexpected-frameset-in-frameset-innerhtmlr   afterFramesetr   r   )	r?   r   rA   rL   r   rM  rT   rI   ra   )rC   r   r(   r(   r)   r  :
  s    
z1getPhases.<locals>.InFramesetPhase.endTagFramesetc             S   s   | j jdd|d i d S )Nzunexpected-end-tag-in-framesetrA   )rL   r   )rC   r   r(   r(   r)   r7  F
  s    z.getPhases.<locals>.InFramesetPhase.endTagOtherN)r:   r;   r<   rK   r   r   r_  r  r  r4  r  r7  r(   )r   r(   r)   InFramesetPhase
  s   r  c                   sH   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )z%getPhases.<locals>.AfterFramesetPhasec                sV    j | || tjd| jfd| jfg| _| j| j_tjd| jfg| _	| j
| j	_d S )Nr   r<  )rK   r   r2  r   r  r   r4  r5  r  r   r7  )rC   rL   r?   )r   r(   r)   rK   L
  s    
z.getPhases.<locals>.AfterFramesetPhase.__init__c             S   s   d S )Nr(   )rC   r(   r(   r)   r   Z
  s    z0getPhases.<locals>.AfterFramesetPhase.processEOFc             S   s   | j jd d S )Nzunexpected-char-after-frameset)rL   r   )rC   r   r(   r(   r)   r   ^
  s    z7getPhases.<locals>.AfterFramesetPhase.processCharactersc             S   s   | j jd j|S )Nr8  )rL   rI   r   )rC   r   r(   r(   r)   r  a
  s    z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc             S   s   | j jdd|d i d S )Nz#unexpected-start-tag-after-framesetrA   )rL   r   )rC   r   r(   r(   r)   r4  d
  s    z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc             S   s   | j jd | j _d S )NafterAfterFrameset)rL   rI   ra   )rC   r   r(   r(   r)   r  h
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc             S   s   | j jdd|d i d S )Nz!unexpected-end-tag-after-framesetrA   )rL   r   )rC   r   r(   r(   r)   r7  k
  s    z1getPhases.<locals>.AfterFramesetPhase.endTagOtherN)
r:   r;   r<   rK   r   r   r  r4  r  r7  r(   )r   r(   r)   AfterFramesetPhaseJ
  s   r  c                   sP   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )z&getPhases.<locals>.AfterAfterBodyPhasec                s0    j | || tjd| jfg| _| j| j_d S )Nr   )rK   r   r2  r   r   r4  r5  )rC   rL   r?   )r   r(   r)   rK   p
  s    z/getPhases.<locals>.AfterAfterBodyPhase.__init__c             S   s   d S )Nr(   )rC   r(   r(   r)   r   x
  s    z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc             S   s   | j j|| j j d S )N)r?   r   r   )rC   r   r(   r(   r)   r   {
  s    z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r   ~
  s    z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharactersc             S   s    | j jd | j jd | j _|S )Nzexpected-eof-but-got-charr   )rL   r   rI   ra   )rC   r   r(   r(   r)   r   
  s    z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r   
  s    z3getPhases.<locals>.AfterAfterBodyPhase.startTagHtmlc             S   s*   | j jdd|d i | j jd | j _|S )Nzexpected-eof-but-got-start-tagrA   r   )rL   r   rI   ra   )rC   r   r(   r(   r)   r4  
  s    z4getPhases.<locals>.AfterAfterBodyPhase.startTagOtherc             S   s*   | j jdd|d i | j jd | j _|S )Nzexpected-eof-but-got-end-tagrA   r   )rL   r   rI   ra   )rC   r   r(   r(   r)   r   
  s    z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagN)r:   r;   r<   rK   r   r   r   r   r   r4  r   r(   )r   r(   r)   AfterAfterBodyPhaseo
  s   r  c                   sX   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )z*getPhases.<locals>.AfterAfterFramesetPhasec                s8    j | || tjd| jfd| jfg| _| j| j_d S )Nr   r<  )rK   r   r2  r   startTagNoFramesr   r4  r5  )rC   rL   r?   )r   r(   r)   rK   
  s
    z3getPhases.<locals>.AfterAfterFramesetPhase.__init__c             S   s   d S )Nr(   )rC   r(   r(   r)   r   
  s    z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc             S   s   | j j|| j j d S )N)r?   r   r   )rC   r   r(   r(   r)   r   
  s    z9getPhases.<locals>.AfterAfterFramesetPhase.processCommentc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r   
  s    zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc             S   s   | j jd d S )Nzexpected-eof-but-got-char)rL   r   )rC   r   r(   r(   r)   r   
  s    z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc             S   s   | j jd j|S )Nr   )rL   rI   r   )rC   r   r(   r(   r)   r   
  s    z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc             S   s   | j jd j|S )Nr8  )rL   rI   r   )rC   r   r(   r(   r)   r  
  s    z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc             S   s   | j jdd|d i d S )Nzexpected-eof-but-got-start-tagrA   )rL   r   )rC   r   r(   r(   r)   r4  
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc             S   s   | j jdd|d i d S )Nzexpected-eof-but-got-end-tagrA   )rL   r   )rC   r   r(   r(   r)   r   
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagN)r:   r;   r<   rK   r   r   r   r   r   r  r4  r   r(   )r   r(   r)   AfterAfterFramesetPhase
  s   	r  )rX   rW   r   r8  rV  rX  r   r   r   r  r   r   r   r   r   r   r  r   r  r   r  r  r  )r   )rJ   rZ   r   r-  r1  r:  rY  r]  rb  r  r  r  r"  r'  r+  r1  r5  r9  r@  rA  r  r  r  r  r  r  r(   )r   r)   rH     sp    ) #.g@C     X! -GBbYLd's/9%&&rH   c                s>   t | d t  @ }|r:t fdd| d j D | d< d S )Nr{   c             3   s"   | ]\}} j |||fV  qd S )N)r   )r@   kv)r  r(   r)   r   
  s   z$adjust_attributes.<locals>.<genexpr>)r   r   r-   )r   r  needs_adjustmentr(   )r  r)   r   
  s    r   rw   Fc             C   s   |d kri }t | | ||dS )N)r1   rA   r{   r   )r   )rA   r1   ro   r   r(   r(   r)   r/  
  s    
r/  c               @   s   e Zd ZdZdS )rz   zError in parsed documentN)r:   r;   r<   r   r(   r(   r(   r)   rz   
  s   rz   )r   T)r*   r   T)rw   NF).
__future__r   r   r   pip._vendor.sixr   r   r/   collectionsr   r   r	   r
   r   Ztreebuilders.baser   r   	constantsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r,   r>   r  r!   memoizerH   r   r/  	Exceptionrz   r(   r(   r(   r)   <module>   sL   H

  G                  L 
