3
(h                @   sF  d dl mZmZmZ d dlmZmZmZ d dlZyd dl	m
Z
 W n  ek
r`   d dlm
Z
 Y nX 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/Z0dS )$    )absolute_importdivisionunicode_literals)with_metaclassviewkeysPY3N)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 )z.Parse a string or file-like object into a tree)namespaceHTMLElements)r   getTreeBuilder
HTMLParserparse)doctreebuilderr    kwargstbp r)   :/tmp/pip-install-q3hcpn_q/html5lib/html5lib/html5parser.pyr#      s    
r#   divc             K   s,   t j|}t||d}|j| fd|i|S )N)r    	container)r   r!   r"   parseFragment)r$   r,   r%   r    r&   r'   r(   r)   r)   r*   r-   &   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*   r3   .   s
    z5method_decorator_metaclass.<locals>.Decorated.__new__N)__name__
__module____qualname__r3   r)   )r:   r)   r*   	Decorated-   s   r>   )r2   )r:   r>   r)   )r:   r*   method_decorator_metaclass,   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"   zZHTML parser. Generates a tree structure from a stream of (possibly
        malformed) HTMLNFTc                sL   | _ |dkrtjd}|| _g  _t fddt|j D  _dS )a  
        strict - raise an exception when a parse error is encountered

        tree - a treebuilder class controlling the type of tree that will be
        returned. Built in treebuilders can be accessed through
        html5lib.treebuilders.getTreeBuilder(treeType)
        Nr   c                s    g | ]\}}||  j fqS r)   )tree).0namecls)selfr)   r*   
<listcomp>M   s    z'HTMLParser.__init__.<locals>.<listcomp>)	strictr   r!   r@   errorsdict	getPhasesr.   phases)rD   r@   rF   r    debugr)   )rD   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   )rD   stream	innerHTMLr,   rO   r&   r)   r)   r*   _parseP   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@   rR   firstStartTagrG   log
compatModerN   r,   lowerrU   r   rQ   rcdataStatestater   rawtextStateplaintextStaterJ   phaseinsertHtmlElementresetInsertionMode	lastPhasebeforeRCDataPhase
framesetOK)rD   r)   r)   r*   rR   ^   s*    





zHTMLParser.resetc             C   s   t | dsdS | jjjd jS )zThe name of the character encoding
        that was used to decode the input stream,
        or :obj:`None` if that is not determined yet.

        rQ   Nr   )hasattrrQ   rT   charEncodingrB   )rD   r)   r)   r*   documentEncoding   s    
zHTMLParser.documentEncodingc             C   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)rm   rn   )rB   	namespacer   
attributes	translater   r   )rD   elementr)   r)   r*   isHTMLIntegrationPoint   s    


z!HTMLParser.isHTMLIntegrationPointc             C   s   |j |jftkS )N)ro   rB   r   )rD   rr   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	   r2   datadatavarsr   rB   mglyph
malignmarkrk   zannotation-xmlsvginForeignContentselfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   normalizedTokensr@   openElementsro   rB   
parseErrorgetlendefaultNamespacert   	frozensetr   rs   rb   rJ   processCharactersprocessSpaceCharactersprocessStartTagprocessEndTagprocessCommentprocessDoctypeappend
processEOFAssertionError)rD   CharactersTokenSpaceCharactersTokenStartTagTokenEndTagTokenCommentTokenDoctypeTokenParseErrorTokentoken
prev_token	new_tokencurrentNodecurrentNodeNamespacecurrentNodeNamer2   rb   	reprocessrJ   r)   r)   r*   rS      sp    










zHTMLParser.mainLoopc             c   s    x| j D ]}| j|V  qW d S )N)rQ   normalizeToken)rD   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

        stream - a filelike 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)

        scripting - treat noscript elements as if javascript was turned on
        FN)rV   r@   getDocument)rD   rT   argsr&   r)   r)   r*   r#      s    zHTMLParser.parsec             O   s   | j |df|| | jj S )a2  Parse a HTML fragment into a well-formed tree fragment

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

        stream - a filelike 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)

        scripting - treat noscript elements as if javascript was turned on
        T)rV   r@   getFragment)rD   rT   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)rG   r   rQ   rT   positionrF   r{   r   )rD   	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 )z3 HTML5 specific normalizations to the token stream r2   rw   r|   Nr	   r   )r   r   r   update)rD   r   rawr)   r)   r*   r     s    zHTMLParser.normalizeTokenc             C   s   t |t d S )N)adjust_attributesr   )rD   r   r)   r)   r*   r     s    z!HTMLParser.adjustMathMLAttributesc             C   s   t |t d S )N)r   r   )rD   r   r)   r)   r*   r     s    zHTMLParser.adjustSVGAttributesc             C   s   t |t d S )N)r   adjustForeignAttributesMap)rD   r   r)   r)   r*   r     s    z"HTMLParser.adjustForeignAttributesc             C   s   | j j  d S )N)rM   rb   )rD   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   rB   rU   r   ro   r   rJ   rb   )rD   lastnewModesnodenodeName	new_phaser)   r)   r*   rd   !  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 )zYGeneric RCDATA/RAWTEXT Parsing algorithm
        contentType - RCDATA or RAWTEXT
        RAWTEXTRCDATAtextN)r   r   )
r   r@   insertElementrQ   r`   r_   r^   rb   originalPhaserJ   )rD   r   contentTyper)   r)   r*   parseRCDataRawtextM  s    zHTMLParser.parseRCDataRawtext)NFTF)Fr+   F)r   N)r;   r<   r=   __doc__rL   rV   rR   propertyrj   rs   rt   rS   r   r#   r-   r   r   r   r   r   r   rd   r   r)   r)   r)   r*   r"   8   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)   )rA   keyvaluer)   r)   r*   	<genexpr>c  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   r2   rB   )r;   
startswithr   r   rM   r[   r   rQ   r_   rb   	__class__)rD   r   r&   r   info)r:   
type_namesr)   r*   wrappedf  s    
z'getPhases.<locals>.log.<locals>.wrapped)rH   r   r.   )r:   r   r)   )r:   r   r*   r[   a  s    zgetPhases.<locals>.logc             S   s   | rt |S tS d S )N)r?   r2   )use_metaclassmetaclass_funcr)   r)   r*   getMetaclassz  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)rM   r@   )rD   rM   r@   r)   r)   r*   rL     s    z!getPhases.<locals>.Phase.__init__c             S   s   t d S )N)NotImplementedError)rD   r)   r)   r*   r     s    z#getPhases.<locals>.Phase.processEOFc             S   s   | j j|| j jd  d S )Nr	   r   )r@   insertCommentr   )rD   r   r)   r)   r*   r     s    z'getPhases.<locals>.Phase.processCommentc             S   s   | j jd d S )Nzunexpected-doctype)rM   r   )rD   r   r)   r)   r*   r     s    z'getPhases.<locals>.Phase.processDoctypec             S   s   | j j|d  d S )Nr|   )r@   
insertText)rD   r   r)   r)   r*   r     s    z*getPhases.<locals>.Phase.processCharactersc             S   s   | j j|d  d S )Nr|   )r@   r   )rD   r   r)   r)   r*   r     s    z/getPhases.<locals>.Phase.processSpaceCharactersc             S   s   | j |d  |S )NrB   )startTagHandler)rD   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 )NrB   r   znon-html-rootr|   r   F)rM   rZ   r   r.   r@   r   rp   )rD   r   attrr   r)   r)   r*   startTagHtml  s    z%getPhases.<locals>.Phase.startTagHtmlc             S   s   | j |d  |S )NrB   )endTagHandler)rD   r   r)   r)   r*   r     s    z&getPhases.<locals>.Phase.processEndTagN)r;   r<   r=   r   rL   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)   )rD   r   r)   r)   r*   r     s    z6getPhases.<locals>.InitialPhase.processSpaceCharactersc             S   s   | j j|| j j d S )N)r@   r   document)rD   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 )ONrB   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 quirksrX   )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(  )rM   r   r@   insertDoctyperq   r   r   r]   r\   rJ   rb   )rD   r   rB   r   r   r   r)   r)   r*   r     s    
                                                        

  
z.getPhases.<locals>.InitialPhase.processDoctypec             S   s   d| j _| j jd | j _d S )Nr)  rX   )rM   r\   rJ   rb   )rD   r)   r)   r*   anythingElse  s    z,getPhases.<locals>.InitialPhase.anythingElsec             S   s   | j jd | j  |S )Nzexpected-doctype-but-got-chars)rM   r   r-  )rD   r   r)   r)   r*   r     s    z1getPhases.<locals>.InitialPhase.processCharactersc             S   s"   | j jdd|d i | j  |S )Nz"expected-doctype-but-got-start-tagrB   )rM   r   r-  )rD   r   r)   r)   r*   r     s    z/getPhases.<locals>.InitialPhase.processStartTagc             S   s"   | j jdd|d i | j  |S )Nz expected-doctype-but-got-end-tagrB   )rM   r   r-  )rD   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)rM   r   r-  )rD   r)   r)   r*   r   %  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   rw   r   )r@   
insertRootimpliedTagTokenrM   rJ   rb   )rD   r)   r)   r*   rc   ,  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc             S   s   | j   dS )NT)rc   )rD   r)   r)   r*   r   1  s    z-getPhases.<locals>.BeforeHtmlPhase.processEOFc             S   s   | j j|| j j d S )N)r@   r   r   )rD   r   r)   r)   r*   r   5  s    z1getPhases.<locals>.BeforeHtmlPhase.processCommentc             S   s   d S )Nr)   )rD   r   r)   r)   r*   r   8  s    z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc             S   s   | j   |S )N)rc   )rD   r   r)   r)   r*   r   ;  s    z4getPhases.<locals>.BeforeHtmlPhase.processCharactersc             S   s    |d dkrd| j _| j  |S )NrB   r   T)rM   rZ   rc   )rD   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 )NrB   r   r   r   brzunexpected-end-tag-before-html)r   r   r   r1  )rM   r   rc   )rD   r   r)   r)   r*   r   E  s
    z0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)
r;   r<   r=   rc   r   r   r   r   r   r   r)   r)   r)   r*   BeforeHtmlPhase*  s   r2  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   r1  )r   r   r   r1  )rL   r   MethodDispatcherr   startTagHeadr   startTagOtherdefaultendTagImplyHeadr   endTagOther)rD   rM   r@   )r   r)   r*   rL   N  s    
z+getPhases.<locals>.BeforeHeadPhase.__init__c             S   s   | j tdd dS )Nr   rw   T)r4  r0  )rD   r)   r)   r*   r   \  s    z-getPhases.<locals>.BeforeHeadPhase.processEOFc             S   s   d S )Nr)   )rD   r   r)   r)   r*   r   `  s    z9getPhases.<locals>.BeforeHeadPhase.processSpaceCharactersc             S   s   | j tdd |S )Nr   rw   )r4  r0  )rD   r   r)   r)   r*   r   c  s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r   g  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   headPointerrM   rJ   rb   )rD   r   r)   r)   r*   r4  j  s    z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc             S   s   | j tdd |S )Nr   rw   )r4  r0  )rD   r   r)   r)   r*   r5  o  s    z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc             S   s   | j tdd |S )Nr   rw   )r4  r0  )rD   r   r)   r)   r*   r7  s  s    z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc             S   s   | j jdd|d i d S )Nzend-tag-after-implied-rootrB   )rM   r   )rD   r   r)   r)   r*   r8  w  s    z.getPhases.<locals>.BeforeHeadPhase.endTagOtherN)r;   r<   r=   rL   r   r   r   r   r4  r5  r7  r8  r)   )r   r)   r*   BeforeHeadPhaseM  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linkr4   r   r1  r   )r=  r>  )rA  rB  rC  rD  rE  )r1  r   r   )rL   r   r3  r   startTagTitlestartTagNoFramesStylestartTagNoscriptstartTagScriptstartTagBaseLinkCommandstartTagMetar4  r   r5  r6  
endTagHeadendTagHtmlBodyBrr   r8  )rD   rM   r@   )r   r)   r*   rL   |  s     
z'getPhases.<locals>.InHeadPhase.__init__c             S   s   | j   dS )NT)r-  )rD   r)   r)   r*   r     s    z)getPhases.<locals>.InHeadPhase.processEOFc             S   s   | j   |S )N)r-  )rD   r   r)   r)   r*   r     s    z0getPhases.<locals>.InHeadPhase.processCharactersc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   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)rM   r   )rD   r   r)   r)   r*   r4    s    z+getPhases.<locals>.InHeadPhase.startTagHeadc             S   s$   | j j| | j jj  d|d< d S )NTr   )r@   r   r   pop)rD   r   r)   r)   r*   rJ    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   rN  rM   rQ   rT   ri   changeEncodingr]   r
   EncodingBytesencodeContentAttrParserr#   )rD   r   rp   r|   rM   codecr)   r)   r*   rK    s    
z+getPhases.<locals>.InHeadPhase.startTagMetac             S   s   | j j|d d S )Nr   )rM   r   )rD   r   r)   r)   r*   rF    s    z,getPhases.<locals>.InHeadPhase.startTagTitlec             S   s   | j j|d d S )Nr   )rM   r   )rD   r   r)   r)   r*   rG    s    z4getPhases.<locals>.InHeadPhase.startTagNoFramesStylec             S   s8   | j jr| j j|d n| jj| | j jd | j _d S )Nr   inHeadNoscript)rM   rO   r   r@   r   rJ   rb   )rD   r   r)   r)   r*   rH    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   rM   rQ   scriptDataStater_   rb   r   rJ   )rD   r   r)   r)   r*   rI    s    z-getPhases.<locals>.InHeadPhase.startTagScriptc             S   s   | j   |S )N)r-  )rD   r   r)   r)   r*   r5    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)rM   r@   r   rN  rB   r   rJ   rb   )rD   r   r   r)   r)   r*   rL    s    z)getPhases.<locals>.InHeadPhase.endTagHeadc             S   s   | j   |S )N)r-  )rD   r   r)   r)   r*   rM    s    z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc             S   s   | j jdd|d i d S )Nzunexpected-end-tagrB   )rM   r   )rD   r   r)   r)   r*   r8    s    z*getPhases.<locals>.InHeadPhase.endTagOtherc             S   s   | j td d S )Nr   )rL  r0  )rD   r)   r)   r*   r-    s    z+getPhases.<locals>.InHeadPhase.anythingElseN)r;   r<   r=   rL   r   r   r   r4  rJ  rK  rF  rG  rH  rI  r5  rL  rM  r8  r-  r)   )r   r)   r*   InHeadPhase{  s    rZ  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   rB  rC  rE  r4   r=  r>  r   r?  r1  )rB  rC  rE  r4   r=  r>  )r   r?  )rL   r   r3  r   rJ  startTagHeadNoscriptr   r5  r6  endTagNoscriptendTagBrr   r8  )rD   rM   r@   )r   r)   r*   rL     s    
z/getPhases.<locals>.InHeadNoscriptPhase.__init__c             S   s   | j jd | j  dS )Nzeof-in-head-noscriptT)rM   r   r-  )rD   r)   r)   r*   r     s    z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc             S   s   | j jd j|S )Nr9  )rM   rJ   r   )rD   r   r)   r)   r*   r     s    z5getPhases.<locals>.InHeadNoscriptPhase.processCommentc             S   s   | j jd | j  |S )Nzchar-in-head-noscript)rM   r   r-  )rD   r   r)   r)   r*   r     s    z8getPhases.<locals>.InHeadNoscriptPhase.processCharactersc             S   s   | j jd j|S )Nr9  )rM   rJ   r   )rD   r   r)   r)   r*   r      s    z=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharactersc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r     s    z3getPhases.<locals>.InHeadNoscriptPhase.startTagHtmlc             S   s   | j jd j|S )Nr9  )rM   rJ   r   )rD   r   r)   r)   r*   rJ    s    z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc             S   s   | j jdd|d i d S )Nzunexpected-start-tagrB   )rM   r   )rD   r   r)   r)   r*   r[  	  s    z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc             S   s"   | j jdd|d i | j  |S )Nzunexpected-inhead-noscript-tagrB   )rM   r   r-  )rD   r   r)   r)   r*   r5    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 %sr9  )rM   r@   r   rN  rB   r   rJ   rb   )rD   r   r   r)   r)   r*   r\    s    z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc             S   s"   | j jdd|d i | j  |S )Nzunexpected-inhead-noscript-tagrB   )rM   r   r-  )rD   r   r)   r)   r*   r]    s    z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc             S   s   | j jdd|d i d S )Nzunexpected-end-tagrB   )rM   r   )rD   r   r)   r)   r*   r8    s    z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc             S   s   | j td d S )Nr?  )r\  r0  )rD   r)   r)   r*   r-    s    z3getPhases.<locals>.InHeadNoscriptPhase.anythingElseN)r;   r<   r=   rL   r   r   r   r   r   rJ  r[  r5  r\  r]  r8  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   rA  rB  rC  rE  r4   r=  r@  r>  r<  r   r1  )	rA  rB  rC  rE  r4   r=  r@  r>  r<  )r   r   r1  )rL   r   r3  r   startTagBodystartTagFramesetstartTagFromHeadr4  r   r5  r6  rM  r   r8  )rD   rM   r@   )r   r)   r*   rL   #  s     
z*getPhases.<locals>.AfterHeadPhase.__init__c             S   s   | j   dS )NT)r-  )rD   r)   r)   r*   r   4  s    z,getPhases.<locals>.AfterHeadPhase.processEOFc             S   s   | j   |S )N)r-  )rD   r   r)   r)   r*   r   8  s    z3getPhases.<locals>.AfterHeadPhase.processCharactersc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r   <  s    z.getPhases.<locals>.AfterHeadPhase.startTagHtmlc             S   s(   d| j _| jj| | j jd | j _d S )NFr   )rM   rg   r@   r   rJ   rb   )rD   r   r)   r)   r*   r_  ?  s    z.getPhases.<locals>.AfterHeadPhase.startTagBodyc             S   s    | j j| | jjd | j_d S )Nr   )r@   r   rM   rJ   rb   )rD   r   r)   r)   r*   r`  D  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-headrB   r9  r	   r   r   )
rM   r   r@   r   r   r:  rJ   r   rB   remove)rD   r   r   r)   r)   r*   ra  H  s    
z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc             S   s   | j jdd|d i d S )Nzunexpected-start-tagrB   )rM   r   )rD   r   r)   r)   r*   r4  R  s    z.getPhases.<locals>.AfterHeadPhase.startTagHeadc             S   s   | j   |S )N)r-  )rD   r   r)   r)   r*   r5  U  s    z/getPhases.<locals>.AfterHeadPhase.startTagOtherc             S   s   | j   |S )N)r-  )rD   r   r)   r)   r*   rM  Y  s    z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc             S   s   | j jdd|d i d S )Nzunexpected-end-tagrB   )rM   r   )rD   r   r)   r)   r*   r8  ]  s    z-getPhases.<locals>.AfterHeadPhase.endTagOtherc             S   s.   | j jtdd | jjd | j_d| j_d S )Nr   rw   r   T)r@   r   r0  rM   rJ   rb   rg   )rD   r)   r)   r*   r-  `  s    z.getPhases.<locals>.AfterHeadPhase.anythingElseN)r;   r<   r=   rL   r   r   r   r_  r`  ra  r4  r5  rM  r8  r-  r)   )r   r)   r*   AfterHeadPhase"  s   
rc  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   rA  rB  rC  rD  rE  r4   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dtrW   abbigcodeemfontissmallstrikestrongttunobrbuttonappletmarqueeobjectxmpr   arear1  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)	rA  rB  rC  rD  rE  r4   r@  r>  r<  )rd  re  rf  rg  rh  ri  rj  r+   rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  r(   rv  rw  rx  )ry  rz  )r|  r}  r~  )r  r  r  r  r  r  r  r  r  r  r  r  )r  r  r  )r  r1  r  r  r  r  )r  r  r  )r  r=  )r  r  )r  r  )r   r  r   r  r   r   r   r   r   r   r   )rd  re  rf  rg  r  rh  ri  r  rj  r+   rk  rl  rm  rn  ro  rp  rq  rz  rr  rs  rt  ru  ry  rv  rw  rx  )r}  r~  r|  )r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r  r  r  )6rL   processSpaceCharactersNonPrer   r   r3  r   startTagProcessInHeadr_  r`  startTagClosePr   startTagHeadingstartTagPreListingstartTagFormstartTagListItemstartTagPlaintext	startTagAstartTagFormattingstartTagNobrstartTagButtonstartTagAppletMarqueeObjectstartTagXmpstartTagTablestartTagVoidFormattingstartTagParamSourcestartTagInput
startTagHrstartTagImagestartTagIsIndexstartTagTextareastartTagIFramerH  startTagRawtextstartTagSelectstartTagRpRtstartTagOptstartTagMathstartTagSvgstartTagMisplacedr   r5  r6  
endTagBody
endTagHtmlendTagBlock
endTagFormendTagPendTagListItemendTagHeadingendTagFormattingendTagAppletMarqueeObjectr]  r   r8  )rD   rM   r@   )r   r)   r*   rL   h  s~           
    z'getPhases.<locals>.InBodyPhase.__init__c             S   s$   |j |j ko"|j|jko"|j|jkS )N)rB   ro   rp   )rD   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   rb  )rD   r   rr   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   rB   rM   r   )rD   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	   ry  rz  r  r   )ry  rz  r  r   )	r  r   r   r@   r   rB   
hasContent#reconstructActiveFormattingElementsr   )rD   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   )rA   charr)   r)   r*   rE     s   zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r@   r  r   rM   rg   any)rD   r   r)   r)   r*   r     s    
z0getPhases.<locals>.InBodyPhase.processCharactersc             S   s   | j j  | j j|d  d S )Nr|   )r@   r  r   )rD   r   r)   r)   r*   r    s    
z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec             S   s   | j jd j|S )Nr9  )rM   rJ   r   )rD   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-tagrB   r   r	   Fr|   )rM   r   r   r@   r   rB   rU   r   rg   r.   rp   )rD   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-tagrB   r   r	   r   r   r   r   )rM   r   r   r@   r   rB   rU   r   rg   parentremoveChildrN  r   rJ   rb   )rD   r   r)   r)   r*   r`    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  r0  r   )rD   r   r)   r)   r*   r  	  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  r0  r   rM   rg   r  r   )rD   r   r)   r)   r*   r    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-tagrB   r{  r(   r  )r  r	   r   )	r@   formPointerrM   r   r  r  r0  r   r   )rD   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}  rB   rx   rd  r+   r(   r  )r  )rd  r+   r(   )rM   rg   reversedr@   r   rB   rb   r   r0  	nameTupler   r  r   )rD   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  r0  r   rM   rQ   ra   r_   )rD   r   r)   r)   r*   r  4  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-tagrB   r   )r@   r  r  r0  r   rB   r   rM   r   rN  r   )rD   r   r)   r)   r*   r  :  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@   !elementInActiveFormattingElementsrM   r   r  r0  r   rb  r  r  r  )rD   r   afeAElementr)   r)   r*   r  B  s    
z(getPhases.<locals>.InBodyPhase.startTagAc             S   s   | j j  | j| d S )N)r@   r  r  )rD   r   r)   r)   r*   r  O  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  rM   r   r   r0  r  )rD   r   r)   r)   r*   r  S  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  rM   r   r   r0  r  r   rg   )rD   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   rM   rg   )rD   r   r)   r)   r*   r  h  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  r0  r  rM   rg   r   )rD   r   r)   r)   r*   r  n  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   )
rM   r\   r@   r  r   r0  r   rg   rJ   rb   )rD   r   r)   r)   r*   r  u  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   rN  rM   rg   )rD   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 )Nr2   r|   hidden)rM   rg   r  rq   r   )rD   r   rg   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   rN  )rD   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  r0  r   r   rN  rM   rg   )rD   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newNamerw   r|   r   )rp   r   )rM   r   r   r0  )rD   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-tagrB   r  actionr|   r{  rw   )rp   r  labelpromptz3This is a searchable index. Enter search keywords: ru   )r2   r|   r  r   )rp   r   )
rM   r   r@   r  r   r0  r   r   copyr   )rD   r   
form_attrsr  rp   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   rM   rQ   r^   r_   r  r   rg   )rD   r   r)   r)   r*   r    s    z/getPhases.<locals>.InBodyPhase.startTagTextareac             S   s   d| j _| j| d S )NF)rM   rg   r  )rD   r   r)   r)   r*   r    s    z-getPhases.<locals>.InBodyPhase.startTagIFramec             S   s"   | j jr| j| n
| j| d S )N)rM   rO   r  r5  )rD   r   r)   r)   r*   rH    s    z/getPhases.<locals>.InBodyPhase.startTagNoscriptc             S   s   | j j|d dS )z8iframe, noembed noframes, noscript(if scripting enabled)r   N)rM   r   )rD   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   rB   rM   rb   r   r0  r  r   )rD   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   rM   rg   rb   rJ   )rD   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   rB   rM   r   r   )rD   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 )Nrk   ro   r   Tr   )	r@   r  rM   r   r   r   r   r   rN  )rD   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   ro   r   Tr   )	r@   r  rM   r   r   r   r   r   rN  )rD   r   r)   r)   r*   r    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-ignoredrB   N)rM   r   )rD   r   r)   r)   r*   r    s    z0getPhases.<locals>.InBodyPhase.startTagMisplacedc             S   s   | j j  | j j| d S )N)r@   r  r   )rD   r   r)   r)   r*   r5    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  rw   zunexpected-end-tagrB   rx   r	   r   )r@   r  r  r0  rM   r   r  r  r   rB   rN  )rD   r   r   r)   r)   r*   r    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  rM   r   r   rB   r   rJ   rb   )rD   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  r0  )rD   r   r)   r)   r*   r  3  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 )NrB   ry  r	   zend-tag-too-earlyr   )
r  r   r@   r  r  r   rB   rM   r   rN  )rD   r   inScoper   r)   r)   r*   r  9  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-tagrB   r{  r	   zend-tag-too-early-ignoredr   )r@   r  r  rM   r   r  r   rb  )rD   r   r   r)   r)   r*   r  G  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 )
NrB   r|  list)r  zunexpected-end-tag)excluder	   zend-tag-too-earlyr   )r@   r  rM   r   r  r   rB   rN  )rD   r   r  r   r)   r)   r*   r  T  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	   rB   zend-tag-too-earlyr   )	r   r@   r  r  r   rB   rM   r   rN  )rD   r   itemr)   r)   r*   r  e  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	   rB   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  rB   r8  rM   r   r  rb  indexr  r   rN  	cloneNoder  r  appendChildr   getTableMisnestedNodePositioninsertBeforereparentChildreninsert)rD   r   outerLoopCounterformattingElementafeIndexfurthestBlockrr   commonAncestorbookmarklastNoder   innerLoopCounterr   cloner  r  r)   r)   r*   r  t  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 )NrB   r	   zend-tag-too-earlyr   )	r@   r  r  r   rB   rM   r   rN  clearActiveFormattingElements)rD   r   rr   r)   r)   r*   r    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-asr1  z
br element)r  r  rw   )rM   r   r@   r  r   r0  r   rN  )rD   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	   rB   )r  zunexpected-end-tagr   r   )	r@   r   rB   r  rM   r   rN  r  r   )rD   r   r   r)   r)   r*   r8  *  s    
z*getPhases.<locals>.InBodyPhase.endTagOtherN)6r;   r<   r=   rL   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  rH  r  r  r  r  r  r  r  r5  r  r  r  r  r  r  r  r  r  r]  r8  r)   )r   r)   r*   InBodyPhasee  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@  )	rL   r   r3  r   r5  r6  endTagScriptr   r8  )rD   rM   r@   )r   r)   r*   rL   9  s    
z%getPhases.<locals>.TextPhase.__init__c             S   s   | j j|d  d S )Nr|   )r@   r   )rD   r   r)   r)   r*   r   A  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-eofrB   r	   Tr   )rM   r   r@   r   rB   rN  r   rb   )rD   r)   r)   r*   r   D  s
    z'getPhases.<locals>.TextPhase.processEOFc             S   s   dst d|d  d S )NFz4Tried to process start tag %s in RCDATA/RAWTEXT moderB   )r   )rD   r   r)   r)   r*   r5  K  s    z*getPhases.<locals>.TextPhase.startTagOtherc             S   s*   | j jj }|jdkst| jj| j_d S )Nr@  )r@   r   rN  rB   r   rM   r   rb   )rD   r   r   r)   r)   r*   r  N  s    z)getPhases.<locals>.TextPhase.endTagScriptc             S   s   | j jj  | jj| j_d S )N)r@   r   rN  rM   r   rb   )rD   r   r)   r)   r*   r8  U  s    z(getPhases.<locals>.TextPhase.endTagOtherN)	r;   r<   r=   rL   r   r   r5  r  r8  r)   )r   r)   r*   	TextPhase8  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  r{  r   )r   r   r   )r   r   r   )r>  r@  )r   r   r  r   r   r   r   r   r   r   r   )rL   r   r3  r   startTagCaptionstartTagColgroupstartTagColstartTagRowGroupstartTagImplyTbodyr  startTagStyleScriptr  r  r   r5  r6  endTagTableendTagIgnorer   r8  )rD   rM   r@   )r   r)   r*   rL   [  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   rB   rN  )rD   r)   r)   r*   clearStackToTableContexts  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   rB   rM   r   rU   r   )rD   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)rM   rb   rJ   r   r   )rD   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  )rM   rb   rJ   r   r   )rD   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@   insertFromTablerM   rJ   r   )rD   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   rM   rJ   rb   )rD   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   rM   rJ   rb   )rD   r   r)   r)   r*   r    s    z0getPhases.<locals>.InTablePhase.startTagColgroupc             S   s   | j tdd |S )Nr   rw   )r  r0  )rD   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   rM   rJ   rb   )rD   r   r)   r)   r*   r    s    z0getPhases.<locals>.InTablePhase.startTagRowGroupc             S   s   | j tdd |S )Nr   rw   )r  r0  )rD   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  )rM   r   rb   r   r0  rU   )rD   r   r)   r)   r*   r    s
    z-getPhases.<locals>.InTablePhase.startTagTablec             S   s   | j jd j|S )Nr9  )rM   rJ   r   )rD   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 )Nr2   r|   r  z unexpected-hidden-input-in-table)	rq   r   rM   r   r@   r   r   rN  r5  )rD   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   )rM   r   r@   r  r   r   rN  )rD   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-voodoorB   Tr   F)rM   r   r@   r  rJ   r   )rD   r   r)   r)   r*   r5    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   rB   rM   r   rN  rd   rU   r   )rD   r   r)   r)   r*   r    s    
z+getPhases.<locals>.InTablePhase.endTagTablec             S   s   | j jdd|d i d S )Nzunexpected-end-tagrB   )rM   r   )rD   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-voodoorB   Tr   F)rM   r   r@   r  rJ   r   )rD   r   r)   r)   r*   r8    s    z+getPhases.<locals>.InTablePhase.endTagOtherN)r;   r<   r=   rL   r  r   r   r   r   r  r  r  r  r  r  r  r  r  r5  r  r  r8  r)   )r   r)   r*   InTablePhaseY  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)rL   r   characterTokens)rD   rM   r@   )r   r)   r*   rL     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)   )rA   r  r)   r)   r*   rE     s    zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c             S   s   g | ]}|t kqS r)   )r   )rA   r  r)   r)   r*   rE     s    ru   )r2   r|   r   )joinr   r  r   rM   rJ   r   r@   )rD   r|   r   r)   r)   r*   flushCharacters  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc             S   s   | j   | j| j_|S )N)r"  r   rM   rb   )rD   r   r)   r)   r*   r     s    
z2getPhases.<locals>.InTableTextPhase.processCommentc             S   s   | j   | j| j_dS )NT)r"  r   rM   rb   )rD   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   )rD   r   r)   r)   r*   r     s    z5getPhases.<locals>.InTableTextPhase.processCharactersc             S   s   | j j| d S )N)r   r   )rD   r   r)   r)   r*   r     s    z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc             S   s   | j   | j| j_|S )N)r"  r   rM   rb   )rD   r   r)   r)   r*   r     s    
z3getPhases.<locals>.InTableTextPhase.processStartTagc             S   s   | j   | j| j_|S )N)r"  r   rM   rb   )rD   r   r)   r)   r*   r     s    
z1getPhases.<locals>.InTableTextPhase.processEndTagN)r;   r<   r=   rL   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   )rL   r   r3  r   startTagTableElementr   r5  r6  endTagCaptionr  r  r   r8  )rD   rM   r@   )r   r)   r*   rL     s     
 z*getPhases.<locals>.InCaptionPhase.__init__c             S   s   | j jddd S )Nr   r   )r  )r@   r  )rD   r)   r)   r*   ignoreEndTagCaption+  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc             S   s   | j jd j  d S )Nr   )rM   rJ   r   )rD   r)   r)   r*   r   .  s    z,getPhases.<locals>.InCaptionPhase.processEOFc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r   1  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc             S   s0   | j j  | j }| j jjtd |s,|S d S )Nr   )rM   r   r&  rb   r   r0  )rD   r   ignoreEndTagr)   r)   r*   r$  4  s
    
z6getPhases.<locals>.InCaptionPhase.startTagTableElementc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r5  <  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   rB   rM   r   rN  r  rJ   rb   rU   r   )rD   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   )rM   r   r&  rb   r   r0  )rD   r   r'  r)   r)   r*   r  Q  s
    
z-getPhases.<locals>.InCaptionPhase.endTagTablec             S   s   | j jdd|d i d S )Nzunexpected-end-tagrB   )rM   r   )rD   r   r)   r)   r*   r  X  s    z.getPhases.<locals>.InCaptionPhase.endTagIgnorec             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r8  [  s    z-getPhases.<locals>.InCaptionPhase.endTagOtherN)r;   r<   r=   rL   r&  r   r   r$  r5  r%  r  r  r8  r)   )r   r)   r*   InCaptionPhase  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   )rL   r   r3  r   r  r   r5  r6  endTagColgroup	endTagColr   r8  )rD   rM   r@   )r   r)   r*   rL   a  s    
z.getPhases.<locals>.InColumnGroupPhase.__init__c             S   s   | j jd jdkS )Nr	   r   r   )r@   r   rB   )rD   r)   r)   r*   ignoreEndTagColgroupp  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   rB   rM   rU   r   r+  r)  r0  )rD   r'  r)   r)   r*   r   s  s    z0getPhases.<locals>.InColumnGroupPhase.processEOFc             S   s"   | j  }| jtd |s|S d S )Nr   )r+  r)  r0  )rD   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   rN  )rD   r   r)   r)   r*   r    s    z1getPhases.<locals>.InColumnGroupPhase.startTagColc             S   s"   | j  }| jtd |s|S d S )Nr   )r+  r)  r0  )rD   r   r'  r)   r)   r*   r5    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+  rM   rU   r   r   r@   r   rN  rJ   rb   )rD   r   r)   r)   r*   r)    s
    z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc             S   s   | j jdddi d S )Nz
no-end-tagrB   r  )rM   r   )rD   r   r)   r)   r*   r*    s    z/getPhases.<locals>.InColumnGroupPhase.endTagColc             S   s"   | j  }| jtd |s|S d S )Nr   )r+  r)  r0  )rD   r   r'  r)   r)   r*   r8    s    z1getPhases.<locals>.InColumnGroupPhase.endTagOtherN)r;   r<   r=   rL   r+  r   r   r  r5  r)  r*  r8  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   )rL   r   r3  r   
startTagTrstartTagTableCellstartTagTableOtherr   r5  r6  endTagTableRowGroupr  r  r   r8  )rD   rM   r@   )r   r)   r*   rL     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   rB   rN  rM   rU   r   )rD   r)   r)   r*   clearStackToTableBodyContext  s
    z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc             S   s   | j jd j  d S )Nr   )rM   rJ   r   )rD   r)   r)   r*   r     s    z.getPhases.<locals>.InTableBodyPhase.processEOFc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r     s    z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r     s    z5getPhases.<locals>.InTableBodyPhase.processCharactersc             S   s(   | j   | jj| | jjd | j_d S )Nr   )r1  r@   r   rM   rJ   rb   )rD   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-bodyrB   r   rw   )rM   r   r-  r0  )rD   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  r1  r0  r0  r   rB   rM   rU   r   r   )rD   r   r)   r)   r*   r/    s    z6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r5    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 )NrB   r   )r  r   z unexpected-end-tag-in-table-body)	r@   r  r1  r   rN  rM   rJ   rb   r   )rD   r   r)   r)   r*   r0    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  r1  r0  r0  r   rB   rM   rU   r   r   )rD   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-bodyrB   )rM   r   )rD   r   r)   r)   r*   r    s    z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r8    s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherN)r;   r<   r=   rL   r1  r   r   r   r-  r.  r/  r5  r0  r  r  r8  r)   )r   r)   r*   InTableBodyPhase  s   
	r2  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   )rL   r   r3  r   r.  r/  r   r5  r6  endTagTrr  r0  r  r   r8  )rD   rM   r@   )r   r)   r*   rL     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-rowrB   r   )r   r   r   )r@   r   rB   rM   r   rN  )rD   r)   r)   r*   clearStackToTableRowContext  s    z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc             S   s   | j jddd S )Nr   r   )r  )r@   r  )rD   r)   r)   r*   ignoreEndTagTr  s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc             S   s   | j jd j  d S )Nr   )rM   rJ   r   )rD   r)   r)   r*   r   "  s    z(getPhases.<locals>.InRowPhase.processEOFc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r   %  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r   (  s    z/getPhases.<locals>.InRowPhase.processCharactersc             S   s6   | j   | jj| | jjd | j_| jjjt d S )Nr   )	r4  r@   r   rM   rJ   rb   r  r   r   )rD   r   r)   r)   r*   r.  +  s    z/getPhases.<locals>.InRowPhase.startTagTableCellc             S   s"   | j  }| jtd |s|S d S )Nr   )r5  r3  r0  )rD   r   r'  r)   r)   r*   r/  1  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r5  8  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   )r5  r4  r@   r   rN  rM   rJ   rb   rU   r   r   )rD   r   r)   r)   r*   r3  ;  s    z&getPhases.<locals>.InRowPhase.endTagTrc             S   s"   | j  }| jtd |s|S d S )Nr   )r5  r3  r0  )rD   r   r'  r)   r)   r*   r  E  s    z)getPhases.<locals>.InRowPhase.endTagTablec             S   s4   | j j|d ddr&| jtd |S | jj  d S )NrB   r   )r  r   )r@   r  r3  r0  rM   r   )rD   r   r)   r)   r*   r0  M  s    z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc             S   s   | j jdd|d i d S )Nzunexpected-end-tag-in-table-rowrB   )rM   r   )rD   r   r)   r)   r*   r  T  s    z*getPhases.<locals>.InRowPhase.endTagIgnorec             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r8  X  s    z)getPhases.<locals>.InRowPhase.endTagOtherN)r;   r<   r=   rL   r4  r5  r   r   r   r.  r/  r5  r3  r  r0  r  r8  r)   )r   r)   r*   
InRowPhase  s   
r6  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   )rL   r   r3  r   r/  r   r5  r6  endTagTableCellr  endTagImplyr   r8  )rD   rM   r@   )r   r)   r*   rL   ]  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  r7  r0  )rD   r)   r)   r*   	closeCelln  s    z(getPhases.<locals>.InCellPhase.closeCellc             S   s   | j jd j  d S )Nr   )rM   rJ   r   )rD   r)   r)   r*   r   u  s    z)getPhases.<locals>.InCellPhase.processEOFc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r   x  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  r9  rM   rU   r   r   )rD   r   r)   r)   r*   r/  {  s    z1getPhases.<locals>.InCellPhase.startTagTableOtherc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r5    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 )	NrB   r   )r  r	   zunexpected-cell-end-tagr   zunexpected-end-tagr   )r@   r  r  r   rB   rM   r   rN  r  rJ   rb   )rD   r   r   r)   r)   r*   r7    s    
z.getPhases.<locals>.InCellPhase.endTagTableCellc             S   s   | j jdd|d i d S )Nzunexpected-end-tagrB   )rM   r   )rD   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 )NrB   r   )r  )r@   r  r9  rM   r   )rD   r   r)   r)   r*   r8    s    z*getPhases.<locals>.InCellPhase.endTagImplyc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r8    s    z*getPhases.<locals>.InCellPhase.endTagOtherN)r;   r<   r=   rL   r9  r   r   r/  r5  r7  r  r8  r8  r)   )r   r)   r*   InCellPhase[  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>.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  )rL   r   r3  r   startTagOptionstartTagOptgroupr  r  rI  r   r5  r6  endTagOptionendTagOptgroupendTagSelectr   r8  )rD   rM   r@   )r   r)   r*   rL     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   rB   rM   r   rU   r   )rD   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   )rD   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   rB   rN  r   )rD   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   rB   rN  r   )rD   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   )rM   r   r?  r0  )rD   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  )rM   r   r@   r  r?  r0  rU   r   )rD   r   r)   r)   r*   r    s
    z.getPhases.<locals>.InSelectPhase.startTagInputc             S   s   | j jd j|S )Nr9  )rM   rJ   r   )rD   r   r)   r)   r*   rI    s    z/getPhases.<locals>.InSelectPhase.startTagScriptc             S   s   | j jdd|d i d S )Nzunexpected-start-tag-in-selectrB   )rM   r   )rD   r   r)   r)   r*   r5    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-selectrB   r   )r@   r   rB   rN  rM   r   )rD   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-selectrB   r   r   )r@   r   rB   rN  rM   r   )rD   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   rN  rB   rM   rd   rU   r   r   )rD   r   r   r)   r)   r*   r?    s    z-getPhases.<locals>.InSelectPhase.endTagSelectc             S   s   | j jdd|d i d S )Nzunexpected-end-tag-in-selectrB   )rM   r   )rD   r   r)   r)   r*   r8  	  s    z,getPhases.<locals>.InSelectPhase.endTagOtherN)r;   r<   r=   rL   r   r   r;  r<  r  r  rI  r5  r=  r>  r?  r8  r)   )r   r)   r*   InSelectPhase  s   rA  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   )
rL   r   r3  r  r   r5  r6  r  r   r8  )rD   rM   r@   )r   r)   r*   rL   	  s    
z0getPhases.<locals>.InSelectInTablePhase.__init__c             S   s   | j jd j  d S )Nr   )rM   rJ   r   )rD   r)   r)   r*   r   	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   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-tablerB   r   )rM   r   r8  r0  )rD   r   r)   r)   r*   r  !	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r5  &	  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-tablerB   r   )r  r   )rM   r   r@   r  r8  r0  )rD   r   r)   r)   r*   r  )	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r8  /	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOtherN)
r;   r<   r=   rL   r   r   r  r5  r  r8  r)   )r   r)   r*   InSelectInTablePhase	  s   rB  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  rg  r   r1  rh  r  r}  r+   rk  r~  r  r  h1h2h3h4h5h6r   r  r  r  r|  rz  rs  r4   r  ru  r(   ry  r  r  r  spanr  r  subsupr   r  r  rx  varc                s    j | || d S )N)rL   )rD   rM   r@   )r   r)   r*   rL   <	  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textpathrB   r)   )rD   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   )rA   r  r)   r)   r*   r   l	  s    zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rM   rg   r  r   )rD   r   )r   r)   r*   r   h	  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	   rB   r  r|   colorfacesizez*unexpected-html-element-in-foreign-contentrk   r   ro   r   Tr   r   r   r   r   )r@   r   breakoutElementssetkeysrM   r   ro   r   rs   rt   rN  r   r   r  r   r   r   )rD   r   r   r)   r)   r*   r   p	  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	   rB   zunexpected-end-tagr  r   )r   r@   r   rB   rq   r   rM   r   rb   rJ   r"  r   rN  r   ro   r   r   )rD   r   	nodeIndexr   r   r)   r)   r*   r   	  s(    z6getPhases.<locals>.InForeignContentPhase.processEndTagN)
r;   r<   r=   r   r  rL   r  r   r   r   r)   )r   r)   r*   InForeignContentPhase2	  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   )
rL   r   r3  r   r   r5  r6  r  r   r8  )rD   rM   r@   )r   r)   r*   rL   	  s    
z*getPhases.<locals>.AfterBodyPhase.__init__c             S   s   d S )Nr)   )rD   r)   r)   r*   r   	  s    z,getPhases.<locals>.AfterBodyPhase.processEOFc             S   s   | j j|| j jd  d S )Nr   )r@   r   r   )rD   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   )rM   r   rJ   rb   )rD   r   r)   r)   r*   r   	  s    z3getPhases.<locals>.AfterBodyPhase.processCharactersc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   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-bodyrB   r   )rM   r   rJ   rb   )rD   r   r)   r)   r*   r5  	  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)rM   rU   r   rJ   rb   )rD   rB   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-bodyrB   r   )rM   r   rJ   rb   )rD   r   r)   r)   r*   r8  	  s    z-getPhases.<locals>.AfterBodyPhase.endTagOtherN)r;   r<   r=   rL   r   r   r   r   r5  r  r8  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=  )rL   r   r3  r   r`  startTagFramestartTagNoframesr   r5  r6  endTagFramesetr   r8  )rD   rM   r@   )r   r)   r*   rL   	  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   rB   rM   r   rU   r   )rD   r)   r)   r*   r   	  s    z-getPhases.<locals>.InFramesetPhase.processEOFc             S   s   | j jd d S )Nzunexpected-char-in-frameset)rM   r   )rD   r   r)   r)   r*   r   	  s    z4getPhases.<locals>.InFramesetPhase.processCharactersc             S   s   | j j| d S )N)r@   r   )rD   r   r)   r)   r*   r`  	  s    z3getPhases.<locals>.InFramesetPhase.startTagFramesetc             S   s   | j j| | j jj  d S )N)r@   r   r   rN  )rD   r   r)   r)   r*   r  	  s    z0getPhases.<locals>.InFramesetPhase.startTagFramec             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r  	  s    z3getPhases.<locals>.InFramesetPhase.startTagNoframesc             S   s   | j jdd|d i d S )Nz unexpected-start-tag-in-framesetrB   )rM   r   )rD   r   r)   r)   r*   r5  	  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   rB   rM   r   rN  rU   rJ   rb   )rD   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-framesetrB   )rM   r   )rD   r   r)   r)   r*   r8  	
  s    z.getPhases.<locals>.InFramesetPhase.endTagOtherN)r;   r<   r=   rL   r   r   r`  r  r  r5  r  r8  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=  )rL   r   r3  r   r  r   r5  r6  r  r   r8  )rD   rM   r@   )r   r)   r*   rL   
  s    
z.getPhases.<locals>.AfterFramesetPhase.__init__c             S   s   d S )Nr)   )rD   r)   r)   r*   r   
  s    z0getPhases.<locals>.AfterFramesetPhase.processEOFc             S   s   | j jd d S )Nzunexpected-char-after-frameset)rM   r   )rD   r   r)   r)   r*   r   !
  s    z7getPhases.<locals>.AfterFramesetPhase.processCharactersc             S   s   | j jd j|S )Nr9  )rM   rJ   r   )rD   r   r)   r)   r*   r  $
  s    z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc             S   s   | j jdd|d i d S )Nz#unexpected-start-tag-after-framesetrB   )rM   r   )rD   r   r)   r)   r*   r5  '
  s    z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc             S   s   | j jd | j _d S )NafterAfterFrameset)rM   rJ   rb   )rD   r   r)   r)   r*   r  +
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc             S   s   | j jdd|d i d S )Nz!unexpected-end-tag-after-framesetrB   )rM   r   )rD   r   r)   r)   r*   r8  .
  s    z1getPhases.<locals>.AfterFramesetPhase.endTagOtherN)
r;   r<   r=   rL   r   r   r  r5  r  r8  r)   )r   r)   r*   AfterFramesetPhase
  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   )rL   r   r3  r   r   r5  r6  )rD   rM   r@   )r   r)   r*   rL   3
  s    z/getPhases.<locals>.AfterAfterBodyPhase.__init__c             S   s   d S )Nr)   )rD   r)   r)   r*   r   ;
  s    z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc             S   s   | j j|| j j d S )N)r@   r   r   )rD   r   r)   r)   r*   r   >
  s    z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r   A
  s    z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharactersc             S   s    | j jd | j jd | j _|S )Nzexpected-eof-but-got-charr   )rM   r   rJ   rb   )rD   r   r)   r)   r*   r   D
  s    z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r   I
  s    z3getPhases.<locals>.AfterAfterBodyPhase.startTagHtmlc             S   s*   | j jdd|d i | j jd | j _|S )Nzexpected-eof-but-got-start-tagrB   r   )rM   r   rJ   rb   )rD   r   r)   r)   r*   r5  L
  s    z4getPhases.<locals>.AfterAfterBodyPhase.startTagOtherc             S   s*   | j jdd|d i | j jd | j _|S )Nzexpected-eof-but-got-end-tagrB   r   )rM   r   rJ   rb   )rD   r   r)   r)   r*   r   R
  s    z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagN)r;   r<   r=   rL   r   r   r   r   r   r5  r   r)   )r   r)   r*   AfterAfterBodyPhase2
  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=  )rL   r   r3  r   startTagNoFramesr   r5  r6  )rD   rM   r@   )r   r)   r*   rL   Y
  s
    z3getPhases.<locals>.AfterAfterFramesetPhase.__init__c             S   s   d S )Nr)   )rD   r)   r)   r*   r   b
  s    z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc             S   s   | j j|| j j d S )N)r@   r   r   )rD   r   r)   r)   r*   r   e
  s    z9getPhases.<locals>.AfterAfterFramesetPhase.processCommentc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r   h
  s    zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc             S   s   | j jd d S )Nzexpected-eof-but-got-char)rM   r   )rD   r   r)   r)   r*   r   k
  s    z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc             S   s   | j jd j|S )Nr   )rM   rJ   r   )rD   r   r)   r)   r*   r   n
  s    z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc             S   s   | j jd j|S )Nr9  )rM   rJ   r   )rD   r   r)   r)   r*   r  q
  s    z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc             S   s   | j jdd|d i d S )Nzexpected-eof-but-got-start-tagrB   )rM   r   )rD   r   r)   r)   r*   r5  t
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc             S   s   | j jdd|d i d S )Nzexpected-eof-but-got-end-tagrB   )rM   r   )rD   r   r)   r)   r*   r   x
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagN)r;   r<   r=   rL   r   r   r   r   r   r  r5  r   r)   )r   r)   r*   AfterAfterFramesetPhaseX
  s   	r  )rY   rX   r   r9  rW  rY  r   r   r   r  r   r   r   r   r   r   r  r   r  r   r  r  r  )r   )rK   r[   r   r.  r2  r;  rZ  r^  rc  r  r  r  r#  r(  r,  r2  r6  r:  rA  rB  r  r  r  r  r  r  r)   )r   r*   rI   _  sp    ) #.g@C     X! -GBbYLd's/9%&&rI   c                s^   t s
tjr t| d t @ }nt| d t @ }|rZt fdd| d j D | d< d S )Nr|   c             3   s"   | ]\}} j |||fV  qd S )N)r   )rA   kv)r  r)   r*   r   
  s   z$adjust_attributes.<locals>.<genexpr>)r   r   ZPY27r   r   r   r.   )r   r  needs_adjustmentr)   )r  r*   r   
  s    
r   rx   Fc             C   s   |d kri }t | | ||dS )N)r2   rB   r|   r   )r   )rB   r2   rp   r   r)   r)   r*   r0  
  s    
r0  c               @   s   e Zd ZdZdS )r{   zError in parsed documentN)r;   r<   r=   r   r)   r)   r)   r*   r{   
  s   r{   )r   T)r+   r   T)rx   NF)1
__future__r   r   r   sixr   r   r   r0   collectionsr   ImportErrorZordereddictr   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"   memoizerI   r   r0  	Exceptionr{   r)   r)   r)   r*   <module>   sR   H

  )                  L
 
