£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
    Re                @   s  d dl mZmZmZ d dlmZmZ d dlZddlm	Z	 ddlm
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  d ddZ!d!ddZ"dd Z#G dd de$Z%ej&dd Z'dd Z(d"ddZ)G dd de*Z+dS )#    )absolute_importdivisionunicode_literals)with_metaclassviewkeysN   )_inputstream)
_tokenizer)treebuilders)Marker)_utils)spaceCharactersasciiUpper2LowerspecialElementsheadingElementscdataElementsrcdataElements
tokenTypestagTokenTypes
namespaceshtmlIntegrationPointElements"mathmlTextIntegrationPointElementsadjustForeignAttributesadjustMathMLAttributesadjustSVGAttributesE_ReparseExceptionetreeTc             K   s$   t |}t||d}|j| f|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'   /builddir/build/BUILDROOT/alt-python37-pip-20.2.4-6.el8.x86_64/opt/alt/python37/lib/python3.7/site-packages/pip/_vendor/html5lib/html5parser.pyr!      s    
r!   divc             K   s,   t |}t||d}|j| fd|i|S )a#  Parse an HTML fragment as a string or file-like object into a tree

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

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

    :arg treebuilder: the treebuilder to use when parsing

    :arg namespaceHTMLElements: whether or not to namespace HTML elements

    :returns: parsed tree

    Example:

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

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

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

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

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

        :arg namespaceHTMLElements: whether or not to namespace HTML elements

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

        Example:

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

        Nr   c                s   i | ]\}}|  j |qS r'   )tree).0namecls)selfr'   r(   
<dictcomp>y   s    z'HTMLParser.__init__.<locals>.<dictcomp>)strictr
   r   r>   errors	getPhasesr,   phases)rB   r>   rD   r   debugr'   )rB   r(   __init__]   s    


zHTMLParser.__init__r)   c             K   sh   || _ || _|| _tj|fd| i|| _|   y|   W n$ tk
rb   |   |   Y nX d S )Nparser)	innerHTMLModer*   	scriptingr	   HTMLTokenizer	tokenizerresetmainLoopr   )rB   stream	innerHTMLr*   rL   r$   r'   r'   r(   _parse|   s    zHTMLParser._parsec             C   s   | j   d| _g | _g | _d| _| jr| 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  |   nd| _	| jd | _d | _d | _d| _d S )NFz	no quirks	plaintext
beforeHtmlinitialT)r>   rO   firstStartTagrE   log
compatModerK   r*   lowerrR   r   rN   rcdataStatestater   rawtextStateplaintextStaterG   phaseinsertHtmlElementresetInsertionMode	lastPhasebeforeRCDataPhase
framesetOK)rB   r'   r'   r(   rO      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

        rN   Nr   )hasattrrN   rQ   charEncodingr@   )rB   r'   r'   r(   documentEncoding   s    
zHTMLParser.documentEncodingc             C   sJ   |j dkr6|jtd kr6d|jko4|jd tdkS |j|j ftkS d S )Nzannotation-xmlmathmlencoding)z	text/htmlzapplication/xhtml+xml)r@   	namespacer   
attributes	translater   r   )rB   elementr'   r'   r(   isHTMLIntegrationPoint   s    


z!HTMLParser.isHTMLIntegrationPointc             C   s   |j |jftkS )N)rj   r@   r   )rB   rm   r'   r'   r(   isMathMLTextIntegrationPoint   s    z'HTMLParser.isMathMLTextIntegrationPointc             C   sv  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| |
d
 |
di  d }
qTt| jjdksj|| jj	ksj| 
|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| |rr||||fkrr| j}n
| jd }||kr||
}
qT||kr||
}
qT||kr||
}
qT||kr||
}
qT||kr||
}
qT||krT||
}
qTW ||krB|	d rB|	d sB| dd|	d i qBW d}g }x8|rp|| j | j }|r:| j|ks:tq:W d S )N
CharactersSpaceCharactersStartTagEndTagCommentDoctype
ParseErrorr0   datadatavarsr   r@   mglyph
malignmarkrh   zannotation-xmlsvginForeignContentselfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   rN   r>   openElementsrj   r@   
parseErrorgetlendefaultNamespacero   	frozensetr   rn   r_   rG   processCharactersprocessSpaceCharactersprocessStartTagprocessEndTagprocessCommentprocessDoctypeappend
processEOFAssertionError)rB   CharactersTokenSpaceCharactersTokenStartTagTokenEndTagTokenCommentTokenDoctypeTokenParseErrorTokentoken
prev_token	new_tokencurrentNodecurrentNodeNamespacecurrentNodeNamer0   r_   	reprocessrG   r'   r'   r(   rP      sp    









zHTMLParser.mainLoopc             O   s    | j |ddf|| | 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)rS   r>   getDocument)rB   rQ   argsr$   r'   r'   r(   r!     s    zHTMLParser.parsec             O   s   | j |df|| | 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)rS   r>   getFragment)rB   rQ   r   r$   r'   r'   r(   r+     s    zHTMLParser.parseFragmentXXX-undefined-errorc             C   s@   |d kri }| j | jj ||f | jr<tt| | d S )N)rE   r   rN   rQ   positionrD   rv   r   )rB   	errorcodery   r'   r'   r(   r   ;  s
    zHTMLParser.parseErrorc             C   s   t |t d S )N)adjust_attributesr   )rB   r   r'   r'   r(   r   C  s    z!HTMLParser.adjustMathMLAttributesc             C   s   t |t d S )N)r   r   )rB   r   r'   r'   r(   r   F  s    zHTMLParser.adjustSVGAttributesc             C   s   t |t d S )N)r   adjustForeignAttributesMap)rB   r   r'   r'   r(   r   I  s    z"HTMLParser.adjustForeignAttributesc             C   s   | j   d S )N)rJ   r_   )rB   r   r'   r'   r(   reparseTokenNormalL  s    zHTMLParser.reparseTokenNormalc             C   s   d}ddddddddddd	d	d
dd}x| j jd d d D ]}|j}d }|| j jd krl| jsbtd}| j}|dkr~| js~t|s|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htmlrw   r   T)r   r   r   r   )	r>   r   r@   rR   r   rj   r   rG   r_   )rB   lastnewModesnodenodeName	new_phaser'   r'   r(   ra   P  sB    


zHTMLParser.resetInsertionModec             C   sR   |dkst | j| |dkr.| jj| j_n| jj| j_| j| _| j	d | _d S )N)RAWTEXTRCDATAr   text)
r   r>   insertElementrN   r]   r\   r[   r_   originalPhaserG   )rB   r   contentTyper'   r'   r(   parseRCDataRawtext|  s    zHTMLParser.parseRCDataRawtext)NFTF)Fr)   F)r   N)r9   r:   r;   __doc__rI   rS   rO   propertyrg   rn   ro   rP   r!   r+   r   r   r   r   r   ra   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  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(   rC     s    z*getPhases.<locals>.log.<locals>.<dictcomp>c                s    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 |f  | f||S  | f||S d S )Nprocessr   r0   r@   )r9   
startswithr   r   rJ   rX   r   rN   r\   r_   	__class__)rB   r   r$   r   info)r8   
type_namesr'   r(   wrapped  s    
z'getPhases.<locals>.log.<locals>.wrapped)r   r,   )r8   r   r'   )r8   r   r(   rX     s    zgetPhases.<locals>.logc             S   s   | rt |S tS d S )N)r=   r0   )use_metaclassmetaclass_funcr'   r'   r(   getMetaclass  s    zgetPhases.<locals>.getMetaclassc               @   s\   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd ZdS )zgetPhases.<locals>.PhasezNBase class for helper object that implements each phase of processing
        )rJ   r>   __startTagCache__endTagCachec             S   s   || _ || _i | _i | _d S )N)rJ   r>   _Phase__startTagCache_Phase__endTagCache)rB   rJ   r>   r'   r'   r(   rI     s    z!getPhases.<locals>.Phase.__init__c             S   s   t d S )N)NotImplementedError)rB   r'   r'   r(   r     s    z#getPhases.<locals>.Phase.processEOFc             S   s   | j || j jd  d S )Nrw   )r>   insertCommentr   )rB   r   r'   r'   r(   r     s    z'getPhases.<locals>.Phase.processCommentc             S   s   | j d d S )Nzunexpected-doctype)rJ   r   )rB   r   r'   r'   r(   r     s    z'getPhases.<locals>.Phase.processDoctypec             S   s   | j |d  d S )Nrx   )r>   
insertText)rB   r   r'   r'   r(   r     s    z*getPhases.<locals>.Phase.processCharactersc             S   s   | j |d  d S )Nrx   )r>   r   )rB   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 tt| j  q4W ||S )Nr@   g?)r   startTagHandlerr   popnextiter)rB   r   r@   funcr'   r'   r(   r     s    
z(getPhases.<locals>.Phase.processStartTagc             S   sj   | j js |d dkr | j d x<|d  D ],\}}|| jjd jkr.|| jjd j|< q.W d| j _d S )Nr@   r   znon-html-rootrx   r   F)rJ   rW   r   r,   r>   r   rk   )rB   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 tt| j  q4W ||S )Nr@   g?)r   endTagHandlerr   r   r   r   )rB   r   r@   r   r'   r'   r(   r     s    
z&getPhases.<locals>.Phase.processEndTagN)r9   r:   r;   r   	__slots__rI   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'   )rB   r   r'   r'   r(   r     s    z6getPhases.<locals>.InitialPhase.processSpaceCharactersc             S   s   | j || j j d S )N)r>   r   document)rB   r   r'   r'   r(   r     s    z.getPhases.<locals>.InitialPhase.processCommentc             S   s   |d }|d }|d }|d }|dks@|d k	s@|d k	rL|dkrL| j d |d krXd}| j| |dkrv|t}|r|d dks|d	s|d
ks|dr|d ks|r| dkrd| j _n$|ds|dr|d k	rd| j _| j j	d | j _
d S )Nr@   publicIdsystemIdcorrectr   zabout:legacy-compatzunknown-doctype )7z*+//silmaril//dtd html pro v0r11 19970101//z4-//advasoft ltd//dtd html 3.0 aswedit + extensions//z*-//as//dtd html 3.0 aswedit + extensions//z-//ietf//dtd html 2.0 level 1//z-//ietf//dtd html 2.0 level 2//z&-//ietf//dtd html 2.0 strict level 1//z&-//ietf//dtd html 2.0 strict level 2//z-//ietf//dtd html 2.0 strict//z-//ietf//dtd html 2.0//z-//ietf//dtd html 2.1e//z-//ietf//dtd html 3.0//z-//ietf//dtd html 3.2 final//z-//ietf//dtd html 3.2//z-//ietf//dtd html 3//z-//ietf//dtd html level 0//z-//ietf//dtd html level 1//z-//ietf//dtd html level 2//z-//ietf//dtd html level 3//z"-//ietf//dtd html strict level 0//z"-//ietf//dtd html strict level 1//z"-//ietf//dtd html strict level 2//z"-//ietf//dtd html strict level 3//z-//ietf//dtd html strict//z-//ietf//dtd html//z(-//metrius//dtd metrius presentational//z5-//microsoft//dtd internet explorer 2.0 html strict//z.-//microsoft//dtd internet explorer 2.0 html//z0-//microsoft//dtd internet explorer 2.0 tables//z5-//microsoft//dtd internet explorer 3.0 html strict//z.-//microsoft//dtd internet explorer 3.0 html//z0-//microsoft//dtd internet explorer 3.0 tables//z#-//netscape comm. corp.//dtd html//z*-//netscape comm. corp.//dtd strict html//z*-//o'reilly and associates//dtd html 2.0//z3-//o'reilly and associates//dtd html extended 1.0//z;-//o'reilly and associates//dtd html extended relaxed 1.0//zN-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//zE-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//z$-//spyglass//dtd html 2.0 extended//z+-//sq//dtd html 2.0 hotmetal + extensions//z--//sun microsystems corp.//dtd hotjava html//z4-//sun microsystems corp.//dtd hotjava strict html//z-//w3c//dtd html 3 1995-03-24//z-//w3c//dtd html 3.2 draft//z-//w3c//dtd html 3.2 final//z-//w3c//dtd html 3.2//z-//w3c//dtd html 3.2s draft//z-//w3c//dtd html 4.0 frameset//z#-//w3c//dtd html 4.0 transitional//z(-//w3c//dtd html experimental 19960712//z&-//w3c//dtd html experimental 970421//z-//w3c//dtd w3 html//z-//w3o//dtd w3 html 3.0//z#-//webtechs//dtd mozilla html 2.0//z-//webtechs//dtd mozilla html//)z$-//w3o//dtd w3 html strict 3.0//en//z"-/w3c/dtd html 4.0 transitional/enr   )z -//w3c//dtd html 4.01 frameset//z$-//w3c//dtd html 4.01 transitional//z:http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtdquirks)z -//w3c//dtd xhtml 1.0 frameset//z$-//w3c//dtd xhtml 1.0 transitional//zlimited quirksrU   )rJ   r   r>   insertDoctyperl   r   r   rZ   rY   rG   r_   )rB   r   r@   r   r   r   r'   r'   r(   r     s8    
7
z.getPhases.<locals>.InitialPhase.processDoctypec             S   s   d| j _| j jd | j _d S )Nr   rU   )rJ   rY   rG   r_   )rB   r'   r'   r(   anythingElseZ  s    z,getPhases.<locals>.InitialPhase.anythingElsec             S   s   | j d |   |S )Nzexpected-doctype-but-got-chars)rJ   r   r   )rB   r   r'   r'   r(   r   ^  s    z1getPhases.<locals>.InitialPhase.processCharactersc             S   s"   | j dd|d i |   |S )Nz"expected-doctype-but-got-start-tagr@   )rJ   r   r   )rB   r   r'   r'   r(   r   c  s    z/getPhases.<locals>.InitialPhase.processStartTagc             S   s"   | j dd|d i |   |S )Nz expected-doctype-but-got-end-tagr@   )rJ   r   r   )rB   r   r'   r'   r(   r   i  s    z-getPhases.<locals>.InitialPhase.processEndTagc             S   s   | j d |   dS )Nzexpected-doctype-but-got-eofT)rJ   r   r   )rB   r'   r'   r(   r   o  s    z*getPhases.<locals>.InitialPhase.processEOFN)r9   r:   r;   tupler   r   r   r   r   r   r   r   r   r'   r'   r'   r(   InitialPhase  s   _r   c               @   sJ   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd ZdS )z"getPhases.<locals>.BeforeHtmlPhasec             S   s&   | j tdd | jjd | j_d S )Nr   rr   r   )r>   
insertRootimpliedTagTokenrJ   rG   r_   )rB   r'   r'   r(   r`   x  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc             S   s   |    dS )NT)r`   )rB   r'   r'   r(   r   }  s    z-getPhases.<locals>.BeforeHtmlPhase.processEOFc             S   s   | j || j j d S )N)r>   r   r   )rB   r   r'   r'   r(   r     s    z1getPhases.<locals>.BeforeHtmlPhase.processCommentc             S   s   d S )Nr'   )rB   r   r'   r'   r(   r     s    z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc             S   s   |    |S )N)r`   )rB   r   r'   r'   r(   r     s    z4getPhases.<locals>.BeforeHtmlPhase.processCharactersc             S   s    |d dkrd| j _|   |S )Nr@   r   T)rJ   rW   r`   )rB   r   r'   r'   r(   r     s    z2getPhases.<locals>.BeforeHtmlPhase.processStartTagc             S   s4   |d dkr$| j dd|d i n|   |S d S )Nr@   )r   r   r   brzunexpected-end-tag-before-html)rJ   r   r`   )rB   r   r'   r'   r(   r     s
    z0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)r9   r:   r;   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defde	fgZe
e_edefgZee_dS )z"getPhases.<locals>.BeforeHeadPhasec             S   s   |  tdd dS )Nr   rr   T)startTagHeadr   )rB   r'   r'   r(   r     s    z-getPhases.<locals>.BeforeHeadPhase.processEOFc             S   s   d S )Nr'   )rB   r   r'   r'   r(   r     s    z9getPhases.<locals>.BeforeHeadPhase.processSpaceCharactersc             S   s   |  tdd |S )Nr   rr   )r   r   )rB   r   r'   r'   r(   r     s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r     s    z/getPhases.<locals>.BeforeHeadPhase.startTagHtmlc             S   s0   | j | | j jd | j _| jjd | j_d S )Nrw   inHead)r>   r   r   headPointerrJ   rG   r_   )rB   r   r'   r'   r(   r     s    z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc             S   s   |  tdd |S )Nr   rr   )r   r   )rB   r   r'   r'   r(   startTagOther  s    z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc             S   s   |  tdd |S )Nr   rr   )r   r   )rB   r   r'   r'   r(   endTagImplyHead  s    z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc             S   s   | j dd|d i d S )Nzend-tag-after-implied-rootr@   )rJ   r   )rB   r   r'   r'   r(   endTagOther  s    z.getPhases.<locals>.BeforeHeadPhase.endTagOtherr   r   )r   r   r   r   N)r9   r:   r;   r   r   r   r   r   r   r   r   r   r   r   MethodDispatcherr   defaultr   r'   r'   r'   r(   BeforeHeadPhase  s    r   c               @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zedefd efd!efd"efd#efd$e	fd%e
fd&efgZee_ed&efd'efgZee_d(S ))zgetPhases.<locals>.InHeadPhasec             S   s   |    dS )NT)r   )rB   r'   r'   r(   r     s    z)getPhases.<locals>.InHeadPhase.processEOFc             S   s   |    |S )N)r   )rB   r   r'   r'   r(   r     s    z0getPhases.<locals>.InHeadPhase.processCharactersc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r     s    z+getPhases.<locals>.InHeadPhase.startTagHtmlc             S   s   | j d d S )Nz!two-heads-are-not-better-than-one)rJ   r   )rB   r   r'   r'   r(   r     s    z+getPhases.<locals>.InHeadPhase.startTagHeadc             S   s$   | j | | j j  d|d< d S )NTr   )r>   r   r   r   )rB   r   r'   r'   r(   startTagBaseLinkCommand  s    z6getPhases.<locals>.InHeadPhase.startTagBaseLinkCommandc             S   s   | j | | j j  d|d< |d }| jjjjd dkrd|krZ| jjj|d  nVd|krd|kr|d 	 d	krt
|d d
}t
|}| }| jjj| d S )NTr   rx   r   	tentativecharsetcontentz
http-equivzcontent-typezutf-8)r>   r   r   r   rJ   rN   rQ   rf   changeEncodingrZ   r   EncodingBytesencodeContentAttrParserr!   )rB   r   rk   rx   rJ   codecr'   r'   r(   startTagMeta  s    
z+getPhases.<locals>.InHeadPhase.startTagMetac             S   s   | j |d d S )Nr   )rJ   r   )rB   r   r'   r'   r(   startTagTitle  s    z,getPhases.<locals>.InHeadPhase.startTagTitlec             S   s   | j |d d S )Nr   )rJ   r   )rB   r   r'   r'   r(   startTagNoFramesStyle  s    z4getPhases.<locals>.InHeadPhase.startTagNoFramesStylec             S   s8   | j jr| j |d n| j| | j jd | j _d S )Nr   inHeadNoscript)rJ   rL   r   r>   r   rG   r_   )rB   r   r'   r'   r(   startTagNoscript  s    z/getPhases.<locals>.InHeadPhase.startTagNoscriptc             S   s<   | j | | jjj| jj_| jj| j_| jjd | j_d S )Nr   )	r>   r   rJ   rN   scriptDataStater\   r_   r   rG   )rB   r   r'   r'   r(   startTagScript   s    z-getPhases.<locals>.InHeadPhase.startTagScriptc             S   s   |    |S )N)r   )rB   r   r'   r'   r(   r     s    z,getPhases.<locals>.InHeadPhase.startTagOtherc             S   s:   | j jj }|jdks&td|j | j jd | j _d S )Nr   zExpected head got %s	afterHead)rJ   r>   r   r   r@   r   rG   r_   )rB   r   r   r'   r'   r(   
endTagHead
  s    z)getPhases.<locals>.InHeadPhase.endTagHeadc             S   s   |    |S )N)r   )rB   r   r'   r'   r(   endTagHtmlBodyBr  s    z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc             S   s   | j dd|d i d S )Nzunexpected-end-tagr@   )rJ   r   )rB   r   r'   r'   r(   r     s    z*getPhases.<locals>.InHeadPhase.endTagOtherc             S   s   |  td d S )Nr   )r  r   )rB   r'   r'   r(   r     s    z+getPhases.<locals>.InHeadPhase.anythingElser   title)noframesstylenoscriptscript)basebasefontbgsoundcommandlinkr2   r   )r   r   r   N)r9   r:   r;   r   r   r   r   r   r   r   r  r	  r
  r  r  r   r  r  r   r   r   r   r   r   r   r'   r'   r'   r(   InHeadPhase  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de	fde
fdefgZee_edefdefgZee_dS )z&getPhases.<locals>.InHeadNoscriptPhasec             S   s   | j d |   dS )Nzeof-in-head-noscriptT)rJ   r   r   )rB   r'   r'   r(   r   /  s    z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   4  s    z5getPhases.<locals>.InHeadNoscriptPhase.processCommentc             S   s   | j d |   |S )Nzchar-in-head-noscript)rJ   r   r   )rB   r   r'   r'   r(   r   7  s    z8getPhases.<locals>.InHeadNoscriptPhase.processCharactersc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   <  s    z=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharactersc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   ?  s    z3getPhases.<locals>.InHeadNoscriptPhase.startTagHtmlc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   B  s    z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc             S   s   | j dd|d i d S )Nzunexpected-start-tagr@   )rJ   r   )rB   r   r'   r'   r(   startTagHeadNoscriptE  s    z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc             S   s"   | j dd|d i |   |S )Nzunexpected-inhead-noscript-tagr@   )rJ   r   r   )rB   r   r'   r'   r(   r   H  s    z4getPhases.<locals>.InHeadNoscriptPhase.startTagOtherc             S   s:   | j jj }|jdks&td|j | j jd | j _d S )Nr  zExpected noscript got %sr   )rJ   r>   r   r   r@   r   rG   r_   )rB   r   r   r'   r'   r(   endTagNoscriptM  s    z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc             S   s"   | j dd|d i |   |S )Nzunexpected-inhead-noscript-tagr@   )rJ   r   r   )rB   r   r'   r'   r(   endTagBrR  s    z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc             S   s   | j dd|d i d S )Nzunexpected-end-tagr@   )rJ   r   )rB   r   r'   r'   r(   r   W  s    z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc             S   s   |  td d S )Nr  )r  r   )rB   r'   r'   r(   r   Z  s    z3getPhases.<locals>.InHeadNoscriptPhase.anythingElser   )r  r  r  r2   r  r  )r   r  r  r   N)r9   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(   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defdefde	fde
fdefgZee_edefgZee_dS )z!getPhases.<locals>.AfterHeadPhasec             S   s   |    dS )NT)r   )rB   r'   r'   r(   r   n  s    z,getPhases.<locals>.AfterHeadPhase.processEOFc             S   s   |    |S )N)r   )rB   r   r'   r'   r(   r   r  s    z3getPhases.<locals>.AfterHeadPhase.processCharactersc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   v  s    z.getPhases.<locals>.AfterHeadPhase.startTagHtmlc             S   s(   d| j _| j| | j jd | j _d S )NFr   )rJ   rd   r>   r   rG   r_   )rB   r   r'   r'   r(   startTagBodyy  s    z.getPhases.<locals>.AfterHeadPhase.startTagBodyc             S   s    | j | | jjd | j_d S )Nr   )r>   r   rJ   rG   r_   )rB   r   r'   r'   r(   startTagFrameset~  s    z2getPhases.<locals>.AfterHeadPhase.startTagFramesetc             S   st   | j dd|d i | jj| jj | j jd | x4| jjd d d D ]}|jdkrN| jj	| P qNW d S )Nz#unexpected-start-tag-out-of-my-headr@   r   rw   r   )
rJ   r   r>   r   r   r   rG   r   r@   remove)rB   r   r   r'   r'   r(   startTagFromHead  s    
z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc             S   s   | j dd|d i d S )Nzunexpected-start-tagr@   )rJ   r   )rB   r   r'   r'   r(   r     s    z.getPhases.<locals>.AfterHeadPhase.startTagHeadc             S   s   |    |S )N)r   )rB   r   r'   r'   r(   r     s    z/getPhases.<locals>.AfterHeadPhase.startTagOtherc             S   s   |    |S )N)r   )rB   r   r'   r'   r(   r    s    z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc             S   s   | j dd|d i d S )Nzunexpected-end-tagr@   )rJ   r   )rB   r   r'   r'   r(   r     s    z-getPhases.<locals>.AfterHeadPhase.endTagOtherc             S   s.   | j tdd | jjd | j_d| j_d S )Nr   rr   r   T)r>   r   r   rJ   rG   r_   rd   )rB   r'   r'   r(   r     s    z.getPhases.<locals>.AfterHeadPhase.anythingElser   r   r   )	r  r  r  r  r2   r  r  r  r  r   )r   r   r   N)r9   r:   r;   r   r   r   r   r   r!  r"  r$  r   r   r  r   r   r   r   r   r   r   r'   r'   r'   r(   AfterHeadPhasek  s.   

r%  c            $       s  e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddde Z5dfdg Z6e78dhj9fdiefdjefdkefdlefe:efdmefdnefdoefdpefdqefdrefdsefdtefduefdvefdwefdxefdyefdzefd{efd|efd}e fd~e!fde"fde#fde$fde&fde'fde%fde(fde)fde*fg!Z;e+e;_<e78dje-fdhe.fde/fdne0fde,fde1fe:e2fde3fdue4fde5fg
Z=e6e=_<  Z>S )zgetPhases.<locals>.InBodyPhase)r   c                s   t  | j|| | j| _d S )N)superrI   processSpaceCharactersNonPrer   )rB   r   r$   )InBodyPhaser   r'   r(   rI     s    z'getPhases.<locals>.InBodyPhase.__init__c             S   s$   |j |j ko"|j|jko"|j|jkS )N)r@   rj   rk   )rB   node1node2r'   r'   r(   isMatchingFormattingElement  s    z:getPhases.<locals>.InBodyPhase.isMatchingFormattingElementc             S   s   | j | | j jd }g }x<| j jd d d D ]&}|tkr@P q0| ||r0|| q0W t|dksjtt|dkr| j j	|d  | j j| d S )Nrw      )
r>   r   r   activeFormattingElementsr   r+  r   r   r   r#  )rB   r   rm   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d P qW d S )N)dddtlir&   r   r   r   r   r   r   r   r   rw   z expected-closing-tag-but-got-eof)r   r>   r   r@   rJ   r   )rB   allowed_elementsr   r'   r'   r(   r     s
    
z)getPhases.<locals>.InBodyPhase.processEOFc             S   sf   |d }| j | _|drH| jjd jdkrH| jjd  sH|dd  }|rb| j  | j| d S )Nrx   
rw   )prelistingtextarear   )	r'  r   r   r>   r   r@   
hasContent#reconstructActiveFormattingElementsr   )rB   r   rx   r'   r'   r(   !processSpaceCharactersDropNewline  s    

z@getPhases.<locals>.InBodyPhase.processSpaceCharactersDropNewlinec             S   sT   |d dkrd S | j   | j |d  | jjrPtdd |d D rPd| j_d S )Nrx    c             S   s   g | ]}|t kqS r'   )r   )r?   charr'   r'   r(   
<listcomp>  s   zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r>   r9  r   rJ   rd   any)rB   r   r'   r'   r(   r     s    
z0getPhases.<locals>.InBodyPhase.processCharactersc             S   s   | j   | j |d  d S )Nrx   )r>   r9  r   )rB   r   r'   r'   r(   r'    s    
z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   startTagProcessInHead  s    z4getPhases.<locals>.InBodyPhase.startTagProcessInHeadc             S   s   | 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 	 D ],\}}|| jjd j
krX|| jjd j
|< qXW d S )Nzunexpected-start-tagr@   r   r   Frx   )rJ   r   r   r>   r   r@   rR   r   rd   r,   rk   )rB   r   r   r   r'   r'   r(   r!    s    z+getPhases.<locals>.InBodyPhase.startTagBodyc             S   s   | 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d  x"| jjd jdkr| jj  qxW | j| | j jd | j _d S )	Nzunexpected-start-tagr@   r   r   r   rw   r   r   )rJ   r   r   r>   r   r@   rR   r   rd   parentremoveChildr   r   rG   r_   )rB   r   r'   r'   r(   r"    s    "z/getPhases.<locals>.InBodyPhase.startTagFramesetc             S   s.   | j jdddr| td | j | d S )Nr&   button)variant)r>   elementInScopeendTagPr   r   )rB   r   r'   r'   r(   startTagCloseP  s    z-getPhases.<locals>.InBodyPhase.startTagClosePc             S   s>   | j jdddr| td | j | d| j_| j| _d S )Nr&   rB  )rC  F)	r>   rD  rE  r   r   rJ   rd   r:  r   )rB   r   r'   r'   r(   startTagPreListing  s
    z1getPhases.<locals>.InBodyPhase.startTagPreListingc             S   sZ   | j jr| jdddi n:| j jdddr:| td | j | | j jd | j _d S )Nzunexpected-start-tagr@   formr&   rB  )rC  rw   )	r>   formPointerrJ   r   rD  rE  r   r   r   )rB   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t|jd P |j	t
kr8|jdkr8P q8W | jjd	d
dr| j jtd	d | j| d S )NFr2  r1  r0  )r2  r1  r0  r@   rs   )addressr)   r&   r&   rB  )rC  )rJ   rd   reversedr>   r   r@   r_   r   r   	nameTupler   rD  r   )rB   r   stopNamesMap	stopNamesr   r'   r'   r(   startTagListItem&  s"    


z/getPhases.<locals>.InBodyPhase.startTagListItemc             S   s>   | j jdddr| td | j | | jjj| jj_d S )Nr&   rB  )rC  )	r>   rD  rE  r   r   rJ   rN   r^   r\   )rB   r   r'   r'   r(   startTagPlaintext<  s    z0getPhases.<locals>.InBodyPhase.startTagPlaintextc             S   sb   | j jdddr| td | j jd jtkrR| jdd|d i | j j	  | j 
| d S )Nr&   rB  )rC  rw   zunexpected-start-tagr@   )r>   rD  rE  r   r   r@   r   rJ   r   r   r   )rB   r   r'   r'   r(   startTagHeadingB  s    z.getPhases.<locals>.InBodyPhase.startTagHeadingc             S   s~   | j d}|rf| jdddd | td || j jkrL| j j| || j jkrf| j j| | j 	  | 
| d S )Naz$unexpected-start-tag-implies-end-tag)	startNameendName)r>   !elementInActiveFormattingElementsrJ   r   endTagFormattingr   r   r#  r-  r9  r/  )rB   r   afeAElementr'   r'   r(   	startTagAJ  s    
z(getPhases.<locals>.InBodyPhase.startTagAc             S   s   | j   | | d S )N)r>   r9  r/  )rB   r   r'   r'   r(   startTagFormattingW  s    
z1getPhases.<locals>.InBodyPhase.startTagFormattingc             S   sP   | j   | j drB| jdddd | td | j   | | d S )Nnobrz$unexpected-start-tag-implies-end-tag)rT  rU  )r>   r9  rD  rJ   r   r   r   r/  )rB   r   r'   r'   r(   startTagNobr[  s    

z+getPhases.<locals>.InBodyPhase.startTagNobrc             S   sT   | j dr2| jdddd | td |S | j   | j | d| j_d S )NrB  z$unexpected-start-tag-implies-end-tag)rT  rU  F)	r>   rD  rJ   r   r   r   r9  r   rd   )rB   r   r'   r'   r(   startTagButtone  s    
z-getPhases.<locals>.InBodyPhase.startTagButtonc             S   s0   | j   | j | | j jt d| j_d S )NF)r>   r9  r   r-  r   r   rJ   rd   )rB   r   r'   r'   r(   startTagAppletMarqueeObjectp  s    
z:getPhases.<locals>.InBodyPhase.startTagAppletMarqueeObjectc             S   sB   | j jdddr| td | j   d| j_| j|d d S )Nr&   rB  )rC  Fr   )r>   rD  rE  r   r9  rJ   rd   r   )rB   r   r'   r'   r(   startTagXmpv  s
    
z*getPhases.<locals>.InBodyPhase.startTagXmpc             S   sR   | j jdkr*| jjdddr*| td | j| d| j _| j jd | j _	d S )Nr   r&   rB  )rC  Fr   )
rJ   rY   r>   rD  r   r   r   rd   rG   r_   )rB   r   r'   r'   r(   startTagTable}  s    z,getPhases.<locals>.InBodyPhase.startTagTablec             S   s6   | j   | j | | j j  d|d< d| j_d S )NTr   F)r>   r9  r   r   r   rJ   rd   )rB   r   r'   r'   r(   startTagVoidFormatting  s
    
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc             S   s@   | j j}| | d|d kr<|d d tdkr<|| j _d S )Nr0   rx   hidden)rJ   rd   ra  rl   r   )rB   r   rd   r'   r'   r(   startTagInput  s
    
z,getPhases.<locals>.InBodyPhase.startTagInputc             S   s$   | j | | j j  d|d< d S )NTr   )r>   r   r   r   )rB   r   r'   r'   r(   startTagParamSource  s    z2getPhases.<locals>.InBodyPhase.startTagParamSourcec             S   sJ   | j jdddr| td | j | | j j  d|d< d| j_d S )Nr&   rB  )rC  Tr   F)	r>   rD  rE  r   r   r   r   rJ   rd   )rB   r   r'   r'   r(   
startTagHr  s    z)getPhases.<locals>.InBodyPhase.startTagHrc             S   s6   | j dddd | tdd|d |d d d S )	Nzunexpected-start-tag-treated-asimageimg)originalNamenewNamerr   rx   r~   )rk   r~   )rJ   r   r   r   )rB   r   r'   r'   r(   startTagImage  s
    
z,getPhases.<locals>.InBodyPhase.startTagImagec             S   s  | j dddi | jjrd S i }d|d kr>|d d |d< | tdd|d | td	d | td
d d|d kr|d d }nd}| td |d |d  }d|kr|d= d|kr|d= d|d< | tdd||d d | 	td
 | td	d | 	td d S )Nzdeprecated-tagr@   isindexactionrx   rH  rr   )rk   hrlabelpromptz3This is a searchable index. Enter search keywords: rp   )r0   rx   inputr~   )rk   r~   )
rJ   r   r>   rI  r   r   r   r   copyr   )rB   r   
form_attrsro  rk   r'   r'   r(   startTagIsIndex  s6    


z.getPhases.<locals>.InBodyPhase.startTagIsIndexc             S   s0   | j | | jjj| jj_| j| _d| j_d S )NF)	r>   r   rJ   rN   r[   r\   r:  r   rd   )rB   r   r'   r'   r(   startTagTextarea  s    z/getPhases.<locals>.InBodyPhase.startTagTextareac             S   s   d| j _| | d S )NF)rJ   rd   startTagRawtext)rB   r   r'   r'   r(   startTagIFrame  s    z-getPhases.<locals>.InBodyPhase.startTagIFramec             S   s"   | j jr| | n
| | d S )N)rJ   rL   ru  r   )rB   r   r'   r'   r(   r    s    z/getPhases.<locals>.InBodyPhase.startTagNoscriptc             S   s   | j |d dS )z8iframe, noembed noframes, noscript(if scripting enabled)r   N)rJ   r   )rB   r   r'   r'   r(   ru    s    z.getPhases.<locals>.InBodyPhase.startTagRawtextc             S   s@   | j jd jdkr$| jjtd | j   | jj | d S )Nrw   option)	r>   r   r@   rJ   r_   r   r   r9  r   )rB   r   r'   r'   r(   startTagOpt  s    
z*getPhases.<locals>.InBodyPhase.startTagOptc             S   s   | j   | j | d| j_| jj| jjd | jjd | jjd | jjd | jjd | jjd fkrx| jjd | j_n| jjd	 | j_d S )
NFr   r   r   r   r   r   inSelectInTabler   )r>   r9  r   rJ   rd   r_   rG   )rB   r   r'   r'   r(   startTagSelect  s    




z-getPhases.<locals>.InBodyPhase.startTagSelectc             S   sB   | j dr2| j   | j jd jdkr2| j  | j | d S )Nrubyrw   )r>   rD  generateImpliedEndTagsr   r@   rJ   r   r   )rB   r   r'   r'   r(   startTagRpRt  s
    

z+getPhases.<locals>.InBodyPhase.startTagRpRtc             S   sZ   | j   | j| | j| td |d< | j | |d rV| j j  d|d< d S )Nrh   rj   r~   Tr   )	r>   r9  rJ   r   r   r   r   r   r   )rB   r   r'   r'   r(   startTagMath  s    
z+getPhases.<locals>.InBodyPhase.startTagMathc             S   sZ   | j   | j| | j| td |d< | j | |d rV| j j  d|d< d S )Nr|   rj   r~   Tr   )	r>   r9  rJ   r   r   r   r   r   r   )rB   r   r'   r'   r(   startTagSvg  s    
z*getPhases.<locals>.InBodyPhase.startTagSvgc             S   s   | j dd|d i dS )a5   Elements that should be children of other elements that have a
            different insertion mode; here they are ignored
            "caption", "col", "colgroup", "frame", "frameset", "head",
            "option", "optgroup", "tbody", "td", "tfoot", "th", "thead",
            "tr", "noscript"
            zunexpected-start-tag-ignoredr@   N)rJ   r   )rB   r   r'   r'   r(   startTagMisplaced  s    z0getPhases.<locals>.InBodyPhase.startTagMisplacedc             S   s   | j   | j | d S )N)r>   r9  r   )rB   r   r'   r'   r(   r     s    
z,getPhases.<locals>.InBodyPhase.startTagOtherc             S   s   | j jdddsD| tdd | jdddi | tdd nX| j d | j jd j	dkrt| jdddi | j j
 }x|j	dkr| j j
 }qW d S )	Nr&   rB  )rC  rr   zunexpected-end-tagr@   rs   rw   )r>   rD  rF  r   rJ   r   rE  r|  r   r@   r   )rB   r   r   r'   r'   r(   rE    s    z&getPhases.<locals>.InBodyPhase.endTagPc             S   s   | j ds| j  d S | j jd jdkrlx>| j jdd  D ]*}|jtdkr>| jdd|jd P q>W | jjd | j_d S )Nr   rw      )r0  r1  r2  optgrouprw  r&   rprtr   r   r   r   r   r   r   r   z$expected-one-end-tag-but-got-another)gotNameexpectedName	afterBody)	r>   rD  rJ   r   r   r@   r   rG   r_   )rB   r   r   r'   r'   r(   
endTagBody)  s    
z)getPhases.<locals>.InBodyPhase.endTagBodyc             S   s"   | j dr| td |S d S )Nr   )r>   rD  r  r   )rB   r   r'   r'   r(   
endTagHtml;  s    z)getPhases.<locals>.InBodyPhase.endTagHtmlc             S   s   |d dkr| j | _| j|d }|r2| j  | jjd j|d kr^| jdd|d i |r| jj	 }x|j|d kr| jj	 }qpW d S )Nr@   r5  rw   zend-tag-too-early)
r'  r   r>   rD  r|  r   r@   rJ   r   r   )rB   r   inScoper   r'   r'   r(   endTagBlockA  s    
z*getPhases.<locals>.InBodyPhase.endTagBlockc             S   sv   | j j}d | j _|d ks$| j |s8| jdddi n:| j   | j jd |krd| jdddi | j j| d S )Nzunexpected-end-tagr@   rH  rw   zend-tag-too-early-ignored)r>   rI  rD  rJ   r   r|  r   r#  )rB   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dd|d i nj| j j|d d | j jd j|d kr| jdd|d i | j j }x|j|d kr| j j }qW d S )	Nr@   r2  list)rC  zunexpected-end-tag)excluderw   zend-tag-too-early)r>   rD  rJ   r   r|  r   r@   r   )rB   r   rC  r   r'   r'   r(   endTagListItem\  s    z-getPhases.<locals>.InBodyPhase.endTagListItemc             S   s   x$t D ]}| j|r| j  P qW | jjd j|d krR| jdd|d i xBt D ]:}| j|rX| jj }x|jt kr| jj }qvW P qXW d S )Nrw   r@   zend-tag-too-early)	r   r>   rD  r|  r   r@   rJ   r   r   )rB   r   itemr'   r'   r(   endTagHeadingm  s    


z,getPhases.<locals>.InBodyPhase.endTagHeadingc             S   s  d}x|dk r|d7 }| j |d }|rH|| j jkrV| j |jsV| | dS || j jkr| jdd|d i | j j	| dS | j |js| jdd|d i dS || j jd kr| jd	d|d i | j j
|}d}x,| j j|d D ]}|jtk r|}P  qW |dkr^| j j }x||krJ| j j }q0W | j j	| dS | j j|d  }| j j
|}| }	}
d}| j j
|
}x|d
k rd|d7 }|d8 }| j j| }
|
| j jkr| j j	|
 q|
|krP |	|kr| j j
|
d }|
 }|| j j| j j
|
< || j j| j j
|
< |}
|	jrR|	j|	 |
|	 |
}	qW |	jrz|	j|	 |jtdkr| j  \}}||	| n
||	 | }|| || | 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.4rw   zadoption-agency-1.3r,  )r   r   r   r   r   )r>   rV  r   rD  r@   r   rJ   r   r-  r#  indexrM  r   r   	cloneNoder@  rA  appendChildr   getTableMisnestedNodePositioninsertBeforereparentChildreninsert)rB   r   outerLoopCounterformattingElementafeIndexfurthestBlockrm   commonAncestorbookmarklastNoder   innerLoopCounterr  cloner@  r  r'   r'   r(   rW  |  s    











z/getPhases.<locals>.InBodyPhase.endTagFormattingc             S   s   | j |d r| j   | j jd j|d krF| jdd|d i | j |d r| j j }x|j|d kr| j j }qdW | j   d S )Nr@   rw   zend-tag-too-early)	r>   rD  r|  r   r@   rJ   r   r   clearActiveFormattingElements)rB   r   rm   r'   r'   r(   endTagAppletMarqueeObject  s    
z8getPhases.<locals>.InBodyPhase.endTagAppletMarqueeObjectc             S   s@   | j dddd | j  | jtdd | jj  d S )Nzunexpected-end-tag-treated-asr   z
br element)rh  ri  rr   )rJ   r   r>   r9  r   r   r   r   )rB   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dd|d i x| j j |krxqfW P q|jtkr| jdd|d i P qW d S )Nrw   r@   )r  zunexpected-end-tag)	r>   r   r@   r|  rJ   r   r   rM  r   )rB   r   r   r'   r'   r(   r   2  s    
z*getPhases.<locals>.InBodyPhase.endTagOtherr   )	r  r  r  r  r  r2   r  r  r  r   r   )rK  articleaside
blockquotecenterdetailsdirr)   dlfieldset
figcaptionfigurefooterheaderhgroupmainmenunavolr&   sectionsummaryul)r5  r6  rH  )r2  r0  r1  rT   rS  )bbigcodeemfontissmallstrikestrongttur[  rB  )appletmarqueeobjectxmpr   )arear   embedrg  keygenwbr)paramsourcetrackrp  rm  rf  rk  r7  iframer  )noembedr  r   )r  r  )rw  r  mathr|   )r   colr   framer   r   r   r   r   r   r   )rK  r  r  r  rB  r  r  dialogr  r)   r  r  r  r  r  r  r  r6  r  r  r  r  r5  r  r  r  r&   )r0  r1  r2  )rS  r  r  r  r  r  r  r[  r  r  r  r  r  r  r   )?r9   r:   r;   r   rI   r+  r/  r   r:  r   r'  r?  r!  r"  rF  rG  rJ  rP  rQ  rR  rY  rZ  r\  r]  r^  r_  r`  ra  rc  rd  re  rj  rs  rt  rv  r  ru  rx  rz  r}  r~  r  r  r   rE  r  r  r  r  r  r  rW  r  r  r   r   r   r   r   r   r   r   __classcell__r'   )r(  r   )r   r(   r(    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	e
g Zee_e
defgZe	e_dS )zgetPhases.<locals>.TextPhasec             S   s   | j |d  d S )Nrx   )r>   r   )rB   r   r'   r'   r(   r     s    z.getPhases.<locals>.TextPhase.processCharactersc             S   s8   | j dd| jjd ji | jj  | j j| j _dS )Nz&expected-named-closing-tag-but-got-eofr@   rw   T)rJ   r   r>   r   r@   r   r   r_   )rB   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   )rB   r   r'   r'   r(   r     s    z*getPhases.<locals>.TextPhase.startTagOtherc             S   s*   | j j }|jdkst| jj| j_d S )Nr  )r>   r   r   r@   r   rJ   r   r_   )rB   r   r   r'   r'   r(   endTagScript  s    z)getPhases.<locals>.TextPhase.endTagScriptc             S   s   | j j  | jj| j_d S )N)r>   r   r   rJ   r   r_   )rB   r   r'   r'   r(   r     s    z(getPhases.<locals>.TextPhase.endTagOtherr  N)r9   r:   r;   r   r   r   r   r   r  r   r   r   r   r   r   r'   r'   r'   r(   	TextPhase  s   
r  c                   s  e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zed% jfd&e
fd'efd(efd)efd*efd+efd,efd-efd.efg
Zee_ed+efd/efgZee_d0S )1zgetPhases.<locals>.InTablePhasec             S   s(   x"| j jd jdkr"| j j  qW d S )Nrw   )r   r   )r>   r   r@   r   )rB   r'   r'   r(   clearStackToTableContext  s    z8getPhases.<locals>.InTablePhase.clearStackToTableContextc             S   s0   | j jd jdkr | jd n| jjs,td S )Nrw   r   zeof-in-table)r>   r   r@   rJ   r   rR   r   )rB   r'   r'   r(   r     s    z*getPhases.<locals>.InTablePhase.processEOFc             S   s4   | j j}| j jd | j _|| j j_| j j| d S )NinTableText)rJ   r_   rG   r   r   )rB   r   r   r'   r'   r(   r     s    
z6getPhases.<locals>.InTablePhase.processSpaceCharactersc             S   s4   | j j}| j jd | j _|| j j_| j j| d S )Nr  )rJ   r_   rG   r   r   )rB   r   r   r'   r'   r(   r     s    
z1getPhases.<locals>.InTablePhase.processCharactersc             S   s&   d| j _| jjd | d| j _d S )NTr   F)r>   insertFromTablerJ   rG   r   )rB   r   r'   r'   r(   r     s    z*getPhases.<locals>.InTablePhase.insertTextc             S   s6   |    | jjt | j| | jjd | j_d S )Nr   )	r  r>   r-  r   r   r   rJ   rG   r_   )rB   r   r'   r'   r(   startTagCaption  s    z/getPhases.<locals>.InTablePhase.startTagCaptionc             S   s(   |    | j| | jjd | j_d S )Nr   )r  r>   r   rJ   rG   r_   )rB   r   r'   r'   r(   startTagColgroup  s    z0getPhases.<locals>.InTablePhase.startTagColgroupc             S   s   |  tdd |S )Nr   rr   )r  r   )rB   r   r'   r'   r(   startTagCol  s    z+getPhases.<locals>.InTablePhase.startTagColc             S   s(   |    | j| | jjd | j_d S )Nr   )r  r>   r   rJ   rG   r_   )rB   r   r'   r'   r(   startTagRowGroup  s    z0getPhases.<locals>.InTablePhase.startTagRowGroupc             S   s   |  tdd |S )Nr   rr   )r  r   )rB   r   r'   r'   r(   startTagImplyTbody  s    z2getPhases.<locals>.InTablePhase.startTagImplyTbodyc             S   s6   | j dddd | j jtd | j js2|S d S )Nz$unexpected-start-tag-implies-end-tagr   )rT  rU  )rJ   r   r_   r   r   rR   )rB   r   r'   r'   r(   r`    s
    z-getPhases.<locals>.InTablePhase.startTagTablec             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   startTagStyleScript  s    z3getPhases.<locals>.InTablePhase.startTagStyleScriptc             S   sV   d|d krH|d d  tdkrH| jd | j| | jj  n
| | d S )Nr0   rx   rb  z unexpected-hidden-input-in-table)	rl   r   rJ   r   r>   r   r   r   r   )rB   r   r'   r'   r(   rc    s    z-getPhases.<locals>.InTablePhase.startTagInputc             S   sD   | j d | jjd kr@| j| | jjd | j_| jj  d S )Nzunexpected-form-in-tablerw   )rJ   r   r>   rI  r   r   r   )rB   r   r'   r'   r(   rJ    s
    z,getPhases.<locals>.InTablePhase.startTagFormc             S   s<   | j dd|d i d| j_| j jd | d| j_d S )Nz)unexpected-start-tag-implies-table-voodoor@   Tr   F)rJ   r   r>   r  rG   r   )rB   r   r'   r'   r(   r     s    z-getPhases.<locals>.InTablePhase.startTagOtherc             S   s   | j jdddr| j   | j jd jdkrJ| jdd| j jd jd x"| j jd jdkrl| j j  qLW | j j  | j  n| jj	st
| j  d S )Nr   )rC  rw   zend-tag-too-early-named)r  r  )r>   rD  r|  r   r@   rJ   r   r   ra   rR   r   )rB   r   r'   r'   r(   endTagTable  s    
z+getPhases.<locals>.InTablePhase.endTagTablec             S   s   | j dd|d i d S )Nzunexpected-end-tagr@   )rJ   r   )rB   r   r'   r'   r(   endTagIgnore  s    z,getPhases.<locals>.InTablePhase.endTagIgnorec             S   s<   | j dd|d i d| j_| j jd | d| j_d S )Nz'unexpected-end-tag-implies-table-voodoor@   Tr   F)rJ   r   r>   r  rG   r   )rB   r   r'   r'   r(   r     s    z+getPhases.<locals>.InTablePhase.endTagOtherr   r   r   r  )r   r   r   )r   r   r   r   )r  r  rp  rH  )r   r   r  r   r   r   r   r   r   r   r   N)r9   r:   r;   r   r   r  r   r   r   r   r  r  r  r  r  r`  r  rc  rJ  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>.InTableTextPhase)r   characterTokensc                s"   t  | j|| d | _g | _d S )N)r&  rI   r   r  )rB   r   r$   )InTableTextPhaser   r'   r(   rI   6  s    z,getPhases.<locals>.InTableTextPhase.__init__c             S   sd   d dd | jD }tdd |D rJtd |d}| jjd | n|rZ| j| g | _d S )Nr   c             S   s   g | ]}|d  qS )rx   r'   )r?   r  r'   r'   r(   r=  <  s    zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c             S   s   g | ]}|t kqS r'   )r   )r?   r  r'   r'   r(   r=  =  s    rp   )r0   rx   r   )joinr  r>  r   rJ   rG   r   r>   )rB   rx   r   r'   r'   r(   flushCharacters;  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc             S   s   |    | j| j_|S )N)r  r   rJ   r_   )rB   r   r'   r'   r(   r   D  s    
z2getPhases.<locals>.InTableTextPhase.processCommentc             S   s   |    | j| j_dS )NT)r  r   rJ   r_   )rB   r'   r'   r(   r   I  s    
z.getPhases.<locals>.InTableTextPhase.processEOFc             S   s    |d dkrd S | j | d S )Nrx   r;  )r  r   )rB   r   r'   r'   r(   r   N  s    z5getPhases.<locals>.InTableTextPhase.processCharactersc             S   s   | j | d S )N)r  r   )rB   r   r'   r'   r(   r   S  s    z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc             S   s   |    | j| j_|S )N)r  r   rJ   r_   )rB   r   r'   r'   r(   r   X  s    
z3getPhases.<locals>.InTableTextPhase.processStartTagc             S   s   |    | j| j_|S )N)r  r   rJ   r_   )rB   r   r'   r'   r(   r   ]  s    
z1getPhases.<locals>.InTableTextPhase.processEndTag)r9   r:   r;   r   rI   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d jfdefgZe	e_ede
fdefdefgZee_dS )z!getPhases.<locals>.InCaptionPhasec             S   s   | j jddd S )Nr   r   )rC  )r>   rD  )rB   r'   r'   r(   ignoreEndTagCaptionf  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc             S   s   | j jd   d S )Nr   )rJ   rG   r   )rB   r'   r'   r(   r   i  s    z,getPhases.<locals>.InCaptionPhase.processEOFc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   l  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc             S   s0   | j   |  }| j jtd |s,|S d S )Nr   )rJ   r   r  r_   r   r   )rB   r   ignoreEndTagr'   r'   r(   startTagTableElemento  s
    
z6getPhases.<locals>.InCaptionPhase.startTagTableElementc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   w  s    z/getPhases.<locals>.InCaptionPhase.startTagOtherc             S   s   |   s| j  | jjd jdkrB| jdd| jjd jd x"| jjd jdkrd| jj  qDW | jj  | j  | jj	d | j_
n| jjst| j  d S )Nrw   r   z$expected-one-end-tag-but-got-another)r  r  r   )r  r>   r|  r   r@   rJ   r   r   r  rG   r_   rR   r   )rB   r   r'   r'   r(   endTagCaptionz  s    

z/getPhases.<locals>.InCaptionPhase.endTagCaptionc             S   s0   | j   |  }| j jtd |s,|S d S )Nr   )rJ   r   r  r_   r   r   )rB   r   r  r'   r'   r(   r    s
    
z-getPhases.<locals>.InCaptionPhase.endTagTablec             S   s   | j dd|d i d S )Nzunexpected-end-tagr@   )rJ   r   )rB   r   r'   r'   r(   r    s    z.getPhases.<locals>.InCaptionPhase.endTagIgnorec             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r     s    z-getPhases.<locals>.InCaptionPhase.endTagOtherr   )	r   r  r   r   r   r   r   r   r   r   r   )
r   r  r   r   r   r   r   r   r   r   N)r9   r:   r;   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d jfdefgZe	e_ede
fdefgZee_dS )z%getPhases.<locals>.InColumnGroupPhasec             S   s   | j jd jdkS )Nrw   r   )r>   r   r@   )rB   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 |  }| td |s@dS d S )Nrw   r   r   T)	r>   r   r@   rJ   rR   r   r  endTagColgroupr   )rB   r  r'   r'   r(   r     s    z0getPhases.<locals>.InColumnGroupPhase.processEOFc             S   s"   |   }| td |s|S d S )Nr   )r  r  r   )rB   r   r  r'   r'   r(   r     s    z7getPhases.<locals>.InColumnGroupPhase.processCharactersc             S   s$   | j | | j j  d|d< d S )NTr   )r>   r   r   r   )rB   r   r'   r'   r(   r    s    z1getPhases.<locals>.InColumnGroupPhase.startTagColc             S   s"   |   }| td |s|S d S )Nr   )r  r  r   )rB   r   r  r'   r'   r(   r     s    z3getPhases.<locals>.InColumnGroupPhase.startTagOtherc             S   s@   |   r | jjst| j  n| jj  | jjd | j_	d S )Nr   )
r  rJ   rR   r   r   r>   r   r   rG   r_   )rB   r   r'   r'   r(   r    s
    z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc             S   s   | j dddi d S )Nz
no-end-tagr@   r  )rJ   r   )rB   r   r'   r'   r(   	endTagCol  s    z/getPhases.<locals>.InColumnGroupPhase.endTagColc             S   s"   |   }| td |s|S d S )Nr   )r  r  r   )rB   r   r  r'   r'   r(   r     s    z1getPhases.<locals>.InColumnGroupPhase.endTagOtherr   r  r   N)r9   r:   r;   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d jfde	fde
fdefgZee_edefdefdefgZee_d S )!z#getPhases.<locals>.InTableBodyPhasec             S   sF   x"| j jd jdkr"| j j  qW | j jd jdkrB| jjsBtd S )Nrw   )r   r   r   r   r   )r>   r   r@   r   rJ   rR   r   )rB   r'   r'   r(   clearStackToTableBodyContext  s    z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc             S   s   | j jd   d S )Nr   )rJ   rG   r   )rB   r'   r'   r(   r     s    z.getPhases.<locals>.InTableBodyPhase.processEOFc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r     s    z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r     s    z5getPhases.<locals>.InTableBodyPhase.processCharactersc             S   s(   |    | j| | jjd | j_d S )Nr   )r  r>   r   rJ   rG   r_   )rB   r   r'   r'   r(   
startTagTr   s    z.getPhases.<locals>.InTableBodyPhase.startTagTrc             S   s*   | j dd|d i | tdd |S )Nzunexpected-cell-in-table-bodyr@   r   rr   )rJ   r   r  r   )rB   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|   | t| j jd j |S | jjs`t	| j
  d S )Nr   r   )rC  r   r   rw   )r>   rD  r  endTagTableRowGroupr   r   r@   rJ   rR   r   r   )rB   r   r'   r'   r(   startTagTableOther  s    z6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r     s    z1getPhases.<locals>.InTableBodyPhase.startTagOtherc             S   sT   | j j|d ddr:|   | j j  | jjd | j_n| jdd|d i d S )Nr@   r   )rC  r   z unexpected-end-tag-in-table-body)	r>   rD  r  r   r   rJ   rG   r_   r   )rB   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|   | t| j jd j |S | jjs`t	| j
  d S )Nr   r   )rC  r   r   rw   )r>   rD  r  r  r   r   r@   rJ   rR   r   r   )rB   r   r'   r'   r(   r  %  s    z/getPhases.<locals>.InTableBodyPhase.endTagTablec             S   s   | j dd|d i d S )Nz unexpected-end-tag-in-table-bodyr@   )rJ   r   )rB   r   r'   r'   r(   r  2  s    z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   6  s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherr   r   )r   r   )r   r  r   r   r   r   )r   r   r   r   )r   r   r  r   r   r   r   r   N)r9   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(   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d jfde
fdefgZee_edefdefd efd!efgZee_d"S )#zgetPhases.<locals>.InRowPhasec             S   sD   x>| j jd jdkr>| jdd| j jd ji | j j  qW d S )Nrw   )r   r   z'unexpected-implied-end-tag-in-table-rowr@   )r>   r   r@   rJ   r   r   )rB   r'   r'   r(   clearStackToTableRowContextO  s    z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc             S   s   | j jddd S )Nr   r   )rC  )r>   rD  )rB   r'   r'   r(   ignoreEndTagTrU  s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc             S   s   | j jd   d S )Nr   )rJ   rG   r   )rB   r'   r'   r(   r   Y  s    z(getPhases.<locals>.InRowPhase.processEOFc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   \  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   _  s    z/getPhases.<locals>.InRowPhase.processCharactersc             S   s6   |    | j| | jjd | j_| jjt d S )Nr   )	r  r>   r   rJ   rG   r_   r-  r   r   )rB   r   r'   r'   r(   r  b  s    z/getPhases.<locals>.InRowPhase.startTagTableCellc             S   s"   |   }| td |s|S d S )Nr   )r  endTagTrr   )rB   r   r  r'   r'   r(   r  h  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   o  s    z+getPhases.<locals>.InRowPhase.startTagOtherc             S   sH   |   s.|   | jj  | jjd | j_n| jjs:t	| j
  d S )Nr   )r  r  r>   r   r   rJ   rG   r_   rR   r   r   )rB   r   r'   r'   r(   r  r  s    z&getPhases.<locals>.InRowPhase.endTagTrc             S   s"   |   }| td |s|S d S )Nr   )r  r  r   )rB   r   r  r'   r'   r(   r  |  s    z)getPhases.<locals>.InRowPhase.endTagTablec             S   s4   | j j|d ddr&| td |S | j  d S )Nr@   r   )rC  r   )r>   rD  r  r   rJ   r   )rB   r   r'   r'   r(   r    s    z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc             S   s   | j dd|d i d S )Nzunexpected-end-tag-in-table-rowr@   )rJ   r   )rB   r   r'   r'   r(   r    s    z*getPhases.<locals>.InRowPhase.endTagIgnorec             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r     s    z)getPhases.<locals>.InRowPhase.endTagOtherr   )r   r   )r   r  r   r   r   r   r   r   r   )r   r   r   )r   r   r  r   r   r   r   N)r9   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(   
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d jfdefgZe	e_ede
fdefdefgZee_dS )zgetPhases.<locals>.InCellPhasec             S   sB   | j jdddr | td n| j jdddr>| td d S )Nr   r   )rC  r   )r>   rD  endTagTableCellr   )rB   r'   r'   r(   	closeCell  s    z(getPhases.<locals>.InCellPhase.closeCellc             S   s   | j jd   d S )Nr   )rJ   rG   r   )rB   r'   r'   r(   r     s    z)getPhases.<locals>.InCellPhase.processEOFc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r     s    z0getPhases.<locals>.InCellPhase.processCharactersc             S   sF   | j jddds | j jdddr,|   |S | jjs8t| j  d S )Nr   r   )rC  r   )r>   rD  r  rJ   rR   r   r   )rB   r   r'   r'   r(   r    s    z1getPhases.<locals>.InCellPhase.startTagTableOtherc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r     s    z,getPhases.<locals>.InCellPhase.startTagOtherc             S   s   | j j|d ddr| j |d  | j jd j|d krt| jdd|d i x.| j j }|j|d krRP qRW n| j j  | j   | jj	d | j_
n| jdd|d i d S )Nr@   r   )rC  rw   zunexpected-cell-end-tagr   zunexpected-end-tag)r>   rD  r|  r   r@   rJ   r   r   r  rG   r_   )rB   r   r   r'   r'   r(   r    s    
z.getPhases.<locals>.InCellPhase.endTagTableCellc             S   s   | j dd|d i d S )Nzunexpected-end-tagr@   )rJ   r   )rB   r   r'   r'   r(   r    s    z+getPhases.<locals>.InCellPhase.endTagIgnorec             S   s.   | j j|d ddr |   |S | j  d S )Nr@   r   )rC  )r>   rD  r  rJ   r   )rB   r   r'   r'   r(   endTagImply  s    z*getPhases.<locals>.InCellPhase.endTagImplyc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r     s    z*getPhases.<locals>.InCellPhase.endTagOtherr   )	r   r  r   r   r   r   r   r   r   )r   r   )r   r   r  r   r   )r   r   r   r   r   N)r9   r:   r;   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d jfdefdefde	fde
fdefgZee_edefdefdefgZee_dS ) z getPhases.<locals>.InSelectPhasec             S   s0   | j jd jdkr | jd n| jjs,td S )Nrw   r   zeof-in-select)r>   r   r@   rJ   r   rR   r   )rB   r'   r'   r(   r     s    z+getPhases.<locals>.InSelectPhase.processEOFc             S   s$   |d dkrd S | j |d  d S )Nrx   r;  )r>   r   )rB   r   r'   r'   r(   r     s    z2getPhases.<locals>.InSelectPhase.processCharactersc             S   s.   | j jd jdkr| j j  | j | d S )Nrw   rw  )r>   r   r@   r   r   )rB   r   r'   r'   r(   startTagOption  s    z/getPhases.<locals>.InSelectPhase.startTagOptionc             S   sL   | j jd jdkr| j j  | j jd jdkr<| j j  | j | d S )Nrw   rw  r  )r>   r   r@   r   r   )rB   r   r'   r'   r(   startTagOptgroup	  s
    z1getPhases.<locals>.InSelectPhase.startTagOptgroupc             S   s   | j d | td d S )Nzunexpected-select-in-selectr   )rJ   r   endTagSelectr   )rB   r   r'   r'   r(   rz  	  s    z/getPhases.<locals>.InSelectPhase.startTagSelectc             S   s>   | j d | jjdddr.| td |S | j js:td S )Nzunexpected-input-in-selectr   )rC  )rJ   r   r>   rD  r  r   rR   r   )rB   r   r'   r'   r(   rc  	  s
    z.getPhases.<locals>.InSelectPhase.startTagInputc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r  	  s    z/getPhases.<locals>.InSelectPhase.startTagScriptc             S   s   | j dd|d i d S )Nzunexpected-start-tag-in-selectr@   )rJ   r   )rB   r   r'   r'   r(   r   	  s    z.getPhases.<locals>.InSelectPhase.startTagOtherc             S   s6   | j jd jdkr | j j  n| jdddi d S )Nrw   rw  zunexpected-end-tag-in-selectr@   )r>   r   r@   r   rJ   r   )rB   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d jdkrP| j j  n| jdddi d S )Nrw   rw  r  zunexpected-end-tag-in-selectr@   )r>   r   r@   r   rJ   r   )rB   r   r'   r'   r(   endTagOptgroup%	  s    z/getPhases.<locals>.InSelectPhase.endTagOptgroupc             S   s^   | j jdddrD| j j }x|jdkr6| j j }qW | j  n| jjsPt| j	  d S )Nr   )rC  )
r>   rD  r   r   r@   rJ   ra   rR   r   r   )rB   r   r   r'   r'   r(   r  2	  s    z-getPhases.<locals>.InSelectPhase.endTagSelectc             S   s   | j dd|d i d S )Nzunexpected-end-tag-in-selectr@   )rJ   r   )rB   r   r'   r'   r(   r   =	  s    z,getPhases.<locals>.InSelectPhase.endTagOtherr   rw  r  r   )rp  r  r7  r  N)r9   r:   r;   r   r   r   r   r   r  rz  rc  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defgZee_ede	fgZe
e_dS )z'getPhases.<locals>.InSelectInTablePhasec             S   s   | j jd   d S )Nr   )rJ   rG   r   )rB   r'   r'   r(   r   U	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   X	  s    z9getPhases.<locals>.InSelectInTablePhase.processCharactersc             S   s(   | j dd|d i | td |S )Nz5unexpected-table-element-start-tag-in-select-in-tabler@   r   )rJ   r   r   r   )rB   r   r'   r'   r(   r`  [	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   `	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagOtherc             S   s@   | j dd|d i | jj|d ddr<| td |S d S )Nz3unexpected-table-element-end-tag-in-select-in-tabler@   r   )rC  r   )rJ   r   r>   rD  r   r   )rB   r   r'   r'   r(   r  c	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   i	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOther)r   r   r   r   r   r   r   r   N)r9   r:   r;   r   r   r   r   r`  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  r0  r)   r  r1  r  r  h1h2h3h4h5h6r   rm  r  rg  r2  r6  r  r2   r[  r  r&   r5  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 )'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textpathr@   r'   )rB   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 _ | | d S )Nrx   r;  u   �c             s   s   | ]}|t kV  qd S )N)r   )r?   r<  r'   r'   r(   	<genexpr>	  s    zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rJ   rd   r>  r   )rB   r   )r   r'   r(   r   	  s    
z:getPhases.<locals>.InForeignContentPhase.processCharactersc             S   s.  | j jd }|d | jks@|d dkrt|d  dddh@ r| jdd|d i xN| j jd j| j jkr| j	| j jd s| j
| j jd s| j j  qXW |S |jtd	 kr| j| n$|jtd
 kr| | | j| | j| |j|d< | j | |d r*| j j  d|d< d S )Nrw   r@   r  rx   colorfacesizez*unexpected-html-element-in-foreign-contentrh   r|   rj   r~   Tr   )r>   r   breakoutElementssetkeysrJ   r   rj   r   rn   ro   r   r   r   r[  r   r   r   )rB   r   r   r'   r'   r(   r   	  s.    



z8getPhases.<locals>.InForeignContentPhase.processStartTagc             S   s   t | jjd }| jjd }|jt|d krF| jdd|d i x|jt|d kr| jj| jj	d kr| jj
  | jjj| j_x | jj |kr| jjstqW d }P |d8 }| jj| }|j| jjkrqHqH| jj|}P qHW |S )Nr   rw   r@   zunexpected-end-tagr  )r   r>   r   r@   rl   r   rJ   r   r_   rG   r  r   r   r   rj   r   r   )rB   r   	nodeIndexr   r   r'   r'   r(   r   	  s(    z6getPhases.<locals>.InForeignContentPhase.processEndTagN)r9   r:   r;   r   r   r   r`  r[  r   r   r   r'   )r   r'   r(   InForeignContentPhasex	  s   


)rd  c               @   sv   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd ZedefgZe	e_ede
fgZee_dS )z!getPhases.<locals>.AfterBodyPhasec             S   s   d S )Nr'   )rB   r'   r'   r(   r   	  s    z,getPhases.<locals>.AfterBodyPhase.processEOFc             S   s   | j || j jd  d S )Nr   )r>   r   r   )rB   r   r'   r'   r(   r   	  s    z0getPhases.<locals>.AfterBodyPhase.processCommentc             S   s    | j d | j jd | j _|S )Nzunexpected-char-after-bodyr   )rJ   r   rG   r_   )rB   r   r'   r'   r(   r   	  s    z3getPhases.<locals>.AfterBodyPhase.processCharactersc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   	  s    z.getPhases.<locals>.AfterBodyPhase.startTagHtmlc             S   s*   | j dd|d i | j jd | j _|S )Nzunexpected-start-tag-after-bodyr@   r   )rJ   r   rG   r_   )rB   r   r'   r'   r(   r   	  s    z/getPhases.<locals>.AfterBodyPhase.startTagOtherc             S   s*   | j jr| j d n| j jd | j _d S )Nz'unexpected-end-tag-after-body-innerhtmlafterAfterBody)rJ   rR   r   rG   r_   )rB   r@   r'   r'   r(   r  
  s    z,getPhases.<locals>.AfterBodyPhase.endTagHtmlc             S   s*   | j dd|d i | j jd | j _|S )Nzunexpected-end-tag-after-bodyr@   r   )rJ   r   rG   r_   )rB   r   r'   r'   r(   r   

  s    z-getPhases.<locals>.AfterBodyPhase.endTagOtherr   N)r9   r:   r;   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r'   r'   r'   r(   AfterBodyPhase	  s   rf  c                   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zed jfdefdefde	fgZe
e_edefgZee_dS )z"getPhases.<locals>.InFramesetPhasec             S   s0   | j jd jdkr | jd n| jjs,td S )Nrw   r   zeof-in-frameset)r>   r   r@   rJ   r   rR   r   )rB   r'   r'   r(   r   
  s    z-getPhases.<locals>.InFramesetPhase.processEOFc             S   s   | j d d S )Nzunexpected-char-in-frameset)rJ   r   )rB   r   r'   r'   r(   r   "
  s    z4getPhases.<locals>.InFramesetPhase.processCharactersc             S   s   | j | d S )N)r>   r   )rB   r   r'   r'   r(   r"  %
  s    z3getPhases.<locals>.InFramesetPhase.startTagFramesetc             S   s   | j | | j j  d S )N)r>   r   r   r   )rB   r   r'   r'   r(   startTagFrame(
  s    z0getPhases.<locals>.InFramesetPhase.startTagFramec             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   startTagNoframes,
  s    z3getPhases.<locals>.InFramesetPhase.startTagNoframesc             S   s   | j dd|d i d S )Nz unexpected-start-tag-in-framesetr@   )rJ   r   )rB   r   r'   r'   r(   r   /
  s    z0getPhases.<locals>.InFramesetPhase.startTagOtherc             S   sZ   | j jd jdkr | jd n| j j  | jjsV| j jd jdkrV| jjd | j_d S )Nrw   r   z)unexpected-frameset-in-frameset-innerhtmlr   afterFrameset)	r>   r   r@   rJ   r   r   rR   rG   r_   )rB   r   r'   r'   r(   endTagFrameset3
  s    z1getPhases.<locals>.InFramesetPhase.endTagFramesetc             S   s   | j dd|d i d S )Nzunexpected-end-tag-in-framesetr@   )rJ   r   )rB   r   r'   r'   r(   r   ?
  s    z.getPhases.<locals>.InFramesetPhase.endTagOtherr   r   r  r  N)r9   r:   r;   r   r   r   r   r"  rg  rh  r   rj  r   r   r   r   r   r   r   r'   )r   r'   r(   InFramesetPhase
  s$   rk  c                   sv   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
ed jfdefgZee_ede	fgZe
e_dS )z%getPhases.<locals>.AfterFramesetPhasec             S   s   d S )Nr'   )rB   r'   r'   r(   r   T
  s    z0getPhases.<locals>.AfterFramesetPhase.processEOFc             S   s   | j d d S )Nzunexpected-char-after-frameset)rJ   r   )rB   r   r'   r'   r(   r   X
  s    z7getPhases.<locals>.AfterFramesetPhase.processCharactersc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   rh  [
  s    z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc             S   s   | j dd|d i d S )Nz#unexpected-start-tag-after-framesetr@   )rJ   r   )rB   r   r'   r'   r(   r   ^
  s    z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc             S   s   | j jd | j _d S )NafterAfterFrameset)rJ   rG   r_   )rB   r   r'   r'   r(   r  b
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc             S   s   | j dd|d i d S )Nz!unexpected-end-tag-after-framesetr@   )rJ   r   )rB   r   r'   r'   r(   r   e
  s    z1getPhases.<locals>.AfterFramesetPhase.endTagOtherr   r  N)r9   r:   r;   r   r   r   r   rh  r   r  r   r   r   r   r   r   r   r'   )r   r'   r(   AfterFramesetPhaseP
  s   rm  c               @   s`   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zede	fgZe
e_dS )z&getPhases.<locals>.AfterAfterBodyPhasec             S   s   d S )Nr'   )rB   r'   r'   r(   r   w
  s    z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc             S   s   | j || j j d S )N)r>   r   r   )rB   r   r'   r'   r(   r   z
  s    z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   }
  s    z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharactersc             S   s    | j d | j jd | j _|S )Nzexpected-eof-but-got-charr   )rJ   r   rG   r_   )rB   r   r'   r'   r(   r   
  s    z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   
  s    z3getPhases.<locals>.AfterAfterBodyPhase.startTagHtmlc             S   s*   | j dd|d i | j jd | j _|S )Nzexpected-eof-but-got-start-tagr@   r   )rJ   r   rG   r_   )rB   r   r'   r'   r(   r   
  s    z4getPhases.<locals>.AfterAfterBodyPhase.startTagOtherc             S   s*   | j dd|d i | j jd | j _|S )Nzexpected-eof-but-got-end-tagr@   r   )rJ   r   rG   r_   )rB   r   r'   r'   r(   r   
  s    z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagr   N)r9   r:   r;   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   r'   r'   r(   AfterAfterBodyPhaset
  s   rn  c               @   sn   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zede	fde
fgZee_dS )z*getPhases.<locals>.AfterAfterFramesetPhasec             S   s   d S )Nr'   )rB   r'   r'   r(   r   
  s    z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc             S   s   | j || j j d S )N)r>   r   r   )rB   r   r'   r'   r(   r   
  s    z9getPhases.<locals>.AfterAfterFramesetPhase.processCommentc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   
  s    zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc             S   s   | j d d S )Nzexpected-eof-but-got-char)rJ   r   )rB   r   r'   r'   r(   r   
  s    z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   
  s    z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc             S   s   | j jd |S )Nr   )rJ   rG   r   )rB   r   r'   r'   r(   startTagNoFrames
  s    z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc             S   s   | j dd|d i d S )Nzexpected-eof-but-got-start-tagr@   )rJ   r   )rB   r   r'   r'   r(   r   
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc             S   s   | j dd|d i d S )Nzexpected-eof-but-got-end-tagr@   )rJ   r   )rB   r   r'   r'   r(   r   
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagr   r  N)r9   r:   r;   r   r   r   r   r   r   r   ro  r   r   r   r   r   r   r'   r'   r'   r(   AfterAfterFramesetPhase
  s   rp  )rV   rU   r   r   r  r  r   r   r   r  r   r   r   r   r   r   ry  r}   r  r   ri  re  rl  )r   )rH   rX   r   r   r   r   r  r   r%  r  r  r  r  r  r  r  r  r  rd  rf  rk  rm  rn  rp  r'   )r(  r  r   r(   rF     sp    H %-f?B     Y! /F@bYLc&r.8$%&rF   c                sF   t | d t  @ }|rBt| d  fdd| d  D | d< d S )Nrx   c             3   s"   | ]\}}  |||fV  qd S )N)r   )r?   kv)rZ  r'   r(   r\  
  s   z$adjust_attributes.<locals>.<genexpr>)r   r0   r,   )r   rZ  needs_adjustmentr'   )rZ  r(   r   
  s    r   rs   Fc             C   s   |d kri }t | | ||dS )N)r0   r@   rx   r~   )r   )r@   r0   rk   r~   r'   r'   r(   r   
  s    
r   c               @   s   e Zd ZdZdS )rv   zError in parsed documentN)r9   r:   r;   r   r'   r'   r'   r(   rv   
  s   rv   )r   T)r)   r   T)rs   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    memoizerF   r   r   	Exceptionrv   r'   r'   r'   r(   <module>   sJ   H

  8                  ` 
