<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
U
    ÀÒ.e³Ð ã                   @   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)   úD/usr/lib/python3.8/site-packages/pip/_vendor/html5lib/html5parser.pyr#      s    
r#   Údivc                 K   s,   t  |¡}t||d}|j| fd|i|—ŽS )a#  Parse an HTML fragment as a string or file-like object into a tree

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

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

    :arg treebuilder: the treebuilder to use when parsing

    :arg namespaceHTMLElements: whether or not to namespace HTML elements

    :returns: parsed tree

    Example:

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

    r   Ú	container)r   r!   r"   ÚparseFragment)r$   r,   r%   r    r&   r'   r(   r)   r)   r*   r-   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                    s>   |  ¡ D ]$\}}t|tjƒr$ˆ |ƒ}|||< qt | |||¡S ©N)ÚitemsÚ
isinstanceÚtypesÚFunctionTypeÚtypeÚ__new__)ÚmetaZ	classnameÚbasesZ	classDictZattributeNameZ	attribute©Úfunctionr)   r*   r4   M   s
    
z5method_decorator_metaclass.<locals>.Decorated.__new__N)Ú__name__Ú
__module__Ú__qualname__r4   r)   r7   r)   r*   Ú	DecoratedL   s   r<   )r3   )r8   r<   r)   r7   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)   rB   r*   Ú__init__^   s    


ÿzHTMLParser.__init__r+   c                 K   sh   || _ || _|| _tj|fd| i|—Ž| _|  ¡  z|  ¡  W n$ tk
rb   |  ¡  |  ¡  Y nX d S )NÚparser)	ÚinnerHTMLModer,   Ú	scriptingr
   Z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>   rP   ÚfirstStartTagrF   ÚlogÚ
compatModerM   r,   ÚlowerrS   r   rO   ÚrcdataStateÚstater   ÚrawtextStateÚplaintextStaterI   ÚphaseÚinsertHtmlElementÚresetInsertionModeZ	lastPhaseZbeforeRCDataPhaseÚ
framesetOKrB   r)   r)   r*   rP   ‹   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

        rO   Nr   )ÚhasattrrO   rR   ÚcharEncodingr@   rB   r)   r)   r*   ÚdocumentEncoding­   s    
zHTMLParser.documentEncodingc                 C   sJ   |j dkr6|jtd kr6d|jko4|jd  t¡dkS |j|j ftkS d S )Núannotation-xmlÚmathmlÚencoding)z	text/htmlzapplication/xhtml+xml)r@   Ú	namespacer   Ú
attributesÚ	translater   r   ©rC   Úelementr)   r)   r*   ÚisHTMLIntegrationPoint·   s    
ÿ

ÿþÿz!HTMLParser.isHTMLIntegrationPointc                 C   s   |j |jftkS r.   )rj   r@   r   rm   r)   r)   r*   ÚisMathMLTextIntegrationPointÁ   s    z'HTMLParser.isMathMLTextIntegrationPointc                 C   sX  t d }t d }t d }t d }t d }t d }t d }|  ¡ D ]â}d }	|}
|
d k	rø|
}	| jjrp| jjd nd }|r~|jnd }|rŒ|jnd }|
d	 }||kr¾|  |
d
 |
 di ¡¡ d }
qNt| jjƒdksd|| jj	ksd|  
|¡r||kr
|d tddgƒksd|||fksd|td krH|dkrH||krH|d dksd|  |¡rl||||fkrl| j}n
| jd }||krŒ| |
¡}
qN||kr¢| |
¡}
qN||kr¸| |
¡}
qN||krÎ| |
¡}
qN||krä| |
¡}
qN||krN| |
¡}
qN||kr@|	d r@|	d s@|  dd|	d i¡ q@d}g }|rT| | j¡ | j ¡ }|r.q.d S )NÚ
CharactersZSpaceCharactersÚStartTagÚEndTagÚCommentZDoctypeÚ
ParseErroréÿÿÿÿr3   ÚdataÚdatavarsr   r@   ZmglyphZ
malignmarkrh   rg   ÚsvgÚinForeignContentÚselfClosingÚselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   ÚnormalizedTokensr>   ÚopenElementsrj   r@   Ú
parseErrorÚgetÚlenÚdefaultNamespacerp   Ú	frozensetr   ro   r`   rI   ÚprocessCharactersÚprocessSpaceCharactersÚprocessStartTagÚprocessEndTagÚprocessCommentÚprocessDoctypeÚappendÚ
processEOF)rC   ZCharactersTokenZSpaceCharactersTokenZStartTagTokenZEndTagTokenZCommentTokenZDoctypeTokenZParseErrorTokenÚtokenZ
prev_tokenÚ	new_tokenÚcurrentNodeZcurrentNodeNamespaceZcurrentNodeNamer3   r`   Z	reprocessrI   r)   r)   r*   rQ   Ä   sŠ    

ÿþýü
û
úùø	
÷
öõ





ÿ
ÿ
zHTMLParser.mainLoopc                 c   s   | j D ]}|  |¡V  qd S r.   )rO   Ú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)rT   r>   ZgetDocument©rC   rR   Ú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)rT   r>   ZgetFragmentr‘   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 r.   )rF   rŠ   rO   rR   ZpositionrE   ru   r   )rC   Z	errorcoderx   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 )Nr3   rr   rw   rv   )r   r   r   Úupdate)rC   rŒ   Úrawr)   r)   r*   r   H  s    zHTMLParser.normalizeTokenc                 C   s   t |tƒ d S r.   )Úadjust_attributesr   r   r)   r)   r*   r   S  s    z!HTMLParser.adjustMathMLAttributesc                 C   s   t |tƒ d S r.   )r–   r   r   r)   r)   r*   r   V  s    zHTMLParser.adjustSVGAttributesc                 C   s   t |tƒ d S r.   )r–   ÚadjustForeignAttributesMapr   r)   r)   r*   r   Y  s    z"HTMLParser.adjustForeignAttributesc                 C   s   | j  ¡  d S r.   )rL   r`   r   r)   r)   r*   ÚreparseTokenNormal\  s    zHTMLParser.reparseTokenNormalc                 C   s¶   d}ddddddddddd	d	d
ddœ}| j jd d d… D ]r}|j}d }|| j jd kr`d}| j}|dkrh|s||j| j jkr|q8||kr˜| j||  } q¬q8|r8| jd	 } q¬q8|| _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Úhtmlrv   r   T)r£   r«   r­   r°   )r>   r~   r@   rS   rj   r‚   rI   r`   )rC   ZlastZnewModesÚnodeZnodeNameZ	new_phaser)   r)   r*   rb   `  s@    ò
zHTMLParser.resetInsertionModec                 C   sF   | j  |¡ |dkr"| jj| j_n| jj| j_| j| _| jd | _d S )NÚRAWTEXTÚtext)	r>   ÚinsertElementrO   r^   r]   r\   r`   ÚoriginalPhaserI   )rC   rŒ   ZcontentTyper)   r)   r*   ÚparseRCDataRawtextŒ  s    zHTMLParser.parseRCDataRawtext)NFTF)Fr+   F)r“   N)r9   r:   r;   Ú__doc__rK   rT   rP   Úpropertyrf   ro   rp   rQ   r}   r#   r-   r   r   r   r   r   r˜   rb   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 r.   r)   )r?   ÚkeyÚvaluer)   r)   r*   Ú	<genexpr>   s     z)getPhases.<locals>.log.<locals>.<genexpr>c                    s®   ˆ j  d¡ršt|ƒdkrš|d }zdˆ|d  i}W n   ‚ Y nX |d tkr\|d |d< | jj | jjjj | jj	j
j | j
j ˆ j |f¡ ˆ | f|ž|ŽS ˆ | f|ž|ŽS d S )NZprocessr   r3   r@   )r9   Ú
startswithr   r   rL   rY   rŠ   rO   r]   r`   Ú	__class__)rC   r’   r&   rŒ   Úinfo©r8   Z
type_namesr)   r*   Úwrapped£  s     
üz'getPhases.<locals>.log.<locals>.wrapped)rG   r   r/   )r8   rÀ   r)   r¿   r*   rY   ž  s
    ÿzgetPhases.<locals>.logc                 S   s   | rt |ƒS tS d S r.   )r=   r3   )Zuse_metaclassZmetaclass_funcr)   r)   r*   ÚgetMetaclass·  s    zgetPhases.<locals>.getMetaclassc                   @   sX   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )zgetPhases.<locals>.PhasezNBase class for helper object that implements each phase of processing
        c                 S   s   || _ || _d S r.   )rL   r>   ©rC   rL   r>   r)   r)   r*   rK   Â  s    z!getPhases.<locals>.Phase.__init__c                 S   s   t ‚d S r.   )ÚNotImplementedErrorrB   r)   r)   r*   r‹   Æ  s    z#getPhases.<locals>.Phase.processEOFc                 S   s   | j  || j jd ¡ d S )Nrv   ©r>   ÚinsertCommentr~   r   r)   r)   r*   rˆ   É  s    z'getPhases.<locals>.Phase.processCommentc                 S   s   | j  d¡ d S )Nzunexpected-doctype©rL   r   r   r)   r)   r*   r‰   Î  s    z'getPhases.<locals>.Phase.processDoctypec                 S   s   | j  |d ¡ d S ©Nrw   ©r>   Ú
insertTextr   r)   r)   r*   r„   Ñ  s    z*getPhases.<locals>.Phase.processCharactersc                 S   s   | j  |d ¡ d S rÇ   rÈ   r   r)   r)   r*   r…   Ô  s    z/getPhases.<locals>.Phase.processSpaceCharactersc                 S   s   | j |d  |ƒS ©Nr@   )ÚstartTagHandlerr   r)   r)   r*   r†   ×  s    z(getPhases.<locals>.Phase.processStartTagc                 S   sf   | j js |d dkr | j  d¡ |d  ¡ D ],\}}|| jjd jkr,|| jjd j|< q,d| j _d S )Nr@   r°   znon-html-rootrw   r   F)rL   rX   r   r/   r>   r~   rk   ©rC   rŒ   Úattrrº   r)   r)   r*   ÚstartTagHtmlÚ  s    z%getPhases.<locals>.Phase.startTagHtmlc                 S   s   | j |d  |ƒS rÊ   )ÚendTagHandlerr   r)   r)   r*   r‡   ä  s    z&getPhases.<locals>.Phase.processEndTagN)r9   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 r.   r)   r   r)   r)   r*   r…   è  s    z6getPhases.<locals>.InitialPhase.processSpaceCharactersc                 S   s   | j  || j j¡ d S r.   ©r>   rÅ   Zdocumentr   r)   r)   r*   rˆ   ë  s    z.getPhases.<locals>.InitialPhase.processCommentc                 S   sü   |d }|d }|d }|d }|dks@|d k	s@|d k	rL|dkrL| j  d¡ |d krXd}| j |¡ |dkrv| t¡}|rº|d dksº| d	¡sº|d
ksº| d¡rª|d ksº|rÄ| ¡ dkrÄd| j _n$| d¡sà| d¡rè|d k	rèd| j _| j j	d | j _
d S )Nr@   ÚpublicIdÚsystemIdÚcorrectr°   zabout:legacy-compatzunknown-doctypeÚ )7z*+//silmaril//dtd html pro v0r11 19970101//z4-//advasoft ltd//dtd html 3.0 aswedit + extensions//z*-//as//dtd html 3.0 aswedit + extensions//z-//ietf//dtd html 2.0 level 1//z-//ietf//dtd html 2.0 level 2//z&-//ietf//dtd html 2.0 strict level 1//z&-//ietf//dtd html 2.0 strict level 2//z-//ietf//dtd html 2.0 strict//z-//ietf//dtd html 2.0//z-//ietf//dtd html 2.1e//z-//ietf//dtd html 3.0//z-//ietf//dtd html 3.2 final//z-//ietf//dtd html 3.2//z-//ietf//dtd html 3//z-//ietf//dtd html level 0//z-//ietf//dtd html level 1//z-//ietf//dtd html level 2//z-//ietf//dtd html level 3//z"-//ietf//dtd html strict level 0//z"-//ietf//dtd html strict level 1//z"-//ietf//dtd html strict level 2//z"-//ietf//dtd html strict level 3//z-//ietf//dtd html strict//z-//ietf//dtd html//z(-//metrius//dtd metrius presentational//z5-//microsoft//dtd internet explorer 2.0 html strict//z.-//microsoft//dtd internet explorer 2.0 html//z0-//microsoft//dtd internet explorer 2.0 tables//z5-//microsoft//dtd internet explorer 3.0 html strict//z.-//microsoft//dtd internet explorer 3.0 html//z0-//microsoft//dtd internet explorer 3.0 tables//z#-//netscape comm. corp.//dtd html//z*-//netscape comm. corp.//dtd strict html//z*-//o'reilly and associates//dtd html 2.0//z3-//o'reilly and associates//dtd html extended 1.0//z;-//o'reilly and associates//dtd html extended relaxed 1.0//zN-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//zE-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//z$-//spyglass//dtd html 2.0 extended//z+-//sq//dtd html 2.0 hotmetal + extensions//z--//sun microsystems corp.//dtd hotjava html//z4-//sun microsystems corp.//dtd hotjava strict html//z-//w3c//dtd html 3 1995-03-24//z-//w3c//dtd html 3.2 draft//z-//w3c//dtd html 3.2 final//z-//w3c//dtd html 3.2//z-//w3c//dtd html 3.2s draft//z-//w3c//dtd html 4.0 frameset//z#-//w3c//dtd html 4.0 transitional//z(-//w3c//dtd html experimental 19960712//z&-//w3c//dtd html experimental 970421//z-//w3c//dtd w3 html//z-//w3o//dtd w3 html 3.0//z#-//webtechs//dtd mozilla html 2.0//z-//webtechs//dtd mozilla html//)z$-//w3o//dtd w3 html strict 3.0//en//z"-/w3c/dtd html 4.0 transitional/enr°   )z -//w3c//dtd html 4.01 frameset//z$-//w3c//dtd html 4.01 transitional//z:http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtdÚquirks)z -//w3c//dtd xhtml 1.0 frameset//z$-//w3c//dtd xhtml 1.0 transitional//zlimited quirksrV   )rL   r   r>   ZinsertDoctyperl   r   r¼   r[   rZ   rI   r`   )rC   rŒ   r@   rÒ   rÓ   rÔ   r)   r)   r*   r‰   î  sX    ÿÿ
ÿÿ9Ç<ÿÄ?Á@À@
ÀA
ÿÿýúz.getPhases.<locals>.InitialPhase.processDoctypec                 S   s   d| j _| j jd | j _d S )NrÖ   rV   )rL   rZ   rI   r`   rB   r)   r)   r*   ÚanythingElseM  s    z,getPhases.<locals>.InitialPhase.anythingElsec                 S   s   | j  d¡ |  ¡  |S )Nzexpected-doctype-but-got-chars©rL   r   r×   r   r)   r)   r*   r„   Q  s    z1getPhases.<locals>.InitialPhase.processCharactersc                 S   s"   | j  dd|d i¡ |  ¡  |S )Nz"expected-doctype-but-got-start-tagr@   rØ   r   r)   r)   r*   r†   V  s
    
ÿz/getPhases.<locals>.InitialPhase.processStartTagc                 S   s"   | j  dd|d i¡ |  ¡  |S )Nz expected-doctype-but-got-end-tagr@   rØ   r   r)   r)   r*   r‡   \  s
    
ÿz-getPhases.<locals>.InitialPhase.processEndTagc                 S   s   | j  d¡ |  ¡  dS )Nzexpected-doctype-but-got-eofTrØ   rB   r)   r)   r*   r‹   b  s    z*getPhases.<locals>.InitialPhase.processEOFN)r9   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°   rr   r¢   )r>   Z
insertRootÚimpliedTagTokenrL   rI   r`   rB   r)   r)   r*   ra   i  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc                 S   s   |   ¡  dS ©NT©ra   rB   r)   r)   r*   r‹   n  s    z-getPhases.<locals>.BeforeHtmlPhase.processEOFc                 S   s   | j  || j j¡ d S r.   rÑ   r   r)   r)   r*   rˆ   r  s    z1getPhases.<locals>.BeforeHtmlPhase.processCommentc                 S   s   d S r.   r)   r   r)   r)   r*   r…   u  s    z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc                 S   s   |   ¡  |S r.   rÜ   r   r)   r)   r*   r„   x  s    z4getPhases.<locals>.BeforeHtmlPhase.processCharactersc                 S   s    |d dkrd| j _|  ¡  |S )Nr@   r°   T)rL   rX   ra   r   r)   r)   r*   r†   |  s    z2getPhases.<locals>.BeforeHtmlPhase.processStartTagc                 S   s4   |d dkr$| j  dd|d i¡ n|  ¡  |S d S )Nr@   ©r­   r®   r°   Úbrzunexpected-end-tag-before-html)rL   r   ra   r   r)   r)   r*   r‡   ‚  s    
ÿz0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)
r9   r:   r;   ra   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Ý   )rK   r   ÚMethodDispatcherrÎ   ÚstartTagHeadrË   ÚstartTagOtherÚdefaultÚendTagImplyHeadrÏ   ÚendTagOtherrÂ   ©rÐ   r)   r*   rK   ‹  s    þ
ÿz+getPhases.<locals>.BeforeHeadPhase.__init__c                 S   s   |   tddƒ¡ dS )Nr­   rr   T©rá   rÚ   rB   r)   r)   r*   r‹   ™  s    z-getPhases.<locals>.BeforeHeadPhase.processEOFc                 S   s   d S r.   r)   r   r)   r)   r*   r…     s    z9getPhases.<locals>.BeforeHeadPhase.processSpaceCharactersc                 S   s   |   tddƒ¡ |S ©Nr­   rr   rç   r   r)   r)   r*   r„      s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc                 S   s   | j jd  |¡S ©Nr    ©rL   rI   r†   r   r)   r)   r*   rÎ   ¤  s    z/getPhases.<locals>.BeforeHeadPhase.startTagHtmlc                 S   s0   | j  |¡ | j jd | j _| jjd | j_d S )Nrv   ÚinHead)r>   r´   r~   ÚheadPointerrL   rI   r`   r   r)   r)   r*   rá   §  s    z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc                 S   s   |   tddƒ¡ |S rè   rç   r   r)   r)   r*   râ   ¬  s    z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc                 S   s   |   tddƒ¡ |S rè   rç   r   r)   r)   r*   rä   °  s    z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc                 S   s   | j  dd|d i¡ d S )Nzend-tag-after-implied-rootr@   rÆ   r   r)   r)   r*   rå   ´  s    
ÿz.getPhases.<locals>.BeforeHeadPhase.endTagOtherN)r9   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Úlinkr5   r­   )rÞ   r°   r®   )rK   r   rà   rÎ   ÚstartTagTitleÚstartTagNoFramesStyleÚstartTagNoscriptÚstartTagScriptÚstartTagBaseLinkCommandÚstartTagMetará   rË   râ   rã   Ú
endTagHeadÚendTagHtmlBodyBrrÏ   rå   rÂ   ræ   r)   r*   rK   ¹  s&    ÿ÷
þz'getPhases.<locals>.InHeadPhase.__init__c                 S   s   |   ¡  dS rÛ   ©r×   rB   r)   r)   r*   r‹   Ð  s    z)getPhases.<locals>.InHeadPhase.processEOFc                 S   s   |   ¡  |S r.   r   r   r)   r)   r*   r„   Ô  s    z0getPhases.<locals>.InHeadPhase.processCharactersc                 S   s   | j jd  |¡S ré   rê   r   r)   r)   r*   rÎ   Ø  s    z+getPhases.<locals>.InHeadPhase.startTagHtmlc                 S   s   | j  d¡ d S )Nz!two-heads-are-not-better-than-onerÆ   r   r)   r)   r*   rá   Û  s    z+getPhases.<locals>.InHeadPhase.startTagHeadc                 S   s$   | j  |¡ | j j ¡  d|d< d S ©NTr|   ©r>   r´   r~   Úpopr   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|   rw   r   Z	tentativeÚcharsetZcontentz
http-equivzcontent-typezutf-8)r>   r´   r~   r  rL   rO   rR   re   ZchangeEncodingr[   r	   ZEncodingBytesÚencodeZContentAttrParserr#   )rC   rŒ   rk   rw   rL   Úcodecr)   r)   r*   rý   ã  s     ÿþ
z+getPhases.<locals>.InHeadPhase.startTagMetac                 S   s   | j  |d¡ d S )NZRCDATA©rL   r¶   r   r)   r)   r*   rø   ø  s    z,getPhases.<locals>.InHeadPhase.startTagTitlec                 S   s   | j  |d¡ d S )Nr²   r  r   r)   r)   r*   rù   û  s    z4getPhases.<locals>.InHeadPhase.startTagNoFramesStylec                 S   s8   | j jr| j  |d¡ n| j |¡ | j jd | j _d S )Nr²   ÚinHeadNoscript)rL   rN   r¶   r>   r´   rI   r`   r   r)   r)   r*   rú   ÿ  s    z/getPhases.<locals>.InHeadPhase.startTagNoscriptc                 S   s<   | j  |¡ | jjj| jj_| jj| j_| jjd | j_d S )Nr³   )	r>   r´   rL   rO   ZscriptDataStater]   r`   rµ   rI   r   r)   r)   r*   rû     s    z-getPhases.<locals>.InHeadPhase.startTagScriptc                 S   s   |   ¡  |S r.   r   r   r)   r)   r*   râ     s    z,getPhases.<locals>.InHeadPhase.startTagOtherc                 S   s"   | j jj ¡ }| j jd | j _d S )NÚ	afterHead©rL   r>   r~   r  rI   r`   ©rC   rŒ   r±   r)   r)   r*   rþ     s    z)getPhases.<locals>.InHeadPhase.endTagHeadc                 S   s   |   ¡  |S r.   r   r   r)   r)   r*   rÿ     s    z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc                 S   s   | j  dd|d i¡ d S ©Núunexpected-end-tagr@   rÆ   r   r)   r)   r*   rå     s    z*getPhases.<locals>.InHeadPhase.endTagOtherc                 S   s   |   tdƒ¡ d S )Nr­   )rþ   rÚ   rB   r)   r)   r*   r×     s    z+getPhases.<locals>.InHeadPhase.anythingElseN)r9   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÷   r5   rï   rð   )r­   rñ   rñ   rÞ   )rK   r   rà   rÎ   rü   ÚstartTagHeadNoscriptrË   râ   rã   ÚendTagNoscriptÚendTagBrrÏ   rå   rÂ   ræ   r)   r*   rK      s    ý
þz/getPhases.<locals>.InHeadNoscriptPhase.__init__c                 S   s   | j  d¡ |  ¡  dS )Nzeof-in-head-noscriptTrØ   rB   r)   r)   r*   r‹   0  s    z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc                 S   s   | j jd  |¡S ©Nrë   )rL   rI   rˆ   r   r)   r)   r*   rˆ   5  s    z5getPhases.<locals>.InHeadNoscriptPhase.processCommentc                 S   s   | j  d¡ |  ¡  |S )Nzchar-in-head-noscriptrØ   r   r)   r)   r*   r„   8  s    z8getPhases.<locals>.InHeadNoscriptPhase.processCharactersc                 S   s   | j jd  |¡S r  ©rL   rI   r…   r   r)   r)   r*   r…   =  s    z=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharactersc                 S   s   | j jd  |¡S ré   rê   r   r)   r)   r*   rÎ   @  s    z3getPhases.<locals>.InHeadNoscriptPhase.startTagHtmlc                 S   s   | j jd  |¡S r  rê   r   r)   r)   r*   rü   C  s    z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc                 S   s   | j  dd|d i¡ d S ©Núunexpected-start-tagr@   rÆ   r   r)   r)   r*   r  F  s    z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc                 S   s"   | j  dd|d i¡ |  ¡  |S ©Nzunexpected-inhead-noscript-tagr@   rØ   r   r)   r)   r*   râ   I  s    z4getPhases.<locals>.InHeadNoscriptPhase.startTagOtherc                 S   s"   | j jj ¡ }| j jd | j _d S r  r
  r  r)   r)   r*   r  N  s    z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc                 S   s"   | j  dd|d i¡ |  ¡  |S r  rØ   r   r)   r)   r*   r  S  s    z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc                 S   s   | j  dd|d i¡ d S r  rÆ   r   r)   r)   r*   rå   X  s    z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc                 S   s   |   tdƒ¡ d S )Nrñ   )r  rÚ   rB   r)   r)   r*   r×   [  s    z3getPhases.<locals>.InHeadNoscriptPhase.anythingElseN)r9   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÷   r5   rï   rò   rð   rî   r­   )r®   r°   rÞ   )rK   r   rà   rÎ   ÚstartTagBodyÚstartTagFramesetÚstartTagFromHeadrá   rË   râ   rã   rÿ   rÏ   rå   rÂ   ræ   r)   r*   rK   `  s    þù	
ÿ
z*getPhases.<locals>.AfterHeadPhase.__init__c                 S   s   |   ¡  dS rÛ   r   rB   r)   r)   r*   r‹   q  s    z,getPhases.<locals>.AfterHeadPhase.processEOFc                 S   s   |   ¡  |S r.   r   r   r)   r)   r*   r„   u  s    z3getPhases.<locals>.AfterHeadPhase.processCharactersc                 S   s   | j jd  |¡S ré   rê   r   r)   r)   r*   rÎ   y  s    z.getPhases.<locals>.AfterHeadPhase.startTagHtmlc                 S   s(   d| j _| j |¡ | j jd | j _d S )NFr    )rL   rc   r>   r´   rI   r`   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   r`   r   r)   r)   r*   r    s    z2getPhases.<locals>.AfterHeadPhase.startTagFramesetc                 S   sr   | j  dd|d i¡ | jj | jj¡ | j jd  |¡ | jjd d d… D ] }|jdkrL| jj 	|¡  qnqLd S )Nz#unexpected-start-tag-out-of-my-headr@   rë   rv   r­   )
rL   r   r>   r~   rŠ   rì   rI   r†   r@   Úremover  r)   r)   r*   r  …  s    
ÿ
z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc                 S   s   | j  dd|d i¡ d S r  rÆ   r   r)   r)   r*   rá     s    z.getPhases.<locals>.AfterHeadPhase.startTagHeadc                 S   s   |   ¡  |S r.   r   r   r)   r)   r*   râ   ’  s    z/getPhases.<locals>.AfterHeadPhase.startTagOtherc                 S   s   |   ¡  |S r.   r   r   r)   r)   r*   rÿ   –  s    z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc                 S   s   | j  dd|d i¡ d S r  rÆ   r   r)   r)   r*   rå   š  s    z-getPhases.<locals>.AfterHeadPhase.endTagOtherc                 S   s.   | j  tddƒ¡ | jjd | j_d| j_d S )Nr®   rr   r    T)r>   r´   rÚ   rL   rI   r`   rc   rB   r)   r)   r*   r×     s    z.getPhases.<locals>.AfterHeadPhase.anythingElseN)r9   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÷   r5   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ÚdtrU   Úa)ÚbÚbigÚcodeÚemÚfontÚiÚsÚsmallÚstrikeÚstrongÚttÚuÚnobrÚbutton)ZappletZmarqueeÚobjectZxmpr¬   )ZarearÞ   ÚembedÚimgÚkeygenZwbr)ZparamÚsourceZtrackÚinputÚhrÚimageÚisindexÚtextareaZiframerñ   )Znoembedrï   r£   )ÚrpÚrt)ÚoptionÚoptgroupZmathry   )rª   Úcolr«   Úframer­   r§   r¤   r©   r¥   r¨   r¦   )r  r  r  r   rF  r!  r"  Zdialogr#  r+   r$  r%  r&  r'  r(  r)  r*  r3  r+  r,  r-  r.  r2  r/  r0  r1  r(   )r6  r7  r5  )r8  r9  r:  r;  r<  r=  r>  rE  r?  r@  rA  rB  rC  rD  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å   rÂ   ræ   r)   r*   rK   ¥  s‚    þüÿÿþ×-
ýÿòz'getPhases.<locals>.InBodyPhase.__init__c                 S   s$   |j |j ko"|j|jko"|j|jkS r.   )r@   rj   rk   )rC   Znode1Znode2r)   r)   r*   ÚisMatchingFormattingElementì  s
    
ÿ
þz:getPhases.<locals>.InBodyPhase.isMatchingFormattingElementc                 S   sˆ   | j  |¡ | j jd }g }| j jd d d… D ](}|tkr@ qXq.|  ||¡r.| |¡ q.t|ƒdkrv| j j |d ¡ | j j |¡ d S )Nrv   é   )	r>   r´   r~   ÚactiveFormattingElementsr   r~  rŠ   r   r  )rC   rŒ   rn   ZmatchingElementsr±   r)   r)   r*   ÚaddFormattingElementò  s    z3getPhases.<locals>.InBodyPhase.addFormattingElementc                 S   s>   t dƒ}| jjd d d… D ]}|j|kr| j d¡  q:qd S )N)r6  r7  r5  r(   r§   r¤   r©   r¥   r¨   r¦   r®   r°   rv   z expected-closing-tag-but-got-eof)rƒ   r>   r~   r@   rL   r   )rC   Zallowed_elementsr±   r)   r)   r*   r‹     s
    
z)getPhases.<locals>.InBodyPhase.processEOFc                 S   sf   |d }| j | _| d¡rH| jjd jdkrH| jjd  ¡ sH|dd … }|rb| j ¡  | j |¡ d S )Nrw   Ú
rv   )r2  r3  rP  r   )	rW  r…   r¼   r>   r~   r@   Z
hasContentÚ#reconstructActiveFormattingElementsrÉ   )rC   rŒ   rw   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 )Nrw   ú 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   rc   Úanyr   r)   r)   r*   r„     s    
ÿÿz0getPhases.<locals>.InBodyPhase.processCharactersc                 S   s   | j  ¡  | j  |d ¡ d S rÇ   )r>   rƒ  rÉ   r   r)   r)   r*   rW  &  s    
z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec                 S   s   | j jd  |¡S r  rê   r   r)   r)   r*   rX  *  s    z4getPhases.<locals>.InBodyPhase.startTagProcessInHeadc                 S   s|   | j  dddi¡ t| jjƒdksx| jjd jdkr6nBd| j _|d  ¡ D ],\}}|| jjd jkrJ|| jjd j|< qJd S )Nr  r@   r®   r   Frw   )	rL   r   r   r>   r~   r@   rc   r/   rk   rÌ   r)   r)   r*   r  -  s    ÿz+getPhases.<locals>.InBodyPhase.startTagBodyc                 S   sª   | j  dddi¡ t| jjƒdks¦| jjd jdkr6np| j js@nf| jjd jrj| jjd j | jjd ¡ | jjd jdkrŠ| jj 	¡  qj| j 
|¡ | j jd | j _d S )	Nr  r@   r¯   r   r®   rv   r°   r¡   )rL   r   r   r>   r~   r@   rc   ÚparentÚremoveChildr  r´   rI   r`   r   r)   r)   r*   r  8  s    "z/getPhases.<locals>.InBodyPhase.startTagFramesetc                 S   s.   | j jdddr|  tdƒ¡ | j  |¡ d S ©Nr(   rF  ©Úvariant)r>   ÚelementInScopery  rÚ   r´   r   r)   r)   r*   rY  F  s    z-getPhases.<locals>.InBodyPhase.startTagClosePc                 S   s>   | j jdddr|  tdƒ¡ | j  |¡ d| j_| j| _d S )Nr(   rF  r  F)	r>   r  ry  rÚ   r´   rL   rc   r„  r…   r   r)   r)   r*   r[  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 )Nr  r@   r4  r(   rF  r  rv   )	r>   ÚformPointerrL   r   r  ry  rÚ   r´   r~   r   r)   r)   r*   r\  R  s    z+getPhases.<locals>.InBodyPhase.startTagFormc                 S   s¬   d| j _dgddgddgdœ}||d  }t| jjƒD ]@}|j|kr^| j j t|jdƒ¡  qx|j	t
kr6|jdkr6 qxq6| jjd	d
drœ| j j td	dƒ¡ | j |¡ d S )NFr5  r7  r6  )r5  r7  r6  r@   rs   )r  r+   r(   r(   rF  r  )rL   rc   Úreversedr>   r~   r@   r`   r‡   rÚ   Ú	nameTupler   r  r´   )rC   rŒ   ZstopNamesMapZ	stopNamesr±   r)   r)   r*   r]  [  s*    þ

ÿ
ÿÿz/getPhases.<locals>.InBodyPhase.startTagListItemc                 S   s>   | j jdddr|  tdƒ¡ | j  |¡ | jjj| jj_d S rŒ  )	r>   r  ry  rÚ   r´   rL   rO   r_   r]   r   r)   r)   r*   r^  q  s    z0getPhases.<locals>.InBodyPhase.startTagPlaintextc                 S   sb   | j jdddr|  tdƒ¡ | j jd jtkrR| j dd|d i¡ | j j 	¡  | j  
|¡ d S )Nr(   rF  r  rv   r  r@   )r>   r  ry  rÚ   r~   r@   r   rL   r   r  r´   r   r)   r)   r*   rZ  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 )Nr8  ú$unexpected-start-tag-implies-end-tag©Z	startNameZendName)r>   Ú!elementInActiveFormattingElementsrL   r   r|  rÚ   r~   r  r€  rƒ  r  )rC   rŒ   ZafeAElementr)   r)   r*   r_    s    ÿ
z(getPhases.<locals>.InBodyPhase.startTagAc                 S   s   | j  ¡  |  |¡ d S r.   )r>   rƒ  r  r   r)   r)   r*   r`  Œ  s    
z1getPhases.<locals>.InBodyPhase.startTagFormattingc                 S   sP   | j  ¡  | j  d¡rB| j ddddœ¡ |  tdƒ¡ | j  ¡  |  |¡ d S )NrE  r“  r”  )r>   rƒ  r  rL   r   r‡   rÚ   r  r   r)   r)   r*   ra    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 )NrF  r“  r”  F)	r>   r  rL   r   r‡   rÚ   rƒ  r´   rc   r   r)   r)   r*   rb  š  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   rc   r   r)   r)   r*   rc  ¥  s    
z:getPhases.<locals>.InBodyPhase.startTagAppletMarqueeObjectc                 S   sB   | j jdddr|  tdƒ¡ | j  ¡  d| j_| j |d¡ d S )Nr(   rF  r  Fr²   )r>   r  ry  rÚ   rƒ  rL   rc   r¶   r   r)   r)   r*   rd  «  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(   rF  r  FrŸ   )
rL   rZ   r>   r  r‡   rÚ   r´   rc   rI   r`   r   r)   r)   r*   re  ²  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   rc   r   r)   r)   r*   rf  º  s
    
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc                 S   s@   | j j}|  |¡ d|d kr<|d d  t¡dkr<|| j _d S )Nr3   rw   Úhidden)rL   rc   rf  rl   r   )rC   rŒ   rc   r)   r)   r*   rh  Á  s    
ÿz,getPhases.<locals>.InBodyPhase.startTagInputc                 S   s$   | j  |¡ | j j ¡  d|d< d S r  r  r   r)   r)   r*   rg  É  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(   rF  r  Tr|   F)	r>   r  ry  rÚ   r´   r~   r  rL   rc   r   r)   r)   r*   ri  Î  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-asrN  rI  ©ZoriginalNameZnewNamerr   rw   r{   ©rk   r{   )rL   r   r†   rÚ   r   r)   r)   r*   rj  Ö  s    ÿ
þz,getPhases.<locals>.InBodyPhase.startTagImagec                 S   s  | j  dddi¡ | jjrd S i }d|d kr>|d d |d< |  tdd|d¡ |  td	dƒ¡ |  td
dƒ¡ d|d krŒ|d d }nd}|  td |dœ¡ |d  ¡ }d|kr¾|d= d|krÌ|d= d|d< |  tdd||d d¡ |  	td
ƒ¡ |  td	dƒ¡ |  	tdƒ¡ d S )Nzdeprecated-tagr@   rO  Úactionrw   r4  rr   )rk   rM  ZlabelÚpromptz3This is a searchable index. Enter search keywords: rq   ©r3   rw   rL  r{   r™  )
rL   r   r>   r  r†   rÚ   r„   r   Úcopyr‡   )rC   rŒ   Z
form_attrsr›  rk   r)   r)   r*   rk  Þ  s<    
ÿÿ
þz.getPhases.<locals>.InBodyPhase.startTagIsIndexc                 S   s0   | j  |¡ | jjj| jj_| j| _d| j_d S r–  )	r>   r´   rL   rO   r\   r]   r„  r…   rc   r   r)   r)   r*   rl  ý  s    z/getPhases.<locals>.InBodyPhase.startTagTextareac                 S   s   d| j _|  |¡ d S r–  )rL   rc   rn  r   r)   r)   r*   rm    s    z-getPhases.<locals>.InBodyPhase.startTagIFramec                 S   s"   | j jr|  |¡ n
|  |¡ d S r.   )rL   rN   rn  râ   r   r)   r)   r*   rú     s    z/getPhases.<locals>.InBodyPhase.startTagNoscriptc                 S   s   | j  |d¡ dS )z8iframe, noembed noframes, noscript(if scripting enabled)r²   Nr  r   r)   r)   r*   rn    s    z.getPhases.<locals>.InBodyPhase.startTagRawtextc                 S   s@   | j jd jdkr$| jj tdƒ¡ | j  ¡  | jj  |¡ d S ©Nrv   rS  )	r>   r~   r@   rL   r`   r‡   rÚ   rƒ  r´   r   r)   r)   r*   rq    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   rc   r`   rI   r   r)   r)   r*   ro    s    





ûz-getPhases.<locals>.InBodyPhase.startTagSelectc                 S   sB   | j  d¡r2| j  ¡  | j jd jdkr2| j ¡  | j  |¡ d S )NÚrubyrv   )r>   r  ÚgenerateImpliedEndTagsr~   r@   rL   r   r´   r   r)   r)   r*   rp  %  s
    

z+getPhases.<locals>.InBodyPhase.startTagRpRtc                 S   sZ   | j  ¡  | j |¡ | j |¡ td |d< | j  |¡ |d rV| j j ¡  d|d< d S )Nrh   rj   r{   Tr|   )	r>   rƒ  rL   r   r   r   r´   r~   r  r   r)   r)   r*   rr  ,  s    
z+getPhases.<locals>.InBodyPhase.startTagMathc                 S   sZ   | j  ¡  | j |¡ | j |¡ td |d< | j  |¡ |d rV| j j ¡  d|d< d S )Nry   rj   r{   Tr|   )	r>   rƒ  rL   r   r   r   r´   r~   r  r   r)   r)   r*   rs  8  s    
z*getPhases.<locals>.InBodyPhase.startTagSvgc                 S   s   | j  dd|d i¡ dS )a5   Elements that should be children of other elements that have a
            different insertion mode; here they are ignored
            "caption", "col", "colgroup", "frame", "frameset", "head",
            "option", "optgroup", "tbody", "td", "tfoot", "th", "thead",
            "tr", "noscript"
            zunexpected-start-tag-ignoredr@   NrÆ   r   r)   r)   r*   rt  D  s    z0getPhases.<locals>.InBodyPhase.startTagMisplacedc                 S   s   | j  ¡  | j  |¡ d S r.   )r>   rƒ  r´   r   r)   r)   r*   râ   M  s    
z,getPhases.<locals>.InBodyPhase.startTagOtherc                 S   sœ   | j jdddsD|  tddƒ¡ | j dddi¡ |  tddƒ¡ nT| j  d¡ | j jd j	dkrt| j dddi¡ | j j 
¡ }|j	dkr˜| j j 
¡ }q€d S )	Nr(   rF  r  rr   r  r@   rs   rv   )r>   r  rY  rÚ   rL   r   ry  r¡  r~   r@   r  r  r)   r)   r*   ry  Q  s    
z&getPhases.<locals>.InBodyPhase.endTagPc                 S   s~   | j  d¡s| j ¡  d S | j jd jdkrj| j jdd … D ],}|jtdƒkr<| j dd|jdœ¡  qjq<| jjd | j_d S )Nr®   rv   é   )r6  r7  r5  rT  rS  r(   rQ  rR  r§   r¤   r©   r¥   r¨   r¦   r®   r°   ú$expected-one-end-tag-but-got-another©ZgotNameZexpectedNameÚ	afterBody)	r>   r  rL   r   r~   r@   rƒ   rI   r`   r  r)   r)   r*   ru  ^  s    

þz)getPhases.<locals>.InBodyPhase.endTagBodyc                 S   s"   | j  d¡r|  tdƒ¡ |S d S )Nr®   )r>   r  ru  rÚ   r   r)   r)   r*   rv  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 	¡ }|j|d krŠ| jj 	¡ }qnd S )Nr@   r2  rv   úend-tag-too-early)
rW  r…   r>   r  r¡  r~   r@   rL   r   r  )rC   rŒ   ZinScoper±   r)   r)   r*   rw  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 )Nr  r@   r4  rv   zend-tag-too-early-ignored)r>   r  r  rL   r   r¡  r~   r  r  r)   r)   r*   rx  „  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¡ nf| j j|d d | j jd j|d kr€| j dd|d i¡ | j j ¡ }|j|d kr¨| j j ¡ }qŒd S )	Nr@   r5  Úlistr  r  ©Úexcluderv   r¦  )r>   r  rL   r   r¡  r~   r@   r  )rC   rŒ   rŽ  r±   r)   r)   r*   rz  ‘  s    
þz-getPhases.<locals>.InBodyPhase.endTagListItemc                 S   s’   t D ]}| j |¡r| j ¡   q$q| jjd j|d krP| j dd|d i¡ t D ]8}| j |¡rT| jj ¡ }|jt krˆ| jj ¡ }qp qŽqTd S )Nrv   r@   r¦  )	r   r>   r  r¡  r~   r@   rL   r   r  )rC   rŒ   Úitemr)   r)   r*   r{  ¢  s    

z,getPhases.<locals>.InBodyPhase.endTagHeadingc                 S   s  d}|dk r
|d7 }| j  |d ¡}|rD|| j jkrR| j  |j¡sR|  |¡ 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}| j j|d… D ]}|jtkrö|} qqö|dkrR| j j ¡ }||kr@| j j ¡ }q&| j j 	|¡ dS | j j|d  }| j j 
|¡}| }	}
d}| j j 
|
¡}|d
k rX|d7 }|d8 }| j j| }
|
| j jkrÐ| j j 	|
¡ qŠ|
|krÞqX|	|krú| j j 
|
¡d }|
 ¡ }|| j j| j j 
|
¡< || j j| j j 
|
¡< |}
|	jrF|	j |	¡ |
 |	¡ |
}	qŠ|	jrl|	j |	¡ |jtdƒkr˜| j  ¡ \}}| |	|¡ n
| |	¡ | ¡ }| |¡ | |¡ | j j 	|¡ | j j ||¡ | j j 	|¡ | j j | j j 
|¡d |¡ qdS )z)The much-feared adoption agency algorithmr   é   r   r@   Nzadoption-agency-1.2zadoption-agency-4.4rv   zadoption-agency-1.3r  ©r¬   r§   r©   r¨   r¦   )r>   r•  r~   r  r@   rå   rL   r   r€  r  Úindexr’  r   r  Z	cloneNoderŠ  r‹  ZappendChildrƒ   ZgetTableMisnestedNodePositionÚinsertBeforeZreparentChildrenÚinsert)rC   rŒ   ZouterLoopCounterZformattingElementZafeIndexZfurthestBlockrn   ZcommonAncestorZbookmarkZlastNoder±   ZinnerLoopCounterr­  Z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 ¡ }|j|d kr~| j j ¡ }qb| j  ¡  d S )Nr@   rv   r¦  )	r>   r  r¡  r~   r@   rL   r   r  ÚclearActiveFormattingElements)rC   rŒ   rn   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 elementr˜  rr   )rL   r   r>   rƒ  r´   rÚ   r~   r  r   r)   r)   r*   r  `  s    ÿ
z'getPhases.<locals>.InBodyPhase.endTagBrc                 S   s¤   | j jd d d… D ]Œ}|j|d krz| j j|d d | j jd j|d krb| j dd|d i¡ | j j ¡ |krtqb q q|jtkr| j dd|d i¡  q qd S )Nrv   r@   r¨  r  )	r>   r~   r@   r¡  rL   r   r  r’  r   r  r)   r)   r*   rå   g  s    
z*getPhases.<locals>.InBodyPhase.endTagOtherN)6r9   r:   r;   rK   r~  r  r‹   r„  r„   rW  rX  r  r  rY  r[  r\  r]  r^  rZ  r_  r`  ra  rb  rc  rd  re  rf  rh  rg  ri  rj  rk  rl  rm  rú   rn  rq  ro  rp  rr  rs  rt  râ   ry  ru  rv  rw  rx  rz  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å   rÂ   ræ   r)   r*   rK   v  s    
ÿz%getPhases.<locals>.TextPhase.__init__c                 S   s   | j  |d ¡ d S rÇ   rÈ   r   r)   r)   r*   r„   ~  s    z.getPhases.<locals>.TextPhase.processCharactersc                 S   s8   | j  dd| jjd ji¡ | jj ¡  | j j| j _dS )Nz&expected-named-closing-tag-but-got-eofr@   rv   T)rL   r   r>   r~   r@   r  rµ   r`   rB   r)   r)   r*   r‹     s    ÿz'getPhases.<locals>.TextPhase.processEOFc                 S   s   d S r.   r)   r   r)   r)   r*   râ   ˆ  s    z*getPhases.<locals>.TextPhase.startTagOtherc                 S   s   | j j ¡ }| jj| j_d S r.   ©r>   r~   r  rL   rµ   r`   r  r)   r)   r*   r²  ‹  s    z)getPhases.<locals>.TextPhase.endTagScriptc                 S   s   | j j ¡  | jj| j_d S r.   r³  r   r)   r)   r*   rå   ’  s    z(getPhases.<locals>.TextPhase.endTagOtherN)	r9   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«   rU  ©r§   r©   r¨   )r¤   r¥   r¦   r¬   )rð   rò   rL  r4  )r®   rª   rU  r«   r°   r§   r¤   r©   r¥   r¨   r¦   )rK   r   rà   rÎ   ÚstartTagCaptionÚstartTagColgroupÚstartTagColÚstartTagRowGroupÚstartTagImplyTbodyre  ÚstartTagStyleScriptrh  r\  rË   râ   rã   ÚendTagTableÚendTagIgnorerÏ   rå   rÂ   ræ   r)   r*   rK   ˜  s*    ö
ÿþz(getPhases.<locals>.InTablePhase.__init__c                 S   s$   | j jd jdkr | j j ¡  q d S )Nrv   )r¬   r°   ©r>   r~   r@   r  rB   r)   r)   r*   ÚclearStackToTableContext°  s    z8getPhases.<locals>.InTablePhase.clearStackToTableContextc                 S   s$   | j jd jdkr | j d¡ n d S )Nrv   r°   zeof-in-table©r>   r~   r@   rL   r   rB   r)   r)   r*   r‹   ¹  s    z*getPhases.<locals>.InTablePhase.processEOFc                 S   s4   | j j}| j jd | j _|| j j_| j j |¡ d S ©NÚinTableText)rL   r`   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 rÁ  )rL   r`   rI   rµ   r„   rÃ  r)   r)   r*   r„   Æ  s    
z1getPhases.<locals>.InTablePhase.processCharactersc                 S   s&   d| j _| jjd  |¡ d| j _d S )NTr    F)r>   ÚinsertFromTablerL   rI   r„   r   r)   r)   r*   rÉ   Ì  s    z*getPhases.<locals>.InTablePhase.insertTextc                 S   s6   |   ¡  | jj t¡ | j |¡ | jjd | j_d S )Nr   )	r¿  r>   r€  rŠ   r   r´   rL   rI   r`   r   r)   r)   r*   r¶  Ó  s    z/getPhases.<locals>.InTablePhase.startTagCaptionc                 S   s(   |   ¡  | j |¡ | jjd | j_d S )Nrž   ©r¿  r>   r´   rL   rI   r`   r   r)   r)   r*   r·  Ù  s    z0getPhases.<locals>.InTablePhase.startTagColgroupc                 S   s   |   tddƒ¡ |S )Nr«   rr   )r·  rÚ   r   r)   r)   r*   r¸  Þ  s    z+getPhases.<locals>.InTablePhase.startTagColc                 S   s(   |   ¡  | j |¡ | jjd | j_d S ©Nrœ   rÅ  r   r)   r)   r*   r¹  â  s    z0getPhases.<locals>.InTablePhase.startTagRowGroupc                 S   s   |   tddƒ¡ |S )Nr§   rr   )r¹  rÚ   r   r)   r)   r*   rº  ç  s    z2getPhases.<locals>.InTablePhase.startTagImplyTbodyc                 S   s6   | j  ddddœ¡ | j j tdƒ¡ | j js2|S d S )Nr“  r¬   r”  )rL   r   r`   r‡   rÚ   rS   r   r)   r)   r*   re  ë  s    ÿz-getPhases.<locals>.InTablePhase.startTagTablec                 S   s   | j jd  |¡S r  rê   r   r)   r)   r*   r»  ò  s    z3getPhases.<locals>.InTablePhase.startTagStyleScriptc                 S   sV   d|d krH|d d   t¡dkrH| j d¡ | j |¡ | jj ¡  n
|  |¡ d S )Nr3   rw   r—  z unexpected-hidden-input-in-table)	rl   r   rL   r   r>   r´   r~   r  râ   r   r)   r)   r*   rh  õ  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-tablerv   )rL   r   r>   r  r´   r~   r  r   r)   r)   r*   r\  ÿ  s
    z,getPhases.<locals>.InTablePhase.startTagFormc                 S   s<   | j  dd|d i¡ d| j_| j jd  |¡ d| j_d S )Nz)unexpected-start-tag-implies-table-voodoor@   Tr    F)rL   r   r>   rÄ  rI   r†   r   r)   r)   r*   râ     s    z-getPhases.<locals>.InTablePhase.startTagOtherc                 S   s   | j jdddr‚| j  ¡  | j jd jdkrJ| j dd| j jd jdœ¡ | j jd jdkrj| j j ¡  qJ| j j ¡  | j ¡  n
| j ¡  d S )Nr¬   r  rv   zend-tag-too-early-namedr¤  )	r>   r  r¡  r~   r@   rL   r   r  rb   r   r)   r)   r*   r¼    s    
ÿÿz+getPhases.<locals>.InTablePhase.endTagTablec                 S   s   | j  dd|d i¡ d S r  rÆ   r   r)   r)   r*   r½    s    z,getPhases.<locals>.InTablePhase.endTagIgnorec                 S   s<   | j  dd|d i¡ d| j_| j jd  |¡ d| j_d S )Nz'unexpected-end-tag-implies-table-voodoor@   Tr    F)rL   r   r>   rÄ  rI   r‡   r   r)   r)   r*   rå      s    z+getPhases.<locals>.InTablePhase.endTagOtherN)r9   r:   r;   rK   r¿  r‹   r…   r„   rÉ   r¶  r·  r¸  r¹  rº  re  r»  rh  r\  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 r.   )rK   rµ   ÚcharacterTokensrÂ   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 )rw   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*   rD   /  s     rq   rœ  rŸ   )ÚjoinrÈ  r‰  r   rL   rI   rÉ   r>   )rC   rw   rŒ   r)   r)   r*   ÚflushCharacters-  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc                 S   s   |   ¡  | j| j_|S r.   ©rË  rµ   rL   r`   r   r)   r)   r*   rˆ   6  s    
z2getPhases.<locals>.InTableTextPhase.processCommentc                 S   s   |   ¡  | j| j_dS rÛ   rÌ  rB   r)   r)   r*   r‹   ;  s    
z.getPhases.<locals>.InTableTextPhase.processEOFc                 S   s    |d dkrd S | j  |¡ d S ©Nrw   r…  ©rÈ  rŠ   r   r)   r)   r*   r„   @  s    z5getPhases.<locals>.InTableTextPhase.processCharactersc                 S   s   | j  |¡ d S r.   rÎ  r   r)   r)   r*   r…   E  s    z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc                 S   s   |   ¡  | j| j_|S r.   rÌ  r   r)   r)   r*   r†   J  s    
z3getPhases.<locals>.InTableTextPhase.processStartTagc                 S   s   |   ¡  | j| j_|S r.   rÌ  r   r)   r)   r*   r‡   O  s    
z1getPhases.<locals>.InTableTextPhase.processEndTagN)r9   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ª   rU  r«   r§   r¤   r©   r¥   r¨   r¦   rª   r¬   )
r®   rU  r«   r°   r§   r¤   r©   r¥   r¨   r¦   )rK   r   rà   rÎ   ÚstartTagTableElementrË   râ   rã   ÚendTagCaptionr¼  r½  rÏ   rå   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  rB   r)   r)   r*   ÚignoreEndTagCaptionh  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc                 S   s   | j jd  ¡  d S ré   ©rL   rI   r‹   rB   r)   r)   r*   r‹   k  s    z,getPhases.<locals>.InCaptionPhase.processEOFc                 S   s   | j jd  |¡S ré   ©rL   rI   r„   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Ô  r`   r‡   rÚ   ©rC   rŒ   ÚignoreEndTagr)   r)   r*   rÑ  q  s
    
z6getPhases.<locals>.InCaptionPhase.startTagTableElementc                 S   s   | j jd  |¡S ré   rê   r   r)   r)   r*   râ   y  s    z/getPhases.<locals>.InCaptionPhase.startTagOtherc                 S   s˜   |   ¡ sŠ| j ¡  | jjd jdkrB| j dd| jjd jdœ¡ | jjd jdkrb| jj ¡  qB| jj ¡  | j ¡  | jj	d | j_
n
| j ¡  d S )Nrv   rª   r£  r¤  rŸ   )rÔ  r>   r¡  r~   r@   rL   r   r  r°  rI   r`   r   r)   r)   r*   rÒ  |  s    
ÿÿ
z/getPhases.<locals>.InCaptionPhase.endTagCaptionc                 S   s0   | j  ¡  |  ¡ }| j j tdƒ¡ |s,|S d S r×  rØ  rÙ  r)   r)   r*   r¼  Ž  s
    
z-getPhases.<locals>.InCaptionPhase.endTagTablec                 S   s   | j  dd|d i¡ d S r  rÆ   r   r)   r)   r*   r½  •  s    z.getPhases.<locals>.InCaptionPhase.endTagIgnorec                 S   s   | j jd  |¡S ré   ©rL   rI   r‡   r   r)   r)   r*   rå   ˜  s    z-getPhases.<locals>.InCaptionPhase.endTagOtherN)r9   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°   rU  r«   )rK   r   rà   rÎ   r¸  rË   râ   rã   ÚendTagColgroupÚ	endTagColrÏ   rå   rÂ   ræ   r)   r*   rK   ž  s    þ
þz.getPhases.<locals>.InColumnGroupPhase.__init__c                 S   s   | j jd jdkS )Nrv   r°   )r>   r~   r@   rB   r)   r)   r*   ÚignoreEndTagColgroup­  s    z:getPhases.<locals>.InColumnGroupPhase.ignoreEndTagColgroupc                 S   s8   | j jd jdkrd S |  ¡ }|  tdƒ¡ |s4dS d S )Nrv   r°   r«   T)r>   r~   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Ú   rÙ  r)   r)   r*   r„   º  s    z7getPhases.<locals>.InColumnGroupPhase.processCharactersc                 S   s$   | j  |¡ | j j ¡  d|d< d S r  r  r   r)   r)   r*   r¸  À  s    z1getPhases.<locals>.InColumnGroupPhase.startTagColc                 S   s"   |   ¡ }|  tdƒ¡ |s|S d S rà  rá  rÙ  r)   r)   r*   râ   Å  s    z3getPhases.<locals>.InColumnGroupPhase.startTagOtherc                 S   s4   |   ¡ r| j ¡  n| jj ¡  | jjd | j_d S ©NrŸ   )rß  rL   r   r>   r~   r  rI   r`   r   r)   r)   r*   rÝ  Ë  s    z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc                 S   s   | j  dddi¡ d S )Nz
no-end-tagr@   rU  rÆ   r   r)   r)   r*   rÞ  Ô  s    z/getPhases.<locals>.InColumnGroupPhase.endTagColc                 S   s"   |   ¡ }|  tdƒ¡ |s|S d S rà  rá  rÙ  r)   r)   r*   rå   ×  s    z1getPhases.<locals>.InColumnGroupPhase.endTagOtherN)r9   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ª   rU  r«   r§   r©   r¨   rµ  r¬   )r®   rª   rU  r«   r°   r¤   r¥   r¦   )rK   r   rà   rÎ   Ú
startTagTrÚstartTagTableCellÚstartTagTableOtherrË   râ   rã   ÚendTagTableRowGroupr¼  r½  rÏ   rå   rÂ   ræ   r)   r*   rK   ß  s$    ÿü
ÿýz,getPhases.<locals>.InTableBodyPhase.__init__c                 S   s6   | j jd jdkr | j j ¡  q | j jd jdkr2d S )Nrv   )r§   r©   r¨   r°   r°   r¾  rB   r)   r)   r*   ÚclearStackToTableBodyContextó  s    z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc                 S   s   | j jd  ¡  d S râ  rÕ  rB   r)   r)   r*   r‹   ý  s    z.getPhases.<locals>.InTableBodyPhase.processEOFc                 S   s   | j jd  |¡S râ  r  r   r)   r)   r*   r…      s    z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc                 S   s   | j jd  |¡S râ  rÖ  r   r)   r)   r*   r„     s    z5getPhases.<locals>.InTableBodyPhase.processCharactersc                 S   s(   |   ¡  | j |¡ | jjd | j_d S )Nr›   )ré  r>   r´   rL   rI   r`   r   r)   r)   r*   rå    s    z.getPhases.<locals>.InTableBodyPhase.startTagTrc                 S   s*   | j  dd|d i¡ |  tddƒ¡ |S )Nzunexpected-cell-in-table-bodyr@   r¦   rr   )rL   r   rå  rÚ   r   r)   r)   r*   ræ    s
    
ÿz5getPhases.<locals>.InTableBodyPhase.startTagTableCellc                 S   sb   | 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 ¡  d S ©Nr§   r¬   r  r¨   r©   rv   ©	r>   r  ré  rè  rÚ   r~   r@   rL   r   r   r)   r)   r*   rç    s    ÿþÿz6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc                 S   s   | j jd  |¡S râ  rê   r   r)   r)   r*   râ     s    z1getPhases.<locals>.InTableBodyPhase.startTagOtherc                 S   sT   | j j|d ddr:|  ¡  | j j ¡  | jjd | j_n| j dd|d i¡ d S )Nr@   r¬   r  rŸ   ú unexpected-end-tag-in-table-body)	r>   r  ré  r~   r  rL   rI   r`   r   r   r)   r)   r*   rè  "  s    
ÿz7getPhases.<locals>.InTableBodyPhase.endTagTableRowGroupc                 S   sb   | 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 ¡  d S rê  rë  r   r)   r)   r*   r¼  +  s    ÿþÿz/getPhases.<locals>.InTableBodyPhase.endTagTablec                 S   s   | j  dd|d i¡ d S )Nrì  r@   rÆ   r   r)   r)   r*   r½  8  s    
ÿz0getPhases.<locals>.InTableBodyPhase.endTagIgnorec                 S   s   | j jd  |¡S râ  rÛ  r   r)   r)   r*   rå   <  s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherN)r9   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ª   rU  r«   r§   r©   r¨   r¦   r¦   r¬   rµ  )r®   rª   rU  r«   r°   r¤   r¥   )rK   r   rà   rÎ   ræ  rç  rË   râ   rã   ÚendTagTrr¼  rè  r½  rÏ   rå   rÂ   ræ   r)   r*   rK   A  s$    ÿý
ÿüz&getPhases.<locals>.InRowPhase.__init__c                 S   s@   | j jd jdkr<| j dd| j jd ji¡ | j j ¡  q d S )Nrv   )r¦   r°   z'unexpected-implied-end-tag-in-table-rowr@   )r>   r~   r@   rL   r   r  rB   r)   r)   r*   ÚclearStackToTableRowContextU  s
    ÿz9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc                 S   s   | j jddd S )Nr¦   r¬   r  rÓ  rB   r)   r)   r*   ÚignoreEndTagTr[  s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc                 S   s   | j jd  ¡  d S râ  rÕ  rB   r)   r)   r*   r‹   _  s    z(getPhases.<locals>.InRowPhase.processEOFc                 S   s   | j jd  |¡S râ  r  r   r)   r)   r*   r…   b  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc                 S   s   | j jd  |¡S râ  rÖ  r   r)   r)   r*   r„   e  s    z/getPhases.<locals>.InRowPhase.processCharactersc                 S   s6   |   ¡  | j |¡ | jjd | j_| jj t¡ d S )Nrš   )	rï  r>   r´   rL   rI   r`   r€  rŠ   r   r   r)   r)   r*   ræ  h  s    z/getPhases.<locals>.InRowPhase.startTagTableCellc                 S   s"   |   ¡ }|  tdƒ¡ |s|S d S ©Nr¦   ©rð  rî  rÚ   rÙ  r)   r)   r*   rç  n  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc                 S   s   | j jd  |¡S râ  rê   r   r)   r)   r*   râ   u  s    z+getPhases.<locals>.InRowPhase.startTagOtherc                 S   s<   |   ¡ s.|  ¡  | jj ¡  | jjd | j_n
| j ¡  d S rÆ  )	rð  rï  r>   r~   r  rL   rI   r`   r   r   r)   r)   r*   rî  x  s
    z&getPhases.<locals>.InRowPhase.endTagTrc                 S   s"   |   ¡ }|  tdƒ¡ |s|S d S rñ  rò  rÙ  r)   r)   r*   r¼  ‚  s    z)getPhases.<locals>.InRowPhase.endTagTablec                 S   s4   | j j|d ddr&|  tdƒ¡ |S | j ¡  d S )Nr@   r¬   r  r¦   )r>   r  rî  rÚ   rL   r   r   r)   r)   r*   rè  Š  s    z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc                 S   s   | j  dd|d i¡ d S )Nzunexpected-end-tag-in-table-rowr@   rÆ   r   r)   r)   r*   r½  ‘  s    
ÿz*getPhases.<locals>.InRowPhase.endTagIgnorec                 S   s   | j jd  |¡S râ  rÛ  r   r)   r)   r*   rå   •  s    z)getPhases.<locals>.InRowPhase.endTagOtherN)r9   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Ð  rä  )r®   rª   rU  r«   r°   r¬  )rK   r   rà   rÎ   rç  rË   râ   rã   ÚendTagTableCellr½  ÚendTagImplyrÏ   rå   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Ú   rB   r)   r)   r*   Ú	closeCell«  s    z(getPhases.<locals>.InCellPhase.closeCellc                 S   s   | j jd  ¡  d S ré   rÕ  rB   r)   r)   r*   r‹   ²  s    z)getPhases.<locals>.InCellPhase.processEOFc                 S   s   | j jd  |¡S ré   rÖ  r   r)   r)   r*   r„   µ  s    z0getPhases.<locals>.InCellPhase.processCharactersc                 S   s:   | j jddds | j jdddr,|  ¡  |S | j ¡  d S rö  ©r>   r  r÷  rL   r   r   r)   r)   r*   rç  ¸  s    ÿz1getPhases.<locals>.InCellPhase.startTagTableOtherc                 S   s   | j jd  |¡S ré   rê   r   r)   r)   r*   râ   Â  s    z,getPhases.<locals>.InCellPhase.startTagOtherc                 S   s²   | j j|d ddr˜| j  |d ¡ | j jd j|d krp| j dd|d i¡ | j j ¡ }|j|d krPq|qPn| j j ¡  | j  ¡  | jj	d | j_
n| j dd|d i¡ d S )Nr@   r¬   r  rv   zunexpected-cell-end-tagr›   r  )r>   r  r¡  r~   r@   rL   r   r  r°  rI   r`   r  r)   r)   r*   rô  Å  s    
ÿ
z.getPhases.<locals>.InCellPhase.endTagTableCellc                 S   s   | j  dd|d i¡ d S r  rÆ   r   r)   r)   r*   r½  Ö  s    z+getPhases.<locals>.InCellPhase.endTagIgnorec                 S   s.   | j j|d ddr |  ¡  |S | j ¡  d S )Nr@   r¬   r  rø  r   r)   r)   r*   rõ  Ù  s    z*getPhases.<locals>.InCellPhase.endTagImplyc                 S   s   | j jd  |¡S ré   rÛ  r   r)   r)   r*   rå   á  s    z*getPhases.<locals>.InCellPhase.endTagOtherN)r9   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°   rS  rT  r£   )rL  rJ  rP  rò   )rK   r   rà   rÎ   ÚstartTagOptionÚstartTagOptgroupro  rh  rû   rË   râ   rã   ÚendTagOptionÚendTagOptgroupÚendTagSelectrÏ   rå   rÂ   ræ   r)   r*   rK   å  s     ú
ýz)getPhases.<locals>.InSelectPhase.__init__c                 S   s$   | j jd jdkr | j d¡ n d S )Nrv   r°   zeof-in-selectrÀ  rB   r)   r)   r*   r‹   ú  s    z+getPhases.<locals>.InSelectPhase.processEOFc                 S   s$   |d dkrd S | j  |d ¡ d S rÍ  rÈ   r   r)   r)   r*   r„    	  s    z2getPhases.<locals>.InSelectPhase.processCharactersc                 S   s.   | j jd jdkr| j j ¡  | j  |¡ d S rž  ©r>   r~   r@   r  r´   r   r)   r)   r*   rú  	  s    z/getPhases.<locals>.InSelectPhase.startTagOptionc                 S   sL   | j jd jdkr| j j ¡  | j jd jdkr<| j j ¡  | j  |¡ d S )Nrv   rS  rT  rÿ  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Ú   r   r)   r)   r*   ro  	  s    z/getPhases.<locals>.InSelectPhase.startTagSelectc                 S   s2   | j  d¡ | jjdddr.|  tdƒ¡ |S d S )Nzunexpected-input-in-selectr£   r  )rL   r   r>   r  rþ  rÚ   r   r)   r)   r*   rh  	  s
    z.getPhases.<locals>.InSelectPhase.startTagInputc                 S   s   | j jd  |¡S r  rê   r   r)   r)   r*   rû   	  s    z/getPhases.<locals>.InSelectPhase.startTagScriptc                 S   s   | j  dd|d i¡ d S )Nzunexpected-start-tag-in-selectr@   rÆ   r   r)   r)   r*   râ   !	  s    
ÿz.getPhases.<locals>.InSelectPhase.startTagOtherc                 S   s6   | j jd jdkr | j j ¡  n| j dddi¡ d S )Nrv   rS  úunexpected-end-tag-in-selectr@   ©r>   r~   r@   r  rL   r   r   r)   r)   r*   rü  %	  s
    ÿz-getPhases.<locals>.InSelectPhase.endTagOptionc                 S   sf   | j jd jdkr0| j jd jdkr0| j j ¡  | j jd jdkrP| j j ¡  n| j dddi¡ d S )Nrv   rS  éþÿÿÿrT  r   r@   r  r   r)   r)   r*   rý  ,	  s    ÿÿz/getPhases.<locals>.InSelectPhase.endTagOptgroupc                 S   sN   | j jdddr@| j j ¡ }|jdkr4| j j ¡ }q| j ¡  n
| j ¡  d S )Nr£   r  )r>   r  r~   r  r@   rL   rb   r   r  r)   r)   r*   rþ  9	  s    
z-getPhases.<locals>.InSelectPhase.endTagSelectc                 S   s   | j  dd|d i¡ d S )Nr   r@   rÆ   r   r)   r)   r*   rå   D	  s    
ÿz,getPhases.<locals>.InSelectPhase.endTagOtherN)r9   r:   r;   rK   r‹   r„   rú  rû  ro  rh  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à   re  rË   râ   rã   r¼  rÏ   rå   rÂ   ræ   r)   r*   rK   I	  s    ÿÿ
ÿÿz0getPhases.<locals>.InSelectInTablePhase.__init__c                 S   s   | j jd  ¡  d S ©Nr™   rÕ  rB   r)   r)   r*   r‹   X	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc                 S   s   | j jd  |¡S r  rÖ  r   r)   r)   r*   r„   [	  s    z9getPhases.<locals>.InSelectInTablePhase.processCharactersc                 S   s(   | j  dd|d i¡ |  tdƒ¡ |S )Nz5unexpected-table-element-start-tag-in-select-in-tabler@   r£   )rL   r   rå   rÚ   r   r)   r)   r*   re  ^	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec                 S   s   | j jd  |¡S r  rê   r   r)   r)   r*   râ   c	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagOtherc                 S   s@   | j  dd|d i¡ | jj|d ddr<|  tdƒ¡ |S d S )Nz3unexpected-table-element-end-tag-in-select-in-tabler@   r¬   r  r£   )rL   r   r>   r  rå   rÚ   r   r)   r)   r*   r¼  f	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec                 S   s   | j jd  |¡S r  rÛ  r   r)   r)   r*   rå   l	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOtherN)
r9   r:   r;   rK   r‹   r„   re  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>.InForeignContentPhaser9  r:  r   r®   rÞ   r!  r;  r6  r+   r$  r7  r<  rH  Zh1Zh2Zh3Zh4Zh5Zh6r­   rM  r>  rI  r5  r3  r,  r5   rE  r.  r(   r2  r   r?  r@  ÚspanrB  rA  ÚsubZsupr¬   rC  rD  r1  Úvarc                    s   ˆ   | ||¡ d S r.   )rK   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 )'NZaltGlyphZaltGlyphDefZaltGlyphItemZanimateColorZanimateMotionZanimateTransformZclipPathZfeBlendZfeColorMatrixZfeComponentTransferZfeCompositeZfeConvolveMatrixZfeDiffuseLightingZfeDisplacementMapZfeDistantLightZfeFloodZfeFuncAZfeFuncBZfeFuncGZfeFuncRZfeGaussianBlurZfeImageZfeMergeZfeMergeNodeZfeMorphologyZfeOffsetZfePointLightZfeSpecularLightingZfeSpotLightZfeTileZfeTurbulenceZforeignObjectZglyphRefZlinearGradientZradialGradientZtextPath)$ZaltglyphZaltglyphdefZaltglyphitemZanimatecolorZanimatemotionZanimatetransformZclippathZfeblendZfecolormatrixZfecomponenttransferZfecompositeZfeconvolvematrixZfediffuselightingZfedisplacementmapZfedistantlightZfefloodZfefuncaZfefuncbZfefuncgZfefuncrZfegaussianblurZfeimageZfemergeZfemergenodeZfemorphologyZfeoffsetZfepointlightZfespecularlightingZfespotlightZfetileZfeturbulenceZforeignobjectZglyphrefZlineargradientZradialgradientZtextpathr@   r)   )rC   rŒ   Úreplacementsr)   r)   r*   ÚadjustSVGTagNames|	  sN    Ý%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 )Nrw   r…  u   ï¿½c                 s   s   | ]}|t kV  qd S r.   r†  r‡  r)   r)   r*   r»   ©	  s     zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rL   rc   r‰  r„   r   ræ   r)   r*   r„   ¥	  s    
ÿz:getPhases.<locals>.InForeignContentPhase.processCharactersc                 S   s.  | j jd }|d | jksD|d dkrªt|d  ¡ ƒtdddgƒ@ rª| j dd|d i¡ | j jd j| j jkr¦| j 	| j jd ¡s¦| j 
| j jd ¡s¦| j j ¡  qZ|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 )Nrv   r@   r=  rw   ZcolorZfaceÚsizez*unexpected-html-element-in-foreign-contentrh   ry   rj   r{   Tr|   )r>   r~   ÚbreakoutElementsÚsetÚkeysrL   r   rj   r‚   ro   rp   r  r   r   r
  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¡ |j t¡|d kr | jj| jj	d krˆ| jj 
¡  | jjj| j_| jj ¡ |kršqˆd }qØ|d8 }| jj| }|j| jjkrÆqFqF| jj |¡}qØqF|S )Nr   rv   r@   r  rÂ  )r   r>   r~   r@   rl   r   rL   r   r`   rI   rË  rµ   r  rj   r‚   r‡   )rC   rŒ   Z	nodeIndexr±   r   r)   r)   r*   r‡   È	  s&    z6getPhases.<locals>.InForeignContentPhase.processEndTagN)
r9   r:   r;   rƒ   r  rK   r
  r„   r†   r‡   r)   ræ   r)   r*   ÚInForeignContentPhaseo	  s\                                   ù	)r  c                       sP   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )z!getPhases.<locals>.AfterBodyPhasec                    sN   ˆ   | ||¡ t d| jfg¡| _| j| j_t d| jfg¡| _| j	| j_d S ©Nr°   )
rK   r   rà   rÎ   rË   râ   rã   rv  rÏ   rå   rÂ   ræ   r)   r*   rK   ã	  s    ÿ
z*getPhases.<locals>.AfterBodyPhase.__init__c                 S   s   d S r.   r)   rB   r)   r)   r*   r‹   î	  s    z,getPhases.<locals>.AfterBodyPhase.processEOFc                 S   s   | j  || j jd ¡ d S )Nr   rÄ   r   r)   r)   r*   rˆ   ò	  s    z0getPhases.<locals>.AfterBodyPhase.processCommentc                 S   s    | j  d¡ | j jd | j _|S )Nzunexpected-char-after-bodyr    ©rL   r   rI   r`   r   r)   r)   r*   r„   ÷	  s    z3getPhases.<locals>.AfterBodyPhase.processCharactersc                 S   s   | j jd  |¡S ré   rê   r   r)   r)   r*   rÎ   ü	  s    z.getPhases.<locals>.AfterBodyPhase.startTagHtmlc                 S   s*   | j  dd|d i¡ | j jd | j _|S )Nzunexpected-start-tag-after-bodyr@   r    r  r   r)   r)   r*   râ   ÿ	  s
    
ÿz/getPhases.<locals>.AfterBodyPhase.startTagOtherc                 S   s*   | j jr| j  d¡ n| j jd | j _d S )Nz'unexpected-end-tag-after-body-innerhtmlÚafterAfterBody)rL   rS   r   rI   r`   )rC   r@   r)   r)   r*   rv  
  s    z,getPhases.<locals>.AfterBodyPhase.endTagHtmlc                 S   s*   | j  dd|d i¡ | j jd | j _|S )Nzunexpected-end-tag-after-bodyr@   r    r  r   r)   r)   r*   rå   
  s
    
ÿz-getPhases.<locals>.AfterBodyPhase.endTagOtherN)r9   r:   r;   rK   r‹   rˆ   r„   rÎ   râ   rv  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¯   rV  rï   )rK   r   rà   rÎ   r  ÚstartTagFrameÚstartTagNoframesrË   râ   rã   ÚendTagFramesetrÏ   rå   rÂ   ræ   r)   r*   rK   
  s    ü
ÿz+getPhases.<locals>.InFramesetPhase.__init__c                 S   s$   | j jd jdkr | j d¡ n d S )Nrv   r°   zeof-in-framesetrÀ  rB   r)   r)   r*   r‹   #
  s    z-getPhases.<locals>.InFramesetPhase.processEOFc                 S   s   | j  d¡ d S )Nzunexpected-char-in-framesetrÆ   r   r)   r)   r*   r„   )
  s    z4getPhases.<locals>.InFramesetPhase.processCharactersc                 S   s   | j  |¡ d S r.   )r>   r´   r   r)   r)   r*   r  ,
  s    z3getPhases.<locals>.InFramesetPhase.startTagFramesetc                 S   s   | j  |¡ | j j ¡  d S r.   r  r   r)   r)   r*   r  /
  s    z0getPhases.<locals>.InFramesetPhase.startTagFramec                 S   s   | j jd  |¡S ré   rê   r   r)   r)   r*   r  3
  s    z3getPhases.<locals>.InFramesetPhase.startTagNoframesc                 S   s   | j  dd|d i¡ d S )Nz unexpected-start-tag-in-framesetr@   rÆ   r   r)   r)   r*   râ   6
  s    
ÿz0getPhases.<locals>.InFramesetPhase.startTagOtherc                 S   sZ   | j jd jdkr | j d¡ n| j j ¡  | jjsV| j jd jdkrV| jjd | j_d S )Nrv   r°   z)unexpected-frameset-in-frameset-innerhtmlr¯   ÚafterFrameset)	r>   r~   r@   rL   r   r  rS   rI   r`   r   r)   r)   r*   r  :
  s    ÿz1getPhases.<locals>.InFramesetPhase.endTagFramesetc                 S   s   | j  dd|d i¡ d S )Nzunexpected-end-tag-in-framesetr@   rÆ   r   r)   r)   r*   rå   F
  s    
ÿz.getPhases.<locals>.InFramesetPhase.endTagOtherN)r9   r:   r;   rK   r‹   r„   r  r  r  râ   r  rå   r)   ræ   r)   r*   ÚInFramesetPhase
  s   r  c                       sH   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )z%getPhases.<locals>.AfterFramesetPhasec                    sV   ˆ   | ||¡ t d| jfd| jfg¡| _| j| j_t d| jfg¡| _	| j
| j	_d S ©Nr°   rï   )rK   r   rà   rÎ   r  rË   râ   rã   rv  rÏ   rå   rÂ   ræ   r)   r*   rK   L
  s    þ
ÿz.getPhases.<locals>.AfterFramesetPhase.__init__c                 S   s   d S r.   r)   rB   r)   r)   r*   r‹   Z
  s    z0getPhases.<locals>.AfterFramesetPhase.processEOFc                 S   s   | j  d¡ d S )Nzunexpected-char-after-framesetrÆ   r   r)   r)   r*   r„   ^
  s    z7getPhases.<locals>.AfterFramesetPhase.processCharactersc                 S   s   | j jd  |¡S r  rê   r   r)   r)   r*   r  a
  s    z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc                 S   s   | j  dd|d i¡ d S )Nz#unexpected-start-tag-after-framesetr@   rÆ   r   r)   r)   r*   râ   d
  s    
ÿz3getPhases.<locals>.AfterFramesetPhase.startTagOtherc                 S   s   | j jd | j _d S )NÚafterAfterFrameset)rL   rI   r`   r   r)   r)   r*   rv  h
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc                 S   s   | j  dd|d i¡ d S )Nz!unexpected-end-tag-after-framesetr@   rÆ   r   r)   r)   r*   rå   k
  s    
ÿz1getPhases.<locals>.AfterFramesetPhase.endTagOtherN)
r9   r:   r;   rK   r‹   r„   r  râ   rv  rå   r)   ræ   r)   r*   ÚAfterFramesetPhaseJ
  s   r  c                       sP   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )z&getPhases.<locals>.AfterAfterBodyPhasec                    s0   ˆ   | ||¡ t d| jfg¡| _| j| j_d S r  )rK   r   rà   rÎ   rË   râ   rã   rÂ   ræ   r)   r*   rK   p
  s
    ÿz/getPhases.<locals>.AfterAfterBodyPhase.__init__c                 S   s   d S r.   r)   rB   r)   r)   r*   r‹   x
  s    z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc                 S   s   | j  || j j¡ d S r.   rÑ   r   r)   r)   r*   rˆ   {
  s    z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc                 S   s   | j jd  |¡S ré   r  r   r)   r)   r*   r…   ~
  s    z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharactersc                 S   s    | j  d¡ | j jd | j _|S )Núexpected-eof-but-got-charr    r  r   r)   r)   r*   r„   
  s    z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc                 S   s   | j jd  |¡S ré   rê   r   r)   r)   r*   rÎ   †
  s    z3getPhases.<locals>.AfterAfterBodyPhase.startTagHtmlc                 S   s*   | j  dd|d i¡ | j jd | j _|S )Núexpected-eof-but-got-start-tagr@   r    r  r   r)   r)   r*   râ   ‰
  s
    
ÿz4getPhases.<locals>.AfterAfterBodyPhase.startTagOtherc                 S   s*   | j  dd|d i¡ | j jd | j _|S )Núexpected-eof-but-got-end-tagr@   r    r  r   r)   r)   r*   r‡   
  s
    
ÿz4getPhases.<locals>.AfterAfterBodyPhase.processEndTagN)r9   r:   r;   rK   r‹   rˆ   r…   r„   rÎ   râ   r‡   r)   ræ   r)   r*   ÚAfterAfterBodyPhaseo
  s   r  c                       sX   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )z*getPhases.<locals>.AfterAfterFramesetPhasec                    s8   ˆ   | ||¡ t d| jfd| jfg¡| _| j| j_d S r  )rK   r   rà   rÎ   ÚstartTagNoFramesrË   râ   rã   rÂ   ræ   r)   r*   rK   –
  s    þz3getPhases.<locals>.AfterAfterFramesetPhase.__init__c                 S   s   d S r.   r)   rB   r)   r)   r*   r‹   Ÿ
  s    z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc                 S   s   | j  || j j¡ d S r.   rÑ   r   r)   r)   r*   rˆ   ¢
  s    z9getPhases.<locals>.AfterAfterFramesetPhase.processCommentc                 S   s   | j jd  |¡S ré   r  r   r)   r)   r*   r…   ¥
  s    zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc                 S   s   | j  d¡ d S )Nr  rÆ   r   r)   r)   r*   r„   ¨
  s    z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc                 S   s   | j jd  |¡S ré   rê   r   r)   r)   r*   rÎ   «
  s    z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc                 S   s   | j jd  |¡S r  rê   r   r)   r)   r*   r   ®
  s    z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc                 S   s   | j  dd|d i¡ d S )Nr  r@   rÆ   r   r)   r)   r*   râ   ±
  s    
ÿz8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc                 S   s   | j  dd|d i¡ d S )Nr  r@   rÆ   r   r)   r)   r*   r‡   µ
  s    
ÿz8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagN)r9   r:   r;   rK   r‹   rˆ   r…   r„   rÎ   r   râ   r‡   r)   ræ   r)   r*   ÚAfterAfterFramesetPhase•
  s   	r!  )rW   rV   r¢   rë   r  r	  r    r³   rŸ   rÂ  r   rž   rœ   r›   rš   r™   rŸ  rz   r¥  r¡   r  r  r  )r   )rJ   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*   rH   œ  sr    ) #.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 )Nrw   c                 3   s"   | ]\}}ˆ   ||¡|fV  qd S r.   )r€   )r?   ÚkÚv©r	  r)   r*   r»   Ù
  s   ÿz$adjust_attributes.<locals>.<genexpr>)r   r   r/   )rŒ   r	  Zneeds_adjustmentr)   r$  r*   r–   Ö
  s
    
ÿr–   rs   Fc                 C   s   |d kri }t | | ||dœS )N)r3   r@   rw   r{   )r   )r@   r3   rk   r{   r)   r)   r*   rÚ   Ý
  s
    
ÿrÚ   c                   @   s   e Zd ZdZdS )ru   zError in parsed documentN)r9   r:   r;   r·   r)   r)   r)   r*   ru   å
  s   ru   )r   T)r+   r   T)rs   NF).Z
__future__r   r   r   Zpip._vendor.sixr   r   r1   Úcollectionsr   rÕ   r	   r
   r   Ztreebuilders.baser   r   Z	constantsr   r   r   r   r   r   r   r   r   r   r   r   r—   r   r   r   r   r#   r-   r=   rG  r"   ZmemoizerH   r–   rÚ   Ú	Exceptionru   r)   r)   r)   r*   Ú<module>   sP   H

  G
                  K  ÿ
