B
    n&=[§Ð ã               @   s  d dl mZmZmZ d dlmZmZ d dlZd dlm	Z	 ddl
mZ ddl
mZ ddl
mZ dd	lmZ dd
l
mZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z" d!dd„Z#d"dd„Z$dd„ Z%G dd„ de&ƒZ'ej(dd„ ƒZ)dd„ Z*d#dd„Z+G dd „ d e,ƒZ-dS )$é    )Úabsolute_importÚdivisionÚunicode_literals)Úwith_metaclassÚviewkeysN)ÚOrderedDicté   )Ú_inputstream)Ú
_tokenizer)Útreebuilders)ÚMarker)Ú_utils)ÚspaceCharactersÚasciiUpper2LowerÚspecialElementsÚheadingElementsÚcdataElementsÚrcdataElementsÚ
tokenTypesÚtagTokenTypesÚ
namespacesÚhtmlIntegrationPointElementsÚ"mathmlTextIntegrationPointElementsÚadjustForeignAttributesÚadjustMathMLAttributesÚadjustSVGAttributesÚEÚ_ReparseExceptionÚetreeTc             K   s$   t  |¡}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(   ú3lib/python3.7/site-packages/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,   2   s    
r,   c                s   G ‡ fdd„dt ƒ}|S )Nc                   s   e Zd Z‡ fdd„ZdS )z-method_decorator_metaclass.<locals>.Decoratedc                sB   x0|  ¡ D ]$\}}t|tjƒr&ˆ |ƒ}|||< q
W t | |||¡S )N)ÚitemsÚ
isinstanceÚtypesÚFunctionTypeÚtypeÚ__new__)ÚmetaZ	classnameÚbasesZ	classDictZattributeNameZ	attribute)Úfunctionr(   r)   r2   M   s
    z5method_decorator_metaclass.<locals>.Decorated.__new__N)Ú__name__Ú
__module__Ú__qualname__r2   r(   )r5   r(   r)   Ú	DecoratedL   s   r9   )r1   )r5   r9   r(   )r5   r)   Úmethod_decorator_metaclassK   s    r:   c               @   sª   e Zd ZdZd+dd„Zd,dd	„Zd
d„ Zedd„ ƒZdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zd-dd„Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ ZdS ).r!   z]HTML parser

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

    NFTc                sL   |ˆ _ |dkrt d¡}||ƒˆ _g ˆ _t‡ 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    g | ]\}}||ˆ ˆ j ƒf‘qS r(   )Útree)Ú.0ÚnameÚcls)Úselfr(   r)   ú
<listcomp>z   s    z'HTMLParser.__init__.<locals>.<listcomp>)	Ústrictr   r    r;   ÚerrorsÚdictÚ	getPhasesr-   Úphases)r?   r;   rA   r   Údebugr(   )r?   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
   ZHTMLTokenizerÚ	tokenizerÚresetÚmainLoopr   )r?   ÚstreamÚ	innerHTMLr+   rJ   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;   rL   ÚfirstStartTagrB   ÚlogÚ
compatModerI   r+   ÚlowerrO   r   rK   ÚrcdataStateÚstater   ÚrawtextStateÚplaintextStaterE   ÚphaseÚinsertHtmlElementÚresetInsertionModeZ	lastPhaseZbeforeRCDataPhaseÚ
framesetOK)r?   r(   r(   r)   rL   ‹   s*    





zHTMLParser.resetc             C   s   t | dƒsdS | jjjd jS )z‡Name of the character encoding that was used to decode the input stream, or
        :obj:`None` if that is not determined yet

        rK   Nr   )ÚhasattrrK   rN   Ú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  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   )r?   Úelementr(   r(   r)   ÚisHTMLIntegrationPoint·   s    


z!HTMLParser.isHTMLIntegrationPointc             C   s   |j |jftkS )N)re   r=   r   )r?   rh   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ö|  ¡ D ]è}d }	|}
x¬|
d k	r |
}	| jjrx| jjd nd }|r†|jnd }|r”|jnd }|
d	 }||krÆ|  |
d
 |
 di ¡¡ d }
qVt| jjƒdksl|| jj	ksl|  
|¡r ||kr|d tddgƒksl|||fksl|td krP|dkrP||krP|d dksl|  |¡rt||||fkrt| j}n
| jd }||kr”| |
¡}
qV||krª| |
¡}
qV||krÀ| |
¡}
qV||krÖ| |
¡}
qV||krì| |
¡}
qV||krV| |
¡}
qVW ||krD|	d rD|	d sD|  dd|	d i¡ qDW d}g }x8|rr| | j¡ | j ¡ }|r<| j|ks<t‚q<W d S )NÚ
CharactersZSpaceCharactersÚStartTagÚEndTagÚCommentZDoctypeÚ
ParseErroréÿÿÿÿr1   ÚdataÚdatavarsr   r=   ZmglyphZ
malignmarkrc   zannotation-xmlÚsvgÚinForeignContentÚselfClosingÚselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   ÚnormalizedTokensr;   ÚopenElementsre   r=   Ú
parseErrorÚgetÚlenÚdefaultNamespacerj   Ú	frozensetr   ri   r\   rE   Ú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currentNodeNamer1   r\   Z	reprocessrE   r(   r(   r)   rM   Ä   sp    









zHTMLParser.mainLoopc             c   s    x| j D ]}|  |¡V  qW d S )N)rK   ÚnormalizeToken)r?   r‡   r(   r(   r)   rw     s    zHTMLParser.normalizedTokensc             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)rP   r;   ZgetDocument)r?   rN   Ú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)rP   r;   ZgetFragment)r?   rN   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)rB   r„   rK   rN   ZpositionrA   ro   r   )r?   Z	errorcoderr   r(   r(   r)   ry   @  s
    zHTMLParser.parseErrorc             C   sT   |d t d krP|d }t|ƒ|d< t|ƒt|d ƒkrP|d  |d d d… ¡ |S )Nr1   rl   rq   rp   )r   r   r{   Úupdate)r?   r‡   Úrawr(   r(   r)   rŠ   H  s    zHTMLParser.normalizeTokenc             C   s   t |tƒ d S )N)Úadjust_attributesr   )r?   r‡   r(   r(   r)   r   S  s    z!HTMLParser.adjustMathMLAttributesc             C   s   t |tƒ d S )N)r   r   )r?   r‡   r(   r(   r)   r   V  s    zHTMLParser.adjustSVGAttributesc             C   s   t |tƒ d S )N)r   ÚadjustForeignAttributesMap)r?   r‡   r(   r(   r)   r   Y  s    z"HTMLParser.adjustForeignAttributesc             C   s   | j  ¡  d S )N)rH   r\   )r?   r‡   r(   r(   r)   ÚreparseTokenNormal\  s    zHTMLParser.reparseTokenNormalc             C   sÊ   d}ddddddddddd	d	d
ddœ}x˜| j jd d d… D ]‚}|j}d }|| j jd krl| jsbt‚d}| j}|dkr~| js~t‚|s’|j| j jkr’q:||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Úhtmlrp   r   T)rœ   r¤   r¦   r©   )	r;   rx   r=   rO   r†   re   r|   rE   r\   )r?   ZlastZnewModesÚnodeZnodeNameZ	new_phaser(   r(   r)   r^   `  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;   ÚinsertElementrK   rZ   rY   rX   r\   ÚoriginalPhaserE   )r?   r‡   ZcontentTyper(   r(   r)   ÚparseRCDataRawtextŒ  s    zHTMLParser.parseRCDataRawtext)NFTF)Fr*   F)rŒ   N)r6   r7   r8   Ú__doc__rG   rP   rL   Úpropertyrb   ri   rj   rM   rw   r"   r,   ry   rŠ   r   r   r   r‘   r^   r°   r(   r(   r(   r)   r!   W   s&   

"

C
,r!   c                s"  dd„ }dd„ }G dd„ dt || |ƒƒƒ‰ G dd„ dˆ ƒ}G d	d
„ d
ˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}	G ‡ fdd„dˆ ƒ}
G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd „d ˆ ƒ}G ‡ fd!d"„d"ˆ ƒ}G ‡ fd#d$„d$ˆ ƒ}G ‡ fd%d&„d&ˆ ƒ}G ‡ fd'd(„d(ˆ ƒ}G ‡ fd)d*„d*ˆ ƒ}G ‡ fd+d,„d,ˆ ƒ}G ‡ fd-d.„d.ˆ ƒ}G ‡ fd/d0„d0ˆ ƒ}G ‡ fd1d2„d2ˆ ƒ}G ‡ fd3d4„d4ˆ ƒ}|||||||	|
|||||||||||||||d5œS )6Nc                s(   t dd„ t ¡ D ƒƒ‰‡ ‡fdd„}|S )z4Logger that records which phase processes each tokenc             s   s   | ]\}}||fV  qd S )Nr(   )r<   ÚkeyÚvaluer(   r(   r)   ú	<genexpr>   s    z)getPhases.<locals>.log.<locals>.<genexpr>c                s®   ˆ j  d¡ršt|ƒdkrš|d }ydˆ|d  i}W n   ‚ Y nX |d tkr\|d |d< | jj | jjjj | jj	j
j | j
j ˆ j |f¡ ˆ | f|ž|ŽS ˆ | f|ž|ŽS d S )NZprocessr   r1   r=   )r6   Ú
startswithr{   r   rH   rU   r„   rK   rY   r\   Ú	__class__)r?   r‹   r%   r‡   Úinfo)r5   Ú
type_namesr(   r)   Úwrapped£  s    
z'getPhases.<locals>.log.<locals>.wrapped)rC   r   r-   )r5   rº   r(   )r5   r¹   r)   rU   ž  s    zgetPhases.<locals>.logc             S   s   | rt |ƒS tS d S )N)r:   r1   )Zuse_metaclassZmetaclass_funcr(   r(   r)   ÚgetMetaclass·  s    zgetPhases.<locals>.getMetaclassc               @   sX   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )zgetPhases.<locals>.PhasezNBase class for helper object that implements each phase of processing
        c             S   s   || _ || _d S )N)rH   r;   )r?   rH   r;   r(   r(   r)   rG   Â  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d ¡ d S )Nrp   )r;   ÚinsertCommentrx   )r?   r‡   r(   r(   r)   r‚   É  s    z'getPhases.<locals>.Phase.processCommentc             S   s   | j  d¡ d S )Nzunexpected-doctype)rH   ry   )r?   r‡   r(   r(   r)   rƒ   Î  s    z'getPhases.<locals>.Phase.processDoctypec             S   s   | j  |d ¡ d S )Nrq   )r;   Ú
insertText)r?   r‡   r(   r(   r)   r~   Ñ  s    z*getPhases.<locals>.Phase.processCharactersc             S   s   | j  |d ¡ d S )Nrq   )r;   r¾   )r?   r‡   r(   r(   r)   r   Ô  s    z/getPhases.<locals>.Phase.processSpaceCharactersc             S   s   | j |d  |ƒS )Nr=   )ÚstartTagHandler)r?   r‡   r(   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-rootrq   r   F)rH   rT   ry   r-   r;   rx   rf   )r?   r‡   Úattrr´   r(   r(   r)   ÚstartTagHtmlÚ  s    z%getPhases.<locals>.Phase.startTagHtmlc             S   s   | j |d  |ƒS )Nr=   )ÚendTagHandler)r?   r‡   r(   r(   r)   r   ä  s    z&getPhases.<locals>.Phase.processEndTagN)r6   r7   r8   r±   rG   r…   r‚   rƒ   r~   r   r€   rÁ   r   r(   r(   r(   r)   ÚPhase¾  s   
rÃ   c               @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )zgetPhases.<locals>.InitialPhasec             S   s   d S )Nr(   )r?   r‡   r(   r(   r)   r   è  s    z6getPhases.<locals>.InitialPhase.processSpaceCharactersc             S   s   | j  || j j¡ d S )N)r;   r½   Údocument)r?   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rÄd| j _n$| d¡sà| d¡rè|d k	rèd| 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 quirksrR   )rH   ry   r;   ZinsertDoctyperg   r   r¶   rW   rV   rE   r\   )r?   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É   rR   )rH   rV   rE   r\   )r?   r(   r(   r)   ÚanythingElseM  s    z,getPhases.<locals>.InitialPhase.anythingElsec             S   s   | j  d¡ |  ¡  |S )Nzexpected-doctype-but-got-chars)rH   ry   rÊ   )r?   r‡   r(   r(   r)   r~   Q  s    z1getPhases.<locals>.InitialPhase.processCharactersc             S   s"   | j  dd|d i¡ |  ¡  |S )Nz"expected-doctype-but-got-start-tagr=   )rH   ry   rÊ   )r?   r‡   r(   r(   r)   r€   V  s    z/getPhases.<locals>.InitialPhase.processStartTagc             S   s"   | j  dd|d i¡ |  ¡  |S )Nz expected-doctype-but-got-end-tagr=   )rH   ry   rÊ   )r?   r‡   r(   r(   r)   r   \  s    z-getPhases.<locals>.InitialPhase.processEndTagc             S   s   | j  d¡ |  ¡  dS )Nzexpected-doctype-but-got-eofT)rH   ry   rÊ   )r?   r(   r(   r)   r…   b  s    z*getPhases.<locals>.InitialPhase.processEOFN)r6   r7   r8   r   r‚   rƒ   rÊ   r~   r€   r   r…   r(   r(   r(   r)   ÚInitialPhaseç  s   _rË   c               @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )z"getPhases.<locals>.BeforeHtmlPhasec             S   s&   | j  tddƒ¡ | jjd | j_d S )Nr©   rl   r›   )r;   Z
insertRootÚimpliedTagTokenrH   rE   r\   )r?   r(   r(   r)   r]   i  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc             S   s   |   ¡  dS )NT)r]   )r?   r(   r(   r)   r…   n  s    z-getPhases.<locals>.BeforeHtmlPhase.processEOFc             S   s   | j  || j j¡ d S )N)r;   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   u  s    z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc             S   s   |   ¡  |S )N)r]   )r?   r‡   r(   r(   r)   r~   x  s    z4getPhases.<locals>.BeforeHtmlPhase.processCharactersc             S   s    |d dkrd| j _|  ¡  |S )Nr=   r©   T)rH   rT   r]   )r?   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)rH   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)   ÚBeforeHtmlPhaseg  s   rÎ   c                   sX   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )z"getPhases.<locals>.BeforeHeadPhasec                sV   ˆ   | ||¡ t d| jfd| jfg¡| _| j| j_t d| jfg¡| _	| j
| j	_d S )Nr©   r¦   )r¦   r§   r©   rÍ   )rG   r   ÚMethodDispatcherrÁ   ÚstartTagHeadr¿   ÚstartTagOtherÚdefaultÚendTagImplyHeadrÂ   ÚendTagOther)r?   rH   r;   )rÃ   r(   r)   rG   ‹  s    
z+getPhases.<locals>.BeforeHeadPhase.__init__c             S   s   |   tddƒ¡ dS )Nr¦   rl   T)rÐ   rÌ   )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   |   tddƒ¡ |S )Nr¦   rl   )rÐ   rÌ   )r?   r‡   r(   r(   r)   r~      s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc             S   s   | j jd  |¡S )Nr™   )rH   rE   r€   )r?   r‡   r(   r(   r)   rÁ   ¤  s    z/getPhases.<locals>.BeforeHeadPhase.startTagHtmlc             S   s0   | j  |¡ | j jd | j _| jjd | j_d S )Nrp   ÚinHead)r;   r®   rx   ÚheadPointerrH   rE   r\   )r?   r‡   r(   r(   r)   rÐ   §  s    z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc             S   s   |   tddƒ¡ |S )Nr¦   rl   )rÐ   rÌ   )r?   r‡   r(   r(   r)   rÑ   ¬  s    z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc             S   s   |   tddƒ¡ |S )Nr¦   rl   )rÐ   rÌ   )r?   r‡   r(   r(   r)   rÓ   °  s    z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc             S   s   | j  dd|d i¡ d S )Nzend-tag-after-implied-rootr=   )rH   ry   )r?   r‡   r(   r(   r)   rÔ   ´  s    z.getPhases.<locals>.BeforeHeadPhase.endTagOtherN)r6   r7   r8   rG   r…   r   r~   rÁ   rÐ   rÑ   rÓ   rÔ   r(   )rÃ   r(   r)   ÚBeforeHeadPhaseŠ  s   r×   c                   s   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!S )"zgetPhases.<locals>.InHeadPhasec                sŽ   ˆ   | ||¡ t d| jfd| jfd| jfd| jfd| jfd| jfd| j	fd| j
fg¡| _| j| j_t d| jfd	| jfg¡| _| j| j_d S )
Nr©   Útitle)ÚnoframesÚstyleÚnoscriptÚscript)ÚbaseÚbasefontÚbgsoundÚcommandÚlinkr3   r¦   )rÍ   r©   r§   )rG   r   rÏ   rÁ   ÚstartTagTitleÚstartTagNoFramesStyleÚstartTagNoscriptÚstartTagScriptÚstartTagBaseLinkCommandÚstartTagMetarÐ   r¿   rÑ   rÒ   Ú
endTagHeadÚendTagHtmlBodyBrrÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG   ¹  s     
z'getPhases.<locals>.InHeadPhase.__init__c             S   s   |   ¡  dS )NT)rÊ   )r?   r(   r(   r)   r…   Ð  s    z)getPhases.<locals>.InHeadPhase.processEOFc             S   s   |   ¡  |S )N)rÊ   )r?   r‡   r(   r(   r)   r~   Ô  s    z0getPhases.<locals>.InHeadPhase.processCharactersc             S   s   | j jd  |¡S )Nr™   )rH   rE   r€   )r?   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)rH   ry   )r?   r‡   r(   r(   r)   rÐ   Û  s    z+getPhases.<locals>.InHeadPhase.startTagHeadc             S   s$   | j  |¡ | j j ¡  d|d< d S )NTrv   )r;   r®   rx   Úpop)r?   r‡   r(   r(   r)   ræ   Þ  s    z6getPhases.<locals>.InHeadPhase.startTagBaseLinkCommandc             S   s´   | j  |¡ | j j ¡  d|d< |d }| jjjjd dkr°d|krZ| jjj |d ¡ nVd|kr°d|kr°|d  	¡ d	kr°t
 |d  d
¡¡}t
 |¡}| ¡ }| jjj |¡ d S )NTrv   rq   r   Z	tentativeÚcharsetZcontentz
http-equivzcontent-typezutf-8)r;   r®   rx   rê   rH   rK   rN   ra   ZchangeEncodingrW   r	   ZEncodingBytesÚencodeZContentAttrParserr"   )r?   r‡   rf   rq   rH   Úcodecr(   r(   r)   rç   ã  s    
z+getPhases.<locals>.InHeadPhase.startTagMetac             S   s   | j  |d¡ d S )Nr¬   )rH   r°   )r?   r‡   r(   r(   r)   râ   ø  s    z,getPhases.<locals>.InHeadPhase.startTagTitlec             S   s   | j  |d¡ d S )Nr«   )rH   r°   )r?   r‡   r(   r(   r)   rã   û  s    z4getPhases.<locals>.InHeadPhase.startTagNoFramesStylec             S   s8   | j jr| j  |d¡ n| j |¡ | j jd | j _d S )Nr«   ÚinHeadNoscript)rH   rJ   r°   r;   r®   rE   r\   )r?   r‡   r(   r(   r)   rä   ÿ  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®   rH   rK   ZscriptDataStaterY   r\   r¯   rE   )r?   r‡   r(   r(   r)   rå     s    z-getPhases.<locals>.InHeadPhase.startTagScriptc             S   s   |   ¡  |S )N)rÊ   )r?   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)rH   r;   rx   rê   r=   r†   rE   r\   )r?   r‡   rª   r(   r(   r)   rè     s    z)getPhases.<locals>.InHeadPhase.endTagHeadc             S   s   |   ¡  |S )N)rÊ   )r?   r‡   r(   r(   r)   ré     s    z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc             S   s   | j  dd|d i¡ d S )Nzunexpected-end-tagr=   )rH   ry   )r?   r‡   r(   r(   r)   rÔ     s    z*getPhases.<locals>.InHeadPhase.endTagOtherc             S   s   |   tdƒ¡ d S )Nr¦   )rè   rÌ   )r?   r(   r(   r)   rÊ     s    z+getPhases.<locals>.InHeadPhase.anythingElseN)r6   r7   r8   rG   r…   r~   rÁ   rÐ   ræ   rç   râ   rã   rä   rå   rÑ   rè   ré   rÔ   rÊ   r(   )rÃ   r(   r)   ÚInHeadPhase¸  s    rð   c                   sx   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )z&getPhases.<locals>.InHeadNoscriptPhasec                sf   ˆ   | ||¡ t d| jfd| jfd| jfg¡| _| j| j_t d| j	fd| j
fg¡| _| j| j_d S )Nr©   )rÞ   rß   rá   r3   rÙ   rÚ   )r¦   rÛ   rÛ   rÍ   )rG   r   rÏ   rÁ   ræ   ÚstartTagHeadNoscriptr¿   rÑ   rÒ   ÚendTagNoscriptÚendTagBrrÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG      s    
z/getPhases.<locals>.InHeadNoscriptPhase.__init__c             S   s   | j  d¡ |  ¡  dS )Nzeof-in-head-noscriptT)rH   ry   rÊ   )r?   r(   r(   r)   r…   0  s    z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc             S   s   | j jd  |¡S )NrÕ   )rH   rE   r‚   )r?   r‡   r(   r(   r)   r‚   5  s    z5getPhases.<locals>.InHeadNoscriptPhase.processCommentc             S   s   | j  d¡ |  ¡  |S )Nzchar-in-head-noscript)rH   ry   rÊ   )r?   r‡   r(   r(   r)   r~   8  s    z8getPhases.<locals>.InHeadNoscriptPhase.processCharactersc             S   s   | j jd  |¡S )NrÕ   )rH   rE   r   )r?   r‡   r(   r(   r)   r   =  s    z=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharactersc             S   s   | j jd  |¡S )Nr™   )rH   rE   r€   )r?   r‡   r(   r(   r)   rÁ   @  s    z3getPhases.<locals>.InHeadNoscriptPhase.startTagHtmlc             S   s   | j jd  |¡S )NrÕ   )rH   rE   r€   )r?   r‡   r(   r(   r)   ræ   C  s    z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc             S   s   | j  dd|d i¡ d S )Nzunexpected-start-tagr=   )rH   ry   )r?   r‡   r(   r(   r)   rñ   F  s    z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc             S   s"   | j  dd|d i¡ |  ¡  |S )Nzunexpected-inhead-noscript-tagr=   )rH   ry   rÊ   )r?   r‡   r(   r(   r)   rÑ   I  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Õ   )rH   r;   rx   rê   r=   r†   rE   r\   )r?   r‡   rª   r(   r(   r)   rò   N  s    z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc             S   s"   | j  dd|d i¡ |  ¡  |S )Nzunexpected-inhead-noscript-tagr=   )rH   ry   rÊ   )r?   r‡   r(   r(   r)   ró   S  s    z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc             S   s   | j  dd|d i¡ d S )Nzunexpected-end-tagr=   )rH   ry   )r?   r‡   r(   r(   r)   rÔ   X  s    z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc             S   s   |   tdƒ¡ d S )NrÛ   )rò   rÌ   )r?   r(   r(   r)   rÊ   [  s    z3getPhases.<locals>.InHeadNoscriptPhase.anythingElseN)r6   r7   r8   rG   r…   r‚   r~   r   rÁ   ræ   rñ   rÑ   rò   ró   rÔ   rÊ   r(   )rÃ   r(   r)   ÚInHeadNoscriptPhase  s   rô   c                   sp   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )z!getPhases.<locals>.AfterHeadPhasec                sn   ˆ   | ||¡ t d| jfd| jfd| jfd| jfd| jfg¡| _| j	| j_
t d| jfg¡| _| j| j_
d S )Nr©   r§   r¨   )	rÝ   rÞ   rß   rá   r3   rÙ   rÜ   rÚ   rØ   r¦   )r§   r©   rÍ   )rG   r   rÏ   rÁ   ÚstartTagBodyÚstartTagFramesetÚstartTagFromHeadrÐ   r¿   rÑ   rÒ   ré   rÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG   `  s    
z*getPhases.<locals>.AfterHeadPhase.__init__c             S   s   |   ¡  dS )NT)rÊ   )r?   r(   r(   r)   r…   q  s    z,getPhases.<locals>.AfterHeadPhase.processEOFc             S   s   |   ¡  |S )N)rÊ   )r?   r‡   r(   r(   r)   r~   u  s    z3getPhases.<locals>.AfterHeadPhase.processCharactersc             S   s   | j jd  |¡S )Nr™   )rH   rE   r€   )r?   r‡   r(   r(   r)   rÁ   y  s    z.getPhases.<locals>.AfterHeadPhase.startTagHtmlc             S   s(   d| j _| j |¡ | j jd | j _d S )NFr™   )rH   r_   r;   r®   rE   r\   )r?   r‡   r(   r(   r)   rõ   |  s    z.getPhases.<locals>.AfterHeadPhase.startTagBodyc             S   s    | j  |¡ | jjd | j_d S )Nrš   )r;   r®   rH   rE   r\   )r?   r‡   r(   r(   r)   rö     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Õ   rp   r¦   )
rH   ry   r;   rx   r„   rÖ   rE   r€   r=   Úremove)r?   r‡   rª   r(   r(   r)   r÷   …  s    
z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc             S   s   | j  dd|d i¡ d S )Nzunexpected-start-tagr=   )rH   ry   )r?   r‡   r(   r(   r)   rÐ     s    z.getPhases.<locals>.AfterHeadPhase.startTagHeadc             S   s   |   ¡  |S )N)rÊ   )r?   r‡   r(   r(   r)   rÑ   ’  s    z/getPhases.<locals>.AfterHeadPhase.startTagOtherc             S   s   |   ¡  |S )N)rÊ   )r?   r‡   r(   r(   r)   ré   –  s    z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc             S   s   | j  dd|d i¡ d S )Nzunexpected-end-tagr=   )rH   ry   )r?   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§   rl   r™   T)r;   r®   rÌ   rH   rE   r\   r_   )r?   r(   r(   r)   rÊ     s    z.getPhases.<locals>.AfterHeadPhase.anythingElseN)r6   r7   r8   rG   r…   r~   rÁ   rõ   rö   r÷   rÐ   rÑ   ré   rÔ   rÊ   r(   )rÃ   r(   r)   ÚAfterHeadPhase_  s   
rù   c                   s¨  e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWdX„ Z.dYdZ„ Z/d[d\„ Z0d]d^„ Z1d_d`„ Z2dadb„ Z3dcdd„ Z4dedf„ Z5dgS )hzgetPhases.<locals>.InBodyPhasec          $      sž  ˆ   | ||¡ | j| _t d| jfd| jfd| jfd| jfd| j	ft
| jfd| jfd| jfd| jfd	| jfd
| jfd| jfd| jfd| jfd| jfd| jfd| jfd| jfd| jfd| jfd| jfd| jfd| jfd| jfd| jfd| jfd| j fd| j!fd| j"fd| j#fd| j$fd| j%fd | j&fg!¡| _'| j(| j'_)t d| j*fd| j+fd!| j,fd| j-fd"| j.fd#| j/ft
| j0fd$| j1fd| j2fd%| j3fg
¡| _4| j5| j4_)d S )&Nr©   )	rÝ   rÞ   rß   rà   rá   r3   rÜ   rÚ   rØ   r§   r¨   )ÚaddressÚarticleÚasideÚ
blockquoteÚcenterÚdetailsÚdirr*   ÚdlÚfieldsetÚ
figcaptionÚfigureÚfooterÚheaderÚhgroupÚmainÚmenuÚnavÚolr'   ÚsectionÚsummaryÚul)ÚpreÚlistingÚform)ÚliÚddÚdtrQ   Úa)ÚbÚbigÚcodeÚemÚfontÚiÚsÚsmallÚstrikeÚstrongÚttÚuÚnobrÚbutton)ZappletZmarqueeÚobjectZxmpr¥   )ZarearÍ   ÚembedÚimgÚkeygenZwbr)ZparamÚsourceZtrackÚinputÚhrÚimageÚisindexÚtextareaZiframerÛ   )ZnoembedrÙ   rœ   )ÚrpÚrt)ÚoptionÚoptgroupZmathrs   )r£   Úcolr¤   Úframer¦   r    r   r¢   rž   r¡   rŸ   )rú   rû   rü   rý   r#  rþ   rÿ   Zdialogr   r*   r  r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r'   )r  r  r  )r  r  r  r  r  r  r  r"  r  r  r  r  r   r!  rÍ   )6rG   ÚprocessSpaceCharactersNonPrer   r   rÏ   rÁ   ÚstartTagProcessInHeadrõ   rö   ÚstartTagClosePr   ÚstartTagHeadingÚstartTagPreListingÚstartTagFormÚstartTagListItemÚstartTagPlaintextÚ	startTagAÚstartTagFormattingÚstartTagNobrÚstartTagButtonÚstartTagAppletMarqueeObjectÚstartTagXmpÚstartTagTableÚstartTagVoidFormattingÚstartTagParamSourceÚstartTagInputÚ
startTagHrÚstartTagImageÚstartTagIsIndexÚstartTagTextareaÚstartTagIFramerä   ÚstartTagRawtextÚstartTagSelectÚstartTagRpRtÚstartTagOptÚstartTagMathÚstartTagSvgÚstartTagMisplacedr¿   rÑ   rÒ   Ú
endTagBodyÚ
endTagHtmlÚendTagBlockÚ
endTagFormÚendTagPÚendTagListItemÚendTagHeadingÚendTagFormattingÚendTagAppletMarqueeObjectró   rÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG   ¥  sp    
z'getPhases.<locals>.InBodyPhase.__init__c             S   s$   |j |j ko"|j|jko"|j|jkS )N)r=   re   rf   )r?   Znode1Z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 )Nrp   é   )
r;   r®   rx   ÚactiveFormattingElementsr   r[  r„   r{   r†   rø   )r?   r‡   rh   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 d¡ P qW d S )N)r  r  r  r'   r    r   r¢   rž   r¡   rŸ   r§   r©   rp   z expected-closing-tag-but-got-eof)r}   r;   rx   r=   rH   ry   )r?   Z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 )Nrq   Ú
rp   )r  r  r-  r   )	r4  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  |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)   r@   "  s   zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r;   r`  r¾   rH   r_   Úany)r?   r‡   r(   r(   r)   r~     s    
z0getPhases.<locals>.InBodyPhase.processCharactersc             S   s   | j  ¡  | j  |d ¡ d S )Nrq   )r;   r`  r¾   )r?   r‡   r(   r(   r)   r4  &  s    
z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec             S   s   | j jd  |¡S )NrÕ   )rH   rE   r€   )r?   r‡   r(   r(   r)   r5  *  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sˆt‚nFd| j _x<|d  	¡ D ],\}}|| jjd j
krX|| jjd j
|< qXW d S )Nzunexpected-start-tagr=   r§   r   Frq   )rH   ry   r{   r;   rx   r=   rO   r†   r_   r-   rf   )r?   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s¶t‚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§   rp   r©   rš   )rH   ry   r{   r;   rx   r=   rO   r†   r_   ÚparentÚremoveChildrê   r®   rE   r\   )r?   r‡   r(   r(   r)   rö   8  s    "z/getPhases.<locals>.InBodyPhase.startTagFramesetc             S   s.   | j jdddr|  tdƒ¡ | j  |¡ d S )Nr'   r#  )Úvariant)r;   ÚelementInScoperV  rÌ   r®   )r?   r‡   r(   r(   r)   r6  F  s    z-getPhases.<locals>.InBodyPhase.startTagClosePc             S   s>   | j jdddr|  tdƒ¡ | j  |¡ d| j_| j| _d S )Nr'   r#  )rg  F)	r;   rh  rV  rÌ   r®   rH   r_   ra  r   )r?   r‡   r(   r(   r)   r8  K  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=   r  r'   r#  )rg  rp   )	r;   ÚformPointerrH   ry   rh  rV  rÌ   r®   rx   )r?   r‡   r(   r(   r)   r9  R  s    z+getPhases.<locals>.InBodyPhase.startTagFormc             S   s¬   d| j _dgddgddgdœ}||d  }xLt| jjƒD ]<}|j|kr^| j j 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 )NFr  r  r  )r  r  r  r=   rm   )rú   r*   r'   r'   r#  )rg  )rH   r_   Úreversedr;   rx   r=   r\   r   rÌ   Ú	nameTupler   rh  r®   )r?   r‡   ZstopNamesMapZ	stopNamesrª   r(   r(   r)   r:  [  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'   r#  )rg  )	r;   rh  rV  rÌ   r®   rH   rK   r[   rY   )r?   r‡   r(   r(   r)   r;  q  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'   r#  )rg  rp   zunexpected-start-tagr=   )r;   rh  rV  rÌ   rx   r=   r   rH   ry   rê   r®   )r?   r‡   r(   r(   r)   r7  w  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 )Nr  z$unexpected-start-tag-implies-end-tag)Ú	startNameÚendName)r;   Ú!elementInActiveFormattingElementsrH   ry   rY  rÌ   rx   rø   r]  r`  r^  )r?   r‡   ZafeAElementr(   r(   r)   r<    s    
z(getPhases.<locals>.InBodyPhase.startTagAc             S   s   | j  ¡  |  |¡ d S )N)r;   r`  r^  )r?   r‡   r(   r(   r)   r=  Œ  s    
z1getPhases.<locals>.InBodyPhase.startTagFormattingc             S   sP   | j  ¡  | j  d¡rB| j ddddœ¡ |  tdƒ¡ | j  ¡  |  |¡ d S )Nr"  z$unexpected-start-tag-implies-end-tag)rl  rm  )r;   r`  rh  rH   ry   r   rÌ   r^  )r?   r‡   r(   r(   r)   r>    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 )Nr#  z$unexpected-start-tag-implies-end-tag)rl  rm  F)	r;   rh  rH   ry   r   rÌ   r`  r®   r_   )r?   r‡   r(   r(   r)   r?  š  s    
z-getPhases.<locals>.InBodyPhase.startTagButtonc             S   s0   | j  ¡  | j  |¡ | j j t¡ d| j_d S )NF)r;   r`  r®   r]  r„   r   rH   r_   )r?   r‡   r(   r(   r)   r@  ¥  s    
z:getPhases.<locals>.InBodyPhase.startTagAppletMarqueeObjectc             S   sB   | j jdddr|  tdƒ¡ | j  ¡  d| j_| j |d¡ d S )Nr'   r#  )rg  Fr«   )r;   rh  rV  rÌ   r`  rH   r_   r°   )r?   r‡   r(   r(   r)   rA  «  s
    
z*getPhases.<locals>.InBodyPhase.startTagXmpc             S   sR   | j jdkr*| jjdddr*|  tdƒ¡ | j |¡ d| j _| j jd | j _	d S )NrÉ   r'   r#  )rg  Fr˜   )
rH   rV   r;   rh  r   rÌ   r®   r_   rE   r\   )r?   r‡   r(   r(   r)   rB  ²  s    z,getPhases.<locals>.InBodyPhase.startTagTablec             S   s6   | j  ¡  | j  |¡ | j j ¡  d|d< d| j_d S )NTrv   F)r;   r`  r®   rx   rê   rH   r_   )r?   r‡   r(   r(   r)   rC  º  s
    
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc             S   s@   | j j}|  |¡ d|d kr<|d d  t¡dkr<|| j _d S )Nr1   rq   Úhidden)rH   r_   rC  rg   r   )r?   r‡   r_   r(   r(   r)   rE  Á  s
    
z,getPhases.<locals>.InBodyPhase.startTagInputc             S   s$   | j  |¡ | j j ¡  d|d< d S )NTrv   )r;   r®   rx   rê   )r?   r‡   r(   r(   r)   rD  É  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'   r#  )rg  Trv   F)	r;   rh  rV  rÌ   r®   rx   rê   rH   r_   )r?   r‡   r(   r(   r)   rF  Î  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-asr+  r&  )ÚoriginalNameÚnewNamerl   rq   ru   )rf   ru   )rH   ry   r€   rÌ   )r?   r‡   r(   r(   r)   rG  Ö  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=   r,  Úactionrq   r  rl   )rf   r*  ZlabelÚpromptz3This is a searchable index. Enter search keywords: rk   )r1   rq   r)  ru   )rf   ru   )
rH   ry   r;   ri  r€   rÌ   r~   r   Úcopyr   )r?   r‡   Z
form_attrsrs  rf   r(   r(   r)   rH  Þ  s6    


z.getPhases.<locals>.InBodyPhase.startTagIsIndexc             S   s0   | j  |¡ | jjj| jj_| j| _d| j_d S )NF)	r;   r®   rH   rK   rX   rY   ra  r   r_   )r?   r‡   r(   r(   r)   rI  ý  s    z/getPhases.<locals>.InBodyPhase.startTagTextareac             S   s   d| j _|  |¡ d S )NF)rH   r_   rK  )r?   r‡   r(   r(   r)   rJ    s    z-getPhases.<locals>.InBodyPhase.startTagIFramec             S   s"   | j jr|  |¡ n
|  |¡ d S )N)rH   rJ   rK  rÑ   )r?   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)rH   r°   )r?   r‡   r(   r(   r)   rK    s    z.getPhases.<locals>.InBodyPhase.startTagRawtextc             S   s@   | j jd jdkr$| jj tdƒ¡ | j  ¡  | jj  |¡ d S )Nrp   r0  )	r;   rx   r=   rH   r\   r   rÌ   r`  r®   )r?   r‡   r(   r(   r)   rN    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;   r`  r®   rH   r_   r\   rE   )r?   r‡   r(   r(   r)   rL    s    




z-getPhases.<locals>.InBodyPhase.startTagSelectc             S   sB   | j  d¡r2| j  ¡  | j jd jdkr2| j ¡  | j  |¡ d S )NÚrubyrp   )r;   rh  ÚgenerateImpliedEndTagsrx   r=   rH   ry   r®   )r?   r‡   r(   r(   r)   rM  %  s
    

z+getPhases.<locals>.InBodyPhase.startTagRpRtc             S   sZ   | j  ¡  | j |¡ | j |¡ td |d< | j  |¡ |d rV| j j ¡  d|d< d S )Nrc   re   ru   Trv   )	r;   r`  rH   r   r   r   r®   rx   rê   )r?   r‡   r(   r(   r)   rO  ,  s    
z+getPhases.<locals>.InBodyPhase.startTagMathc             S   sZ   | j  ¡  | j |¡ | j |¡ td |d< | j  |¡ |d rV| j j ¡  d|d< d S )Nrs   re   ru   Trv   )	r;   r`  rH   r   r   r   r®   rx   rê   )r?   r‡   r(   r(   r)   rP  8  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)rH   ry   )r?   r‡   r(   r(   r)   rQ  D  s    z0getPhases.<locals>.InBodyPhase.startTagMisplacedc             S   s   | j  ¡  | j  |¡ d S )N)r;   r`  r®   )r?   r‡   r(   r(   r)   rÑ   M  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 
¡ }q‚W d S )	Nr'   r#  )rg  rl   zunexpected-end-tagr=   rm   rp   )r;   rh  r6  rÌ   rH   ry   rV  rw  rx   r=   rê   )r?   r‡   rª   r(   r(   r)   rV  Q  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§   rp   é   )r  r  r  r1  r0  r'   r.  r/  r    r   r¢   rž   r¡   rŸ   r§   r©   z$expected-one-end-tag-but-got-another)ÚgotNameÚexpectedNameÚ	afterBody)	r;   rh  rH   ry   rx   r=   r}   rE   r\   )r?   r‡   rª   r(   r(   r)   rR  ^  s    
z)getPhases.<locals>.InBodyPhase.endTagBodyc             S   s"   | j  d¡r|  tdƒ¡ |S d S )Nr§   )r;   rh  rR  rÌ   )r?   r‡   r(   r(   r)   rS  p  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=   r  rp   zend-tag-too-early)
r4  r   r;   rh  rw  rx   r=   rH   ry   rê   )r?   r‡   ZinScoperª   r(   r(   r)   rT  v  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=   r  rp   zend-tag-too-early-ignored)r;   ri  rh  rH   ry   rw  rx   rø   )r?   r‡   rª   r(   r(   r)   rU  „  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 ¡ }qŽW d S )	Nr=   r  Úlist)rg  zunexpected-end-tag)Úexcluderp   zend-tag-too-early)r;   rh  rH   ry   rw  rx   r=   rê   )r?   r‡   rg  rª   r(   r(   r)   rW  ‘  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 )Nrp   r=   zend-tag-too-early)	r   r;   rh  rw  rx   r=   rH   ry   rê   )r?   r‡   Úitemr(   r(   r)   rX  ¢  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  qüW |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rêP |	|kr| j j 
|
¡d }|
 ¡ }|| j j| j j 
|
¡< || j j| j j 
|
¡< |}
|	jrR|	j |	¡ |
 |	¡ |
}	q˜W |	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.4rp   zadoption-agency-1.3r\  )r¥   r    r¢   r¡   rŸ   )r;   rn  rx   rh  r=   rÔ   rH   ry   r]  rø   Úindexrk  r   rê   Z	cloneNodere  rf  ZappendChildr}   ZgetTableMisnestedNodePositionÚinsertBeforeZreparentChildrenÚinsert)r?   r‡   ZouterLoopCounterZformattingElementZafeIndexZfurthestBlockrh   ZcommonAncestorZbookmarkZlastNoderª   ZinnerLoopCounterr€  Zclonere  r  r(   r(   r)   rY  ±  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=   rp   zend-tag-too-early)	r;   rh  rw  rx   r=   rH   ry   rê   ÚclearActiveFormattingElements)r?   r‡   rh   r(   r(   r)   rZ  T  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)rp  rq  rl   )rH   ry   r;   r`  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 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 )Nrp   r=   )r}  zunexpected-end-tag)	r;   rx   r=   rw  rH   ry   rê   rk  r   )r?   r‡   rª   r(   r(   r)   rÔ   g  s    
z*getPhases.<locals>.InBodyPhase.endTagOtherN)6r6   r7   r8   rG   r[  r^  r…   ra  r~   r4  r5  rõ   rö   r6  r8  r9  r:  r;  r7  r<  r=  r>  r?  r@  rA  rB  rC  rE  rD  rF  rG  rH  rI  rJ  rä   rK  rN  rL  rM  rO  rP  rQ  rÑ   rV  rR  rS  rT  rU  rW  rX  rY  rZ  ró   rÔ   r(   )rÃ   r(   r)   ÚInBodyPhase¢  sh   G
	
	 $r„  c                   s@   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )zgetPhases.<locals>.TextPhasec                sF   ˆ   | ||¡ t g ¡| _| j| j_t d| jfg¡| _| j| j_d S )NrÜ   )	rG   r   rÏ   r¿   rÑ   rÒ   ÚendTagScriptrÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG   v  s    
z%getPhases.<locals>.TextPhase.__init__c             S   s   | j  |d ¡ d S )Nrq   )r;   r¾   )r?   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=   rp   T)rH   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dkst‚| jj| j_d S )NrÜ   )r;   rx   rê   r=   r†   rH   r¯   r\   )r?   r‡   rª   r(   r(   r)   r…  ‹  s    z)getPhases.<locals>.TextPhase.endTagScriptc             S   s   | j j ¡  | jj| j_d S )N)r;   rx   rê   rH   r¯   r\   )r?   r‡   r(   r(   r)   rÔ   ’  s    z(getPhases.<locals>.TextPhase.endTagOtherN)	r6   r7   r8   rG   r~   r…   rÑ   r…  rÔ   r(   )rÃ   r(   r)   Ú	TextPhaseu  s   r†  c                   s¨   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'S )(zgetPhases.<locals>.InTablePhasec                sž   ˆ   | ||¡ t d| jfd| jfd| jfd| jfd| jfd| jfd| j	fd| j
fd	| jfd
| jfg
¡| _| j| j_t d| jfd| jfg¡| _| j| j_d S )Nr©   r£   r¤   r2  )r    r¢   r¡   )r   rž   rŸ   r¥   )rÚ   rÜ   r)  r  )r§   r£   r2  r¤   r©   r    r   r¢   rž   r¡   rŸ   )rG   r   rÏ   rÁ   ÚstartTagCaptionÚstartTagColgroupÚstartTagColÚstartTagRowGroupÚstartTagImplyTbodyrB  ÚstartTagStyleScriptrE  r9  r¿   rÑ   rÒ   ÚendTagTableÚendTagIgnorerÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG   ˜  s$    
z(getPhases.<locals>.InTablePhase.__init__c             S   s(   x"| j jd jdkr"| j j ¡  qW d S )Nrp   )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 d¡ n| jjs,t‚d S )Nrp   r©   zeof-in-table)r;   rx   r=   rH   ry   rO   r†   )r?   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)rH   r\   rE   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 |¡ d S )Nr  )rH   r\   rE   r¯   r~   )r?   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;   ÚinsertFromTablerH   rE   r~   )r?   r‡   r(   r(   r)   r¾   Ì  s    z*getPhases.<locals>.InTablePhase.insertTextc             S   s6   |   ¡  | jj t¡ | j |¡ | jjd | j_d S )Nr–   )	r  r;   r]  r„   r   r®   rH   rE   r\   )r?   r‡   r(   r(   r)   r‡  Ó  s    z/getPhases.<locals>.InTablePhase.startTagCaptionc             S   s(   |   ¡  | j |¡ | jjd | j_d S )Nr—   )r  r;   r®   rH   rE   r\   )r?   r‡   r(   r(   r)   rˆ  Ù  s    z0getPhases.<locals>.InTablePhase.startTagColgroupc             S   s   |   tddƒ¡ |S )Nr¤   rl   )rˆ  rÌ   )r?   r‡   r(   r(   r)   r‰  Þ  s    z+getPhases.<locals>.InTablePhase.startTagColc             S   s(   |   ¡  | j |¡ | jjd | j_d S )Nr•   )r  r;   r®   rH   rE   r\   )r?   r‡   r(   r(   r)   rŠ  â  s    z0getPhases.<locals>.InTablePhase.startTagRowGroupc             S   s   |   tddƒ¡ |S )Nr    rl   )rŠ  rÌ   )r?   r‡   r(   r(   r)   r‹  ç  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¥   )rl  rm  )rH   ry   r\   r   rÌ   rO   )r?   r‡   r(   r(   r)   rB  ë  s
    z-getPhases.<locals>.InTablePhase.startTagTablec             S   s   | j jd  |¡S )NrÕ   )rH   rE   r€   )r?   r‡   r(   r(   r)   rŒ  ò  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 )Nr1   rq   ro  z unexpected-hidden-input-in-table)	rg   r   rH   ry   r;   r®   rx   rê   rÑ   )r?   r‡   r(   r(   r)   rE  õ  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-tablerp   )rH   ry   r;   ri  r®   rx   rê   )r?   r‡   r(   r(   r)   r9  ÿ  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)rH   ry   r;   r‘  rE   r€   )r?   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	s’t
‚| j ¡  d S )Nr¥   )rg  rp   zend-tag-too-early-named)ry  rz  )r;   rh  rw  rx   r=   rH   ry   rê   r^   rO   r†   )r?   r‡   r(   r(   r)   r    s    
z+getPhases.<locals>.InTablePhase.endTagTablec             S   s   | j  dd|d i¡ d S )Nzunexpected-end-tagr=   )rH   ry   )r?   r‡   r(   r(   r)   rŽ    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)rH   ry   r;   r‘  rE   r   )r?   r‡   r(   r(   r)   rÔ      s    z+getPhases.<locals>.InTablePhase.endTagOtherN)r6   r7   r8   rG   r  r…   r   r~   r¾   r‡  rˆ  r‰  rŠ  r‹  rB  rŒ  rE  r9  rÑ   r  rŽ  rÔ   r(   )rÃ   r(   r)   ÚInTablePhase–  s&   	
r’  c                   sP   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )z#getPhases.<locals>.InTableTextPhasec                s   ˆ   | ||¡ d | _g | _d S )N)rG   r¯   ÚcharacterTokens)r?   rH   r;   )rÃ   r(   r)   rG   (  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 )rq   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    rk   )r1   rq   r˜   )Újoinr“  rd  r   rH   rE   r¾   r;   )r?   rq   r‡   r(   r(   r)   ÚflushCharacters-  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc             S   s   |   ¡  | j| j_|S )N)r•  r¯   rH   r\   )r?   r‡   r(   r(   r)   r‚   6  s    
z2getPhases.<locals>.InTableTextPhase.processCommentc             S   s   |   ¡  | j| j_dS )NT)r•  r¯   rH   r\   )r?   r(   r(   r)   r…   ;  s    
z.getPhases.<locals>.InTableTextPhase.processEOFc             S   s    |d dkrd S | j  |¡ d S )Nrq   rb  )r“  r„   )r?   r‡   r(   r(   r)   r~   @  s    z5getPhases.<locals>.InTableTextPhase.processCharactersc             S   s   | j  |¡ d S )N)r“  r„   )r?   r‡   r(   r(   r)   r   E  s    z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc             S   s   |   ¡  | j| j_|S )N)r•  r¯   rH   r\   )r?   r‡   r(   r(   r)   r€   J  s    
z3getPhases.<locals>.InTableTextPhase.processStartTagc             S   s   |   ¡  | j| j_|S )N)r•  r¯   rH   r\   )r?   r‡   r(   r(   r)   r   O  s    
z1getPhases.<locals>.InTableTextPhase.processEndTagN)r6   r7   r8   rG   r•  r‚   r…   r~   r   r€   r   r(   )rÃ   r(   r)   ÚInTableTextPhase'  s   	r–  c                   s`   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )z!getPhases.<locals>.InCaptionPhasec                sf   ˆ   | ||¡ t d| jfd| jfg¡| _| j| j_t d| jfd| j	fd| j
fg¡| _| j| j_d S )Nr©   )	r£   r2  r¤   r    r   r¢   rž   r¡   rŸ   r£   r¥   )
r§   r2  r¤   r©   r    r   r¢   rž   r¡   rŸ   )rG   r   rÏ   rÁ   ÚstartTagTableElementr¿   rÑ   rÒ   ÚendTagCaptionr  rŽ  rÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG   V  s    
z*getPhases.<locals>.InCaptionPhase.__init__c             S   s   | j jddd S )Nr£   r¥   )rg  )r;   rh  )r?   r(   r(   r)   ÚignoreEndTagCaptionh  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc             S   s   | j jd  ¡  d S )Nr™   )rH   rE   r…   )r?   r(   r(   r)   r…   k  s    z,getPhases.<locals>.InCaptionPhase.processEOFc             S   s   | j jd  |¡S )Nr™   )rH   rE   r~   )r?   r‡   r(   r(   r)   r~   n  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc             S   s0   | j  ¡  |  ¡ }| j j tdƒ¡ |s,|S d S )Nr£   )rH   ry   r™  r\   r   rÌ   )r?   r‡   ÚignoreEndTagr(   r(   r)   r—  q  s
    
z6getPhases.<locals>.InCaptionPhase.startTagTableElementc             S   s   | j jd  |¡S )Nr™   )rH   rE   r€   )r?   r‡   r(   r(   r)   rÑ   y  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sšt‚| j ¡  d S )Nrp   r£   z$expected-one-end-tag-but-got-another)ry  rz  r˜   )r™  r;   rw  rx   r=   rH   ry   rê   rƒ  rE   r\   rO   r†   )r?   r‡   r(   r(   r)   r˜  |  s    

z/getPhases.<locals>.InCaptionPhase.endTagCaptionc             S   s0   | j  ¡  |  ¡ }| j j tdƒ¡ |s,|S d S )Nr£   )rH   ry   r™  r\   r   rÌ   )r?   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=   )rH   ry   )r?   r‡   r(   r(   r)   rŽ  •  s    z.getPhases.<locals>.InCaptionPhase.endTagIgnorec             S   s   | j jd  |¡S )Nr™   )rH   rE   r   )r?   r‡   r(   r(   r)   rÔ   ˜  s    z-getPhases.<locals>.InCaptionPhase.endTagOtherN)r6   r7   r8   rG   r™  r…   r~   r—  rÑ   r˜  r  rŽ  rÔ   r(   )rÃ   r(   r)   ÚInCaptionPhaseT  s   r›  c                   sX   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )z%getPhases.<locals>.InColumnGroupPhasec                s^   ˆ   | ||¡ t d| jfd| jfg¡| _| j| j_t d| jfd| j	fg¡| _
| j| j
_d S )Nr©   r2  r¤   )rG   r   rÏ   rÁ   r‰  r¿   rÑ   rÒ   ÚendTagColgroupÚ	endTagColrÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG   ž  s    
z.getPhases.<locals>.InColumnGroupPhase.__init__c             S   s   | j jd jdkS )Nrp   r©   )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 |  ¡ }|  tdƒ¡ |s@dS d S )Nrp   r©   r¤   T)	r;   rx   r=   rH   rO   r†   rž  rœ  rÌ   )r?   rš  r(   r(   r)   r…   °  s    z0getPhases.<locals>.InColumnGroupPhase.processEOFc             S   s"   |   ¡ }|  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 ¡  d|d< d S )NTrv   )r;   r®   rx   rê   )r?   r‡   r(   r(   r)   r‰  À  s    z1getPhases.<locals>.InColumnGroupPhase.startTagColc             S   s"   |   ¡ }|  tdƒ¡ |s|S d S )Nr¤   )rž  rœ  rÌ   )r?   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ž  rH   rO   r†   ry   r;   rx   rê   rE   r\   )r?   r‡   r(   r(   r)   rœ  Ë  s
    z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc             S   s   | j  dddi¡ d S )Nz
no-end-tagr=   r2  )rH   ry   )r?   r‡   r(   r(   r)   r  Ô  s    z/getPhases.<locals>.InColumnGroupPhase.endTagColc             S   s"   |   ¡ }|  tdƒ¡ |s|S d S )Nr¤   )rž  rœ  rÌ   )r?   r‡   rš  r(   r(   r)   rÔ   ×  s    z1getPhases.<locals>.InColumnGroupPhase.endTagOtherN)r6   r7   r8   rG   rž  r…   r~   r‰  rÑ   rœ  r  rÔ   r(   )rÃ   r(   r)   ÚInColumnGroupPhase›  s   
	rŸ  c                   sx   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )z#getPhases.<locals>.InTableBodyPhasec                sv   ˆ   | ||¡ t d| jfd| jfd| jfd| jfg¡| _| j| j_	t d| j
fd| jfd| jfg¡| _| j| j_	d S )Nr©   rŸ   )r   rž   )r£   r2  r¤   r    r¢   r¡   )r    r¢   r¡   r¥   )r§   r£   r2  r¤   r©   r   rž   rŸ   )rG   r   rÏ   rÁ   Ú
startTagTrÚstartTagTableCellÚstartTagTableOtherr¿   rÑ   rÒ   ÚendTagTableRowGroupr  rŽ  rÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG   ß  s    
z,getPhases.<locals>.InTableBodyPhase.__init__c             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 )Nrp   )r    r¢   r¡   r©   r©   )r;   rx   r=   rê   rH   rO   r†   )r?   r(   r(   r)   ÚclearStackToTableBodyContextó  s    z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc             S   s   | j jd  ¡  d S )Nr˜   )rH   rE   r…   )r?   r(   r(   r)   r…   ý  s    z.getPhases.<locals>.InTableBodyPhase.processEOFc             S   s   | j jd  |¡S )Nr˜   )rH   rE   r   )r?   r‡   r(   r(   r)   r      s    z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc             S   s   | j jd  |¡S )Nr˜   )rH   rE   r~   )r?   r‡   r(   r(   r)   r~     s    z5getPhases.<locals>.InTableBodyPhase.processCharactersc             S   s(   |   ¡  | j |¡ | jjd | j_d S )Nr”   )r¤  r;   r®   rH   rE   r\   )r?   r‡   r(   r(   r)   r     s    z.getPhases.<locals>.InTableBodyPhase.startTagTrc             S   s*   | j  dd|d i¡ |  tddƒ¡ |S )Nzunexpected-cell-in-table-bodyr=   rŸ   rl   )rH   ry   r   rÌ   )r?   r‡   r(   r(   r)   r¡    s    z5getPhases.<locals>.InTableBodyPhase.startTagTableCellc             S   sn   | j jddds0| j jddds0| j jdddrT|  ¡  |  t| j jd jƒ¡ |S | jjs`t	‚| j 
¡  d S )Nr    r¥   )rg  r¡   r¢   rp   )r;   rh  r¤  r£  rÌ   rx   r=   rH   rO   r†   ry   )r?   r‡   r(   r(   r)   r¢    s    z6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc             S   s   | j jd  |¡S )Nr˜   )rH   rE   r€   )r?   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¥   )rg  r˜   z unexpected-end-tag-in-table-body)	r;   rh  r¤  rx   rê   rH   rE   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|  ¡  |  t| j jd jƒ¡ |S | jjs`t	‚| j 
¡  d S )Nr    r¥   )rg  r¡   r¢   rp   )r;   rh  r¤  r£  rÌ   rx   r=   rH   rO   r†   ry   )r?   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=   )rH   ry   )r?   r‡   r(   r(   r)   rŽ  8  s    z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec             S   s   | j jd  |¡S )Nr˜   )rH   rE   r   )r?   r‡   r(   r(   r)   rÔ   <  s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherN)r6   r7   r8   rG   r¤  r…   r   r~   r   r¡  r¢  rÑ   r£  r  rŽ  rÔ   r(   )rÃ   r(   r)   ÚInTableBodyPhaseÝ  s   
	r¥  c                   s€   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )zgetPhases.<locals>.InRowPhasec                sv   ˆ   | ||¡ t d| jfd| jfd| jfg¡| _| j| j_t d| j	fd| j
fd| jfd| jfg¡| _| j| j_d S )Nr©   )r   rž   )r£   r2  r¤   r    r¢   r¡   rŸ   rŸ   r¥   )r    r¢   r¡   )r§   r£   r2  r¤   r©   r   rž   )rG   r   rÏ   rÁ   r¡  r¢  r¿   rÑ   rÒ   ÚendTagTrr  r£  rŽ  rÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG   A  s    
z&getPhases.<locals>.InRowPhase.__init__c             S   sD   x>| j jd jdkr>| j dd| j jd ji¡ | j j ¡  qW d S )Nrp   )rŸ   r©   z'unexpected-implied-end-tag-in-table-rowr=   )r;   rx   r=   rH   ry   rê   )r?   r(   r(   r)   ÚclearStackToTableRowContextU  s    z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc             S   s   | j jddd S )NrŸ   r¥   )rg  )r;   rh  )r?   r(   r(   r)   ÚignoreEndTagTr[  s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc             S   s   | j jd  ¡  d S )Nr˜   )rH   rE   r…   )r?   r(   r(   r)   r…   _  s    z(getPhases.<locals>.InRowPhase.processEOFc             S   s   | j jd  |¡S )Nr˜   )rH   rE   r   )r?   r‡   r(   r(   r)   r   b  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc             S   s   | j jd  |¡S )Nr˜   )rH   rE   r~   )r?   r‡   r(   r(   r)   r~   e  s    z/getPhases.<locals>.InRowPhase.processCharactersc             S   s6   |   ¡  | j |¡ | jjd | j_| jj t¡ d S )Nr“   )	r§  r;   r®   rH   rE   r\   r]  r„   r   )r?   r‡   r(   r(   r)   r¡  h  s    z/getPhases.<locals>.InRowPhase.startTagTableCellc             S   s"   |   ¡ }|  tdƒ¡ |s|S d S )NrŸ   )r¨  r¦  rÌ   )r?   r‡   rš  r(   r(   r)   r¢  n  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc             S   s   | j jd  |¡S )Nr˜   )rH   rE   r€   )r?   r‡   r(   r(   r)   rÑ   u  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;   rx   rê   rH   rE   r\   rO   r†   ry   )r?   r‡   r(   r(   r)   r¦  x  s    z&getPhases.<locals>.InRowPhase.endTagTrc             S   s"   |   ¡ }|  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&|  tdƒ¡ |S | j ¡  d S )Nr=   r¥   )rg  rŸ   )r;   rh  r¦  rÌ   rH   ry   )r?   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=   )rH   ry   )r?   r‡   r(   r(   r)   rŽ  ‘  s    z*getPhases.<locals>.InRowPhase.endTagIgnorec             S   s   | j jd  |¡S )Nr˜   )rH   rE   r   )r?   r‡   r(   r(   r)   rÔ   •  s    z)getPhases.<locals>.InRowPhase.endTagOtherN)r6   r7   r8   rG   r§  r¨  r…   r   r~   r¡  r¢  rÑ   r¦  r  r£  rŽ  rÔ   r(   )rÃ   r(   r)   Ú
InRowPhase?  s   
r©  c                   s`   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )zgetPhases.<locals>.InCellPhasec                sf   ˆ   | ||¡ t d| jfd| jfg¡| _| j| j_t d| jfd| j	fd| j
fg¡| _| j| j_d S )Nr©   )	r£   r2  r¤   r    r   r¢   rž   r¡   rŸ   )r   rž   )r§   r£   r2  r¤   r©   )r¥   r    r¢   r¡   rŸ   )rG   r   rÏ   rÁ   r¢  r¿   rÑ   rÒ   ÚendTagTableCellrŽ  ÚendTagImplyrÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG   š  s    
z'getPhases.<locals>.InCellPhase.__init__c             S   sB   | j jdddr |  tdƒ¡ n| j jdddr>|  tdƒ¡ d S )Nr   r¥   )rg  rž   )r;   rh  rª  rÌ   )r?   r(   r(   r)   Ú	closeCell«  s    z(getPhases.<locals>.InCellPhase.closeCellc             S   s   | j jd  ¡  d S )Nr™   )rH   rE   r…   )r?   r(   r(   r)   r…   ²  s    z)getPhases.<locals>.InCellPhase.processEOFc             S   s   | j jd  |¡S )Nr™   )rH   rE   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,|  ¡  |S | jjs8t‚| j ¡  d S )Nr   r¥   )rg  rž   )r;   rh  r¬  rH   rO   r†   ry   )r?   r‡   r(   r(   r)   r¢  ¸  s    z1getPhases.<locals>.InCellPhase.startTagTableOtherc             S   s   | j jd  |¡S )Nr™   )rH   rE   r€   )r?   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¥   )rg  rp   zunexpected-cell-end-tagr”   zunexpected-end-tag)r;   rh  rw  rx   r=   rH   ry   rê   rƒ  rE   r\   )r?   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=   )rH   ry   )r?   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¥   )rg  )r;   rh  r¬  rH   ry   )r?   r‡   r(   r(   r)   r«  Ù  s    z*getPhases.<locals>.InCellPhase.endTagImplyc             S   s   | j jd  |¡S )Nr™   )rH   rE   r   )r?   r‡   r(   r(   r)   rÔ   á  s    z*getPhases.<locals>.InCellPhase.endTagOtherN)r6   r7   r8   rG   r¬  r…   r~   r¢  rÑ   rª  rŽ  r«  rÔ   r(   )rÃ   r(   r)   ÚInCellPhase˜  s   
r­  c                   sx   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )z getPhases.<locals>.InSelectPhasec          	      s†   ˆ   | ||¡ t d| jfd| jfd| jfd| jfd| jfd| jfg¡| _	| j
| j	_t d| jfd| jfd| jfg¡| _| j| j_d S )Nr©   r0  r1  rœ   )r)  r'  r-  rÜ   )rG   r   rÏ   rÁ   ÚstartTagOptionÚstartTagOptgrouprL  rE  rå   r¿   rÑ   rÒ   ÚendTagOptionÚendTagOptgroupÚendTagSelectrÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG   å  s    
z)getPhases.<locals>.InSelectPhase.__init__c             S   s0   | j jd jdkr | j d¡ n| jjs,t‚d S )Nrp   r©   zeof-in-select)r;   rx   r=   rH   ry   rO   r†   )r?   r(   r(   r)   r…   ú  s    z+getPhases.<locals>.InSelectPhase.processEOFc             S   s$   |d dkrd S | j  |d ¡ d S )Nrq   rb  )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  |¡ d S )Nrp   r0  )r;   rx   r=   rê   r®   )r?   r‡   r(   r(   r)   r®  	  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 )Nrp   r0  r1  )r;   rx   r=   rê   r®   )r?   r‡   r(   r(   r)   r¯  	  s
    z1getPhases.<locals>.InSelectPhase.startTagOptgroupc             S   s   | j  d¡ |  tdƒ¡ d S )Nzunexpected-select-in-selectrœ   )rH   ry   r²  rÌ   )r?   r‡   r(   r(   r)   rL  	  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œ   )rg  )rH   ry   r;   rh  r²  rÌ   rO   r†   )r?   r‡   r(   r(   r)   rE  	  s
    z.getPhases.<locals>.InSelectPhase.startTagInputc             S   s   | j jd  |¡S )NrÕ   )rH   rE   r€   )r?   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=   )rH   ry   )r?   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 )Nrp   r0  zunexpected-end-tag-in-selectr=   )r;   rx   r=   rê   rH   ry   )r?   r‡   r(   r(   r)   r°  %	  s    z-getPhases.<locals>.InSelectPhase.endTagOptionc             S   sf   | j jd jdkr0| j jd jdkr0| j j ¡  | j jd jdkrP| j j ¡  n| j dddi¡ d S )Nrp   r0  éþÿÿÿr1  zunexpected-end-tag-in-selectr=   )r;   rx   r=   rê   rH   ry   )r?   r‡   r(   r(   r)   r±  ,	  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œ   )rg  )
r;   rh  rx   rê   r=   rH   r^   rO   r†   ry   )r?   r‡   rª   r(   r(   r)   r²  9	  s    z-getPhases.<locals>.InSelectPhase.endTagSelectc             S   s   | j  dd|d i¡ d S )Nzunexpected-end-tag-in-selectr=   )rH   ry   )r?   r‡   r(   r(   r)   rÔ   D	  s    z,getPhases.<locals>.InSelectPhase.endTagOtherN)r6   r7   r8   rG   r…   r~   r®  r¯  rL  rE  rå   rÑ   r°  r±  r²  rÔ   r(   )rÃ   r(   r)   ÚInSelectPhaseä  s   r´  c                   sH   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )z'getPhases.<locals>.InSelectInTablePhasec                sN   ˆ   | ||¡ t d| jfg¡| _| j| j_t d| jfg¡| _| j	| j_d S )N)r£   r¥   r    r¢   r¡   rŸ   r   rž   )
rG   r   rÏ   rB  r¿   rÑ   rÒ   r  rÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG   I	  s    
z0getPhases.<locals>.InSelectInTablePhase.__init__c             S   s   | j jd  ¡  d S )Nr’   )rH   rE   r…   )r?   r(   r(   r)   r…   X	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc             S   s   | j jd  |¡S )Nr’   )rH   rE   r~   )r?   r‡   r(   r(   r)   r~   [	  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œ   )rH   ry   rÔ   rÌ   )r?   r‡   r(   r(   r)   rB  ^	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec             S   s   | j jd  |¡S )Nr’   )rH   rE   r€   )r?   r‡   r(   r(   r)   rÑ   c	  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¥   )rg  rœ   )rH   ry   r;   rh  rÔ   rÌ   )r?   r‡   r(   r(   r)   r  f	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec             S   s   | j jd  |¡S )Nr’   )rH   rE   r   )r?   r‡   r(   r(   r)   rÔ   l	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOtherN)
r6   r7   r8   rG   r…   r~   rB  rÑ   r  rÔ   r(   )rÃ   r(   r)   ÚInSelectInTablePhaseH	  s   rµ  c            -       sœ   e Zd Zeddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,g,ƒZ‡ fd-d.„Zd/d0„ Z‡ fd1d2„Zd3d4„ Zd5d6„ Z	d7S )8z(getPhases.<locals>.InForeignContentPhaser  r  rý   r§   rÍ   rþ   r  r  r*   r  r  r  r%  Zh1Zh2Zh3Zh4Zh5Zh6r¦   r*  r  r&  r  r  r	  r3   r"  r  r'   r  rv  r  r  Úspanr  r  ÚsubZsupr¥   r   r!  r  Úvarc                s   ˆ   | ||¡ d S )N)rG   )r?   rH   r;   )rÃ   r(   r)   rG   y	  s    z1getPhases.<locals>.InForeignContentPhase.__init__c          %   S   sn   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%œ$}|d& |krj||d&  |d&< d S )'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 _ˆ  | |¡ d S )Nrq   rb  u   ï¿½c             s   s   | ]}|t kV  qd S )N)r   )r<   rc  r(   r(   r)   rµ   ©	  s    zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rH   r_   rd  r~   )r?   r‡   )rÃ   r(   r)   r~   ¥	  s    
z:getPhases.<locals>.InForeignContentPhase.processCharactersc             S   s2  | j jd }|d | jksD|d dkr®t|d  ¡ ƒtdddgƒ@ 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 ¡  q\W |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 )Nrp   r=   r  rq   ZcolorZfaceÚsizez*unexpected-html-element-in-foreign-contentrc   rs   re   ru   Trv   )r;   rx   ÚbreakoutElementsÚsetÚkeysrH   ry   re   r|   ri   rj   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 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sŒt‚qŒW d }P |d8 }| jj| }|j| jjkrØqHqH| jj |¡}P qHW |S )Nr   rp   r=   zunexpected-end-tagr  )r{   r;   rx   r=   rg   r   rH   ry   r\   rE   r•  r¯   rê   r†   re   r|   r   )r?   r‡   Z	nodeIndexrª   rˆ   r(   r(   r)   r   È	  s(    z6getPhases.<locals>.InForeignContentPhase.processEndTagN)
r6   r7   r8   r}   r¼  rG   rº  r~   r€   r   r(   )rÃ   r(   r)   ÚInForeignContentPhaseo	  s   


)r¿  c                   sP   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )z!getPhases.<locals>.AfterBodyPhasec                sN   ˆ   | ||¡ t d| jfg¡| _| j| j_t d| jfg¡| _| j	| j_d S )Nr©   )
rG   r   rÏ   rÁ   r¿   rÑ   rÒ   rS  rÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG   ã	  s    
z*getPhases.<locals>.AfterBodyPhase.__init__c             S   s   d S )Nr(   )r?   r(   r(   r)   r…   î	  s    z,getPhases.<locals>.AfterBodyPhase.processEOFc             S   s   | j  || j jd ¡ d S )Nr   )r;   r½   rx   )r?   r‡   r(   r(   r)   r‚   ò	  s    z0getPhases.<locals>.AfterBodyPhase.processCommentc             S   s    | j  d¡ | j jd | j _|S )Nzunexpected-char-after-bodyr™   )rH   ry   rE   r\   )r?   r‡   r(   r(   r)   r~   ÷	  s    z3getPhases.<locals>.AfterBodyPhase.processCharactersc             S   s   | j jd  |¡S )Nr™   )rH   rE   r€   )r?   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™   )rH   ry   rE   r\   )r?   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)rH   rO   ry   rE   r\   )r?   r=   r(   r(   r)   rS  
  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™   )rH   ry   rE   r\   )r?   r‡   r(   r(   r)   rÔ   
  s    z-getPhases.<locals>.AfterBodyPhase.endTagOtherN)r6   r7   r8   rG   r…   r‚   r~   rÁ   rÑ   rS  rÔ   r(   )rÃ   r(   r)   ÚAfterBodyPhaseâ	  s   rÁ  c                   sX   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )z"getPhases.<locals>.InFramesetPhasec                sf   ˆ   | ||¡ t d| jfd| jfd| jfd| jfg¡| _| j| j_	t d| j
fg¡| _| j| j_	d S )Nr©   r¨   r3  rÙ   )rG   r   rÏ   rÁ   rö   ÚstartTagFrameÚstartTagNoframesr¿   rÑ   rÒ   ÚendTagFramesetrÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG   
  s    
z+getPhases.<locals>.InFramesetPhase.__init__c             S   s0   | j jd jdkr | j d¡ n| jjs,t‚d S )Nrp   r©   zeof-in-frameset)r;   rx   r=   rH   ry   rO   r†   )r?   r(   r(   r)   r…   #
  s    z-getPhases.<locals>.InFramesetPhase.processEOFc             S   s   | j  d¡ d S )Nzunexpected-char-in-frameset)rH   ry   )r?   r‡   r(   r(   r)   r~   )
  s    z4getPhases.<locals>.InFramesetPhase.processCharactersc             S   s   | j  |¡ d S )N)r;   r®   )r?   r‡   r(   r(   r)   rö   ,
  s    z3getPhases.<locals>.InFramesetPhase.startTagFramesetc             S   s   | j  |¡ | j j ¡  d S )N)r;   r®   rx   rê   )r?   r‡   r(   r(   r)   rÂ  /
  s    z0getPhases.<locals>.InFramesetPhase.startTagFramec             S   s   | j jd  |¡S )Nr™   )rH   rE   r€   )r?   r‡   r(   r(   r)   rÃ  3
  s    z3getPhases.<locals>.InFramesetPhase.startTagNoframesc             S   s   | j  dd|d i¡ d S )Nz unexpected-start-tag-in-framesetr=   )rH   ry   )r?   r‡   r(   r(   r)   rÑ   6
  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 )Nrp   r©   z)unexpected-frameset-in-frameset-innerhtmlr¨   ÚafterFrameset)	r;   rx   r=   rH   ry   rê   rO   rE   r\   )r?   r‡   r(   r(   r)   rÄ  :
  s    z1getPhases.<locals>.InFramesetPhase.endTagFramesetc             S   s   | j  dd|d i¡ d S )Nzunexpected-end-tag-in-framesetr=   )rH   ry   )r?   r‡   r(   r(   r)   rÔ   F
  s    z.getPhases.<locals>.InFramesetPhase.endTagOtherN)r6   r7   r8   rG   r…   r~   rö   rÂ  rÃ  rÑ   rÄ  rÔ   r(   )rÃ   r(   r)   ÚInFramesetPhase
  s   rÆ  c                   sH   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )z%getPhases.<locals>.AfterFramesetPhasec                sV   ˆ   | ||¡ t d| jfd| jfg¡| _| j| j_t d| jfg¡| _	| j
| j	_d S )Nr©   rÙ   )rG   r   rÏ   rÁ   rÃ  r¿   rÑ   rÒ   rS  rÂ   rÔ   )r?   rH   r;   )rÃ   r(   r)   rG   L
  s    
z.getPhases.<locals>.AfterFramesetPhase.__init__c             S   s   d S )Nr(   )r?   r(   r(   r)   r…   Z
  s    z0getPhases.<locals>.AfterFramesetPhase.processEOFc             S   s   | j  d¡ d S )Nzunexpected-char-after-frameset)rH   ry   )r?   r‡   r(   r(   r)   r~   ^
  s    z7getPhases.<locals>.AfterFramesetPhase.processCharactersc             S   s   | j jd  |¡S )NrÕ   )rH   rE   r€   )r?   r‡   r(   r(   r)   rÃ  a
  s    z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc             S   s   | j  dd|d i¡ d S )Nz#unexpected-start-tag-after-framesetr=   )rH   ry   )r?   r‡   r(   r(   r)   rÑ   d
  s    z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc             S   s   | j jd | j _d S )NÚafterAfterFrameset)rH   rE   r\   )r?   r‡   r(   r(   r)   rS  h
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc             S   s   | j  dd|d i¡ d S )Nz!unexpected-end-tag-after-framesetr=   )rH   ry   )r?   r‡   r(   r(   r)   rÔ   k
  s    z1getPhases.<locals>.AfterFramesetPhase.endTagOtherN)
r6   r7   r8   rG   r…   r~   rÃ  rÑ   rS  rÔ   r(   )rÃ   r(   r)   ÚAfterFramesetPhaseJ
  s   rÈ  c                   sP   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )z&getPhases.<locals>.AfterAfterBodyPhasec                s0   ˆ   | ||¡ t d| jfg¡| _| j| j_d S )Nr©   )rG   r   rÏ   rÁ   r¿   rÑ   rÒ   )r?   rH   r;   )rÃ   r(   r)   rG   p
  s    z/getPhases.<locals>.AfterAfterBodyPhase.__init__c             S   s   d S )Nr(   )r?   r(   r(   r)   r…   x
  s    z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc             S   s   | j  || j j¡ d S )N)r;   r½   rÄ   )r?   r‡   r(   r(   r)   r‚   {
  s    z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc             S   s   | j jd  |¡S )Nr™   )rH   rE   r   )r?   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™   )rH   ry   rE   r\   )r?   r‡   r(   r(   r)   r~   
  s    z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc             S   s   | j jd  |¡S )Nr™   )rH   rE   r€   )r?   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™   )rH   ry   rE   r\   )r?   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™   )rH   ry   rE   r\   )r?   r‡   r(   r(   r)   r   
  s    z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagN)r6   r7   r8   rG   r…   r‚   r   r~   rÁ   rÑ   r   r(   )rÃ   r(   r)   ÚAfterAfterBodyPhaseo
  s   rÉ  c                   sX   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )z*getPhases.<locals>.AfterAfterFramesetPhasec                s8   ˆ   | ||¡ t d| jfd| jfg¡| _| j| j_d S )Nr©   rÙ   )rG   r   rÏ   rÁ   ÚstartTagNoFramesr¿   rÑ   rÒ   )r?   rH   r;   )rÃ   r(   r)   rG   –
  s
    z3getPhases.<locals>.AfterAfterFramesetPhase.__init__c             S   s   d S )Nr(   )r?   r(   r(   r)   r…   Ÿ
  s    z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc             S   s   | 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  |¡S )Nr™   )rH   rE   r   )r?   r‡   r(   r(   r)   r   ¥
  s    zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc             S   s   | j  d¡ d S )Nzexpected-eof-but-got-char)rH   ry   )r?   r‡   r(   r(   r)   r~   ¨
  s    z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc             S   s   | j jd  |¡S )Nr™   )rH   rE   r€   )r?   r‡   r(   r(   r)   rÁ   «
  s    z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc             S   s   | j jd  |¡S )NrÕ   )rH   rE   r€   )r?   r‡   r(   r(   r)   rÊ  ®
  s    z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc             S   s   | j  dd|d i¡ d S )Nzexpected-eof-but-got-start-tagr=   )rH   ry   )r?   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=   )rH   ry   )r?   r‡   r(   r(   r)   r   µ
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagN)r6   r7   r8   rG   r…   r‚   r   r~   rÁ   rÊ  rÑ   r   r(   )rÃ   r(   r)   ÚAfterAfterFramesetPhase•
  s   	rË  )rS   rR   r›   rÕ   rî   rï   r™   r­   r˜   r  r–   r—   r•   r”   r“   r’   ru  rt   r{  rš   rÅ  rÀ  rÇ  )r   )rF   rU   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)   rD   œ  sp    ) #.g@C     X! -GBbYLd's/9%&&rD   c                s>   t | d ƒt ˆ ƒ@ }|r:t‡ fdd„| d  ¡ D ƒƒ| d< d S )Nrq   c             3   s"   | ]\}}ˆ   ||¡|fV  qd S )N)rz   )r<   ÚkÚv)r¹  r(   r)   rµ   Ù
  s   z$adjust_attributes.<locals>.<genexpr>)r   r   r-   )r‡   r¹  Zneeds_adjustmentr(   )r¹  r)   r   Ö
  s    r   rm   Fc             C   s   |d kri }t | | ||dœS )N)r1   r=   rq   ru   )r   )r=   r1   rf   ru   r(   r(   r)   rÌ   Ý
  s    
rÌ   c               @   s   e Zd ZdZdS )ro   zError in parsed documentN)r6   r7   r8   r±   r(   r(   r(   r)   ro   å
  s   ro   )r   T)r*   r   T)rm   NF).Z
__future__r   r   r   Zsixr   r   r/   Úcollectionsr   rÈ   r	   r
   r   Ztreebuilders.baser   r   Z	constantsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r,   r:   r$  r!   ZmemoizerD   r   rÌ   Ú	Exceptionro   r(   r(   r(   r)   Ú<module>   sL   H

  G                  L 
