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

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

    :arg treebuilder: the treebuilder to use when parsing

    :arg namespaceHTMLElements: whether or not to namespace HTML elements

    :returns: parsed tree

    Example:

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

    )namespaceHTMLElements)r
   getTreeBuilder
HTMLParserparse)doctreebuilderr   kwargstbp r'   ^/var/www/tester-filtro-web/env/lib/python3.6/site-packages/pip/_vendor/html5lib/html5parser.pyr!      s    
r!   divc             K   s,   t j|}t||d}|j| fd|i|S )a#  Parse an HTML fragment as a string or file-like object into a tree

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

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

    :arg treebuilder: the treebuilder to use when parsing

    :arg namespaceHTMLElements: whether or not to namespace HTML elements

    :returns: parsed tree

    Example:

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

    )r   	container)r
   r   r    parseFragment)r"   r*   r#   r   r$   r%   r&   r'   r'   r(   r+   1   s    
r+   c                s   G  fdddt }|S )Nc                   s   e Zd Z fddZdS )z-method_decorator_metaclass.<locals>.Decoratedc                sB   x0|j  D ]$\}}t|tjr& |}|||< q
W tj| |||S )N)items
isinstancetypesFunctionTypetype__new__)meta	classnamebasesZ	classDictZattributeNameZ	attribute)functionr'   r(   r1   L   s
    z5method_decorator_metaclass.<locals>.Decorated.__new__N)__name__
__module____qualname__r1   r'   )r5   r'   r(   	DecoratedK   s   r9   )r0   )r5   r9   r'   )r5   r(   method_decorator_metaclassJ   s    r:   c               @   s   e Zd ZdZd'ddZd(dd	Zd
d Zedd Zdd Z	dd Z
dd Zdd Zdd Zd)ddZdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& ZdS )*r    z]HTML parser

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

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

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

        :arg namespaceHTMLElements: whether or not to namespace HTML elements

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

        Example:

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

        Nr   c                s   i | ]\}}|  j |qS r'   )tree).0namecls)selfr'   r(   
<dictcomp>y   s    z'HTMLParser.__init__.<locals>.<dictcomp>)strictr
   r   r;   errors	getPhasesr,   phases)r?   r;   rA   r   debugr'   )r?   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	   ZHTMLTokenizer	tokenizerresetmainLoopr   )r?   stream	innerHTMLr*   rI   r$   r'   r'   r(   _parse|   s    zHTMLParser._parsec             C   s   | j j  d| _g | _g | _d| _| jr| jj | _	| j	t
krL| jj| j_n0| j	tkrd| jj| j_n| j	dkr|| jj| j_n | jd | _| jj  | j  nd| _	| jd | _d | _d | _d| _d S )NFz	no quirks	plaintext
beforeHtmlinitialT)r;   rK   firstStartTagrB   log
compatModerH   r*   lowerrN   r   rJ   rcdataStatestater   rawtextStateplaintextStaterD   phaseinsertHtmlElementresetInsertionModeZ	lastPhaseZbeforeRCDataPhase
framesetOK)r?   r'   r'   r(   rK      s*    





zHTMLParser.resetc             C   s   t | dsdS | jjjd jS )zName of the character encoding that was used to decode the input stream, or
        :obj:`None` if that is not determined yet

        rJ   Nr   )hasattrrJ   rM   charEncodingr=   )r?   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)rd   re   )r=   	namespacer   
attributes	translater   r   )r?   elementr'   r'   r(   isHTMLIntegrationPoint   s    


z!HTMLParser.isHTMLIntegrationPointc             C   s   |j |jftkS )N)rf   r=   r   )r?   ri   r'   r'   r(   isMathMLTextIntegrationPoint   s    z'HTMLParser.isMathMLTextIntegrationPointc             C   sx  t d }t d }t d }t d }t d }t d }t d }x| jD ]}d }	|}
x|
d k	r|
}	| jjrv| jjd nd }|r|jnd }|r|jnd }|
d	 }||kr| j|
d
 |
jdi  d }
qTt| jjdksj|| jj	ksj| j
|r||kr|d tddgksj|||fksj|td krN|dkrN||krN|d dksj| j|rr||||fkrr| j}n
| jd }||kr|j|
}
qT||kr|j|
}
qT||kr|j|
}
qT||kr|j|
}
qT||kr|j|
}
qT||krT|j|
}
qTW ||krB|	d rB|	d  rB| jdd|	d i qBW d}g }x8|rr|j| j | jj }|r<| j|ks<tq<W d S )N
CharactersZSpaceCharactersStartTagEndTagCommentZDoctype
ParseErrorr   r0   datadatavarsr   r=   ZmglyphZ
malignmarkrb   zannotation-xmlsvginForeignContentselfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   rJ   r;   openElementsrf   r=   
parseErrorgetlendefaultNamespacerk   	frozensetr   rj   r[   rD   processCharactersprocessSpaceCharactersprocessStartTagprocessEndTagprocessCommentprocessDoctypeappend
processEOFAssertionError)r?   ZCharactersTokenZSpaceCharactersTokenZStartTagTokenZEndTagTokenZCommentTokenZDoctypeTokenZParseErrorTokentokenZ
prev_token	new_tokencurrentNodeZcurrentNodeNamespaceZcurrentNodeNamer0   r[   Z	reprocessrD   r'   r'   r(   rL      sp    










zHTMLParser.mainLoopc             O   s    | j |ddf|| | jj S )a  Parse a HTML document into a well-formed tree

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

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

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

        :returns: parsed tree

        Example:

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

        FN)rO   r;   ZgetDocument)r?   rM   argsr$   r'   r'   r(   r!     s    zHTMLParser.parsec             O   s   | j |df|| | jj S )aZ  Parse a HTML fragment into a well-formed tree fragment

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

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

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

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

        :returns: parsed tree

        Example:

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

        T)rO   r;   ZgetFragment)r?   rM   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)rB   r   rJ   rM   positionrA   rp   r   )r?   	errorcoderr   r'   r'   r(   ry   ;  s
    zHTMLParser.parseErrorc             C   s   t |t d S )N)adjust_attributesr   )r?   r   r'   r'   r(   r   C  s    z!HTMLParser.adjustMathMLAttributesc             C   s   t |t d S )N)r   r   )r?   r   r'   r'   r(   r   F  s    zHTMLParser.adjustSVGAttributesc             C   s   t |t d S )N)r   adjustForeignAttributesMap)r?   r   r'   r'   r(   r   I  s    z"HTMLParser.adjustForeignAttributesc             C   s   | j j  d S )N)rG   r[   )r?   r   r'   r'   r(   reparseTokenNormalL  s    zHTMLParser.reparseTokenNormalc             C   s   d}ddddddddddd	d	d
dd}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   rw   )r   r   r   r   )	r;   rx   r=   rN   r   rf   r|   rD   r[   )r?   lastZnewModesnodeZnodeNameZ	new_phaser'   r'   r(   r]   P  sB    


zHTMLParser.resetInsertionModec             C   sR   |dkst | jj| |dkr.| jj| j_n| jj| j_| j| _| j	d | _d S )NRAWTEXTRCDATAtext)r   r   )
r   r;   insertElementrJ   rY   rX   rW   r[   originalPhaserD   )r?   r   ZcontentTyper'   r'   r(   parseRCDataRawtext|  s    zHTMLParser.parseRCDataRawtext)NFTF)Fr)   F)r   N)r6   r7   r8   __doc__rF   rO   rK   propertyra   rj   rk   rL   r!   r+   ry   r   r   r   r   r]   r   r'   r'   r'   r(   r    V   s"   

"

C
,r    c                s   dd }dd }G dd dt || |G dd d}G d	d
 d
}G dd d}G dd d}G dd d}G dd d}G  fddd G dd d}	G fddd}
G fdddG fddd}G fddd}G fdd d }G fd!d"d"}G fd#d$d$}G fd%d&d&}G d'd( d(}G fd)d*d*}G d+d, d,}G fd-d.d.}G fd/d0d0}G d1d2 d2}G d3d4 d4}|||||| |	|
|||||||||||||d5S )6Nc                s$   dd t j D  fdd}|S )z4Logger that records which phase processes each tokenc             S   s   i | ]\}}||qS r'   r'   )r<   keyvaluer'   r'   r(   r@     s    z*getPhases.<locals>.log.<locals>.<dictcomp>c                s    j jdrt|dkr|d }d|d  i}|d tkrH|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   r0   r=   )r6   
startswithr{   r   rG   rT   r   rJ   rX   r[   	__class__)r?   r   r$   r   info)r5   
type_namesr'   r(   wrapped  s    
z'getPhases.<locals>.log.<locals>.wrapped)r   r,   )r5   r   r'   )r5   r   r(   rT     s    zgetPhases.<locals>.logc             S   s   | rt |S tS d S )N)r:   r0   )Zuse_metaclassZmetaclass_funcr'   r'   r(   getMetaclass  s    zgetPhases.<locals>.getMetaclassc               @   s\   e Zd ZdZdZdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )zgetPhases.<locals>.PhasezNBase class for helper object that implements each phase of processing
        rG   r;   __startTagCache__endTagCachec             S   s   || _ || _i | _i | _d S )N)rG   r;   _Phase__startTagCache_Phase__endTagCache)r?   rG   r;   r'   r'   r(   rF     s    z!getPhases.<locals>.Phase.__init__c             S   s   t d S )N)NotImplementedError)r?   r'   r'   r(   r     s    z#getPhases.<locals>.Phase.processEOFc             S   s   | j j|| j jd  d S )Nr   rw   )r;   insertCommentrx   )r?   r   r'   r'   r(   r     s    z'getPhases.<locals>.Phase.processCommentc             S   s   | j jd d S )Nzunexpected-doctype)rG   ry   )r?   r   r'   r'   r(   r     s    z'getPhases.<locals>.Phase.processDoctypec             S   s   | j j|d  d S )Nrq   )r;   
insertText)r?   r   r'   r'   r(   r~     s    z*getPhases.<locals>.Phase.processCharactersc             S   s   | j j|d  d S )Nrq   )r;   r   )r?   r   r'   r'   r(   r     s    z/getPhases.<locals>.Phase.processSpaceCharactersc             S   sn   |d }|| j kr| j | }nH| j|  }| j |< x2t| j t| jd krd| j jtt| j  q4W ||S )Nr=   g?)r   startTagHandlerr{   popnextiter)r?   r   r=   funcr'   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 )Nr=   r   znon-html-rootrq   r   F)rG   rS   ry   r,   r;   rx   rg   )r?   r   attrr   r'   r'   r(   startTagHtml  s    z%getPhases.<locals>.Phase.startTagHtmlc             S   sn   |d }|| j kr| j | }nH| j|  }| j |< x2t| j t| jd krd| j jtt| j  q4W ||S )Nr=   g?)r   endTagHandlerr{   r   r   r   )r?   r   r=   r   r'   r'   r(   r     s    
z&getPhases.<locals>.Phase.processEndTagN)rG   r;   r   r   )r6   r7   r8   r   	__slots__rF   r   r   r   r~   r   r   r   r   r'   r'   r'   r(   Phase  s   
r   c               @   sR   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd ZdS )zgetPhases.<locals>.InitialPhasec             S   s   d S )Nr'   )r?   r   r'   r'   r(   r     s    z6getPhases.<locals>.InitialPhase.processSpaceCharactersc             S   s   | j j|| j j d S )N)r;   r   document)r?   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 )ONr=   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 quirksrQ   )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  )rG   ry   r;   ZinsertDoctyperh   r   r   rV   rU   rD   r[   )r?   r   r=   r   r   r   r'   r'   r(   r     s    
                                                        

  
z.getPhases.<locals>.InitialPhase.processDoctypec             S   s   d| j _| j jd | j _d S )Nr  rQ   )rG   rU   rD   r[   )r?   r'   r'   r(   anythingElseZ  s    z,getPhases.<locals>.InitialPhase.anythingElsec             S   s   | j jd | j  |S )Nzexpected-doctype-but-got-chars)rG   ry   r  )r?   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-tagr=   )rG   ry   r  )r?   r   r'   r'   r(   r   c  s    z/getPhases.<locals>.InitialPhase.processStartTagc             S   s"   | j jdd|d i | j  |S )Nz expected-doctype-but-got-end-tagr=   )rG   ry   r  )r?   r   r'   r'   r(   r   i  s    z-getPhases.<locals>.InitialPhase.processEndTagc             S   s   | j jd | j  dS )Nzexpected-doctype-but-got-eofT)rG   ry   r  )r?   r'   r'   r(   r   o  s    z*getPhases.<locals>.InitialPhase.processEOFN)r6   r7   r8   tupler   r   r   r   r  r~   r   r   r   r'   r'   r'   r(   InitialPhase  s   _r  c               @   sJ   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd ZdS )z"getPhases.<locals>.BeforeHtmlPhasec             S   s&   | j jtdd | jjd | j_d S )Nr   rm   r   )r;   Z
insertRootimpliedTagTokenrG   rD   r[   )r?   r'   r'   r(   r\   x  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc             S   s   | j   dS )NT)r\   )r?   r'   r'   r(   r   }  s    z-getPhases.<locals>.BeforeHtmlPhase.processEOFc             S   s   | j j|| j j d S )N)r;   r   r   )r?   r   r'   r'   r(   r     s    z1getPhases.<locals>.BeforeHtmlPhase.processCommentc             S   s   d S )Nr'   )r?   r   r'   r'   r(   r     s    z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc             S   s   | j   |S )N)r\   )r?   r   r'   r'   r(   r~     s    z4getPhases.<locals>.BeforeHtmlPhase.processCharactersc             S   s    |d dkrd| j _| j  |S )Nr=   r   T)rG   rS   r\   )r?   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 )Nr=   r   r   r   brzunexpected-end-tag-before-html)r   r   r   r  )rG   ry   r\   )r?   r   r'   r'   r(   r     s
    z0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)r6   r7   r8   r  r   r\   r   r   r   r~   r   r   r'   r'   r'   r(   BeforeHtmlPhaset  s   r  c               @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zejdefde	fgZe
e_ejdefgZee_dS )z"getPhases.<locals>.BeforeHeadPhasec             S   s   | j tdd dS )Nr   rm   T)startTagHeadr  )r?   r'   r'   r(   r     s    z-getPhases.<locals>.BeforeHeadPhase.processEOFc             S   s   d S )Nr'   )r?   r   r'   r'   r(   r     s    z9getPhases.<locals>.BeforeHeadPhase.processSpaceCharactersc             S   s   | j tdd |S )Nr   rm   )r  r  )r?   r   r'   r'   r(   r~     s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r     s    z/getPhases.<locals>.BeforeHeadPhase.startTagHtmlc             S   s0   | j j| | j jd | j _| jjd | j_d S )Nr   inHeadrw   )r;   r   rx   headPointerrG   rD   r[   )r?   r   r'   r'   r(   r    s    z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc             S   s   | j tdd |S )Nr   rm   )r  r  )r?   r   r'   r'   r(   startTagOther  s    z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc             S   s   | j tdd |S )Nr   rm   )r  r  )r?   r   r'   r'   r(   endTagImplyHead  s    z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc             S   s   | j jdd|d i d S )Nzend-tag-after-implied-rootr=   )rG   ry   )r?   r   r'   r'   r(   endTagOther  s    z.getPhases.<locals>.BeforeHeadPhase.endTagOtherr   r   r   r  N)r   r   r   r  )r6   r7   r8   r  r   r   r   r~   r   r  r  r  r  r   MethodDispatcherr   defaultr   r'   r'   r'   r(   BeforeHeadPhase  s    r  c               @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zejdefd efd/efd#efd$efd0e	fd*e
fd+efgZee_ejd+efd1efgZee_d.S )2zgetPhases.<locals>.InHeadPhasec             S   s   | j   dS )NT)r  )r?   r'   r'   r(   r     s    z)getPhases.<locals>.InHeadPhase.processEOFc             S   s   | j   |S )N)r  )r?   r   r'   r'   r(   r~     s    z0getPhases.<locals>.InHeadPhase.processCharactersc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   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)rG   ry   )r?   r   r'   r'   r(   r    s    z+getPhases.<locals>.InHeadPhase.startTagHeadc             S   s$   | j j| | j jj  d|d< d S )NTrv   )r;   r   rx   r   )r?   r   r'   r'   r(   startTagBaseLinkCommand  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 )NTrv   rq   r   Z	tentativecharsetcontentz
http-equivzcontent-typezutf-8)r;   r   rx   r   rG   rJ   rM   r`   ZchangeEncodingrV   r   ZEncodingBytesencodeZContentAttrParserr!   )r?   r   rg   rq   rG   codecr'   r'   r(   startTagMeta  s    
z+getPhases.<locals>.InHeadPhase.startTagMetac             S   s   | j j|d d S )Nr   )rG   r   )r?   r   r'   r'   r(   startTagTitle  s    z,getPhases.<locals>.InHeadPhase.startTagTitlec             S   s   | j j|d d S )Nr   )rG   r   )r?   r   r'   r'   r(   startTagNoFramesStyle  s    z4getPhases.<locals>.InHeadPhase.startTagNoFramesStylec             S   s8   | j jr| j j|d n| jj| | j jd | j _d S )Nr   inHeadNoscript)rG   rI   r   r;   r   rD   r[   )r?   r   r'   r'   r(   startTagNoscript  s    z/getPhases.<locals>.InHeadPhase.startTagNoscriptc             S   s<   | j j| | jjj| jj_| jj| j_| jjd | j_d S )Nr   )	r;   r   rG   rJ   ZscriptDataStaterX   r[   r   rD   )r?   r   r'   r'   r(   startTagScript   s    z-getPhases.<locals>.InHeadPhase.startTagScriptc             S   s   | j   |S )N)r  )r?   r   r'   r'   r(   r    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)rG   r;   rx   r   r=   r   rD   r[   )r?   r   r   r'   r'   r(   
endTagHead
  s    z)getPhases.<locals>.InHeadPhase.endTagHeadc             S   s   | j   |S )N)r  )r?   r   r'   r'   r(   endTagHtmlBodyBr  s    z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc             S   s   | j jdd|d i d S )Nzunexpected-end-tagr=   )rG   ry   )r?   r   r'   r'   r(   r    s    z*getPhases.<locals>.InHeadPhase.endTagOtherc             S   s   | j td d S )Nr   )r+  r  )r?   r'   r'   r(   r    s    z+getPhases.<locals>.InHeadPhase.anythingElser   titlenoframesstylenoscriptscriptbasebasefontbgsoundcommandlinkr2   r   r  r   N)r.  r/  )r2  r3  r4  r5  r6  )r  r   r   )r6   r7   r8   r  r   r   r~   r   r  r  r$  r%  r&  r(  r)  r  r+  r,  r  r  r   r  r   r  r   r'   r'   r'   r(   InHeadPhase  s>   r7  c               @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zejde	fd$e
fd%efgZee_ejd!efd"efgZee_d#S )&z&getPhases.<locals>.InHeadNoscriptPhasec             S   s   | j jd | j  dS )Nzeof-in-head-noscriptT)rG   ry   r  )r?   r'   r'   r(   r   /  s    z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc             S   s   | j jd j|S )Nr  )rG   rD   r   )r?   r   r'   r'   r(   r   4  s    z5getPhases.<locals>.InHeadNoscriptPhase.processCommentc             S   s   | j jd | j  |S )Nzchar-in-head-noscript)rG   ry   r  )r?   r   r'   r'   r(   r~   7  s    z8getPhases.<locals>.InHeadNoscriptPhase.processCharactersc             S   s   | j jd j|S )Nr  )rG   rD   r   )r?   r   r'   r'   r(   r   <  s    z=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharactersc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r   ?  s    z3getPhases.<locals>.InHeadNoscriptPhase.startTagHtmlc             S   s   | j jd j|S )Nr  )rG   rD   r   )r?   r   r'   r'   r(   r  B  s    z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc             S   s   | j jdd|d i d S )Nzunexpected-start-tagr=   )rG   ry   )r?   r   r'   r'   r(   startTagHeadNoscriptE  s    z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc             S   s"   | j jdd|d i | j  |S )Nzunexpected-inhead-noscript-tagr=   )rG   ry   r  )r?   r   r'   r'   r(   r  H  s    z4getPhases.<locals>.InHeadNoscriptPhase.startTagOtherc             S   s:   | j jjj }|jdks&td|j | j jd | j _d S )Nr0  zExpected noscript got %sr  )rG   r;   rx   r   r=   r   rD   r[   )r?   r   r   r'   r'   r(   endTagNoscriptM  s    z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc             S   s"   | j jdd|d i | j  |S )Nzunexpected-inhead-noscript-tagr=   )rG   ry   r  )r?   r   r'   r'   r(   endTagBrR  s    z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc             S   s   | j jdd|d i d S )Nzunexpected-end-tagr=   )rG   ry   )r?   r   r'   r'   r(   r  W  s    z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc             S   s   | j td d S )Nr0  )r9  r  )r?   r'   r'   r(   r  Z  s    z3getPhases.<locals>.InHeadNoscriptPhase.anythingElser   r3  r4  r6  r2   r.  r/  r   r0  r  N)r3  r4  r6  r2   r.  r/  )r   r0  )r6   r7   r8   r  r   r   r   r~   r   r   r  r8  r  r9  r:  r  r  r   r  r   r  r   r'   r'   r'   r(   InHeadNoscriptPhase,  s,   r;  c               @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zejdefdefde	fd&e
fd#efgZee_ejd'efgZee_d%S )(z!getPhases.<locals>.AfterHeadPhasec             S   s   | j   dS )NT)r  )r?   r'   r'   r(   r   n  s    z,getPhases.<locals>.AfterHeadPhase.processEOFc             S   s   | j   |S )N)r  )r?   r   r'   r'   r(   r~   r  s    z3getPhases.<locals>.AfterHeadPhase.processCharactersc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r   v  s    z.getPhases.<locals>.AfterHeadPhase.startTagHtmlc             S   s(   d| j _| jj| | j jd | j _d S )NFr   )rG   r^   r;   r   rD   r[   )r?   r   r'   r'   r(   startTagBodyy  s    z.getPhases.<locals>.AfterHeadPhase.startTagBodyc             S   s    | j j| | jjd | j_d S )Nr   )r;   r   rG   rD   r[   )r?   r   r'   r'   r(   startTagFrameset~  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-headr=   r  r   r   rw   )
rG   ry   r;   rx   r   r  rD   r   r=   remove)r?   r   r   r'   r'   r(   startTagFromHead  s    
z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc             S   s   | j jdd|d i d S )Nzunexpected-start-tagr=   )rG   ry   )r?   r   r'   r'   r(   r    s    z.getPhases.<locals>.AfterHeadPhase.startTagHeadc             S   s   | j   |S )N)r  )r?   r   r'   r'   r(   r    s    z/getPhases.<locals>.AfterHeadPhase.startTagOtherc             S   s   | j   |S )N)r  )r?   r   r'   r'   r(   r,    s    z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc             S   s   | j jdd|d i d S )Nzunexpected-end-tagr=   )rG   ry   )r?   r   r'   r'   r(   r    s    z-getPhases.<locals>.AfterHeadPhase.endTagOtherc             S   s.   | j jtdd | jjd | j_d| j_d S )Nr   rm   r   T)r;   r   r  rG   rD   r[   r^   )r?   r'   r'   r(   r    s    z.getPhases.<locals>.AfterHeadPhase.anythingElser   r   r   r2  r3  r4  r6  r2   r.  r1  r/  r-  r   r  N)	r2  r3  r4  r6  r2   r.  r1  r/  r-  )r   r   r  )r6   r7   r8   r  r   r   r~   r   r<  r=  r?  r  r  r,  r  r  r   r  r   r  r   r'   r'   r'   r(   AfterHeadPhasek  s0   
 
r@  c            ,       s  e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddde Z5dfdg Z6e7j8dhj9fdefdrefdsefdefe:efdefdefdefdefdefdefdefdefdefdefdefdefdefdefdefdefde fde!fde"fde#fde$fde&fde'fde%fde(fde)fde*fg!Z;e+e;_<e7j8dre-fdhe.fde/fde0fde,fde1fe:e2fde3fde4fde5fg
Z=e6e=_<  Z>S )zgetPhases.<locals>.InBodyPhaser   c                s   t  | j|| | j| _d S )N)superrF   processSpaceCharactersNonPrer   )r?   r   r$   )InBodyPhaser   r'   r(   rF     s    z'getPhases.<locals>.InBodyPhase.__init__c             S   s$   |j |j ko"|j|jko"|j|jkS )N)r=   rf   rg   )r?   Znode1Z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      rw   rw   rw   )
r;   r   rx   activeFormattingElementsr   rD  r   r{   r   r>  )r?   r   ri   Z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 )Ndddtlir&   r   r   r   r   r   r   r   r   r   z expected-closing-tag-but-got-eof)rH  rI  rJ  r&   r   r   r   r   r   r   r   r   rw   )r}   r;   rx   r=   rG   ry   )r?   Z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 )
Nrq   
r   prelistingtextarearw   )rL  rM  rN  rw   )	rB  r   r   r;   rx   r=   Z
hasContent#reconstructActiveFormattingElementsr   )r?   r   rq   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 )Nrq    c             S   s   g | ]}|t kqS r'   )r   )r<   charr'   r'   r(   
<listcomp>  s   zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r;   rO  r   rG   r^   any)r?   r   r'   r'   r(   r~     s    
z0getPhases.<locals>.InBodyPhase.processCharactersc             S   s   | j j  | j j|d  d S )Nrq   )r;   rO  r   )r?   r   r'   r'   r(   rB    s    
z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec             S   s   | j jd j|S )Nr  )rG   rD   r   )r?   r   r'   r'   r(   startTagProcessInHead  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-tagr=   r   r   Frq   )rG   ry   r{   r;   rx   r=   rN   r   r^   r,   rg   )r?   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-tagr=   r   r   r   r   r   rw   )rG   ry   r{   r;   rx   r=   rN   r   r^   parentremoveChildr   r   rD   r[   )r?   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&   button)variant)r;   elementInScopeendTagPr  r   )r?   r   r'   r'   r(   startTagCloseP  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&   rX  )rY  F)	r;   rZ  r[  r  r   rG   r^   rP  r   )r?   r   r'   r'   r(   startTagPreListing  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-tagr=   formr&   rX  )rY  r   rw   )	r;   formPointerrG   ry   rZ  r[  r  r   rx   )r?   r   r'   r'   r(   startTagForm  s    z+getPhases.<locals>.InBodyPhase.startTagFormc             S   s   d| j _dgddgddgd}||d  }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 )NFrJ  rI  rH  )rJ  rI  rH  r=   rn   addressr)   r&   rX  )rY  )ra  r)   r&   )rG   r^   reversedr;   rx   r=   r[   r   r  	nameTupler   rZ  r   )r?   r   ZstopNamesMapZ	stopNamesr   r'   r'   r(   startTagListItem&  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&   rX  )rY  )	r;   rZ  r[  r  r   rG   rJ   rZ   rX   )r?   r   r'   r'   r(   startTagPlaintext<  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&   rX  )rY  r   zunexpected-start-tagr=   rw   )r;   rZ  r[  r  rx   r=   r   rG   ry   r   r   )r?   r   r'   r'   r(   startTagHeadingB  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 )Naz$unexpected-start-tag-implies-end-tag)	startNameendName)r;   !elementInActiveFormattingElementsrG   ry   endTagFormattingr  rx   r>  rF  rO  rG  )r?   r   ZafeAElementr'   r'   r(   	startTagAJ  s    
z(getPhases.<locals>.InBodyPhase.startTagAc             S   s   | j j  | j| d S )N)r;   rO  rG  )r?   r   r'   r'   r(   startTagFormattingW  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 )Nnobrz$unexpected-start-tag-implies-end-tag)rh  ri  )r;   rO  rZ  rG   ry   r   r  rG  )r?   r   r'   r'   r(   startTagNobr[  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 )NrX  z$unexpected-start-tag-implies-end-tag)rh  ri  F)	r;   rZ  rG   ry   r   r  rO  r   r^   )r?   r   r'   r'   r(   startTagButtone  s    
z-getPhases.<locals>.InBodyPhase.startTagButtonc             S   s0   | j j  | j j| | j jjt d| j_d S )NF)r;   rO  r   rF  r   r   rG   r^   )r?   r   r'   r'   r(   startTagAppletMarqueeObjectp  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&   rX  )rY  Fr   )r;   rZ  r[  r  rO  rG   r^   r   )r?   r   r'   r'   r(   startTagXmpv  s
    
z*getPhases.<locals>.InBodyPhase.startTagXmpc             S   sR   | j jdkr*| jjdddr*| jtd | jj| d| j _| j jd | j _	d S )Nr  r&   rX  )rY  Fr   )
rG   rU   r;   rZ  r   r  r   r^   rD   r[   )r?   r   r'   r'   r(   startTagTable}  s    z,getPhases.<locals>.InBodyPhase.startTagTablec             S   s6   | j j  | j j| | j jj  d|d< d| j_d S )NTrv   F)r;   rO  r   rx   r   rG   r^   )r?   r   r'   r'   r(   startTagVoidFormatting  s
    
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc             S   s@   | j j}| j| d|d kr<|d d jtdkr<|| j _d S )Nr0   rq   hidden)rG   r^   rt  rh   r   )r?   r   r^   r'   r'   r(   startTagInput  s
    
z,getPhases.<locals>.InBodyPhase.startTagInputc             S   s$   | j j| | j jj  d|d< d S )NTrv   )r;   r   rx   r   )r?   r   r'   r'   r(   startTagParamSource  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&   rX  )rY  Trv   F)	r;   rZ  r[  r  r   rx   r   rG   r^   )r?   r   r'   r'   r(   
startTagHr  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-asimageimg)originalNamenewNamerm   rq   ru   )rg   ru   )rG   ry   r   r  )r?   r   r'   r'   r(   startTagImage  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-tagr=   isindexactionrq   r^  rm   )rg   hrlabelpromptz3This is a searchable index. Enter search keywords: rl   )r0   rq   inputru   )rg   ru   )
rG   ry   r;   r_  r   r  r~   r   copyr   )r?   r   Z
form_attrsr  rg   r'   r'   r(   startTagIsIndex  s6    


z.getPhases.<locals>.InBodyPhase.startTagIsIndexc             S   s0   | j j| | jjj| jj_| j| _d| j_d S )NF)	r;   r   rG   rJ   rW   rX   rP  r   r^   )r?   r   r'   r'   r(   startTagTextarea  s    z/getPhases.<locals>.InBodyPhase.startTagTextareac             S   s   d| j _| j| d S )NF)rG   r^   startTagRawtext)r?   r   r'   r'   r(   startTagIFrame  s    z-getPhases.<locals>.InBodyPhase.startTagIFramec             S   s"   | j jr| j| n
| j| d S )N)rG   rI   r  r  )r?   r   r'   r'   r(   r(    s    z/getPhases.<locals>.InBodyPhase.startTagNoscriptc             S   s   | j j|d dS )z8iframe, noembed noframes, noscript(if scripting enabled)r   N)rG   r   )r?   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   optionrw   )	r;   rx   r=   rG   r[   r   r  rO  r   )r?   r   r'   r'   r(   startTagOpt  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;   rO  r   rG   r^   r[   rD   )r?   r   r'   r'   r(   startTagSelect  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   rw   )r;   rZ  generateImpliedEndTagsrx   r=   rG   ry   r   )r?   r   r'   r'   r(   startTagRpRt  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 )Nrb   rf   ru   Trv   )	r;   rO  rG   r   r   r   r   rx   r   )r?   r   r'   r'   r(   startTagMath  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 )Nrs   rf   ru   Trv   )	r;   rO  rG   r   r   r   r   rx   r   )r?   r   r'   r'   r(   startTagSvg  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-ignoredr=   N)rG   ry   )r?   r   r'   r'   r(   startTagMisplaced  s    z0getPhases.<locals>.InBodyPhase.startTagMisplacedc             S   s   | j j  | j j| d S )N)r;   rO  r   )r?   r   r'   r'   r(   r    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&   rX  )rY  rm   zunexpected-end-tagr=   rn   r   rw   )r;   rZ  r\  r  rG   ry   r[  r  rx   r=   r   )r?   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      rH  rI  rJ  optgroupr  r&   rprtr   r   r   r   r   r   r   z$expected-one-end-tag-but-got-another)gotNameexpectedName	afterBodyrw   )rH  rI  rJ  r  r  r&   r  r  r   r   r   r   r   r   r   r   )	r;   rZ  rG   ry   rx   r=   r}   rD   r[   )r?   r   r   r'   r'   r(   
endTagBody)  s    
   z)getPhases.<locals>.InBodyPhase.endTagBodyc             S   s"   | j jdr| jtd |S d S )Nr   )r;   rZ  r  r  )r?   r   r'   r'   r(   
endTagHtml;  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 )Nr=   rL  r   zend-tag-too-earlyrw   )
rB  r   r;   rZ  r  rx   r=   rG   ry   r   )r?   r   ZinScoper   r'   r'   r(   endTagBlockA  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-tagr=   r^  r   zend-tag-too-early-ignoredrw   )r;   r_  rZ  rG   ry   r  rx   r>  )r?   r   r   r'   r'   r(   
endTagFormO  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 )
Nr=   rJ  list)rY  zunexpected-end-tag)excluder   zend-tag-too-earlyrw   )r;   rZ  rG   ry   r  rx   r=   r   )r?   r   rY  r   r'   r'   r(   endTagListItem\  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   r=   zend-tag-too-earlyrw   )	r   r;   rZ  r  rx   r=   rG   ry   r   )r?   r   itemr'   r'   r(   endTagHeadingm  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   r=   Nzadoption-agency-1.2zadoption-agency-4.4zadoption-agency-1.3rE  r   r   r   r   r   rw   )r   r   r   r   r   )r;   rj  rx   rZ  r=   r  rG   ry   rF  r>  indexrc  r   r   Z	cloneNoderV  rW  ZappendChildr}   ZgetTableMisnestedNodePositioninsertBeforeZreparentChildreninsert)r?   r   ZouterLoopCounterZformattingElementZafeIndexZfurthestBlockri   ZcommonAncestorZbookmarkZlastNoder   ZinnerLoopCounterr  clonerV  r  r'   r'   r(   rk  |  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 )Nr=   r   zend-tag-too-earlyrw   )	r;   rZ  r  rx   r=   rG   ry   r   clearActiveFormattingElements)r?   r   ri   r'   r'   r(   endTagAppletMarqueeObject  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-asr  z
br element)r{  r|  rm   )rG   ry   r;   rO  r   r  rx   r   )r?   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   r=   )r  zunexpected-end-tagrw   rw   )	r;   rx   r=   r  rG   ry   r   rc  r   )r?   r   r   r'   r'   r(   r  2  s    
z*getPhases.<locals>.InBodyPhase.endTagOtherr   r2  r3  r4  r5  r6  r2   r1  r/  r-  r   r   ra  articleaside
blockquotecenterdetailsdirr)   dlfieldset
figcaptionfigurefooterheaderhgroupmainmenunavolr&   sectionsummaryulrL  rM  r^  rJ  rH  rI  rP   rg  bbigcodeemfontissmallstrikestrongtturn  rX  appletmarqueeobjectZxmpr   arear  embedrz  keygenwbrparamsourcetrackr  r  ry  r~  rN  Ziframer0  noembedr.  r   r  r  r  r  mathrs   r   colr   framer   r   r   r   r   r   r   dialog)r   )	r2  r3  r4  r5  r6  r2   r1  r/  r-  )ra  r  r  r  r  r  r  r)   r  r  r  r  r  r  r  r  r  r  r  r&   r  r  r  )rL  rM  )rJ  rH  rI  )r  r  r  r  r  r  r  r  r  r  r  r  )r  r  r  )r  r  r  rz  r  r  )r  r  r  )r  r.  )r  r  )r  r  )r   r  r   r  r   r   r   r   r   r   r   )ra  r  r  r  rX  r  r  r  r  r)   r  r  r  r  r  r  r  rM  r  r  r  r  rL  r  r  r  )rH  rI  rJ  )rg  r  r  r  r  r  r  rn  r  r  r  r  r  r  )r  r  r  )?r6   r7   r8   r   rF   rD  rG  r   rP  r~   rB  rU  r<  r=  r\  r]  r`  rd  re  rf  rl  rm  ro  rp  rq  rr  rs  rt  rv  rw  rx  r}  r  r  r  r(  r  r  r  r  r  r  r  r  r[  r  r  r  r  r  r  rk  r  r:  r  r   r  r   r   r   r  r   __classcell__r'   )rC  r   )r   r(   rC    s   
	
	 $           rC  c               @   s`   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	e
jg Zee_e
jdefgZe	e_dS )zgetPhases.<locals>.TextPhasec             S   s   | j j|d  d S )Nrq   )r;   r   )r?   r   r'   r'   r(   r~     s    z.getPhases.<locals>.TextPhase.processCharactersc             S   s8   | j jdd| jjd ji | jjj  | j j| j _dS )Nz&expected-named-closing-tag-but-got-eofr=   r   Trw   )rG   ry   r;   rx   r=   r   r   r[   )r?   r'   r'   r(   r     s
    z'getPhases.<locals>.TextPhase.processEOFc             S   s   dst d|d  d S )NFz4Tried to process start tag %s in RCDATA/RAWTEXT moder=   )r   )r?   r   r'   r'   r(   r    s    z*getPhases.<locals>.TextPhase.startTagOtherc             S   s*   | j jj }|jdkst| jj| j_d S )Nr1  )r;   rx   r   r=   r   rG   r   r[   )r?   r   r   r'   r'   r(   endTagScript  s    z)getPhases.<locals>.TextPhase.endTagScriptc             S   s   | j jj  | jj| j_d S )N)r;   rx   r   rG   r   r[   )r?   r   r'   r'   r(   r    s    z(getPhases.<locals>.TextPhase.endTagOtherr1  N)r6   r7   r8   r  r   r~   r   r  r  r  r   r  r   r  r   r'   r'   r'   r(   	TextPhase  s   
r  c                   s  e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zejd% jfd&e
fd'efd(efd6efd7efd/efd8efd2efd3efg
Zee_ejd/efd9efgZee_d5S ):zgetPhases.<locals>.InTablePhasec             S   s(   x"| j jd jdkr"| j jj  qW d S )Nr   r   r   rw   )r   r   )r;   rx   r=   r   )r?   r'   r'   r(   clearStackToTableContext  s    z8getPhases.<locals>.InTablePhase.clearStackToTableContextc             S   s0   | j jd jdkr | jjd n| jjs,td S )Nr   r   zeof-in-tablerw   )r;   rx   r=   rG   ry   rN   r   )r?   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)rG   r[   rD   r   r   )r?   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  )rG   r[   rD   r   r~   )r?   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;   insertFromTablerG   rD   r~   )r?   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;   rF  r   r   r   rG   rD   r[   )r?   r   r'   r'   r(   startTagCaption  s    z/getPhases.<locals>.InTablePhase.startTagCaptionc             S   s(   | j   | jj| | jjd | j_d S )Nr   )r  r;   r   rG   rD   r[   )r?   r   r'   r'   r(   startTagColgroup  s    z0getPhases.<locals>.InTablePhase.startTagColgroupc             S   s   | j tdd |S )Nr   rm   )r  r  )r?   r   r'   r'   r(   startTagCol  s    z+getPhases.<locals>.InTablePhase.startTagColc             S   s(   | j   | jj| | jjd | j_d S )Nr   )r  r;   r   rG   rD   r[   )r?   r   r'   r'   r(   startTagRowGroup  s    z0getPhases.<locals>.InTablePhase.startTagRowGroupc             S   s   | j tdd |S )Nr   rm   )r  r  )r?   r   r'   r'   r(   startTagImplyTbody  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   )rh  ri  )rG   ry   r[   r   r  rN   )r?   r   r'   r'   r(   rs    s
    z-getPhases.<locals>.InTablePhase.startTagTablec             S   s   | j jd j|S )Nr  )rG   rD   r   )r?   r   r'   r'   r(   startTagStyleScript  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 )Nr0   rq   ru  z unexpected-hidden-input-in-table)	rh   r   rG   ry   r;   r   rx   r   r  )r?   r   r'   r'   r(   rv    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   rw   )rG   ry   r;   r_  r   rx   r   )r?   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-voodoor=   Tr   F)rG   ry   r;   r  rD   r   )r?   r   r'   r'   r(   r    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   )rY  r   zend-tag-too-early-named)r  r  rw   rw   rw   )r;   rZ  r  rx   r=   rG   ry   r   r]   rN   r   )r?   r   r'   r'   r(   endTagTable  s    
z+getPhases.<locals>.InTablePhase.endTagTablec             S   s   | j jdd|d i d S )Nzunexpected-end-tagr=   )rG   ry   )r?   r   r'   r'   r(   endTagIgnore  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-voodoor=   Tr   F)rG   ry   r;   r  rD   r   )r?   r   r'   r'   r(   r    s    z+getPhases.<locals>.InTablePhase.endTagOtherr   r   r   r  r   r   r   r   r   r   r   r/  r1  r  r^  r   N)r   r   r   )r   r   r   )r/  r1  )r   r   r  r   r   r   r   r   r   r   r   )r6   r7   r8   r  r   r  r   r   r~   r   r  r  r  r  r  rs  r  rv  r`  r  r  r  r  r   r  r   r   r  r   r'   )r   r'   r(   InTablePhase  sH   	
 r  c                   sZ   e Zd ZdZ fddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Z  ZS )z#getPhases.<locals>.InTableTextPhaser   characterTokensc                s"   t  | j|| d | _g | _d S )N)rA  rF   r   r  )r?   r   r$   )InTableTextPhaser   r'   r(   rF   6  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 )rq   r'   )r<   r  r'   r'   r(   rS  <  s    zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c             S   s   g | ]}|t kqS r'   )r   )r<   r  r'   r'   r(   rS  =  s    rl   )r0   rq   r   )joinr  rT  r   rG   rD   r   r;   )r?   rq   r   r'   r'   r(   flushCharacters;  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc             S   s   | j   | j| j_|S )N)r  r   rG   r[   )r?   r   r'   r'   r(   r   D  s    
z2getPhases.<locals>.InTableTextPhase.processCommentc             S   s   | j   | j| j_dS )NT)r  r   rG   r[   )r?   r'   r'   r(   r   I  s    
z.getPhases.<locals>.InTableTextPhase.processEOFc             S   s    |d dkrd S | j j| d S )Nrq   rQ  )r  r   )r?   r   r'   r'   r(   r~   N  s    z5getPhases.<locals>.InTableTextPhase.processCharactersc             S   s   | j j| d S )N)r  r   )r?   r   r'   r'   r(   r   S  s    z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc             S   s   | j   | j| j_|S )N)r  r   rG   r[   )r?   r   r'   r'   r(   r   X  s    
z3getPhases.<locals>.InTableTextPhase.processStartTagc             S   s   | j   | j| j_|S )N)r  r   rG   r[   )r?   r   r'   r'   r(   r   ]  s    
z1getPhases.<locals>.InTableTextPhase.processEndTag)r   r  )r6   r7   r8   r   rF   r  r   r   r~   r   r   r   r  r'   )r  )r   r(   r  3  s   	r  c                   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zejd jfd efgZe	e_ejde
fdefd!efgZee_dS )"z!getPhases.<locals>.InCaptionPhasec             S   s   | j jddd S )Nr   r   )rY  )r;   rZ  )r?   r'   r'   r(   ignoreEndTagCaptionf  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc             S   s   | j jd j  d S )Nr   )rG   rD   r   )r?   r'   r'   r(   r   i  s    z,getPhases.<locals>.InCaptionPhase.processEOFc             S   s   | j jd j|S )Nr   )rG   rD   r~   )r?   r   r'   r'   r(   r~   l  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc             S   s0   | j j  | j }| j jjtd |s,|S d S )Nr   )rG   ry   r  r[   r   r  )r?   r   ignoreEndTagr'   r'   r(   startTagTableElemento  s
    
z6getPhases.<locals>.InCaptionPhase.startTagTableElementc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r  w  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   rw   rw   rw   )r  r;   r  rx   r=   rG   ry   r   r  rD   r[   rN   r   )r?   r   r'   r'   r(   endTagCaptionz  s    

z/getPhases.<locals>.InCaptionPhase.endTagCaptionc             S   s0   | j j  | j }| j jjtd |s,|S d S )Nr   )rG   ry   r  r[   r   r  )r?   r   r  r'   r'   r(   r    s
    
z-getPhases.<locals>.InCaptionPhase.endTagTablec             S   s   | j jdd|d i d S )Nzunexpected-end-tagr=   )rG   ry   )r?   r   r'   r'   r(   r    s    z.getPhases.<locals>.InCaptionPhase.endTagIgnorec             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r    s    z-getPhases.<locals>.InCaptionPhase.endTagOtherr   r   r  r   r   r   r   r   r   r   r   r   N)	r   r  r   r   r   r   r   r   r   )
r   r  r   r   r   r   r   r   r   r   )r6   r7   r8   r  r   r  r   r~   r  r  r  r  r  r  r   r  r   r   r  r   r'   )r   r'   r(   InCaptionPhaseb  s*     r  c                   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zejd jfdefgZe	e_ejde
fdefgZee_dS )z%getPhases.<locals>.InColumnGroupPhasec             S   s   | j jd jdkS )Nr   r   rw   )r;   rx   r=   )r?   r'   r'   r(   ignoreEndTagColgroup  s    z:getPhases.<locals>.InColumnGroupPhase.ignoreEndTagColgroupc             S   sD   | j jd jdkr"| jjstd S | j }| jtd |s@dS d S )Nr   r   r   Trw   )	r;   rx   r=   rG   rN   r   r  endTagColgroupr  )r?   r  r'   r'   r(   r     s    z0getPhases.<locals>.InColumnGroupPhase.processEOFc             S   s"   | j  }| jtd |s|S d S )Nr   )r  r  r  )r?   r   r  r'   r'   r(   r~     s    z7getPhases.<locals>.InColumnGroupPhase.processCharactersc             S   s$   | j j| | j jj  d|d< d S )NTrv   )r;   r   rx   r   )r?   r   r'   r'   r(   r    s    z1getPhases.<locals>.InColumnGroupPhase.startTagColc             S   s"   | j  }| jtd |s|S d S )Nr   )r  r  r  )r?   r   r  r'   r'   r(   r    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  rG   rN   r   ry   r;   rx   r   rD   r[   )r?   r   r'   r'   r(   r    s
    z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc             S   s   | j jdddi d S )Nz
no-end-tagr=   r  )rG   ry   )r?   r   r'   r'   r(   	endTagCol  s    z/getPhases.<locals>.InColumnGroupPhase.endTagColc             S   s"   | j  }| jtd |s|S d S )Nr   )r  r  r  )r?   r   r  r'   r'   r(   r    s    z1getPhases.<locals>.InColumnGroupPhase.endTagOtherr   r  r   N)r6   r7   r8   r  r   r  r   r~   r  r  r  r  r  r   r  r   r   r  r   r'   )r   r'   r(   InColumnGroupPhase  s"   
	r  c                   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zejd jfde	fd&e
fd'efgZee_ejd(efd#efd)efgZee_d%S )*z#getPhases.<locals>.InTableBodyPhasec             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   rw   )r   r   r   r   rw   )r;   rx   r=   r   rG   rN   r   )r?   r'   r'   r(   clearStackToTableBodyContext  s
    z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc             S   s   | j jd j  d S )Nr   )rG   rD   r   )r?   r'   r'   r(   r     s    z.getPhases.<locals>.InTableBodyPhase.processEOFc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r     s    z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc             S   s   | j jd j|S )Nr   )rG   rD   r~   )r?   r   r'   r'   r(   r~     s    z5getPhases.<locals>.InTableBodyPhase.processCharactersc             S   s(   | j   | jj| | jjd | j_d S )Nr   )r  r;   r   rG   rD   r[   )r?   r   r'   r'   r(   
startTagTr   s    z.getPhases.<locals>.InTableBodyPhase.startTagTrc             S   s*   | j jdd|d i | jtdd |S )Nzunexpected-cell-in-table-bodyr=   r   rm   )rG   ry   r  r  )r?   r   r'   r'   r(   startTagTableCell  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   )rY  r   r   r   rw   )r;   rZ  r  endTagTableRowGroupr  rx   r=   rG   rN   r   ry   )r?   r   r'   r'   r(   startTagTableOther  s    z6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r    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 )Nr=   r   )rY  r   z unexpected-end-tag-in-table-body)	r;   rZ  r  rx   r   rG   rD   r[   ry   )r?   r   r'   r'   r(   r    s    z7getPhases.<locals>.InTableBodyPhase.endTagTableRowGroupc             S   sn   | j jddds0| j jddds0| j jdddrT| j  | jt| j jd j |S | jjs`t	| jj
  d S )Nr   r   )rY  r   r   r   rw   )r;   rZ  r  r  r  rx   r=   rG   rN   r   ry   )r?   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-bodyr=   )rG   ry   )r?   r   r'   r'   r(   r  2  s    z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r  6  s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherr   r   r   r   r   r  r   r   r   r   r   r   N)r   r   )r   r  r   r   r   r   )r   r   r   )r   r   r  r   r   r   r   r   )r6   r7   r8   r  r   r  r   r   r~   r  r  r  r  r  r  r  r  r   r  r   r   r  r   r'   )r   r'   r(   InTableBodyPhase  s4   
	
 r  c                   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zejd jfd(e
fd)efgZee_ejd$efd%efd*efd+efgZee_d'S ),zgetPhases.<locals>.InRowPhasec             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-rowr=   rw   )r   r   rw   )r;   rx   r=   rG   ry   r   )r?   r'   r'   r(   clearStackToTableRowContextO  s    z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc             S   s   | j jddd S )Nr   r   )rY  )r;   rZ  )r?   r'   r'   r(   ignoreEndTagTrU  s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc             S   s   | j jd j  d S )Nr   )rG   rD   r   )r?   r'   r'   r(   r   Y  s    z(getPhases.<locals>.InRowPhase.processEOFc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r   \  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc             S   s   | j jd j|S )Nr   )rG   rD   r~   )r?   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   )	r  r;   r   rG   rD   r[   rF  r   r   )r?   r   r'   r'   r(   r  b  s    z/getPhases.<locals>.InRowPhase.startTagTableCellc             S   s"   | j  }| jtd |s|S d S )Nr   )r  endTagTrr  )r?   r   r  r'   r'   r(   r  h  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r  o  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   )r  r  r;   rx   r   rG   rD   r[   rN   r   ry   )r?   r   r'   r'   r(   r  r  s    z&getPhases.<locals>.InRowPhase.endTagTrc             S   s"   | j  }| jtd |s|S d S )Nr   )r  r  r  )r?   r   r  r'   r'   r(   r  |  s    z)getPhases.<locals>.InRowPhase.endTagTablec             S   s4   | j j|d ddr&| jtd |S | jj  d S )Nr=   r   )rY  r   )r;   rZ  r  r  rG   ry   )r?   r   r'   r'   r(   r    s    z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc             S   s   | j jdd|d i d S )Nzunexpected-end-tag-in-table-rowr=   )rG   ry   )r?   r   r'   r'   r(   r    s    z*getPhases.<locals>.InRowPhase.endTagIgnorec             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r    s    z)getPhases.<locals>.InRowPhase.endTagOtherr   r   r   r   r  r   r   r   r   r   r   r   N)r   r   )r   r  r   r   r   r   r   )r   r   r   )r   r   r  r   r   r   r   )r6   r7   r8   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(   
InRowPhaseJ  s6   
 
r  c                   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zejd jfd efgZe	e_ejd!e
fd"efd#efgZee_dS )$zgetPhases.<locals>.InCellPhasec             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   )rY  r   )r;   rZ  endTagTableCellr  )r?   r'   r'   r(   	closeCell  s    z(getPhases.<locals>.InCellPhase.closeCellc             S   s   | j jd j  d S )Nr   )rG   rD   r   )r?   r'   r'   r(   r     s    z)getPhases.<locals>.InCellPhase.processEOFc             S   s   | j jd j|S )Nr   )rG   rD   r~   )r?   r   r'   r'   r(   r~     s    z0getPhases.<locals>.InCellPhase.processCharactersc             S   sF   | j jddds | j jdddr,| j  |S | jjs8t| jj  d S )Nr   r   )rY  r   )r;   rZ  r   rG   rN   r   ry   )r?   r   r'   r'   r(   r    s    z1getPhases.<locals>.InCellPhase.startTagTableOtherc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r    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 )	Nr=   r   )rY  r   zunexpected-cell-end-tagr   zunexpected-end-tagrw   )r;   rZ  r  rx   r=   rG   ry   r   r  rD   r[   )r?   r   r   r'   r'   r(   r    s    
z.getPhases.<locals>.InCellPhase.endTagTableCellc             S   s   | j jdd|d i d S )Nzunexpected-end-tagr=   )rG   ry   )r?   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 )Nr=   r   )rY  )r;   rZ  r   rG   ry   )r?   r   r'   r'   r(   endTagImply  s    z*getPhases.<locals>.InCellPhase.endTagImplyc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r    s    z*getPhases.<locals>.InCellPhase.endTagOtherr   r   r  r   r   r   r   r   r   r   r   r   N)	r   r  r   r   r   r   r   r   r   )r   r   )r   r   r  r   r   )r   r   r   r   r   )r6   r7   r8   r  r   r   r   r~   r  r  r  r  r  r  r   r  r   r   r  r   r'   )r   r'   r(   InCellPhase  s(   
 r  c                   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zejd jfdefdefde	fd"e
fd efgZee_ejdefdefdefgZee_d!S )#z getPhases.<locals>.InSelectPhasec             S   s0   | j jd jdkr | jjd n| jjs,td S )Nr   r   zeof-in-selectrw   )r;   rx   r=   rG   ry   rN   r   )r?   r'   r'   r(   r     s    z+getPhases.<locals>.InSelectPhase.processEOFc             S   s$   |d dkrd S | j j|d  d S )Nrq   rQ  )r;   r   )r?   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  rw   )r;   rx   r=   r   r   )r?   r   r'   r'   r(   startTagOption  s    z/getPhases.<locals>.InSelectPhase.startTagOptionc             S   sL   | j jd jdkr| j jj  | j jd jdkr<| j jj  | j j| d S )Nr   r  r  rw   rw   )r;   rx   r=   r   r   )r?   r   r'   r'   r(   startTagOptgroup	  s
    z1getPhases.<locals>.InSelectPhase.startTagOptgroupc             S   s   | j jd | jtd d S )Nzunexpected-select-in-selectr   )rG   ry   endTagSelectr  )r?   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   )rY  )rG   ry   r;   rZ  r  r  rN   r   )r?   r   r'   r'   r(   rv  	  s
    z.getPhases.<locals>.InSelectPhase.startTagInputc             S   s   | j jd j|S )Nr  )rG   rD   r   )r?   r   r'   r'   r(   r)  	  s    z/getPhases.<locals>.InSelectPhase.startTagScriptc             S   s   | j jdd|d i d S )Nzunexpected-start-tag-in-selectr=   )rG   ry   )r?   r   r'   r'   r(   r  	  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-selectr=   rw   )r;   rx   r=   r   rG   ry   )r?   r   r'   r'   r(   endTagOption	  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-selectr=   rw   rw   )r;   rx   r=   r   rG   ry   )r?   r   r'   r'   r(   endTagOptgroup%	  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   )rY  )
r;   rZ  rx   r   r=   rG   r]   rN   r   ry   )r?   r   r   r'   r'   r(   r  2	  s    z-getPhases.<locals>.InSelectPhase.endTagSelectc             S   s   | j jdd|d i d S )Nzunexpected-end-tag-in-selectr=   )rG   ry   )r?   r   r'   r'   r(   r  =	  s    z,getPhases.<locals>.InSelectPhase.endTagOtherr   r  r  r   r  r  rN  r1  N)r  r  rN  )r6   r7   r8   r  r   r   r~   r  r  r  rv  r)  r  r  r  r  r  r   r  r   r   r  r   r'   )r   r'   r(   InSelectPhase  s4   r	  c            	   @   sn   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
ejdefgZee_ejde	fgZe
e_dS )z'getPhases.<locals>.InSelectInTablePhasec             S   s   | j jd j  d S )Nr   )rG   rD   r   )r?   r'   r'   r(   r   U	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc             S   s   | j jd j|S )Nr   )rG   rD   r~   )r?   r   r'   r'   r(   r~   X	  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-tabler=   r   )rG   ry   r  r  )r?   r   r'   r'   r(   rs  [	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r  `	  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-tabler=   r   )rY  r   )rG   ry   r;   rZ  r  r  )r?   r   r'   r'   r(   r  c	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r  i	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOtherr   r   r   r   r   r   r   r   N)r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r6   r7   r8   r  r   r   r~   rs  r  r  r  r   r  r   r  r   r'   r'   r'   r(   InSelectInTablePhaseR	  s   

r
  c            -       s   e Zd Ze 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d-d. Z fd/d0Zd1d2 Z	d3d4 Z
d5S )6z(getPhases.<locals>.InForeignContentPhaser  r  r  r   r  r  r  rH  r)   r  rI  r  r  Zh1Zh2Zh3Zh4Zh5Zh6r   r  r  rz  rJ  rM  r  r2   rn  r  r&   rL  r  r  r  spanr  r  subsupr   r  r  r  varc          %   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 )'NZaltGlyphZaltGlyphDefZaltGlyphItemZanimateColorZanimateMotionZanimateTransformZclipPathZfeBlendZfeColorMatrixZfeComponentTransferZfeCompositeZfeConvolveMatrixZfeDiffuseLightingZfeDisplacementMapZfeDistantLightZfeFloodZfeFuncAZfeFuncBZfeFuncGZfeFuncRZfeGaussianBlurZfeImageZfeMergeZfeMergeNodeZfeMorphologyZfeOffsetZfePointLightZfeSpecularLightingZfeSpotLightZfeTileZfeTurbulenceZforeignObjectZglyphRefZlinearGradientZradialGradientZtextPath)$ZaltglyphZaltglyphdefZaltglyphitemZanimatecolorZanimatemotionZanimatetransformZclippathZfeblendZfecolormatrixZfecomponenttransferZfecompositeZfeconvolvematrixZfediffuselightingZfedisplacementmapZfedistantlightZfefloodZfefuncaZfefuncbZfefuncgZfefuncrZfegaussianblurZfeimageZfemergeZfemergenodeZfemorphologyZfeoffsetZfepointlightZfespecularlightingZfespotlightZfetileZfeturbulenceZforeignobjectZglyphrefZlineargradientZradialgradientZtextpathr=   r'   )r?   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 )Nrq   rQ  u   �c             s   s   | ]}|t kV  qd S )N)r   )r<   rR  r'   r'   r(   	<genexpr>	  s    zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rG   r^   rT  r~   )r?   r   )r   r'   r(   r~   	  s    
z:getPhases.<locals>.InForeignContentPhase.processCharactersc             S   s2  | j jd }|d | jks@|d dkrt|d j dddh@ 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  qXW |S |jtd	 kr| jj| n$|jtd
 kr| j| | jj| | jj| |j|d< | j j| |d r.| j jj  d|d< d S )Nr   r=   r  rq   colorZfacesizez*unexpected-html-element-in-foreign-contentrb   rs   rf   ru   Trv   rw   rw   rw   rw   )r;   rx   breakoutElementssetkeysrG   ry   rf   r|   rj   rk   r   r   r   r  r   r   r   )r?   r   r   r'   r'   r(   r   	  s.    



z8getPhases.<locals>.InForeignContentPhase.processStartTagc             S   s   t | jjd }| jjd }|jjt|d krF| jjdd|d i x|jjt|d kr| jj| jj	d kr| jjj
  | jjj| j_x | jjj |kr| jjstqW d }P |d8 }| jj| }|j| jjkrqHqH| jjj|}P qHW |S )Nr   r=   zunexpected-end-tagr  rw   )r{   r;   rx   r=   rh   r   rG   ry   r[   rD   r  r   r   r   rf   r|   r   )r?   r   Z	nodeIndexr   r   r'   r'   r(   r   	  s(    z6getPhases.<locals>.InForeignContentPhase.processEndTagN)r6   r7   r8   r  r   r}   r  r  r~   r   r   r'   )r   r'   r(   InForeignContentPhasex	  s   


)r  c               @   sv   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd ZejdefgZe	e_ejde
fgZee_dS )z!getPhases.<locals>.AfterBodyPhasec             S   s   d S )Nr'   )r?   r'   r'   r(   r   	  s    z,getPhases.<locals>.AfterBodyPhase.processEOFc             S   s   | j j|| j jd  d S )Nr   )r;   r   rx   )r?   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   )rG   ry   rD   r[   )r?   r   r'   r'   r(   r~   	  s    z3getPhases.<locals>.AfterBodyPhase.processCharactersc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   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-bodyr=   r   )rG   ry   rD   r[   )r?   r   r'   r'   r(   r  	  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)rG   rN   ry   rD   r[   )r?   r=   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-bodyr=   r   )rG   ry   rD   r[   )r?   r   r'   r'   r(   r  

  s    z-getPhases.<locals>.AfterBodyPhase.endTagOtherr   N)r6   r7   r8   r  r   r   r   r~   r   r  r  r  r   r  r   r  r   r'   r'   r'   r(   AfterBodyPhase	  s   r  c                   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zejd jfdefdefde	fgZe
e_ejdefgZee_dS )z"getPhases.<locals>.InFramesetPhasec             S   s0   | j jd jdkr | jjd n| jjs,td S )Nr   r   zeof-in-framesetrw   )r;   rx   r=   rG   ry   rN   r   )r?   r'   r'   r(   r   
  s    z-getPhases.<locals>.InFramesetPhase.processEOFc             S   s   | j jd d S )Nzunexpected-char-in-frameset)rG   ry   )r?   r   r'   r'   r(   r~   "
  s    z4getPhases.<locals>.InFramesetPhase.processCharactersc             S   s   | j j| d S )N)r;   r   )r?   r   r'   r'   r(   r=  %
  s    z3getPhases.<locals>.InFramesetPhase.startTagFramesetc             S   s   | j j| | j jj  d S )N)r;   r   rx   r   )r?   r   r'   r'   r(   startTagFrame(
  s    z0getPhases.<locals>.InFramesetPhase.startTagFramec             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   startTagNoframes,
  s    z3getPhases.<locals>.InFramesetPhase.startTagNoframesc             S   s   | j jdd|d i d S )Nz unexpected-start-tag-in-framesetr=   )rG   ry   )r?   r   r'   r'   r(   r  /
  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   afterFramesetrw   rw   )	r;   rx   r=   rG   ry   r   rN   rD   r[   )r?   r   r'   r'   r(   endTagFrameset3
  s    
z1getPhases.<locals>.InFramesetPhase.endTagFramesetc             S   s   | j jdd|d i d S )Nzunexpected-end-tag-in-framesetr=   )rG   ry   )r?   r   r'   r'   r(   r  ?
  s    z.getPhases.<locals>.InFramesetPhase.endTagOtherr   r   r  r.  N)r6   r7   r8   r  r   r   r~   r=  r  r  r  r  r  r   r  r   r   r  r   r'   )r   r'   r(   InFramesetPhase
  s$   r  c                   sv   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
ejd jfdefgZee_ejde	fgZe
e_dS )z%getPhases.<locals>.AfterFramesetPhasec             S   s   d S )Nr'   )r?   r'   r'   r(   r   T
  s    z0getPhases.<locals>.AfterFramesetPhase.processEOFc             S   s   | j jd d S )Nzunexpected-char-after-frameset)rG   ry   )r?   r   r'   r'   r(   r~   X
  s    z7getPhases.<locals>.AfterFramesetPhase.processCharactersc             S   s   | j jd j|S )Nr  )rG   rD   r   )r?   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-framesetr=   )rG   ry   )r?   r   r'   r'   r(   r  ^
  s    z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc             S   s   | j jd | j _d S )NafterAfterFrameset)rG   rD   r[   )r?   r   r'   r'   r(   r  b
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc             S   s   | j jdd|d i d S )Nz!unexpected-end-tag-after-framesetr=   )rG   ry   )r?   r   r'   r'   r(   r  e
  s    z1getPhases.<locals>.AfterFramesetPhase.endTagOtherr   r.  N)r6   r7   r8   r  r   r   r~   r  r  r  r  r   r  r   r   r  r   r'   )r   r'   r(   AfterFramesetPhaseP
  s   r   c               @   s`   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zejde	fgZe
e_dS )z&getPhases.<locals>.AfterAfterBodyPhasec             S   s   d S )Nr'   )r?   r'   r'   r(   r   w
  s    z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc             S   s   | j j|| j j d S )N)r;   r   r   )r?   r   r'   r'   r(   r   z
  s    z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r   }
  s    z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharactersc             S   s    | j jd | j jd | j _|S )Nzexpected-eof-but-got-charr   )rG   ry   rD   r[   )r?   r   r'   r'   r(   r~   
  s    z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r   
  s    z3getPhases.<locals>.AfterAfterBodyPhase.startTagHtmlc             S   s*   | j jdd|d i | j jd | j _|S )Nzexpected-eof-but-got-start-tagr=   r   )rG   ry   rD   r[   )r?   r   r'   r'   r(   r  
  s    z4getPhases.<locals>.AfterAfterBodyPhase.startTagOtherc             S   s*   | j jdd|d i | j jd | j _|S )Nzexpected-eof-but-got-end-tagr=   r   )rG   ry   rD   r[   )r?   r   r'   r'   r(   r   
  s    z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagr   N)r6   r7   r8   r  r   r   r   r   r~   r   r  r   r   r  r   r  r'   r'   r'   r(   AfterAfterBodyPhaset
  s   r!  c               @   sn   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zejde	fde
fgZee_dS )z*getPhases.<locals>.AfterAfterFramesetPhasec             S   s   d S )Nr'   )r?   r'   r'   r(   r   
  s    z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc             S   s   | j j|| j j d S )N)r;   r   r   )r?   r   r'   r'   r(   r   
  s    z9getPhases.<locals>.AfterAfterFramesetPhase.processCommentc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r   
  s    zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc             S   s   | j jd d S )Nzexpected-eof-but-got-char)rG   ry   )r?   r   r'   r'   r(   r~   
  s    z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc             S   s   | j jd j|S )Nr   )rG   rD   r   )r?   r   r'   r'   r(   r   
  s    z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc             S   s   | j jd j|S )Nr  )rG   rD   r   )r?   r   r'   r'   r(   startTagNoFrames
  s    z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc             S   s   | j jdd|d i d S )Nzexpected-eof-but-got-start-tagr=   )rG   ry   )r?   r   r'   r'   r(   r  
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc             S   s   | j jdd|d i d S )Nzexpected-eof-but-got-end-tagr=   )rG   ry   )r?   r   r'   r'   r(   r   
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagr   r.  N)r6   r7   r8   r  r   r   r   r   r~   r   r"  r  r   r   r  r   r  r'   r'   r'   r(   AfterAfterFramesetPhase
  s   r#  )rR   rQ   r   r  r'  r*  r   r   r   r  r   r   r   r   r   r   r  rt   r  r   r  r  r  )r   )rE   rT   r   r  r  r  r7  r;  r@  r  r  r  r  r  r  r  r	  r
  r  r  r  r   r!  r#  r'   )rC  r  r   r(   rC     sp    H %-f?B     Y! /F@bYLc&r.8$%&rC   c                sF   t | d t  @ }|rBt| d  fdd| d j D | d< d S )Nrq   c             3   s"   | ]\}} j |||fV  qd S )N)rz   )r<   kv)r  r'   r(   r  
  s   z$adjust_attributes.<locals>.<genexpr>)r   r0   r,   )r   r  Zneeds_adjustmentr'   )r  r(   r   
  s    r   rn   Fc             C   s   |d kri }t | | ||dS )N)r0   r=   rq   ru   )r   )r=   r0   rg   ru   r'   r'   r(   r  
  s    
r  c               @   s   e Zd ZdZdS )rp   zError in parsed documentN)r6   r7   r8   r   r'   r'   r'   r(   rp   
  s   rp   )r   T)r)   r   T)rn   NF),
__future__r   r   r   Zpip._vendor.sixr   r   r.   r   r   r	   r
   Ztreebuilders.baser   r   	constantsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r+   r:   r  r    memoizerC   r   r  	Exceptionrp   r'   r'   r'   r(   <module>   sJ   H

  8                  ` 
