B
    Kkd³Ð ã               @   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(   úA/tmp/pip-install-gxxfd9b7/pip/pip/_vendor/html5lib/html5parser.pyr"      s    
r"   Údivc             K   s,   t  |¡}t||d}|j| fd|i|—ŽS )a#  Parse an HTML fragment as a string or file-like object into a tree

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

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

    :arg treebuilder: the treebuilder to use when parsing

    :arg namespaceHTMLElements: whether or not to namespace HTML elements

    :returns: parsed tree

    Example:

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

    )r   Ú	container)r   r    r!   ÚparseFragment)r#   r+   r$   r   r%   r&   r'   r(   r(   r)   r,   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__)ÚmetaÚ	classnameÚbasesÚ	classDictÚattributeNameÚ	attribute)Úfunctionr(   r)   r2   M   s
    z5method_decorator_metaclass.<locals>.Decorated.__new__N)Ú__name__Ú
__module__Ú__qualname__r2   r(   )r9   r(   r)   Ú	DecoratedL   s   r=   )r1   )r9   r=   r(   )r9   r)   Úmethod_decorator_metaclassK   s    r>   c               @   sª   e Zd ZdZd+dd„Zd,dd	„Zd
d„ Zedd„ ƒZdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zd-dd„Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ ZdS ).r!   z]HTML parser

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

    NFTc                sL   |ˆ _ |dkrt 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)rC   r?   rE   r   Údebugr(   )rC   r)   Ú__init__^   s    

zHTMLParser.__init__r*   c             K   sh   || _ || _|| _tj|fd| i|—Ž| _|  ¡  y|  ¡  W n$ tk
rb   |  ¡  |  ¡  Y nX d S )NÚparser)	ÚinnerHTMLModer+   Ú	scriptingr
   ÚHTMLTokenizerÚ	tokenizerÚresetÚmainLoopr   )rC   ÚstreamÚ	innerHTMLr+   rN   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?   rQ   ÚfirstStartTagrF   ÚlogÚ
compatModerM   r+   ÚlowerrT   r   rP   ÚrcdataStateÚstater   ÚrawtextStateÚplaintextStaterI   ÚphaseÚinsertHtmlElementÚresetInsertionModeÚ	lastPhaseÚbeforeRCDataPhaseÚ
framesetOK)rC   r(   r(   r)   rQ   ‹   s*    





zHTMLParser.resetc             C   s   t | dƒsdS | jjjd jS )z‡Name of the character encoding that was used to decode the input stream, or
        :obj:`None` if that is not determined yet

        rP   Nr   )ÚhasattrrP   rS   ÚcharEncodingrA   )rC   r(   r(   r)   ÚdocumentEncoding­   s    
zHTMLParser.documentEncodingc             C   sJ   |j dkr6|jtd kr6d|jko4|jd  t¡dkS |j|j ftkS d S )Nzannotation-xmlÚmathmlÚencoding)z	text/htmlzapplication/xhtml+xml)rA   Ú	namespacer   Ú
attributesÚ	translater   r   )rC   Úelementr(   r(   r)   ÚisHTMLIntegrationPoint·   s    


z!HTMLParser.isHTMLIntegrationPointc             C   s   |j |jftkS )N)rl   rA   r   )rC   ro   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Ú
CharactersÚSpaceCharactersÚStartTagÚEndTagÚCommentÚDoctypeÚ
ParseErroréÿÿÿÿr1   ÚdataÚdatavarsr   rA   ÚmglyphÚ
malignmarkrj   zannotation-xmlÚsvgÚinForeignContentÚselfClosingÚselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   ÚnormalizedTokensr?   ÚopenElementsrl   rA   Ú
parseErrorÚgetÚlenÚdefaultNamespacerq   Ú	frozensetr   rp   ra   rI   ÚprocessCharactersÚprocessSpaceCharactersÚprocessStartTagÚprocessEndTagÚprocessCommentÚprocessDoctypeÚappendÚ
processEOFÚAssertionError)rC   ÚCharactersTokenÚSpaceCharactersTokenÚStartTagTokenÚEndTagTokenÚCommentTokenÚDoctypeTokenÚParseErrorTokenÚtokenÚ
prev_tokenÚ	new_tokenÚcurrentNodeÚcurrentNodeNamespaceÚcurrentNodeNamer1   ra   Ú	reprocessrI   r(   r(   r)   rR   Ä   sp    









zHTMLParser.mainLoopc             c   s    x| j D ]}|  |¡V  qW d S )N)rP   ÚnormalizeToken)rC   r™   r(   r(   r)   r‚     s    zHTMLParser.normalizedTokensc             O   s    | j |ddf|ž|Ž | j ¡ S )aî  Parse a HTML document into a well-formed tree

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

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

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

        :returns: parsed tree

        Example:

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

        FN)rU   r?   ÚgetDocument)rC   rS   Úargsr%   r(   r(   r)   r"     s    zHTMLParser.parsec             O   s   | j |df|ž|Ž | j ¡ S )aZ  Parse a HTML fragment into a well-formed tree fragment

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

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

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

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

        :returns: parsed tree

        Example:

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

        T)rU   r?   ÚgetFragment)rC   rS   r¢   r%   r(   r(   r)   r,   $  s    zHTMLParser.parseFragmentúXXX-undefined-errorc             C   s@   |d kri }| j  | jj ¡ ||f¡ | jr<tt| | ƒ‚d S )N)rF   r   rP   rS   ÚpositionrE   rx   r   )rC   Ú	errorcoder{   r(   r(   r)   r„   @  s
    zHTMLParser.parseErrorc             C   sT   |d t d krP|d }t|ƒ|d< t|ƒt|d ƒkrP|d  |d d d… ¡ |S )Nr1   rt   rz   ry   )r   r   r†   Úupdate)rC   r™   Úrawr(   r(   r)   r    H  s    zHTMLParser.normalizeTokenc             C   s   t |tƒ d S )N)Úadjust_attributesr   )rC   r™   r(   r(   r)   r   S  s    z!HTMLParser.adjustMathMLAttributesc             C   s   t |tƒ d S )N)r©   r   )rC   r™   r(   r(   r)   r   V  s    zHTMLParser.adjustSVGAttributesc             C   s   t |tƒ d S )N)r©   ÚadjustForeignAttributesMap)rC   r™   r(   r(   r)   r   Y  s    z"HTMLParser.adjustForeignAttributesc             C   s   | j  ¡  d S )N)rL   ra   )rC   r™   r(   r(   r)   ÚreparseTokenNormal\  s    zHTMLParser.reparseTokenNormalc             C   sÊ   d}ddddddddddd	d	d
ddœ}x˜| j jd d d… D ]‚}|j}d }|| j jd krl| jsbt‚d}| j}|dkr~| js~t‚|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Úhtmlry   r   T)r¶   r¾   rÀ   rÃ   )	r?   rƒ   rA   rT   r‘   rl   r‡   rI   ra   )rC   ÚlastÚnewModesÚnodeÚnodeNameÚ	new_phaser(   r(   r)   rc   `  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?   ÚinsertElementrP   r_   r^   r]   ra   ÚoriginalPhaserI   )rC   r™   ÚcontentTyper(   r(   r)   ÚparseRCDataRawtextŒ  s    zHTMLParser.parseRCDataRawtext)NFTF)Fr*   F)r¤   N)r:   r;   r<   Ú__doc__rK   rU   rQ   Úpropertyri   rp   rq   rR   r‚   r"   r,   r„   r    r   r   r   r«   rc   rÏ   r(   r(   r(   r)   r!   W   s&   

"

C
,r!   c                s"  dd„ }dd„ }G dd„ dt || |ƒƒƒ‰ G dd„ dˆ ƒ}G d	d
„ d
ˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}	G ‡ fdd„dˆ ƒ}
G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd„dˆ ƒ}G ‡ fdd „d ˆ ƒ}G ‡ fd!d"„d"ˆ ƒ}G ‡ fd#d$„d$ˆ ƒ}G ‡ fd%d&„d&ˆ ƒ}G ‡ fd'd(„d(ˆ ƒ}G ‡ fd)d*„d*ˆ ƒ}G ‡ fd+d,„d,ˆ ƒ}G ‡ fd-d.„d.ˆ ƒ}G ‡ fd/d0„d0ˆ ƒ}G ‡ fd1d2„d2ˆ ƒ}G ‡ fd3d4„d4ˆ ƒ}|||||||	|
|||||||||||||||d5œS )6Nc                s(   t dd„ t ¡ 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 )NÚprocessr   r1   rA   )r:   Ú
startswithr†   r   rL   rZ   r   rP   r^   ra   Ú	__class__)rC   r¢   r%   r™   Úinfo)r9   Ú
type_namesr(   r)   Úwrapped£  s    
z'getPhases.<locals>.log.<locals>.wrapped)rG   r   r-   )r9   rÚ   r(   )r9   rÙ   r)   rZ   ž  s    zgetPhases.<locals>.logc             S   s   | rt |ƒS tS d S )N)r>   r1   )Úuse_metaclassÚmetaclass_funcr(   r(   r)   ÚgetMetaclass·  s    zgetPhases.<locals>.getMetaclassc               @   sX   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )zgetPhases.<locals>.PhasezNBase class for helper object that implements each phase of processing
        c             S   s   || _ || _d S )N)rL   r?   )rC   rL   r?   r(   r(   r)   rK   Â  s    z!getPhases.<locals>.Phase.__init__c             S   s   t ‚d S )N)ÚNotImplementedError)rC   r(   r(   r)   r   Æ  s    z#getPhases.<locals>.Phase.processEOFc             S   s   | j  || j jd ¡ d S )Nry   )r?   ÚinsertCommentrƒ   )rC   r™   r(   r(   r)   r   É  s    z'getPhases.<locals>.Phase.processCommentc             S   s   | j  d¡ d S )Nzunexpected-doctype)rL   r„   )rC   r™   r(   r(   r)   rŽ   Î  s    z'getPhases.<locals>.Phase.processDoctypec             S   s   | j  |d ¡ d S )Nrz   )r?   Ú
insertText)rC   r™   r(   r(   r)   r‰   Ñ  s    z*getPhases.<locals>.Phase.processCharactersc             S   s   | j  |d ¡ d S )Nrz   )r?   rà   )rC   r™   r(   r(   r)   rŠ   Ô  s    z/getPhases.<locals>.Phase.processSpaceCharactersc             S   s   | j |d  |ƒS )NrA   )ÚstartTagHandler)rC   r™   r(   r(   r)   r‹   ×  s    z(getPhases.<locals>.Phase.processStartTagc             S   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 )NrA   rÃ   znon-html-rootrz   r   F)rL   rY   r„   r-   r?   rƒ   rm   )rC   r™   ÚattrrÓ   r(   r(   r)   ÚstartTagHtmlÚ  s    z%getPhases.<locals>.Phase.startTagHtmlc             S   s   | j |d  |ƒS )NrA   )ÚendTagHandler)rC   r™   r(   r(   r)   rŒ   ä  s    z&getPhases.<locals>.Phase.processEndTagN)r:   r;   r<   rÐ   rK   r   r   rŽ   r‰   rŠ   r‹   rã   rŒ   r(   r(   r(   r)   ÚPhase¾  s   
rå   c               @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )zgetPhases.<locals>.InitialPhasec             S   s   d S )Nr(   )rC   r™   r(   r(   r)   rŠ   è  s    z6getPhases.<locals>.InitialPhase.processSpaceCharactersc             S   s   | j  || j j¡ d S )N)r?   rß   Údocument)rC   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 )NrA   Ú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 quirksrW   )rL   r„   r?   ÚinsertDoctypern   r   rÖ   r\   r[   rI   ra   )rC   r™   rA   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ë   rW   )rL   r[   rI   ra   )rC   r(   r(   r)   ÚanythingElseM  s    z,getPhases.<locals>.InitialPhase.anythingElsec             S   s   | j  d¡ |  ¡  |S )Nzexpected-doctype-but-got-chars)rL   r„   rí   )rC   r™   r(   r(   r)   r‰   Q  s    z1getPhases.<locals>.InitialPhase.processCharactersc             S   s"   | j  dd|d i¡ |  ¡  |S )Nz"expected-doctype-but-got-start-tagrA   )rL   r„   rí   )rC   r™   r(   r(   r)   r‹   V  s    z/getPhases.<locals>.InitialPhase.processStartTagc             S   s"   | j  dd|d i¡ |  ¡  |S )Nz expected-doctype-but-got-end-tagrA   )rL   r„   rí   )rC   r™   r(   r(   r)   rŒ   \  s    z-getPhases.<locals>.InitialPhase.processEndTagc             S   s   | j  d¡ |  ¡  dS )Nzexpected-doctype-but-got-eofT)rL   r„   rí   )rC   r(   r(   r)   r   b  s    z*getPhases.<locals>.InitialPhase.processEOFN)r:   r;   r<   rŠ   r   rŽ   rí   r‰   r‹   rŒ   r   r(   r(   r(   r)   ÚInitialPhaseç  s   _rî   c               @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )z"getPhases.<locals>.BeforeHtmlPhasec             S   s&   | j  tddƒ¡ | jjd | j_d S )NrÃ   rt   rµ   )r?   Ú
insertRootÚimpliedTagTokenrL   rI   ra   )rC   r(   r(   r)   rb   i  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc             S   s   |   ¡  dS )NT)rb   )rC   r(   r(   r)   r   n  s    z-getPhases.<locals>.BeforeHtmlPhase.processEOFc             S   s   | j  || j j¡ d S )N)r?   rß   ræ   )rC   r™   r(   r(   r)   r   r  s    z1getPhases.<locals>.BeforeHtmlPhase.processCommentc             S   s   d S )Nr(   )rC   r™   r(   r(   r)   rŠ   u  s    z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc             S   s   |   ¡  |S )N)rb   )rC   r™   r(   r(   r)   r‰   x  s    z4getPhases.<locals>.BeforeHtmlPhase.processCharactersc             S   s    |d dkrd| j _|  ¡  |S )NrA   rÃ   T)rL   rY   rb   )rC   r™   r(   r(   r)   r‹   |  s    z2getPhases.<locals>.BeforeHtmlPhase.processStartTagc             S   s4   |d dkr$| j  dd|d i¡ n|  ¡  |S d S )NrA   )rÀ   rÁ   rÃ   Úbrzunexpected-end-tag-before-html)rL   r„   rb   )rC   r™   r(   r(   r)   rŒ   ‚  s
    z0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)
r:   r;   r<   rb   r   r   rŠ   r‰   r‹   rŒ   r(   r(   r(   r)   ÚBeforeHtmlPhaseg  s   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ñ   )rK   r   ÚMethodDispatcherrã   ÚstartTagHeadrá   ÚstartTagOtherÚdefaultÚendTagImplyHeadrä   ÚendTagOther)rC   rL   r?   )rå   r(   r)   rK   ‹  s    
z+getPhases.<locals>.BeforeHeadPhase.__init__c             S   s   |   tddƒ¡ dS )NrÀ   rt   T)rô   rð   )rC   r(   r(   r)   r   ™  s    z-getPhases.<locals>.BeforeHeadPhase.processEOFc             S   s   d S )Nr(   )rC   r™   r(   r(   r)   rŠ     s    z9getPhases.<locals>.BeforeHeadPhase.processSpaceCharactersc             S   s   |   tddƒ¡ |S )NrÀ   rt   )rô   rð   )rC   r™   r(   r(   r)   r‰      s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc             S   s   | j jd  |¡S )Nr³   )rL   rI   r‹   )rC   r™   r(   r(   r)   rã   ¤  s    z/getPhases.<locals>.BeforeHeadPhase.startTagHtmlc             S   s0   | j  |¡ | j jd | j _| jjd | j_d S )Nry   ÚinHead)r?   rÌ   rƒ   ÚheadPointerrL   rI   ra   )rC   r™   r(   r(   r)   rô   §  s    z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc             S   s   |   tddƒ¡ |S )NrÀ   rt   )rô   rð   )rC   r™   r(   r(   r)   rõ   ¬  s    z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc             S   s   |   tddƒ¡ |S )NrÀ   rt   )rô   rð   )rC   r™   r(   r(   r)   r÷   °  s    z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc             S   s   | j  dd|d i¡ d S )Nzend-tag-after-implied-rootrA   )rL   r„   )rC   r™   r(   r(   r)   rø   ´  s    z.getPhases.<locals>.BeforeHeadPhase.endTagOtherN)r:   r;   r<   rK   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Á   )rK   r   ró   rã   ÚstartTagTitleÚstartTagNoFramesStyleÚstartTagNoscriptÚstartTagScriptÚstartTagBaseLinkCommandÚstartTagMetarô   rá   rõ   rö   Ú
endTagHeadÚendTagHtmlBodyBrrä   rø   )rC   rL   r?   )rå   r(   r)   rK   ¹  s     
z'getPhases.<locals>.InHeadPhase.__init__c             S   s   |   ¡  dS )NT)rí   )rC   r(   r(   r)   r   Ð  s    z)getPhases.<locals>.InHeadPhase.processEOFc             S   s   |   ¡  |S )N)rí   )rC   r™   r(   r(   r)   r‰   Ô  s    z0getPhases.<locals>.InHeadPhase.processCharactersc             S   s   | j jd  |¡S )Nr³   )rL   rI   r‹   )rC   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)rL   r„   )rC   r™   r(   r(   r)   rô   Û  s    z+getPhases.<locals>.InHeadPhase.startTagHeadc             S   s$   | j  |¡ | j j ¡  d|d< d S )NTr   )r?   rÌ   rƒ   Úpop)rC   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 )NTr   rz   r   Ú	tentativeÚcharsetÚcontentz
http-equivzcontent-typezutf-8)r?   rÌ   rƒ   r  rL   rP   rS   rh   ÚchangeEncodingr\   r	   ÚEncodingBytesÚencodeÚContentAttrParserr"   )rC   r™   rm   rz   rL   Úcodecr(   r(   r)   r  ã  s    
z+getPhases.<locals>.InHeadPhase.startTagMetac             S   s   | j  |d¡ d S )NrÊ   )rL   rÏ   )rC   r™   r(   r(   r)   r  ø  s    z,getPhases.<locals>.InHeadPhase.startTagTitlec             S   s   | j  |d¡ d S )NrÉ   )rL   rÏ   )rC   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)rL   rN   rÏ   r?   rÌ   rI   ra   )rC   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Ì   rL   rP   ÚscriptDataStater^   ra   rÍ   rI   )rC   r™   r(   r(   r)   r	    s    z-getPhases.<locals>.InHeadPhase.startTagScriptc             S   s   |   ¡  |S )N)rí   )rC   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)rL   r?   rƒ   r  rA   r‘   rI   ra   )rC   r™   rÆ   r(   r(   r)   r    s    z)getPhases.<locals>.InHeadPhase.endTagHeadc             S   s   |   ¡  |S )N)rí   )rC   r™   r(   r(   r)   r    s    z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc             S   s   | j  dd|d i¡ d S )Nzunexpected-end-tagrA   )rL   r„   )rC   r™   r(   r(   r)   rø     s    z*getPhases.<locals>.InHeadPhase.endTagOtherc             S   s   |   tdƒ¡ d S )NrÀ   )r  rð   )rC   r(   r(   r)   rí     s    z+getPhases.<locals>.InHeadPhase.anythingElseN)r:   r;   r<   rK   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ñ   )rK   r   ró   rã   r
  ÚstartTagHeadNoscriptrá   rõ   rö   ÚendTagNoscriptÚendTagBrrä   rø   )rC   rL   r?   )rå   r(   r)   rK      s    
z/getPhases.<locals>.InHeadNoscriptPhase.__init__c             S   s   | j  d¡ |  ¡  dS )Nzeof-in-head-noscriptT)rL   r„   rí   )rC   r(   r(   r)   r   0  s    z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc             S   s   | j jd  |¡S )Nrù   )rL   rI   r   )rC   r™   r(   r(   r)   r   5  s    z5getPhases.<locals>.InHeadNoscriptPhase.processCommentc             S   s   | j  d¡ |  ¡  |S )Nzchar-in-head-noscript)rL   r„   rí   )rC   r™   r(   r(   r)   r‰   8  s    z8getPhases.<locals>.InHeadNoscriptPhase.processCharactersc             S   s   | j jd  |¡S )Nrù   )rL   rI   rŠ   )rC   r™   r(   r(   r)   rŠ   =  s    z=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharactersc             S   s   | j jd  |¡S )Nr³   )rL   rI   r‹   )rC   r™   r(   r(   r)   rã   @  s    z3getPhases.<locals>.InHeadNoscriptPhase.startTagHtmlc             S   s   | j jd  |¡S )Nrù   )rL   rI   r‹   )rC   r™   r(   r(   r)   r
  C  s    z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc             S   s   | j  dd|d i¡ d S )Nzunexpected-start-tagrA   )rL   r„   )rC   r™   r(   r(   r)   r  F  s    z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc             S   s"   | j  dd|d i¡ |  ¡  |S )Nzunexpected-inhead-noscript-tagrA   )rL   r„   rí   )rC   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ù   )rL   r?   rƒ   r  rA   r‘   rI   ra   )rC   r™   rÆ   r(   r(   r)   r  N  s    z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc             S   s"   | j  dd|d i¡ |  ¡  |S )Nzunexpected-inhead-noscript-tagrA   )rL   r„   rí   )rC   r™   r(   r(   r)   r  S  s    z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc             S   s   | j  dd|d i¡ d S )Nzunexpected-end-tagrA   )rL   r„   )rC   r™   r(   r(   r)   rø   X  s    z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc             S   s   |   tdƒ¡ d S )Nrÿ   )r  rð   )rC   r(   r(   r)   rí   [  s    z3getPhases.<locals>.InHeadNoscriptPhase.anythingElseN)r:   r;   r<   rK   r   r   r‰   rŠ   rã   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ñ   )rK   r   ró   rã   ÚstartTagBodyÚstartTagFramesetÚstartTagFromHeadrô   rá   rõ   rö   r  rä   rø   )rC   rL   r?   )rå   r(   r)   rK   `  s    
z*getPhases.<locals>.AfterHeadPhase.__init__c             S   s   |   ¡  dS )NT)rí   )rC   r(   r(   r)   r   q  s    z,getPhases.<locals>.AfterHeadPhase.processEOFc             S   s   |   ¡  |S )N)rí   )rC   r™   r(   r(   r)   r‰   u  s    z3getPhases.<locals>.AfterHeadPhase.processCharactersc             S   s   | j jd  |¡S )Nr³   )rL   rI   r‹   )rC   r™   r(   r(   r)   rã   y  s    z.getPhases.<locals>.AfterHeadPhase.startTagHtmlc             S   s(   d| j _| j |¡ | j jd | j _d S )NFr³   )rL   rf   r?   rÌ   rI   ra   )rC   r™   r(   r(   r)   r  |  s    z.getPhases.<locals>.AfterHeadPhase.startTagBodyc             S   s    | j  |¡ | jjd | j_d S )Nr´   )r?   rÌ   rL   rI   ra   )rC   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-headrA   rù   ry   rÀ   )
rL   r„   r?   rƒ   r   rú   rI   r‹   rA   Úremove)rC   r™   rÆ   r(   r(   r)   r!  …  s    
z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc             S   s   | j  dd|d i¡ d S )Nzunexpected-start-tagrA   )rL   r„   )rC   r™   r(   r(   r)   rô     s    z.getPhases.<locals>.AfterHeadPhase.startTagHeadc             S   s   |   ¡  |S )N)rí   )rC   r™   r(   r(   r)   rõ   ’  s    z/getPhases.<locals>.AfterHeadPhase.startTagOtherc             S   s   |   ¡  |S )N)rí   )rC   r™   r(   r(   r)   r  –  s    z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc             S   s   | j  dd|d i¡ d S )Nzunexpected-end-tagrA   )rL   r„   )rC   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Á   rt   r³   T)r?   rÌ   rð   rL   rI   ra   rf   )rC   r(   r(   r)   rí     s    z.getPhases.<locals>.AfterHeadPhase.anythingElseN)r:   r;   r<   rK   r   r‰   rã   r  r   r!  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ÚdtrV   Úa)ÚbÚbigÚcodeÚemÚfontÚiÚsÚsmallÚstrikeÚstrongÚttÚuÚnobrÚbutton)ÚappletÚmarqueeÚobjectÚxmpr¿   )Úarearñ   ÚembedÚimgÚkeygenÚwbr)ÚparamÚsourceÚtrackÚinputÚhrÚimageÚisindexÚtextareaÚiframerÿ   )Únoembedrý   r¶   )ÚrpÚrt)ÚoptionÚoptgroupÚmathr~   )r½   Úcolr¾   ÚframerÀ   rº   r·   r¼   r¸   r»   r¹   )r$  r%  r&  r'  rM  r(  r)  Údialogr*  r*   r+  r,  r-  r.  r/  r0  r1  r:  r2  r3  r4  r5  r9  r6  r7  r8  r'   )r=  r>  r<  )r?  r@  rA  rB  rC  rD  rE  rL  rF  rG  rH  rI  rJ  rK  rñ   )6rK   Ú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ø   )rC   rL   r?   )rå   r(   r)   rK   ¥  sp    
z'getPhases.<locals>.InBodyPhase.__init__c             S   s$   |j |j ko"|j|jko"|j|jkS )N)rA   rl   rm   )rC   Únode1Únode2r(   r(   r)   ÚisMatchingFormattingElementì  s    z:getPhases.<locals>.InBodyPhase.isMatchingFormattingElementc             S   sš   | j  |¡ | j jd }g }x<| j jd d d… D ]&}|tkr@P q0|  ||¡r0| |¡ q0W t|ƒdksjt‚t|ƒdkrˆ| j j 	|d ¡ | j j |¡ d S )Nry   é   )
r?   rÌ   rƒ   ÚactiveFormattingElementsr   r’  r   r†   r‘   r"  )rC   r™   ro   Ú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Ã   ry   z expected-closing-tag-but-got-eof)rˆ   r?   rƒ   rA   rL   r„   )rC   Ú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 )Nrz   Ú
ry   )r9  r:  r^  r   )	ri  rŠ   rÖ   r?   rƒ   rA   Ú
hasContentÚ#reconstructActiveFormattingElementsrà   )rC   r™   rz   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 )Nrz   ú c             S   s   g | ]}|t k‘qS r(   )r   )r@   Úcharr(   r(   r)   rD   "  s   zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r?   rš  rà   rL   rf   Úany)rC   r™   r(   r(   r)   r‰     s    
z0getPhases.<locals>.InBodyPhase.processCharactersc             S   s   | j  ¡  | j  |d ¡ d S )Nrz   )r?   rš  rà   )rC   r™   r(   r(   r)   ri  &  s    
z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec             S   s   | j jd  |¡S )Nrù   )rL   rI   r‹   )rC   r™   r(   r(   r)   rj  *  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-tagrA   rÁ   r   Frz   )rL   r„   r†   r?   rƒ   rA   rT   r‘   rf   r-   rm   )rC   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-tagrA   rÂ   r   rÁ   ry   rÃ   r´   )rL   r„   r†   r?   rƒ   rA   rT   r‘   rf   ÚparentÚremoveChildr  rÌ   rI   ra   )rC   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'   rM  )Úvariant)r?   ÚelementInScoper‹  rð   rÌ   )rC   r™   r(   r(   r)   rk  F  s    z-getPhases.<locals>.InBodyPhase.startTagClosePc             S   s>   | j jdddr|  tdƒ¡ | j  |¡ d| j_| j| _d S )Nr'   rM  )r¡  F)	r?   r¢  r‹  rð   rÌ   rL   rf   r›  rŠ   )rC   r™   r(   r(   r)   rm  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-tagrA   r;  r'   rM  )r¡  ry   )	r?   ÚformPointerrL   r„   r¢  r‹  rð   rÌ   rƒ   )rC   r™   r(   r(   r)   rn  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=  rA   ru   )r$  r*   r'   r'   rM  )r¡  )rL   rf   Úreversedr?   rƒ   rA   ra   rŒ   rð   Ú	nameTupler   r¢  rÌ   )rC   r™   ÚstopNamesMapÚ	stopNamesrÆ   r(   r(   r)   ro  [  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'   rM  )r¡  )	r?   r¢  r‹  rð   rÌ   rL   rP   r`   r^   )rC   r™   r(   r(   r)   rp  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'   rM  )r¡  ry   zunexpected-start-tagrA   )r?   r¢  r‹  rð   rƒ   rA   r   rL   r„   r  rÌ   )rC   r™   r(   r(   r)   rl  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?   Ú!elementInActiveFormattingElementsrL   r„   rŽ  rð   rƒ   r"  r”  rš  r–  )rC   r™   ÚafeAElementr(   r(   r)   rq    s    
z(getPhases.<locals>.InBodyPhase.startTagAc             S   s   | j  ¡  |  |¡ d S )N)r?   rš  r–  )rC   r™   r(   r(   r)   rr  Œ  s    
z1getPhases.<locals>.InBodyPhase.startTagFormattingc             S   sP   | j  ¡  | j  d¡rB| j ddddœ¡ |  tdƒ¡ | j  ¡  |  |¡ d S )NrL  z$unexpected-start-tag-implies-end-tag)r¨  r©  )r?   rš  r¢  rL   r„   rŒ   rð   r–  )rC   r™   r(   r(   r)   rs    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 )NrM  z$unexpected-start-tag-implies-end-tag)r¨  r©  F)	r?   r¢  rL   r„   rŒ   rð   rš  rÌ   rf   )rC   r™   r(   r(   r)   rt  š  s    
z-getPhases.<locals>.InBodyPhase.startTagButtonc             S   s0   | j  ¡  | j  |¡ | j j t¡ d| j_d S )NF)r?   rš  rÌ   r”  r   r   rL   rf   )rC   r™   r(   r(   r)   ru  ¥  s    
z:getPhases.<locals>.InBodyPhase.startTagAppletMarqueeObjectc             S   sB   | j jdddr|  tdƒ¡ | j  ¡  d| j_| j |d¡ d S )Nr'   rM  )r¡  FrÉ   )r?   r¢  r‹  rð   rš  rL   rf   rÏ   )rC   r™   r(   r(   r)   rv  «  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'   rM  )r¡  Fr²   )
rL   r[   r?   r¢  rŒ   rð   rÌ   rf   rI   ra   )rC   r™   r(   r(   r)   rw  ²  s    z,getPhases.<locals>.InBodyPhase.startTagTablec             S   s6   | j  ¡  | j  |¡ | j j ¡  d|d< d| j_d S )NTr   F)r?   rš  rÌ   rƒ   r  rL   rf   )rC   r™   r(   r(   r)   rx  º  s
    
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc             S   s@   | j j}|  |¡ d|d kr<|d d  t¡dkr<|| j _d S )Nr1   rz   Úhidden)rL   rf   rx  rn   r   )rC   r™   rf   r(   r(   r)   rz  Á  s
    
z,getPhases.<locals>.InBodyPhase.startTagInputc             S   s$   | j  |¡ | j j ¡  d|d< d S )NTr   )r?   rÌ   rƒ   r  )rC   r™   r(   r(   r)   ry  É  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'   rM  )r¡  Tr   F)	r?   r¢  r‹  rð   rÌ   rƒ   r  rL   rf   )rC   r™   r(   r(   r)   r{  Î  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\  rT  )ÚoriginalNameÚnewNamert   rz   r€   )rm   r€   )rL   r„   r‹   rð   )rC   r™   r(   r(   r)   r|  Ö  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-tagrA   r]  Úactionrz   r;  rt   )rm   r[  ÚlabelÚpromptz3This is a searchable index. Enter search keywords: rr   )r1   rz   rZ  r€   )rm   r€   )
rL   r„   r?   r£  r‹   rð   r‰   r   ÚcopyrŒ   )rC   r™   Ú
form_attrsr±  rm   r(   r(   r)   r}  Þ  s6    


z.getPhases.<locals>.InBodyPhase.startTagIsIndexc             S   s0   | j  |¡ | jjj| jj_| j| _d| j_d S )NF)	r?   rÌ   rL   rP   r]   r^   r›  rŠ   rf   )rC   r™   r(   r(   r)   r~  ý  s    z/getPhases.<locals>.InBodyPhase.startTagTextareac             S   s   d| j _|  |¡ d S )NF)rL   rf   r€  )rC   r™   r(   r(   r)   r    s    z-getPhases.<locals>.InBodyPhase.startTagIFramec             S   s"   | j jr|  |¡ n
|  |¡ d S )N)rL   rN   r€  rõ   )rC   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)rL   rÏ   )rC   r™   r(   r(   r)   r€    s    z.getPhases.<locals>.InBodyPhase.startTagRawtextc             S   s@   | j jd jdkr$| jj tdƒ¡ | j  ¡  | jj  |¡ d S )Nry   rc  )	r?   rƒ   rA   rL   ra   rŒ   rð   rš  rÌ   )rC   r™   r(   r(   r)   rƒ    s    
z*getPhases.<locals>.InBodyPhase.startTagOptc             S   sŒ   | j  ¡  | j  |¡ d| j_| jj| jjd | jjd | jjd | jjd | jjd | jjd fkrx| jjd | j_n| jjd	 | j_d S )
NFr²   r°   r±   r¯   r®   r­   ÚinSelectInTabler¬   )r?   rš  rÌ   rL   rf   ra   rI   )rC   r™   r(   r(   r)   r    s    




z-getPhases.<locals>.InBodyPhase.startTagSelectc             S   sB   | j  d¡r2| j  ¡  | j jd jdkr2| j ¡  | j  |¡ d S )NÚrubyry   )r?   r¢  ÚgenerateImpliedEndTagsrƒ   rA   rL   r„   rÌ   )rC   r™   r(   r(   r)   r‚  %  s
    

z+getPhases.<locals>.InBodyPhase.startTagRpRtc             S   sZ   | j  ¡  | j |¡ | j |¡ td |d< | j  |¡ |d rV| j j ¡  d|d< d S )Nrj   rl   r€   Tr   )	r?   rš  rL   r   r   r   rÌ   rƒ   r  )rC   r™   r(   r(   r)   r„  ,  s    
z+getPhases.<locals>.InBodyPhase.startTagMathc             S   sZ   | j  ¡  | j |¡ | j |¡ td |d< | j  |¡ |d rV| j j ¡  d|d< d S )Nr~   rl   r€   Tr   )	r?   rš  rL   r   r   r   rÌ   rƒ   r  )rC   r™   r(   r(   r)   r…  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-ignoredrA   N)rL   r„   )rC   r™   r(   r(   r)   r†  D  s    z0getPhases.<locals>.InBodyPhase.startTagMisplacedc             S   s   | j  ¡  | j  |¡ d S )N)r?   rš  rÌ   )rC   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'   rM  )r¡  rt   zunexpected-end-tagrA   ru   ry   )r?   r¢  rk  rð   rL   r„   r‹  r¶  rƒ   rA   r  )rC   r™   rÆ   r(   r(   r)   r‹  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Á   ry   é   )r=  r>  r<  rd  rc  r'   ra  rb  rº   r·   r¼   r¸   r»   r¹   rÁ   rÃ   z$expected-one-end-tag-but-got-another)ÚgotNameÚexpectedNameÚ	afterBody)	r?   r¢  rL   r„   rƒ   rA   rˆ   rI   ra   )rC   r™   rÆ   r(   r(   r)   r‡  ^  s    
z)getPhases.<locals>.InBodyPhase.endTagBodyc             S   s"   | j  d¡r|  tdƒ¡ |S d S )NrÁ   )r?   r¢  r‡  rð   )rC   r™   r(   r(   r)   rˆ  p  s    z)getPhases.<locals>.InBodyPhase.endTagHtmlc             S   s’   |d dkr| j | _| j |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 )NrA   r9  ry   zend-tag-too-early)
ri  rŠ   r?   r¢  r¶  rƒ   rA   rL   r„   r  )rC   r™   ÚinScoperÆ   r(   r(   r)   r‰  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-tagrA   r;  ry   zend-tag-too-early-ignored)r?   r£  r¢  rL   r„   r¶  rƒ   r"  )rC   r™   rÆ   r(   r(   r)   rŠ  „  s    

z)getPhases.<locals>.InBodyPhase.endTagFormc             S   s°   |d dkrd}nd }| j j|d |dsB| j 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 )	NrA   r<  Úlist)r¡  zunexpected-end-tag)Úexcludery   zend-tag-too-early)r?   r¢  rL   r„   r¶  rƒ   rA   r  )rC   r™   r¡  rÆ   r(   r(   r)   rŒ  ‘  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 )Nry   rA   zend-tag-too-early)	r   r?   r¢  r¶  rƒ   rA   rL   r„   r  )rC   r™   Úitemr(   r(   r)   r  ¢  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   rA   Nzadoption-agency-1.2zadoption-agency-4.4ry   zadoption-agency-1.3r“  )r¿   rº   r¼   r»   r¹   )r?   rª  rƒ   r¢  rA   rø   rL   r„   r”  r"  Úindexr¥  r   r  Ú	cloneNoderŸ  r   ÚappendChildrˆ   ÚgetTableMisnestedNodePositionÚinsertBeforeÚreparentChildrenÚinsert)rC   r™   ÚouterLoopCounterÚformattingElementÚafeIndexÚfurthestBlockro   ÚcommonAncestorÚbookmarkÚlastNoderÆ   ÚinnerLoopCounterrÀ  ÚclonerŸ  rÄ  r(   r(   r)   rŽ  ±  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 )NrA   ry   zend-tag-too-early)	r?   r¢  r¶  rƒ   rA   rL   r„   r  ÚclearActiveFormattingElements)rC   r™   ro   r(   r(   r)   r  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)r­  r®  rt   )rL   r„   r?   rš  rÌ   rð   rƒ   r  )rC   r™   r(   r(   r)   r  `  s
    
z'getPhases.<locals>.InBodyPhase.endTagBrc             S   s¨   x¢| j jd d d… D ]Œ}|j|d kr~| j j|d d | j jd j|d krd| j 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 )Nry   rA   )r½  zunexpected-end-tag)	r?   rƒ   rA   r¶  rL   r„   r  r¥  r   )rC   r™   rÆ   r(   r(   r)   rø   g  s    
z*getPhases.<locals>.InBodyPhase.endTagOtherN)6r:   r;   r<   rK   r’  r–  r   r›  r‰   ri  rj  r  r   rk  rm  rn  ro  rp  rl  rq  rr  rs  rt  ru  rv  rw  rx  rz  ry  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)   Ú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   )	rK   r   ró   rá   rõ   rö   ÚendTagScripträ   rø   )rC   rL   r?   )rå   r(   r)   rK   v  s    
z%getPhases.<locals>.TextPhase.__init__c             S   s   | j  |d ¡ d S )Nrz   )r?   rà   )rC   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-eofrA   ry   T)rL   r„   r?   rƒ   rA   r  rÍ   ra   )rC   r(   r(   r)   r     s
    z'getPhases.<locals>.TextPhase.processEOFc             S   s   dst d|d  ƒ‚d S )NFz4Tried to process start tag %s in RCDATA/RAWTEXT moderA   )r‘   )rC   r™   r(   r(   r)   rõ   ˆ  s    z*getPhases.<locals>.TextPhase.startTagOtherc             S   s*   | j j ¡ }|jdkst‚| jj| j_d S )Nr   )r?   rƒ   r  rA   r‘   rL   rÍ   ra   )rC   r™   rÆ   r(   r(   r)   rÒ  ‹  s    z)getPhases.<locals>.TextPhase.endTagScriptc             S   s   | j j ¡  | jj| j_d S )N)r?   rƒ   r  rL   rÍ   ra   )rC   r™   r(   r(   r)   rø   ’  s    z(getPhases.<locals>.TextPhase.endTagOtherN)	r:   r;   r<   rK   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¾   rf  )rº   r¼   r»   )r·   r¸   r¹   r¿   )rþ   r   rZ  r;  )rÁ   r½   rf  r¾   rÃ   rº   r·   r¼   r¸   r»   r¹   )rK   r   ró   rã   ÚstartTagCaptionÚstartTagColgroupÚstartTagColÚstartTagRowGroupÚstartTagImplyTbodyrw  ÚstartTagStyleScriptrz  rn  rá   rõ   rö   ÚendTagTableÚendTagIgnorerä   rø   )rC   rL   r?   )rå   r(   r)   rK   ˜  s$    
z(getPhases.<locals>.InTablePhase.__init__c             S   s(   x"| j jd jdkr"| j j ¡  qW d S )Nry   )r¿   rÃ   )r?   rƒ   rA   r  )rC   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 )Nry   rÃ   zeof-in-table)r?   rƒ   rA   rL   r„   rT   r‘   )rC   r(   r(   r)   r   ¹  s    z*getPhases.<locals>.InTablePhase.processEOFc             S   s4   | j j}| j jd | j _|| j j_| j j |¡ d S )NÚinTableText)rL   ra   rI   rÍ   rŠ   )rC   r™   rÍ   r(   r(   r)   rŠ   À  s    
z6getPhases.<locals>.InTablePhase.processSpaceCharactersc             S   s4   | j j}| j jd | j _|| j j_| j j |¡ d S )NrÝ  )rL   ra   rI   rÍ   r‰   )rC   r™   rÍ   r(   r(   r)   r‰   Æ  s    
z1getPhases.<locals>.InTablePhase.processCharactersc             S   s&   d| j _| jjd  |¡ d| j _d S )NTr³   F)r?   ÚinsertFromTablerL   rI   r‰   )rC   r™   r(   r(   r)   rà   Ì  s    z*getPhases.<locals>.InTablePhase.insertTextc             S   s6   |   ¡  | jj t¡ | j |¡ | jjd | j_d S )Nr°   )	rÜ  r?   r”  r   r   rÌ   rL   rI   ra   )rC   r™   r(   r(   r)   rÔ  Ó  s    z/getPhases.<locals>.InTablePhase.startTagCaptionc             S   s(   |   ¡  | j |¡ | jjd | j_d S )Nr±   )rÜ  r?   rÌ   rL   rI   ra   )rC   r™   r(   r(   r)   rÕ  Ù  s    z0getPhases.<locals>.InTablePhase.startTagColgroupc             S   s   |   tddƒ¡ |S )Nr¾   rt   )rÕ  rð   )rC   r™   r(   r(   r)   rÖ  Þ  s    z+getPhases.<locals>.InTablePhase.startTagColc             S   s(   |   ¡  | j |¡ | jjd | j_d S )Nr¯   )rÜ  r?   rÌ   rL   rI   ra   )rC   r™   r(   r(   r)   r×  â  s    z0getPhases.<locals>.InTablePhase.startTagRowGroupc             S   s   |   tddƒ¡ |S )Nrº   rt   )r×  rð   )rC   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¿   )r¨  r©  )rL   r„   ra   rŒ   rð   rT   )rC   r™   r(   r(   r)   rw  ë  s
    z-getPhases.<locals>.InTablePhase.startTagTablec             S   s   | j jd  |¡S )Nrù   )rL   rI   r‹   )rC   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   rz   r¬  z unexpected-hidden-input-in-table)	rn   r   rL   r„   r?   rÌ   rƒ   r  rõ   )rC   r™   r(   r(   r)   rz  õ  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-tablery   )rL   r„   r?   r£  rÌ   rƒ   r  )rC   r™   r(   r(   r)   rn  ÿ  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-voodoorA   Tr³   F)rL   r„   r?   rÞ  rI   r‹   )rC   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¿   )r¡  ry   zend-tag-too-early-named)r¸  r¹  )r?   r¢  r¶  rƒ   rA   rL   r„   r  rc   rT   r‘   )rC   r™   r(   r(   r)   rÚ    s    
z+getPhases.<locals>.InTablePhase.endTagTablec             S   s   | j  dd|d i¡ d S )Nzunexpected-end-tagrA   )rL   r„   )rC   r™   r(   r(   r)   rÛ    s    z,getPhases.<locals>.InTablePhase.endTagIgnorec             S   s<   | j  dd|d i¡ d| j_| j jd  |¡ d| j_d S )Nz'unexpected-end-tag-implies-table-voodoorA   Tr³   F)rL   r„   r?   rÞ  rI   rŒ   )rC   r™   r(   r(   r)   rø      s    z+getPhases.<locals>.InTablePhase.endTagOtherN)r:   r;   r<   rK   rÜ  r   rŠ   r‰   rà   rÔ  rÕ  rÖ  r×  rØ  rw  rÙ  rz  rn  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)rK   rÍ   ÚcharacterTokens)rC   rL   r?   )rå   r(   r)   rK   (  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 )rz   r(   )r@   r¾  r(   r(   r)   rD   .  s    zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c             S   s   g | ]}|t k‘qS r(   )r   )r@   r¾  r(   r(   r)   rD   /  s    rr   )r1   rz   r²   )Újoinrà  rž  r   rL   rI   rà   r?   )rC   rz   r™   r(   r(   r)   ÚflushCharacters-  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc             S   s   |   ¡  | j| j_|S )N)râ  rÍ   rL   ra   )rC   r™   r(   r(   r)   r   6  s    
z2getPhases.<locals>.InTableTextPhase.processCommentc             S   s   |   ¡  | j| j_dS )NT)râ  rÍ   rL   ra   )rC   r(   r(   r)   r   ;  s    
z.getPhases.<locals>.InTableTextPhase.processEOFc             S   s    |d dkrd S | j  |¡ d S )Nrz   rœ  )rà  r   )rC   r™   r(   r(   r)   r‰   @  s    z5getPhases.<locals>.InTableTextPhase.processCharactersc             S   s   | j  |¡ d S )N)rà  r   )rC   r™   r(   r(   r)   rŠ   E  s    z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc             S   s   |   ¡  | j| j_|S )N)râ  rÍ   rL   ra   )rC   r™   r(   r(   r)   r‹   J  s    
z3getPhases.<locals>.InTableTextPhase.processStartTagc             S   s   |   ¡  | j| j_|S )N)râ  rÍ   rL   ra   )rC   r™   r(   r(   r)   rŒ   O  s    
z1getPhases.<locals>.InTableTextPhase.processEndTagN)r:   r;   r<   rK   râ  r   r   r‰   rŠ   r‹   rŒ   r(   )rå   r(   r)   ÚInTableTextPhase'  s   	rã  c                   s`   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )z!getPhases.<locals>.InCaptionPhasec                sf   ˆ   | ||¡ 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½   rf  r¾   rº   r·   r¼   r¸   r»   r¹   r½   r¿   )
rÁ   rf  r¾   rÃ   rº   r·   r¼   r¸   r»   r¹   )rK   r   ró   rã   ÚstartTagTableElementrá   rõ   rö   ÚendTagCaptionrÚ  rÛ  rä   rø   )rC   rL   r?   )rå   r(   r)   rK   V  s    
z*getPhases.<locals>.InCaptionPhase.__init__c             S   s   | j jddd S )Nr½   r¿   )r¡  )r?   r¢  )rC   r(   r(   r)   ÚignoreEndTagCaptionh  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc             S   s   | j jd  ¡  d S )Nr³   )rL   rI   r   )rC   r(   r(   r)   r   k  s    z,getPhases.<locals>.InCaptionPhase.processEOFc             S   s   | j jd  |¡S )Nr³   )rL   rI   r‰   )rC   r™   r(   r(   r)   r‰   n  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc             S   s0   | j  ¡  |  ¡ }| j j tdƒ¡ |s,|S d S )Nr½   )rL   r„   ræ  ra   rŒ   rð   )rC   r™   ÚignoreEndTagr(   r(   r)   rä  q  s
    
z6getPhases.<locals>.InCaptionPhase.startTagTableElementc             S   s   | j jd  |¡S )Nr³   )rL   rI   r‹   )rC   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 )Nry   r½   z$expected-one-end-tag-but-got-another)r¸  r¹  r²   )ræ  r?   r¶  rƒ   rA   rL   r„   r  rÐ  rI   ra   rT   r‘   )rC   r™   r(   r(   r)   rå  |  s    

z/getPhases.<locals>.InCaptionPhase.endTagCaptionc             S   s0   | j  ¡  |  ¡ }| j j tdƒ¡ |s,|S d S )Nr½   )rL   r„   ræ  ra   rŒ   rð   )rC   r™   rç  r(   r(   r)   rÚ  Ž  s
    
z-getPhases.<locals>.InCaptionPhase.endTagTablec             S   s   | j  dd|d i¡ d S )Nzunexpected-end-tagrA   )rL   r„   )rC   r™   r(   r(   r)   rÛ  •  s    z.getPhases.<locals>.InCaptionPhase.endTagIgnorec             S   s   | j jd  |¡S )Nr³   )rL   rI   rŒ   )rC   r™   r(   r(   r)   rø   ˜  s    z-getPhases.<locals>.InCaptionPhase.endTagOtherN)r:   r;   r<   rK   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Ã   rf  r¾   )rK   r   ró   rã   rÖ  rá   rõ   rö   ÚendTagColgroupÚ	endTagColrä   rø   )rC   rL   r?   )rå   r(   r)   rK   ž  s    
z.getPhases.<locals>.InColumnGroupPhase.__init__c             S   s   | j jd jdkS )Nry   rÃ   )r?   rƒ   rA   )rC   r(   r(   r)   ÚignoreEndTagColgroup­  s    z:getPhases.<locals>.InColumnGroupPhase.ignoreEndTagColgroupc             S   sD   | j jd jdkr"| jjst‚d S |  ¡ }|  tdƒ¡ |s@dS d S )Nry   rÃ   r¾   T)	r?   rƒ   rA   rL   rT   r‘   rë  ré  rð   )rC   rç  r(   r(   r)   r   °  s    z0getPhases.<locals>.InColumnGroupPhase.processEOFc             S   s"   |   ¡ }|  tdƒ¡ |s|S d S )Nr¾   )rë  ré  rð   )rC   r™   rç  r(   r(   r)   r‰   º  s    z7getPhases.<locals>.InColumnGroupPhase.processCharactersc             S   s$   | j  |¡ | j j ¡  d|d< d S )NTr   )r?   rÌ   rƒ   r  )rC   r™   r(   r(   r)   rÖ  À  s    z1getPhases.<locals>.InColumnGroupPhase.startTagColc             S   s"   |   ¡ }|  tdƒ¡ |s|S d S )Nr¾   )rë  ré  rð   )rC   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ë  rL   rT   r‘   r„   r?   rƒ   r  rI   ra   )rC   r™   r(   r(   r)   ré  Ë  s
    z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc             S   s   | j  dddi¡ d S )Nz
no-end-tagrA   rf  )rL   r„   )rC   r™   r(   r(   r)   rê  Ô  s    z/getPhases.<locals>.InColumnGroupPhase.endTagColc             S   s"   |   ¡ }|  tdƒ¡ |s|S d S )Nr¾   )rë  ré  rð   )rC   r™   rç  r(   r(   r)   rø   ×  s    z1getPhases.<locals>.InColumnGroupPhase.endTagOtherN)r:   r;   r<   rK   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½   rf  r¾   rº   r¼   r»   )rº   r¼   r»   r¿   )rÁ   r½   rf  r¾   rÃ   r·   r¸   r¹   )rK   r   ró   rã   Ú
startTagTrÚstartTagTableCellÚstartTagTableOtherrá   rõ   rö   ÚendTagTableRowGrouprÚ  rÛ  rä   rø   )rC   rL   r?   )rå   r(   r)   rK   ß  s    
z,getPhases.<locals>.InTableBodyPhase.__init__c             S   sF   x"| j jd jdkr"| j j ¡  qW | j jd jdkrB| jjsBt‚d S )Nry   )rº   r¼   r»   rÃ   rÃ   )r?   rƒ   rA   r  rL   rT   r‘   )rC   r(   r(   r)   ÚclearStackToTableBodyContextó  s    z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc             S   s   | j jd  ¡  d S )Nr²   )rL   rI   r   )rC   r(   r(   r)   r   ý  s    z.getPhases.<locals>.InTableBodyPhase.processEOFc             S   s   | j jd  |¡S )Nr²   )rL   rI   rŠ   )rC   r™   r(   r(   r)   rŠ      s    z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc             S   s   | j jd  |¡S )Nr²   )rL   rI   r‰   )rC   r™   r(   r(   r)   r‰     s    z5getPhases.<locals>.InTableBodyPhase.processCharactersc             S   s(   |   ¡  | j |¡ | jjd | j_d S )Nr®   )rñ  r?   rÌ   rL   rI   ra   )rC   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-bodyrA   r¹   rt   )rL   r„   rí  rð   )rC   r™   r(   r(   r)   rî    s    z5getPhases.<locals>.InTableBodyPhase.startTagTableCellc             S   sn   | j jddds0| j jddds0| j jdddrT|  ¡  |  t| j jd jƒ¡ |S | jjs`t	‚| j 
¡  d S )Nrº   r¿   )r¡  r»   r¼   ry   )r?   r¢  rñ  rð  rð   rƒ   rA   rL   rT   r‘   r„   )rC   r™   r(   r(   r)   rï    s    z6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc             S   s   | j jd  |¡S )Nr²   )rL   rI   r‹   )rC   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 )NrA   r¿   )r¡  r²   z unexpected-end-tag-in-table-body)	r?   r¢  rñ  rƒ   r  rL   rI   ra   r„   )rC   r™   r(   r(   r)   rð  "  s    z7getPhases.<locals>.InTableBodyPhase.endTagTableRowGroupc             S   sn   | j jddds0| j jddds0| j jdddrT|  ¡  |  t| j jd jƒ¡ |S | jjs`t	‚| j 
¡  d S )Nrº   r¿   )r¡  r»   r¼   ry   )r?   r¢  rñ  rð  rð   rƒ   rA   rL   rT   r‘   r„   )rC   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-bodyrA   )rL   r„   )rC   r™   r(   r(   r)   rÛ  8  s    z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec             S   s   | j jd  |¡S )Nr²   )rL   rI   rŒ   )rC   r™   r(   r(   r)   rø   <  s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherN)r:   r;   r<   rK   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½   rf  r¾   rº   r¼   r»   r¹   r¹   r¿   )rº   r¼   r»   )rÁ   r½   rf  r¾   rÃ   r·   r¸   )rK   r   ró   rã   rî  rï  rá   rõ   rö   ÚendTagTrrÚ  rð  rÛ  rä   rø   )rC   rL   r?   )rå   r(   r)   rK   A  s    
z&getPhases.<locals>.InRowPhase.__init__c             S   sD   x>| j jd jdkr>| j dd| j jd ji¡ | j j ¡  qW d S )Nry   )r¹   rÃ   z'unexpected-implied-end-tag-in-table-rowrA   )r?   rƒ   rA   rL   r„   r  )rC   r(   r(   r)   ÚclearStackToTableRowContextU  s    z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc             S   s   | j jddd S )Nr¹   r¿   )r¡  )r?   r¢  )rC   r(   r(   r)   ÚignoreEndTagTr[  s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc             S   s   | j jd  ¡  d S )Nr²   )rL   rI   r   )rC   r(   r(   r)   r   _  s    z(getPhases.<locals>.InRowPhase.processEOFc             S   s   | j jd  |¡S )Nr²   )rL   rI   rŠ   )rC   r™   r(   r(   r)   rŠ   b  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc             S   s   | j jd  |¡S )Nr²   )rL   rI   r‰   )rC   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Ì   rL   rI   ra   r”  r   r   )rC   r™   r(   r(   r)   rî  h  s    z/getPhases.<locals>.InRowPhase.startTagTableCellc             S   s"   |   ¡ }|  tdƒ¡ |s|S d S )Nr¹   )rõ  ró  rð   )rC   r™   rç  r(   r(   r)   rï  n  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc             S   s   | j jd  |¡S )Nr²   )rL   rI   r‹   )rC   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?   rƒ   r  rL   rI   ra   rT   r‘   r„   )rC   r™   r(   r(   r)   ró  x  s    z&getPhases.<locals>.InRowPhase.endTagTrc             S   s"   |   ¡ }|  tdƒ¡ |s|S d S )Nr¹   )rõ  ró  rð   )rC   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 )NrA   r¿   )r¡  r¹   )r?   r¢  ró  rð   rL   r„   )rC   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-rowrA   )rL   r„   )rC   r™   r(   r(   r)   rÛ  ‘  s    z*getPhases.<locals>.InRowPhase.endTagIgnorec             S   s   | j jd  |¡S )Nr²   )rL   rI   rŒ   )rC   r™   r(   r(   r)   rø   •  s    z)getPhases.<locals>.InRowPhase.endTagOtherN)r:   r;   r<   rK   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½   rf  r¾   rº   r·   r¼   r¸   r»   r¹   )r·   r¸   )rÁ   r½   rf  r¾   rÃ   )r¿   rº   r¼   r»   r¹   )rK   r   ró   rã   rï  rá   rõ   rö   ÚendTagTableCellrÛ  ÚendTagImplyrä   rø   )rC   rL   r?   )rå   r(   r)   rK   š  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¿   )r¡  r¸   )r?   r¢  r÷  rð   )rC   r(   r(   r)   Ú	closeCell«  s    z(getPhases.<locals>.InCellPhase.closeCellc             S   s   | j jd  ¡  d S )Nr³   )rL   rI   r   )rC   r(   r(   r)   r   ²  s    z)getPhases.<locals>.InCellPhase.processEOFc             S   s   | j jd  |¡S )Nr³   )rL   rI   r‰   )rC   r™   r(   r(   r)   r‰   µ  s    z0getPhases.<locals>.InCellPhase.processCharactersc             S   sF   | j jddds | j jdddr,|  ¡  |S | jjs8t‚| j ¡  d S )Nr·   r¿   )r¡  r¸   )r?   r¢  rù  rL   rT   r‘   r„   )rC   r™   r(   r(   r)   rï  ¸  s    z1getPhases.<locals>.InCellPhase.startTagTableOtherc             S   s   | j jd  |¡S )Nr³   )rL   rI   r‹   )rC   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 )NrA   r¿   )r¡  ry   zunexpected-cell-end-tagr®   zunexpected-end-tag)r?   r¢  r¶  rƒ   rA   rL   r„   r  rÐ  rI   ra   )rC   r™   rÆ   r(   r(   r)   r÷  Å  s    
z.getPhases.<locals>.InCellPhase.endTagTableCellc             S   s   | j  dd|d i¡ d S )Nzunexpected-end-tagrA   )rL   r„   )rC   r™   r(   r(   r)   rÛ  Ö  s    z+getPhases.<locals>.InCellPhase.endTagIgnorec             S   s.   | j j|d ddr |  ¡  |S | j ¡  d S )NrA   r¿   )r¡  )r?   r¢  rù  rL   r„   )rC   r™   r(   r(   r)   rø  Ù  s    z*getPhases.<locals>.InCellPhase.endTagImplyc             S   s   | j jd  |¡S )Nr³   )rL   rI   rŒ   )rC   r™   r(   r(   r)   rø   á  s    z*getPhases.<locals>.InCellPhase.endTagOtherN)r:   r;   r<   rK   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Ã   rc  rd  r¶   )rZ  rU  r^  r   )rK   r   ró   rã   ÚstartTagOptionÚstartTagOptgroupr  rz  r	  rá   rõ   rö   ÚendTagOptionÚendTagOptgroupÚendTagSelecträ   rø   )rC   rL   r?   )rå   r(   r)   rK   å  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 )Nry   rÃ   zeof-in-select)r?   rƒ   rA   rL   r„   rT   r‘   )rC   r(   r(   r)   r   ú  s    z+getPhases.<locals>.InSelectPhase.processEOFc             S   s$   |d dkrd S | j  |d ¡ d S )Nrz   rœ  )r?   rà   )rC   r™   r(   r(   r)   r‰    	  s    z2getPhases.<locals>.InSelectPhase.processCharactersc             S   s.   | j jd jdkr| j j ¡  | j  |¡ d S )Nry   rc  )r?   rƒ   rA   r  rÌ   )rC   r™   r(   r(   r)   rû  	  s    z/getPhases.<locals>.InSelectPhase.startTagOptionc             S   sL   | j jd jdkr| j j ¡  | j jd jdkr<| j j ¡  | j  |¡ d S )Nry   rc  rd  )r?   rƒ   rA   r  rÌ   )rC   r™   r(   r(   r)   rü  	  s
    z1getPhases.<locals>.InSelectPhase.startTagOptgroupc             S   s   | j  d¡ |  tdƒ¡ d S )Nzunexpected-select-in-selectr¶   )rL   r„   rÿ  rð   )rC   r™   r(   r(   r)   r  	  s    z/getPhases.<locals>.InSelectPhase.startTagSelectc             S   s>   | j  d¡ | jjdddr.|  tdƒ¡ |S | j js:t‚d S )Nzunexpected-input-in-selectr¶   )r¡  )rL   r„   r?   r¢  rÿ  rð   rT   r‘   )rC   r™   r(   r(   r)   rz  	  s
    z.getPhases.<locals>.InSelectPhase.startTagInputc             S   s   | j jd  |¡S )Nrù   )rL   rI   r‹   )rC   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-selectrA   )rL   r„   )rC   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 )Nry   rc  zunexpected-end-tag-in-selectrA   )r?   rƒ   rA   r  rL   r„   )rC   r™   r(   r(   r)   rý  %	  s    z-getPhases.<locals>.InSelectPhase.endTagOptionc             S   sf   | j jd jdkr0| j jd jdkr0| j j ¡  | j jd jdkrP| j j ¡  n| j dddi¡ d S )Nry   rc  éþÿÿÿrd  zunexpected-end-tag-in-selectrA   )r?   rƒ   rA   r  rL   r„   )rC   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¶   )r¡  )
r?   r¢  rƒ   r  rA   rL   rc   rT   r‘   r„   )rC   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-selectrA   )rL   r„   )rC   r™   r(   r(   r)   rø   D	  s    z,getPhases.<locals>.InSelectPhase.endTagOtherN)r:   r;   r<   rK   r   r‰   rû  rü  r  rz  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¸   )
rK   r   ró   rw  rá   rõ   rö   rÚ  rä   rø   )rC   rL   r?   )rå   r(   r)   rK   I	  s    
z0getPhases.<locals>.InSelectInTablePhase.__init__c             S   s   | j jd  ¡  d S )Nr¬   )rL   rI   r   )rC   r(   r(   r)   r   X	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc             S   s   | j jd  |¡S )Nr¬   )rL   rI   r‰   )rC   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-tablerA   r¶   )rL   r„   rø   rð   )rC   r™   r(   r(   r)   rw  ^	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec             S   s   | j jd  |¡S )Nr¬   )rL   rI   r‹   )rC   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-tablerA   r¿   )r¡  r¶   )rL   r„   r?   r¢  rø   rð   )rC   r™   r(   r(   r)   rÚ  f	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec             S   s   | j jd  |¡S )Nr¬   )rL   rI   rŒ   )rC   r™   r(   r(   r)   rø   l	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOtherN)
r:   r;   r<   rK   r   r‰   rw  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@  rA  r'  rÁ   rñ   r(  rB  r=  r*   r+  r>  rC  rS  Úh1Úh2Úh3Úh4Úh5Úh6rÀ   r[  rE  rT  r<  r:  r3  r3   rL  r5  r'   r9  rµ  rF  rG  ÚspanrI  rH  ÚsubÚsupr¿   rJ  rK  r8  Úvarc                s   ˆ   | ||¡ d S )N)rK   )rC   rL   r?   )rå   r(   r)   rK   y	  s    z1getPhases.<locals>.InForeignContentPhase.__init__c          %   S   sn   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%œ$}|d& |krj||d&  |d&< d S )'NÚaltGlyphÚaltGlyphDefÚaltGlyphItemÚanimateColorÚanimateMotionÚanimateTransformÚclipPathÚfeBlendÚfeColorMatrixÚfeComponentTransferÚfeCompositeÚfeConvolveMatrixÚfeDiffuseLightingÚfeDisplacementMapÚfeDistantLightÚfeFloodÚfeFuncAÚfeFuncBÚfeFuncGÚfeFuncRÚfeGaussianBlurÚfeImageÚfeMergeÚfeMergeNodeÚfeMorphologyÚfeOffsetÚfePointLightÚfeSpecularLightingÚfeSpotLightÚfeTileÚfeTurbulenceÚforeignObjectÚglyphRefÚlinearGradientÚradialGradientÚtextPath)$ÚaltglyphÚaltglyphdefÚaltglyphitemÚanimatecolorÚanimatemotionÚanimatetransformÚclippathÚfeblendÚfecolormatrixÚfecomponenttransferÚfecompositeÚfeconvolvematrixÚfediffuselightingÚfedisplacementmapÚfedistantlightÚfefloodÚfefuncaÚfefuncbÚfefuncgÚfefuncrÚfegaussianblurÚfeimageÚfemergeÚfemergenodeÚfemorphologyÚfeoffsetÚfepointlightÚfespecularlightingÚfespotlightÚfetileÚfeturbulenceÚforeignobjectÚglyphrefÚlineargradientÚradialgradientÚtextpathrA   r(   )rC   r™   Úreplacementsr(   r(   r)   ÚadjustSVGTagNames|	  sL    z:getPhases.<locals>.InForeignContentPhase.adjustSVGTagNamesc                sL   |d dkrd|d< n&| j jr<tdd„ |d D ƒƒr<d| j _ˆ  | |¡ d S )Nrz   rœ  u   ï¿½c             s   s   | ]}|t kV  qd S )N)r   )r@   r  r(   r(   r)   rÔ   ©	  s    zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rL   rf   rž  r‰   )rC   r™   )rå   r(   r)   r‰   ¥	  s    
z:getPhases.<locals>.InForeignContentPhase.processCharactersc             S   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 )Nry   rA   rD  rz   ÚcolorÚfaceÚsizez*unexpected-html-element-in-foreign-contentrj   r~   rl   r€   Tr   )r?   rƒ   ÚbreakoutElementsÚsetÚkeysrL   r„   rl   r‡   rp   rq   r  r   r   rV  r   r   rÌ   )rC   r™   rœ   r(   r(   r)   r‹   ­	  s.    



z8getPhases.<locals>.InForeignContentPhase.processStartTagc             S   sð   t | jjƒd }| jjd }|j 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   ry   rA   zunexpected-end-tagrÝ  )r†   r?   rƒ   rA   rn   r   rL   r„   ra   rI   râ  rÍ   r  r‘   rl   r‡   rŒ   )rC   r™   Ú	nodeIndexrÆ   r›   r(   r(   r)   rŒ   È	  s(    z6getPhases.<locals>.InForeignContentPhase.processEndTagN)
r:   r;   r<   rˆ   rZ  rK   rV  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Ã   )
rK   r   ró   rã   rá   rõ   rö   rˆ  rä   rø   )rC   rL   r?   )rå   r(   r)   rK   ã	  s    
z*getPhases.<locals>.AfterBodyPhase.__init__c             S   s   d S )Nr(   )rC   r(   r(   r)   r   î	  s    z,getPhases.<locals>.AfterBodyPhase.processEOFc             S   s   | j  || j jd ¡ d S )Nr   )r?   rß   rƒ   )rC   r™   r(   r(   r)   r   ò	  s    z0getPhases.<locals>.AfterBodyPhase.processCommentc             S   s    | j  d¡ | j jd | j _|S )Nzunexpected-char-after-bodyr³   )rL   r„   rI   ra   )rC   r™   r(   r(   r)   r‰   ÷	  s    z3getPhases.<locals>.AfterBodyPhase.processCharactersc             S   s   | j jd  |¡S )Nr³   )rL   rI   r‹   )rC   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-bodyrA   r³   )rL   r„   rI   ra   )rC   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)rL   rT   r„   rI   ra   )rC   rA   r(   r(   r)   rˆ  
  s    z,getPhases.<locals>.AfterBodyPhase.endTagHtmlc             S   s*   | j  dd|d i¡ | j jd | j _|S )Nzunexpected-end-tag-after-bodyrA   r³   )rL   r„   rI   ra   )rC   r™   r(   r(   r)   rø   
  s    z-getPhases.<locals>.AfterBodyPhase.endTagOtherN)r:   r;   r<   rK   r   r   r‰   rã   rõ   rˆ  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Â   rg  rý   )rK   r   ró   rã   r   ÚstartTagFrameÚstartTagNoframesrá   rõ   rö   ÚendTagFrameseträ   rø   )rC   rL   r?   )rå   r(   r)   rK   
  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 )Nry   rÃ   zeof-in-frameset)r?   rƒ   rA   rL   r„   rT   r‘   )rC   r(   r(   r)   r   #
  s    z-getPhases.<locals>.InFramesetPhase.processEOFc             S   s   | j  d¡ d S )Nzunexpected-char-in-frameset)rL   r„   )rC   r™   r(   r(   r)   r‰   )
  s    z4getPhases.<locals>.InFramesetPhase.processCharactersc             S   s   | j  |¡ d S )N)r?   rÌ   )rC   r™   r(   r(   r)   r   ,
  s    z3getPhases.<locals>.InFramesetPhase.startTagFramesetc             S   s   | j  |¡ | j j ¡  d S )N)r?   rÌ   rƒ   r  )rC   r™   r(   r(   r)   ra  /
  s    z0getPhases.<locals>.InFramesetPhase.startTagFramec             S   s   | j jd  |¡S )Nr³   )rL   rI   r‹   )rC   r™   r(   r(   r)   rb  3
  s    z3getPhases.<locals>.InFramesetPhase.startTagNoframesc             S   s   | j  dd|d i¡ d S )Nz unexpected-start-tag-in-framesetrA   )rL   r„   )rC   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 )Nry   rÃ   z)unexpected-frameset-in-frameset-innerhtmlrÂ   ÚafterFrameset)	r?   rƒ   rA   rL   r„   r  rT   rI   ra   )rC   r™   r(   r(   r)   rc  :
  s    z1getPhases.<locals>.InFramesetPhase.endTagFramesetc             S   s   | j  dd|d i¡ d S )Nzunexpected-end-tag-in-framesetrA   )rL   r„   )rC   r™   r(   r(   r)   rø   F
  s    z.getPhases.<locals>.InFramesetPhase.endTagOtherN)r:   r;   r<   rK   r   r‰   r   ra  rb  rõ   rc  rø   r(   )rå   r(   r)   ÚInFramesetPhase
  s   re  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ý   )rK   r   ró   rã   rb  rá   rõ   rö   rˆ  rä   rø   )rC   rL   r?   )rå   r(   r)   rK   L
  s    
z.getPhases.<locals>.AfterFramesetPhase.__init__c             S   s   d S )Nr(   )rC   r(   r(   r)   r   Z
  s    z0getPhases.<locals>.AfterFramesetPhase.processEOFc             S   s   | j  d¡ d S )Nzunexpected-char-after-frameset)rL   r„   )rC   r™   r(   r(   r)   r‰   ^
  s    z7getPhases.<locals>.AfterFramesetPhase.processCharactersc             S   s   | j jd  |¡S )Nrù   )rL   rI   r‹   )rC   r™   r(   r(   r)   rb  a
  s    z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc             S   s   | j  dd|d i¡ d S )Nz#unexpected-start-tag-after-framesetrA   )rL   r„   )rC   r™   r(   r(   r)   rõ   d
  s    z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc             S   s   | j jd | j _d S )NÚafterAfterFrameset)rL   rI   ra   )rC   r™   r(   r(   r)   rˆ  h
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc             S   s   | j  dd|d i¡ d S )Nz!unexpected-end-tag-after-framesetrA   )rL   r„   )rC   r™   r(   r(   r)   rø   k
  s    z1getPhases.<locals>.AfterFramesetPhase.endTagOtherN)
r:   r;   r<   rK   r   r‰   rb  rõ   rˆ  rø   r(   )rå   r(   r)   ÚAfterFramesetPhaseJ
  s   rg  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Ã   )rK   r   ró   rã   rá   rõ   rö   )rC   rL   r?   )rå   r(   r)   rK   p
  s    z/getPhases.<locals>.AfterAfterBodyPhase.__init__c             S   s   d S )Nr(   )rC   r(   r(   r)   r   x
  s    z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc             S   s   | j  || j j¡ d S )N)r?   rß   ræ   )rC   r™   r(   r(   r)   r   {
  s    z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc             S   s   | j jd  |¡S )Nr³   )rL   rI   rŠ   )rC   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³   )rL   r„   rI   ra   )rC   r™   r(   r(   r)   r‰   
  s    z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc             S   s   | j jd  |¡S )Nr³   )rL   rI   r‹   )rC   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-tagrA   r³   )rL   r„   rI   ra   )rC   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-tagrA   r³   )rL   r„   rI   ra   )rC   r™   r(   r(   r)   rŒ   
  s    z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagN)r:   r;   r<   rK   r   r   rŠ   r‰   rã   rõ   rŒ   r(   )rå   r(   r)   ÚAfterAfterBodyPhaseo
  s   rh  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ý   )rK   r   ró   rã   ÚstartTagNoFramesrá   rõ   rö   )rC   rL   r?   )rå   r(   r)   rK   –
  s
    z3getPhases.<locals>.AfterAfterFramesetPhase.__init__c             S   s   d S )Nr(   )rC   r(   r(   r)   r   Ÿ
  s    z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc             S   s   | j  || j j¡ d S )N)r?   rß   ræ   )rC   r™   r(   r(   r)   r   ¢
  s    z9getPhases.<locals>.AfterAfterFramesetPhase.processCommentc             S   s   | j jd  |¡S )Nr³   )rL   rI   rŠ   )rC   r™   r(   r(   r)   rŠ   ¥
  s    zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc             S   s   | j  d¡ d S )Nzexpected-eof-but-got-char)rL   r„   )rC   r™   r(   r(   r)   r‰   ¨
  s    z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc             S   s   | j jd  |¡S )Nr³   )rL   rI   r‹   )rC   r™   r(   r(   r)   rã   «
  s    z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc             S   s   | j jd  |¡S )Nrù   )rL   rI   r‹   )rC   r™   r(   r(   r)   ri  ®
  s    z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc             S   s   | j  dd|d i¡ d S )Nzexpected-eof-but-got-start-tagrA   )rL   r„   )rC   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-tagrA   )rL   r„   )rC   r™   r(   r(   r)   rŒ   µ
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagN)r:   r;   r<   rK   r   r   rŠ   r‰   rã   ri  rõ   rŒ   r(   )rå   r(   r)   ÚAfterAfterFramesetPhase•
  s   	rj  )rX   rW   rµ   rù   r  r  r³   rË   r²   rÝ  r°   r±   r¯   r®   r­   r¬   r´  r   rº  r´   rd  r_  rf  )r   )rJ   rZ   rÝ   rî   rò   rû   r  r  r#  rÑ  rÓ  rß  rã  rè  rì  rò  rö  rú  r  r  r^  r`  re  rg  rh  rj  r(   )rå   r)   rH   œ  sp    ) #.g@C     X! -GBbYLd's/9%&&rH   c                s>   t | d ƒt ˆ ƒ@ }|r:t‡ fdd„| d  ¡ D ƒƒ| d< d S )Nrz   c             3   s"   | ]\}}ˆ   ||¡|fV  qd S )N)r…   )r@   ÚkÚv)rU  r(   r)   rÔ   Ù
  s   z$adjust_attributes.<locals>.<genexpr>)r   r   r-   )r™   rU  Úneeds_adjustmentr(   )rU  r)   r©   Ö
  s    r©   ru   Fc             C   s   |d kri }t | | ||dœS )N)r1   rA   rz   r€   )r   )rA   r1   rm   r€   r(   r(   r)   rð   Ý
  s    
rð   c               @   s   e Zd ZdZdS )rx   zError in parsed documentN)r:   r;   r<   rÐ   r(   r(   r(   r)   rx   å
  s   rx   )r   T)r*   r   T)ru   NF).Ú
__future__r   r   r   Úpip._vendor.sixr   r   r/   Úcollectionsr   rê   r	   r
   r   Ztreebuilders.baser   r   Ú	constantsr   r   r   r   r   r   r   r   r   r   r   r   rª   r   r   r   r   r"   r,   r>   rP  r!   ÚmemoizerH   r©   rð   Ú	Exceptionrx   r(   r(   r(   r)   Ú<module>   sL   H

  G                  L 
