a
    ¥Q•h[‘ ã                   @   sP  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 d dlmZ d dlmZmZ dDdd„ZG dd	„ d	ƒZd
d„ ZG dd„ dƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!G dd„ deƒZ"G d d!„ d!eƒZ#G d"d#„ d#eƒZ$G d$d%„ d%eƒZ%G d&d'„ d'eƒZ&G d(d)„ d)eƒZ'G d*d+„ d+eƒZ(G d,d-„ d-eƒZ)G d.d/„ d/eƒZ*G d0d1„ d1eƒZ+G d2d3„ d3eƒZ,G d4d5„ d5eƒZ-G d6d7„ d7eƒZ.G d8d9„ d9eƒZ/G d:d;„ d;eƒZ0eeeeeee e!e"e#e$e%e&e'e(e)e*e+e,e-e.e/e0d<œZ1d=d>„ Z2dEdBdC„Z3d@S )Fé   )Úinputstream)ÚReparseErrorÚTokenÚadjust_foreign_attributesÚadjust_mathml_attributesÚadjust_svg_attributesÚascii_upper_to_lowerÚcdata_elementsÚheading_elementsÚhtml_integration_point_elementsÚ&mathml_text_integration_point_elementsÚ
namespacesÚrcdata_elementsÚspace_charactersÚspecial_elements)ÚHTMLTokenizer)ÚMarkerÚTreeBuilderTc                 K   s   t |ƒj| fi |¤ŽS )uÔ  Parse an HTML document into a tree.

    :param document:
        The document to parse as a HTML string, filename, file-like object.
    :type document:
        :class:`str`, :class:`bytes`, :class:`pathlib.Path` or
        :term:`file object`
    :param bool namespace_html_elements:
        Whether or not to namespace HTML elements.

    Extra parameters can be provided to define possible encodings if the
    document is given as :class:`bytes`.

    :param override_encoding: Forced encoding provided by user agent.
    :type override_encoding: str or bytes
    :param transport_encoding: Encoding provided by transport layout.
    :type transport_encoding: str or bytes
    :param same_origin_parent_encoding: Parent document encoding.
    :type same_origin_parent_encoding: str or bytes
    :param likely_encoding: Possible encoding provided by user agent.
    :type likely_encoding: str or bytes
    :param default_encoding: Encoding used as fallback.
    :type default_encoding: str or bytes

    :returns: :class:`xml.etree.ElementTree.Element`.

    Example:

    >>> from tinyhtml5 import parse
    >>> parse('<html><body><p>This is a doc</p></body></html>')
    <Element '{http://www.w3.org/1999/xhtml}html' at â€¦>

    )Ú
HTMLParserÚparse)ÚdocumentÚnamespace_html_elementsÚkwargs© r   úI/var/www/sistema_ama/venv/lib/python3.9/site-packages/tinyhtml5/parser.pyr      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d„Zd'dd„Zd(dd„Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ ZdS ))r   z]HTML parser.

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

    Tc                    s,   t |ƒˆ _g ˆ _‡ fdd„t ¡ D ƒˆ _d S )Nc                    s   i | ]\}}||ˆ ˆ j ƒ“qS r   )Útree)Ú.0ÚnameÚcls©Úselfr   r   Ú
<dictcomp>E   ó    z'HTMLParser.__init__.<locals>.<dictcomp>)r   r   ÚerrorsÚ_phasesÚitemsÚphases)r    r   r   r   r   Ú__init__B   s    
zHTMLParser.__init__NFc                 K   s^   || _ || _t|fd| i|¤Ž| _|  ¡  z|  ¡  W n" tyX   |  ¡  |  ¡  Y n0 d S )NÚparser)Ú	containerÚ	scriptingr   Ú	tokenizerÚresetÚ	main_loopr   )r    Ústreamr)   r*   r   r   r   r   Ú_parseG   s    zHTMLParser._parsec                 C   s¬   | j  ¡  d| _g | _d| _| jrŠ| jtv r:| jj| j_	n0| jt
v rR| jj| j_	n| jdkrj| jj| j_	n | jd | _| j ¡  |  ¡  n| jd | _d | _d | _d| _d S )NFz	no quirksÚ	plaintextúbefore htmlÚinitialT)r   r,   Úfirst_start_tagr#   Úcompatibility_moder)   r	   r+   Úrcdata_stateÚstater   Úrawtext_stateÚplaintext_stater&   ÚphaseÚ_insert_html_elementÚreset_insertion_modeZ
last_phaseZbefore_rcdata_phaseÚframeset_okr   r   r   r   r,   R   s$    





zHTMLParser.resetc                 C   s   t | dƒr| jjjd jS dS )z†Name of the character encoding that was used to decode the input stream.

        :obj:`None` if that is not determined yet.

        r+   é    N)Úhasattrr+   r.   Úencodingr   r   r   r   r   r?   o   s    
zHTMLParser.encodingc                 C   sB   |j |jf}|td dfkr:d|jv o8|jd  t¡dv S |tv S )NÚmathmlúannotation-xmlr?   )z	text/htmlzapplication/xhtml+xml)Ú	namespacer   r   Ú
attributesÚ	translater   r   ©r    ÚelementÚ	full_namer   r   r   Úis_html_integration_pointy   s    
ÿþz$HTMLParser.is_html_integration_pointc                 C   s   |j |jf}|tv S ©N)rB   r   r   rE   r   r   r   Ú is_mathml_text_integration_point‚   s    z+HTMLParser.is_mathml_text_integration_pointc                 C   sH  | j D ]ü}d }|}|d urÖ|}| jjr6| jjd nd }|rD|jnd }|rR|jnd }|d }|tjkr†|  |d | di ¡¡ d }qt	| jjƒdks6|| jj
ks6|  |¡râ|tjkrÐ|d tddgƒvs6|tjtjfv s6|td	 kr|d
kr|tjkr|d dks6|  |¡r>|tjtjtjfv r>| j}n
| jd }|tjkr`| |¡}q|tjkrx| |¡}q|tjkr| |¡}q|tjkr¨| |¡}q|tjkrÀ| |¡}q|tjkr| |¡}q|tjkr|d r|d s|  dd|d i¡ qd}	g }
|	rD|
 | j¡ | j ¡ }	|	r| j|
vsJ ‚qd S )NéÿÿÿÿÚtypeÚdataÚdatavarsr=   r   ZmglyphZ
malignmarkr@   rA   Úsvgúin foreign contentÚselfClosingÚselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r+   r   Úopen_elementsrB   r   r   ZPARSE_ERRORÚparse_errorÚgetÚlenÚdefault_namespacerJ   Ú	START_TAGÚ	frozensetÚ
CHARACTERSZSPACE_CHARACTERSr   rH   r9   r&   Úprocess_charactersÚprocess_space_charactersÚprocess_start_tagÚEND_TAGÚprocess_end_tagÚCOMMENTÚprocess_commentZDOCTYPEÚprocess_doctypeÚappendÚprocess_eof)r    ÚtokenZprevious_tokenÚ	new_tokenÚcurrent_nodeZcurrent_node_namespaceZcurrent_node_namerL   r9   Z	reprocessr&   r   r   r   r-   †   sˆ    
ÿÿ

ÿþýüû
úùø	
÷
ö
þö

ÿ
þ
zHTMLParser.main_loopc                 K   s   | j |fi |¤Ž | j |¡S )zvParse a HTML document into a well-formed tree.

        If ``full_tree`` is ``True``, return the whole tree.

        )r/   r   Zget_document)r    r.   Z	full_treer   r   r   r   r   Å   s    zHTMLParser.parseÚdivc                 K   s    | j |fd|i|¤Ž | j ¡ S )u‡   Parse a HTML fragment into a well-formed tree fragment.

        ``container`` is the tag name of the fragmentâ€™s container.

        r)   )r/   r   Zget_fragment)r    r.   r)   r   r   r   r   Úparse_fragmentÎ   s    zHTMLParser.parse_fragmentc                 C   s*   |d u ri }| j  | jj ¡ ||f¡ d S rI   )r#   rc   r+   r.   Úposition)r    Ú	errorcoderN   r   r   r   rT   ×   s    zHTMLParser.parse_errorc                 C   s   t |tƒ d S rI   )Úadjust_attributesr   ©r    re   r   r   r   r   Ü   s    z#HTMLParser.adjust_mathml_attributesc                 C   s   t |tƒ d S rI   )rl   r   rm   r   r   r   r   ß   s    z HTMLParser.adjust_svg_attributesc                 C   s   t |tƒ d S rI   )rl   r   rm   r   r   r   r   â   s    z$HTMLParser.adjust_foreign_attributesc                 C   sÊ   d}ddddddddddd	d	d
ddœ}| j jd d d… D ]†}|j}d }|| j jd krj| js`J ‚d}| j}|dv r|| js|J ‚|s|j| j jkrq8||v r¬| j||  } qÀq8|r8| jd	 } qÀq8|| _d S )NFú	in selectúin cellúin rowúin table bodyú
in captionúin column groupúin tableúin bodyúin framesetúbefore head)ÚselectÚtdÚthÚtrÚtbodyÚtheadÚtfootÚcaptionÚcolgroupÚtableÚheadÚbodyÚframesetÚhtmlrK   r=   T)rx   r€   r‚   r…   )r   rS   r   r)   rB   rW   r&   r9   )r    ÚlastZ	new_modesÚnodeZ	node_nameZ	new_phaser   r   r   r;   å   sD    ò


zHTMLParser.reset_insertion_modec                 C   sR   |dv sJ ‚| j  |¡ |dkr.| jj| j_n| jj| j_| j| _| jd | _d S )N)ÚRAWTEXTÚRCDATArˆ   Útext)	r   Úinsert_elementr+   r7   r6   r5   r9   Úoriginal_phaser&   )r    re   Úcontent_typer   r   r   Úparse_rcdata_rawtext  s    zHTMLParser.parse_rcdata_rawtext)T)NF)F)rh   )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   r/   r,   Úpropertyr?   rH   rJ   r-   r   ri   rT   r   r   r   r;   rŽ   r   r   r   r   r   ;   s"   


		?
	
	
+r   c                 C   s   dd„ | D ƒS )Nc                 S   s0   i | ](\}}t |tƒr|fn|D ]
}||“q qS r   )Ú
isinstanceÚstr)r   ÚkeysÚvalueÚkeyr   r   r   r!   !  s   þzdispatch.<locals>.<dictcomp>r   )r%   r   r   r   Údispatch   s    þr™   c                   @   s\   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚPhasez?Base class for helper that implements each phase of processing.)r(   r   Z__start_tag_cacheZ__end_tag_cachec                 C   s   || _ || _i | _i | _d S rI   )r(   r   Ú_Phase__start_tag_cacheÚ_Phase__end_tag_cache)r    r(   r   r   r   r   r'   ,  s    zPhase.__init__c                 C   s   t ‚d S rI   )ÚNotImplementedErrorr   r   r   r   rd   2  s    zPhase.process_eofc                 C   s   | j  || j jd ¡ d S )NrK   ©r   Úinsert_commentrS   rm   r   r   r   ra   5  s    zPhase.process_commentc                 C   s   | j  d¡ d S )Nzunexpected-doctype©r(   rT   rm   r   r   r   rb   :  s    zPhase.process_doctypec                 C   s   | j  |d ¡ d S ©NrM   ©r   Úinsert_textrm   r   r   r   r[   =  s    zPhase.process_charactersc                 C   s   | j  |d ¡ d S r¡   r¢   rm   r   r   r   r\   @  s    zPhase.process_space_charactersc                 C   sv   |d }|| j v r| j | }nN| j |t| ƒj¡ }| j |< t| j ƒt| jƒd krl| j  tt| j ƒƒ¡ q<|| |ƒS ©Nr   gš™™™™™ñ?)	r›   Ústart_tag_handlerrU   rL   Ústart_tag_otherrV   ÚpopÚnextÚiter©r    re   r   Úfunctionr   r   r   r]   C  s    

ÿzPhase.process_start_tagc                 C   sf   | j js |d dkr | j  d¡ |d  ¡ D ],\}}|| jjd jvr,|| jjd j|< q,d| j _d S )Nr   r…   znon-html-rootrM   r=   F)r(   r3   rT   r%   r   rS   rC   ©r    re   Úattrr—   r   r   r   Ústart_tag_htmlR  s    zPhase.start_tag_htmlc                 C   sv   |d }|| j v r| j | }nN| j |t| ƒj¡ }| j |< t| j ƒt| jƒd krl| j  tt| j ƒƒ¡ q<|| |ƒS r¤   )	rœ   Úend_tag_handlerrU   rL   Úend_tag_otherrV   r§   r¨   r©   rª   r   r   r   r_   \  s    

ÿzPhase.process_end_tagN)r   r   r‘   r’   Ú	__slots__r'   rd   ra   rb   r[   r\   r]   r®   r_   r   r   r   r   rš   (  s   
rš   c                   @   sR   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚInitialPhasec                 C   s   d S rI   r   rm   r   r   r   r\   o  s    z%InitialPhase.process_space_charactersc                 C   s   | j  || j j¡ d S rI   ©r   rŸ   r   rm   r   r   r   ra   r  s    zInitialPhase.process_commentc                 C   sü   |d }|d }|d }|d }|dks@|d us@|d urL|dkrL| j  d¡ |d u rXd}| j |¡ |dkrv| t¡}|rº|d dksº| d	¡sº|d
v sº| d¡rª|d u sº|rÄ| ¡ dkrÄd| j _n$| d¡sà| d¡rè|d urèd| j _| j j	d | j _
d S )Nr   ZpublicIdZ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 quirksr1   )r(   rT   r   Zinsert_doctyperD   r   Ú
startswithÚlowerr4   r&   r9   )r    re   r   Ú	public_idÚ	system_idr´   r   r   r   rb   u  s\    ÿÿ
ÿÿ;Å>ÿÂA¿B¾Bÿ¾D
ÿÿýúzInitialPhase.process_doctypec                 C   s   d| j _| j jd | j _d S )Nr¶   r1   )r(   r4   r&   r9   r   r   r   r   Úanything_else×  s    zInitialPhase.anything_elsec                 C   s   | j  d¡ |  ¡  |S )Nzexpected-doctype-but-got-chars©r(   rT   r»   rm   r   r   r   r[   Û  s    zInitialPhase.process_charactersc                 C   s"   | j  dd|d i¡ |  ¡  |S )Nz"expected-doctype-but-got-start-tagr   r¼   rm   r   r   r   r]   à  s
    ÿzInitialPhase.process_start_tagc                 C   s"   | j  dd|d i¡ |  ¡  |S )Nz expected-doctype-but-got-end-tagr   r¼   rm   r   r   r   r_   æ  s
    ÿzInitialPhase.process_end_tagc                 C   s   | j  d¡ |  ¡  dS )Nzexpected-doctype-but-got-eofTr¼   r   r   r   r   rd   ì  s    zInitialPhase.process_eofN)r   r   r‘   Útupler±   r\   ra   rb   r»   r[   r]   r_   rd   r   r   r   r   r²   l  s   br²   c                   @   sJ   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ ZdS )ÚBeforeHtmlPhasec                 C   s&   | j  tddƒ¡ | jjd | j_d S )Nr…   rX   rw   )r   Zinsert_rootÚimplied_tag_tokenr(   r&   r9   r   r   r   r   r:   õ  s    z$BeforeHtmlPhase._insert_html_elementc                 C   s   |   ¡  dS ©NT©r:   r   r   r   r   rd   ù  s    zBeforeHtmlPhase.process_eofc                 C   s   | j  || j j¡ d S rI   r³   rm   r   r   r   ra   ý  s    zBeforeHtmlPhase.process_commentc                 C   s   d S rI   r   rm   r   r   r   r\      s    z(BeforeHtmlPhase.process_space_charactersc                 C   s   |   ¡  |S rI   rÁ   rm   r   r   r   r[     s    z"BeforeHtmlPhase.process_charactersc                 C   s    |d dkrd| j _|  ¡  |S )Nr   r…   T)r(   r3   r:   rm   r   r   r   r]     s    z!BeforeHtmlPhase.process_start_tagc                 C   s4   |d dvr$| j  dd|d i¡ n|  ¡  |S d S )Nr   ©r‚   rƒ   r…   Úbrzunexpected-end-tag-before-html)r(   rT   r:   rm   r   r   r   r_     s    ÿzBeforeHtmlPhase.process_end_tagN)r   r   r‘   r½   r±   r:   rd   ra   r\   r[   r]   r_   r   r   r   r   r¾   ò  s   r¾   c                   @   st   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zedefde	fgƒZedefgƒZdS )ÚBeforeHeadPhasec                 C   s   |   tddƒ¡ dS )Nr‚   rX   T©Ústart_tag_headr¿   r   r   r   r   rd     s    zBeforeHeadPhase.process_eofc                 C   s   d S rI   r   rm   r   r   r   r\     s    z(BeforeHeadPhase.process_space_charactersc                 C   s   |   tddƒ¡ |S ©Nr‚   rX   rÅ   rm   r   r   r   r[      s    z"BeforeHeadPhase.process_charactersc                 C   s   | j jd  |¡S ©Nru   ©r(   r&   r]   rm   r   r   r   r®   $  s    zBeforeHeadPhase.start_tag_htmlc                 C   s0   | j  |¡ | j jd | j _| jjd | j_d S )NrK   úin head)r   r‹   rS   Úhead_elementr(   r&   r9   rm   r   r   r   rÆ   '  s    zBeforeHeadPhase.start_tag_headc                 C   s   |   tddƒ¡ |S rÇ   rÅ   rm   r   r   r   r¦   ,  s    zBeforeHeadPhase.start_tag_otherc                 C   s   |   tddƒ¡ |S rÇ   rÅ   rm   r   r   r   Úend_tag_imply_head0  s    z"BeforeHeadPhase.end_tag_imply_headc                 C   s   | j  dd|d i¡ d S )Nzend-tag-after-implied-rootr   r    rm   r   r   r   r°   4  s    zBeforeHeadPhase.end_tag_otherr…   r‚   rÂ   N)r   r   r‘   r½   r±   rd   r\   r[   r®   rÆ   r¦   rÌ   r°   r™   r¥   r¯   r   r   r   r   rÄ     s    þÿrÄ   c                
   @   sÖ   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedefd efd!efd"efd#efd$e	fd%e
fd&efgƒZed&efd'efgƒZd(S ))ÚInHeadPhasec                 C   s   |   ¡  dS rÀ   ©r»   r   r   r   r   rd   E  s    zInHeadPhase.process_eofc                 C   s   |   ¡  |S rI   rÎ   rm   r   r   r   r[   I  s    zInHeadPhase.process_charactersc                 C   s   | j jd  |¡S rÈ   rÉ   rm   r   r   r   r®   M  s    zInHeadPhase.start_tag_htmlc                 C   s   | j  d¡ d S )Nz!two-heads-are-not-better-than-oner    rm   r   r   r   rÆ   P  s    zInHeadPhase.start_tag_headc                 C   s$   | j  |¡ | j j ¡  d|d< d S ©NTrR   ©r   r‹   rS   r§   rm   r   r   r   Ústart_tag_base_link_commandS  s    z'InHeadPhase.start_tag_base_link_commandc                 C   s´   | j  |¡ | j j ¡  d|d< |d }| jjjjd dkr°d|v rZ| jjj |d ¡ nVd|v r°d|v r°|d  	¡ d	kr°t
 |d  d
¡¡}t
 |¡}| ¡ }| jjj |¡ d S )NTrR   rM   r   Z	tentativeÚcharsetÚcontentz
http-equivzcontent-typezutf-8)r   r‹   rS   r§   r(   r+   r.   r?   Zchange_encodingr¸   r   ZEncodingBytesÚencodeZContentAttributeParserr   )r    re   rC   rM   r(   Úcodecr   r   r   Ústart_tag_metaX  s     ÿþ
zInHeadPhase.start_tag_metac                 C   s   | j  |d¡ d S )Nr‰   ©r(   rŽ   rm   r   r   r   Ústart_tag_titlem  s    zInHeadPhase.start_tag_titlec                 C   s   | j  |d¡ d S ©Nrˆ   r×   rm   r   r   r   Ústart_tag_noframes_stylep  s    z$InHeadPhase.start_tag_noframes_stylec                 C   s8   | j jr| j  |d¡ n| j |¡ | j jd | j _d S )Nrˆ   úin head noscript)r(   r*   rŽ   r   r‹   r&   r9   rm   r   r   r   Ústart_tag_noscriptt  s    zInHeadPhase.start_tag_noscriptc                 C   s<   | j  |¡ | jjj| jj_| jj| j_| jjd | j_d S )NrŠ   )	r   r‹   r(   r+   Zscript_data_stater6   r9   rŒ   r&   rm   r   r   r   Ústart_tag_script{  s    zInHeadPhase.start_tag_scriptc                 C   s   |   ¡  |S rI   rÎ   rm   r   r   r   r¦     s    zInHeadPhase.start_tag_otherc                 C   s:   | j jj ¡ }|jdks&J d|j ƒ‚| j jd | j _d S )Nr‚   zExpected head got %sú
after head©r(   r   rS   r§   r   r&   r9   ©r    re   r‡   r   r   r   Úend_tag_head…  s    zInHeadPhase.end_tag_headc                 C   s   |   ¡  |S rI   rÎ   rm   r   r   r   Úend_tag_html_body_brŠ  s    z InHeadPhase.end_tag_html_body_brc                 C   s   | j  dd|d i¡ d S ©Núunexpected-end-tagr   r    rm   r   r   r   r°   Ž  s    zInHeadPhase.end_tag_otherc                 C   s   |   tdƒ¡ d S )Nr‚   )rá   r¿   r   r   r   r   r»   ‘  s    zInHeadPhase.anything_elser…   Útitle)ÚnoframesÚstyleÚnoscriptÚscript)ÚbaseÚbasefontÚbgsoundÚcommandÚlinkÚmetar‚   )rÃ   r…   rƒ   N)r   r   r‘   r½   r±   rd   r[   r®   rÆ   rÑ   rÖ   rØ   rÚ   rÜ   rÝ   r¦   rá   râ   r°   r»   r™   r¥   r¯   r   r   r   r   rÍ   A  s@   ÿ÷þrÍ   c                   @   s    e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zede	fde
fdefgƒZedefdefgƒZdS )ÚInHeadNoscriptPhasec                 C   s   | j  d¡ |  ¡  dS )Nzeof-in-head-noscriptTr¼   r   r   r   r   rd   ©  s    zInHeadNoscriptPhase.process_eofc                 C   s   | j jd  |¡S ©NrÊ   )r(   r&   ra   rm   r   r   r   ra   ®  s    z#InHeadNoscriptPhase.process_commentc                 C   s   | j  d¡ |  ¡  |S )Nzchar-in-head-noscriptr¼   rm   r   r   r   r[   ±  s    z&InHeadNoscriptPhase.process_charactersc                 C   s   | j jd  |¡S rñ   ©r(   r&   r\   rm   r   r   r   r\   ¶  s    z,InHeadNoscriptPhase.process_space_charactersc                 C   s   | j jd  |¡S rÈ   rÉ   rm   r   r   r   r®   ¹  s    z"InHeadNoscriptPhase.start_tag_htmlc                 C   s   | j jd  |¡S rñ   rÉ   rm   r   r   r   rÑ   ¼  s    z/InHeadNoscriptPhase.start_tag_base_link_commandc                 C   s   | j  dd|d i¡ d S ©Núunexpected-start-tagr   r    rm   r   r   r   Ústart_tag_head_noscript¿  s    z+InHeadNoscriptPhase.start_tag_head_noscriptc                 C   s"   | j  dd|d i¡ |  ¡  |S ©Nzunexpected-inhead-noscript-tagr   r¼   rm   r   r   r   r¦   Â  s
    ÿz#InHeadNoscriptPhase.start_tag_otherc                 C   s<   | j jj ¡ }|jdks(J d|j› ƒ‚| j jd | j _d S )Nrè   zExpected noscript got rÊ   rß   rà   r   r   r   Úend_tag_noscriptÈ  s    z$InHeadNoscriptPhase.end_tag_noscriptc                 C   s"   | j  dd|d i¡ |  ¡  |S rö   r¼   rm   r   r   r   Ú
end_tag_brÍ  s
    ÿzInHeadNoscriptPhase.end_tag_brc                 C   s   | j  dd|d i¡ d S rã   r    rm   r   r   r   r°   Ó  s    z!InHeadNoscriptPhase.end_tag_otherc                 C   s   |   tdƒ¡ d S )Nrè   )r÷   r¿   r   r   r   r   r»   Ö  s    z!InHeadNoscriptPhase.anything_elser…   )rë   rì   rî   rï   ræ   rç   )r‚   rè   rè   rÃ   N)r   r   r‘   r½   r±   rd   ra   r[   r\   r®   rÑ   rõ   r¦   r÷   rø   r°   r»   r™   r¥   r¯   r   r   r   r   rð   ¦  s0   ÿüþrð   c                   @   sž   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedefdefde	fde
fdefgƒZedefgƒZdS )ÚAfterHeadPhasec                 C   s   |   ¡  dS rÀ   rÎ   r   r   r   r   rd   ê  s    zAfterHeadPhase.process_eofc                 C   s   |   ¡  |S rI   rÎ   rm   r   r   r   r[   î  s    z!AfterHeadPhase.process_charactersc                 C   s   | j jd  |¡S rÈ   rÉ   rm   r   r   r   r®   ò  s    zAfterHeadPhase.start_tag_htmlc                 C   s(   d| j _| j |¡ | j jd | j _d S )NFru   )r(   r<   r   r‹   r&   r9   rm   r   r   r   Ústart_tag_bodyõ  s    zAfterHeadPhase.start_tag_bodyc                 C   s    | j  |¡ | jjd | j_d S )Nrv   )r   r‹   r(   r&   r9   rm   r   r   r   Ústart_tag_framesetú  s    z!AfterHeadPhase.start_tag_framesetc                 C   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Ê   rK   r‚   )
r(   rT   r   rS   rc   rË   r&   r]   r   Úremoverà   r   r   r   Ústart_tag_from_headþ  s    ÿ
z"AfterHeadPhase.start_tag_from_headc                 C   s   | j  dd|d i¡ d S ró   r    rm   r   r   r   rÆ     s    zAfterHeadPhase.start_tag_headc                 C   s   |   ¡  |S rI   rÎ   rm   r   r   r   r¦     s    zAfterHeadPhase.start_tag_otherc                 C   s   |   ¡  |S rI   rÎ   rm   r   r   r   râ     s    z#AfterHeadPhase.end_tag_html_body_brc                 C   s   | j  dd|d i¡ d S rã   r    rm   r   r   r   r°     s    zAfterHeadPhase.end_tag_otherc                 C   s.   | j  tddƒ¡ | jjd | j_d| j_d S )Nrƒ   rX   ru   T)r   r‹   r¿   r(   r&   r9   r<   r   r   r   r   r»     s    zAfterHeadPhase.anything_elser…   rƒ   r„   )	rê   rë   rì   rî   rï   ræ   ré   rç   rå   r‚   )rƒ   r…   rÃ   N)r   r   r‘   r½   r±   rd   r[   r®   rú   rû   rý   rÆ   r¦   râ   r°   r»   r™   r¥   r¯   r   r   r   r   rù   ç  s0   
ÿúÿrù   c                #       sÄ  e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBdC„ Z$dDdE„ Z%dFdG„ Z&dHdI„ Z'dJdK„ Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+dRdS„ Z,dTdU„ Z-dVdW„ Z.dXdY„ Z/dZd[„ Z0d\d]„ Z1d^d_„ Z2d`da„ Z3dbdc„ Z4ddde„ Z5dfdg„ Z6e7dhe8j9fdiefdjefdkefdlefe:efdmefdnefdoefdpefdqefdrefdsefdtefduefdvefdwefdxefdyefdzefd{efd|efd}e fd~e!fde"fd€e#fde$fd‚e&fdƒe'fd„e%fd…e(fd†e)fd‡e*fg!ƒZ;e7dje-fdhe.fdˆe/fdne0fd‰e,fdŠe1fe:e2fd‹e3fdue4fdŒe5fg
ƒZ<‡  Z=S )ÚInBodyPhase)r\   c                    s   t ƒ j|i |¤Ž | j| _d S rI   )Úsuperr'   Ú process_space_characters_non_prer\   ©r    Úargsr   ©Ú	__class__r   r   r'   -  s    zInBodyPhase.__init__c                 C   s$   |j |j ko"|j|jko"|j|jkS rI   )r   rB   rC   )r    Znode1Znode2r   r   r   Úis_matching_formatting_element2  s
    
ÿ
ýz*InBodyPhase.is_matching_formatting_elementc                 C   s˜   | j  |¡ | j jd }g }| j jd d d… D ](}|tu r@ qXq.|  ||¡r.| |¡ q.t|ƒdkshJ ‚t|ƒdkr†| j j |d ¡ | j j |¡ d S )NrK   é   )	r   r‹   rS   Úactive_formatting_elementsr   r  rc   rV   rü   )r    re   rF   Zmatching_elementsr‡   r   r   r   Úadd_formatting_element8  s    z"InBodyPhase.add_formatting_elementc                 C   s>   t dƒ}| jjd d d… D ]}|j|vr| j d¡  q:qd S )N)ÚddÚdtÚliÚpr|   ry   r~   rz   r}   r{   rƒ   r…   rK   z expected-closing-tag-but-got-eof)rY   r   rS   r   r(   rT   )r    Zallowed_elementsr‡   r   r   r   rd   I  s
    
zInBodyPhase.process_eofc                 C   sf   |d }| j | _| d¡rH| jjd jdv rH| jjd  ¡ sH|dd … }|rb| j ¡  | j |¡ d S )NrM   Ú
rK   )ÚpreÚlistingÚtextarear   )	r   r\   r·   r   rS   r   Zhas_contentÚ&reconstruct_active_formatting_elementsr£   )r    re   rM   r   r   r   Ú%process_space_characters_drop_newlineT  s    
ÿþ
z1InBodyPhase.process_space_characters_drop_newlinec                 C   sT   |d dkrd S | j  ¡  | j  |d ¡ | jjrPtdd„ |d D ƒƒrPd| j_d S )NrM   ú c                 s   s   | ]}|t vV  qd S rI   ©r   ©r   Úcharr   r   r   Ú	<genexpr>h  s   z1InBodyPhase.process_characters.<locals>.<genexpr>F)r   r  r£   r(   r<   Úanyrm   r   r   r   r[   a  s    
ÿzInBodyPhase.process_charactersc                 C   s   | j  ¡  | j  |d ¡ d S r¡   )r   r  r£   rm   r   r   r   r   l  s    
z,InBodyPhase.process_space_characters_non_prec                 C   s   | j jd  |¡S rñ   rÉ   rm   r   r   r   Ústart_tag_process_in_headp  s    z%InBodyPhase.start_tag_process_in_headc                 C   sˆ   | j  dddi¡ t| jjƒdks4| jjd jdkrB| j js„J ‚nBd| j _|d  ¡ D ],\}}|| jjd j	vrV|| jjd j	|< qVd S )Nrô   r   rƒ   r   FrM   )
r(   rT   rV   r   rS   r   r)   r<   r%   rC   r¬   r   r   r   rú   s  s    ÿzInBodyPhase.start_tag_bodyc                 C   s¶   | j  dddi¡ t| jjƒdks4| jjd jdkrB| j js²J ‚np| j jsLnf| jjd jrv| jjd j 	| jjd ¡ | jjd jdkr–| jj 
¡  qv| j |¡ | j jd | j _d S )	Nrô   r   r„   r   rƒ   rK   r…   rv   )r(   rT   rV   r   rS   r   r)   r<   ÚparentÚremove_childr§   r‹   r&   r9   rm   r   r   r   rû   ~  s    ÿ
ÿzInBodyPhase.start_tag_framesetc                 C   s.   | j jdddr|  tdƒ¡ | j  |¡ d S ©Nr  Úbutton©Úvariant)r   Úelement_in_scopeÚ	end_tag_pr¿   r‹   rm   r   r   r   Ústart_tag_close_pŽ  s    zInBodyPhase.start_tag_close_pc                 C   s>   | j jdddr|  tdƒ¡ | j  |¡ d| j_| j| _d S )Nr  r  r  F)	r   r   r!  r¿   r‹   r(   r<   r  r\   rm   r   r   r   Ústart_tag_pre_listing“  s
    z!InBodyPhase.start_tag_pre_listingc                 C   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   Úformr  r  r  rK   )	r   Úform_elementr(   rT   r   r!  r¿   r‹   rS   rm   r   r   r   Ústart_tag_formš  s    zInBodyPhase.start_tag_formc                 C   s¨   d| j _dgddgddgdœ}||d  }t| jjƒD ]>}|j|v r\| j j t|jƒ¡  qv|j	t
v r6|jdvr6 qvq6| jjdd	d
r˜| j j tdƒ¡ | j |¡ d S )NFr  r
  r	  )r  r
  r	  r   )Úaddressrh   r  r  r  r  )r(   r<   Úreversedr   rS   r   r9   r_   r¿   Ú
name_tupler   r   r‹   )r    re   Zstop_names_mapZ
stop_namesr‡   r   r   r   Ústart_tag_list_item£  s     
ÿ
ÿzInBodyPhase.start_tag_list_itemc                 C   s>   | j jdddr|  tdƒ¡ | j  |¡ | jjj| jj_d S r  )	r   r   r!  r¿   r‹   r(   r+   r8   r6   rm   r   r   r   Ústart_tag_plaintext¶  s    zInBodyPhase.start_tag_plaintextc                 C   sb   | j jdddr|  tdƒ¡ | j jd jtv rR| j dd|d i¡ | j j 	¡  | j  
|¡ d S )Nr  r  r  rK   rô   r   )r   r   r!  r¿   rS   r   r
   r(   rT   r§   r‹   rm   r   r   r   Ústart_tag_heading¼  s    zInBodyPhase.start_tag_headingc                 C   s~   | j  d¡}|rf| j ddddœ¡ |  tdƒ¡ || j jv rL| j j |¡ || j jv rf| j j |¡ | j  	¡  |  
|¡ d S )NÚaú$unexpected-start-tag-implies-end-tag©Z	startNameZendName)r   Ú%element_in_active_formatting_elementsr(   rT   Úend_tag_formattingr¿   rS   rü   r  r  r  )r    re   Zafe_a_elementr   r   r   Ústart_tag_aÄ  s    þ
zInBodyPhase.start_tag_ac                 C   s   | j  ¡  |  |¡ d S rI   )r   r  r  rm   r   r   r   Ústart_tag_formattingÒ  s    
z InBodyPhase.start_tag_formattingc                 C   sP   | j  ¡  | j  d¡rB| j ddddœ¡ |  tdƒ¡ | j  ¡  |  |¡ d S )NÚnobrr.  r/  )r   r  r   r(   rT   r_   r¿   r  rm   r   r   r   Ústart_tag_nobrÖ  s    
þ
zInBodyPhase.start_tag_nobrc                 C   sT   | j  d¡r2| j ddddœ¡ |  tdƒ¡ |S | j  ¡  | j  |¡ d| j_d S )Nr  r.  r/  F)	r   r   r(   rT   r_   r¿   r  r‹   r<   rm   r   r   r   Ústart_tag_buttoná  s    þ
zInBodyPhase.start_tag_buttonc                 C   s0   | j  ¡  | j  |¡ | j j t¡ d| j_d S ©NF)r   r  r‹   r  rc   r   r(   r<   rm   r   r   r   Ústart_tag_applet_marquee_objectí  s    
z+InBodyPhase.start_tag_applet_marquee_objectc                 C   sB   | j jdddr|  tdƒ¡ | j  ¡  d| j_| j |d¡ d S )Nr  r  r  Frˆ   )r   r   r!  r¿   r  r(   r<   rŽ   rm   r   r   r   Ústart_tag_xmpó  s
    
zInBodyPhase.start_tag_xmpc                 C   sR   | j jdkr*| jjdddr*|  tdƒ¡ | j |¡ d| j _| j jd | j _	d S )Nr¶   r  r  r  Frt   )
r(   r4   r   r   r_   r¿   r‹   r<   r&   r9   rm   r   r   r   Ústart_tag_tableú  s    zInBodyPhase.start_tag_tablec                 C   s6   | j  ¡  | j  |¡ | j j ¡  d|d< d| j_d S )NTrR   F)r   r  r‹   rS   r§   r(   r<   rm   r   r   r   Ústart_tag_void_formatting  s
    
z%InBodyPhase.start_tag_void_formattingc                 C   s@   | j j}|  |¡ d|d v r<|d d  t¡dkr<|| j _d S )NrL   rM   Úhidden)r(   r<   r;  rD   r   )r    re   r<   r   r   r   Ústart_tag_input	  s    
ÿzInBodyPhase.start_tag_inputc                 C   s$   | j  |¡ | j j ¡  d|d< d S rÏ   rÐ   rm   r   r   r   Ústart_tag_param_source  s    z"InBodyPhase.start_tag_param_sourcec                 C   sJ   | j jdddr|  tdƒ¡ | j  |¡ | j j ¡  d|d< d| j_d S )Nr  r  r  TrR   F)	r   r   r!  r¿   r‹   rS   r§   r(   r<   rm   r   r   r   Ústart_tag_hr  s    zInBodyPhase.start_tag_hrc                 C   s6   | j  ddddœ¡ |  tdd|d |d d¡ d S )	Nzunexpected-start-tag-treated-asÚimageÚimg©ZoriginalNameZnewNamerX   rM   rQ   ©rC   Úself_closing)r(   rT   r]   r¿   rm   r   r   r   Ústart_tag_image  s    þ
þzInBodyPhase.start_tag_imagec                 C   s  | j  dddi¡ | jjrd S i }d|d v r>|d d |d< |  tdd|d¡ |  td	dƒ¡ |  td
dƒ¡ d|d v rŒ|d d }nd}|  tj|dœ¡ |d  	¡ }d|v r¼|d= d|v rÊ|d= d|d< |  tdd||d d¡ |  
td
ƒ¡ |  td	dƒ¡ |  
tdƒ¡ d S )Nzdeprecated-tagr   ÚisindexÚactionrM   r$  rX   )rC   ÚhrÚlabelÚpromptz3This is a searchable index. Enter search keywords: ©rL   rM   ÚinputrQ   rC  )r(   rT   r   r%  r]   r¿   r[   r   rZ   Úcopyr_   )r    re   Z
form_attrsrJ  rC   r   r   r   Ústart_tag_isindex'  s8    ÿþzInBodyPhase.start_tag_isindexc                 C   s0   | j  |¡ | jjj| jj_| j| _d| j_d S r7  )	r   r‹   r(   r+   r5   r6   r  r\   r<   rm   r   r   r   Ústart_tag_textareaE  s    zInBodyPhase.start_tag_textareac                 C   s   d| j _|  |¡ d S r7  )r(   r<   Ústart_tag_rawtextrm   r   r   r   Ústart_tag_iframeK  s    zInBodyPhase.start_tag_iframec                 C   s"   | j jr|  |¡ n
|  |¡ d S rI   )r(   r*   rP  r¦   rm   r   r   r   rÜ   O  s    zInBodyPhase.start_tag_noscriptc                 C   s   | j  |d¡ d S rÙ   r×   rm   r   r   r   rP  U  s    zInBodyPhase.start_tag_rawtextc                 C   s@   | j jd jdkr$| jj tdƒ¡ | j  ¡  | jj  |¡ d S ©NrK   Úoption)	r   rS   r   r(   r9   r_   r¿   r  r‹   rm   r   r   r   Ústart_tag_optX  s    
zInBodyPhase.start_tag_optc                 C   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v rx| jjd | j_n| jjd	 | j_d S )
NFrt   rr   rs   rq   rp   ro   úin select in tablern   )r   r  r‹   r(   r<   r9   r&   rm   r   r   r   Ústart_tag_select^  s    






úzInBodyPhase.start_tag_selectc                 C   sD   | j  d¡r4| j  ¡  | j jd jdkr4| j d¡ | j  |¡ d S )NÚrubyrK   zrp-or-rt-tag-not-in-ruby-scope)r   r   Úgenerate_implied_end_tagsrS   r   r(   rT   r‹   rm   r   r   r   Ústart_tag_rp_rtm  s
    
zInBodyPhase.start_tag_rp_rtc                 C   sZ   | j  ¡  | j |¡ | j |¡ td |d< | j  |¡ |d rV| j j ¡  d|d< d S )Nr@   rB   rQ   TrR   )	r   r  r(   r   r   r   r‹   rS   r§   rm   r   r   r   Ústart_tag_matht  s    
zInBodyPhase.start_tag_mathc                 C   sZ   | j  ¡  | j |¡ | j |¡ td |d< | j  |¡ |d rV| j j ¡  d|d< d S )NrO   rB   rQ   TrR   )	r   r  r(   r   r   r   r‹   rS   r§   rm   r   r   r   Ústart_tag_svg€  s    
zInBodyPhase.start_tag_svgc                 C   s   | j  dd|d i¡ dS )z÷Elements that should be children of other elements.

        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    rm   r   r   r   Ústart_tag_misplacedŒ  s    zInBodyPhase.start_tag_misplacedc                 C   s   | j  ¡  | j  |¡ d S rI   )r   r  r‹   rm   r   r   r   r¦   –  s    
zInBodyPhase.start_tag_otherc                 C   sš   | j jdddsB|  tddƒ¡ | j dddi¡ |  tdƒ¡ nT| j  d¡ | j jd j	dkrr| j dddi¡ | j j 
¡ }|j	dkr–| j j 
¡ }q~d S )Nr  r  r  rX   rä   r   rK   )r   r   r"  r¿   r(   rT   r!  rX  rS   r   r§   rà   r   r   r   r!  š  s    
zInBodyPhase.end_tag_pc                 C   s†   | j  d¡s"| j dddi¡ d S | j jd jdkrr| j jdd … D ],}|jtdƒvrD| j dd|jdœ¡  qrqD| jjd	 | j_d S )
Nrƒ   rä   r   rK   é   )r	  r
  r  ÚoptgrouprS  r  ÚrpÚrtr|   ry   r~   rz   r}   r{   rƒ   r…   ú$expected-one-end-tag-but-got-another©ZgotNameZexpectedNameú
after body)	r   r   r(   rT   rS   r   rY   r&   r9   rà   r   r   r   Úend_tag_body§  s    
þzInBodyPhase.end_tag_bodyc                 C   s"   | j  d¡r|  tdƒ¡ |S d S )Nrƒ   )r   r   rd  r¿   rm   r   r   r   Úend_tag_html·  s    zInBodyPhase.end_tag_htmlc                 C   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   r  rK   úend-tag-too-early)
r   r\   r   r   rX  rS   r   r(   rT   r§   )r    re   Zin_scoper‡   r   r   r   Úend_tag_block½  s    
zInBodyPhase.end_tag_blockc                 C   sv   | j j}d | j _|d u 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   r$  rK   zend-tag-too-early-ignored)r   r%  r   r(   rT   rX  rS   rü   rà   r   r   r   Úend_tag_formË  s    
zInBodyPhase.end_tag_formc                 C   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   r  Úlistr  rä   ©ÚexcluderK   rf  )r   r   r(   rT   rX  rS   r   r§   )r    re   r  r‡   r   r   r   Úend_tag_list_itemÖ  s    zInBodyPhase.end_tag_list_itemc                 C   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 vrˆ| jj ¡ }qp qŽqTd S )NrK   r   rf  )	r
   r   r   rX  rS   r   r(   rT   r§   )r    re   Úitemr   r   r   Úend_tag_headingå  s    

zInBodyPhase.end_tag_headingc                 C   s  d}|dk r
|d7 }| j  |d ¡}|rD|| j jv rR| j  |j¡sR|  |¡ dS || j jv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v rö|} qqö|du 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v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ƒv r˜| j  ¡ \}}| |	|¡ n
| |	¡ | ¡ }| |¡ | |¡ | j j 	|¡ | j j ||¡ | j j 	|¡ | j j | j j 
|¡d |¡ qdS )z*The much-feared adoption agency algorithm.r=   é   r   r   Nzadoption-agency-1.2zadoption-agency-4.4rK   zadoption-agency-1.3r  ©r   r|   r~   r}   r{   )r   r0  rS   r   r   r°   r(   rT   r  rü   Úindexr)  r   r§   Úcloner  r  Zappend_childrY   Z!get_table_misnested_node_positionÚinsert_beforeZreparent_childrenÚinsert)r    re   Zouter_loop_counterZformatting_elementZ	afe_indexZfurthest_blockrF   Zcommon_ancestorZbookmarkZ	last_noder‡   Zinner_loop_counterrq  rr  r  rs  r   r   r   r1  ô  sœ    

ÿ
ÿþ
ÿ	






ÿÿ



ÿzInBodyPhase.end_tag_formattingc                 C   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   rK   rf  )	r   r   rX  rS   r   r(   rT   r§   Ú clear_active_formatting_elements)r    re   rF   r   r   r   Úend_tag_applet_marquee_objectš  s    
z)InBodyPhase.end_tag_applet_marquee_objectc                 C   s@   | j  ddddœ¡ | j ¡  | j tddƒ¡ | jj ¡  d S )Nzunexpected-end-tag-treated-asrÃ   z
br elementrB  rX   )r(   rT   r   r  r‹   r¿   rS   r§   rm   r   r   r   rø   ¦  s    þ
zInBodyPhase.end_tag_brc                 C   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v r| j dd|d i¡  q qd S )NrK   r   rj  rä   )	r   rS   r   rX  r(   rT   r§   r)  r   rà   r   r   r   r°   ®  s    ÿ
ÿzInBodyPhase.end_tag_otherr…   )	rê   rë   rì   rí   rî   rï   ré   rç   rå   rƒ   r„   )r'  ÚarticleÚasideÚ
blockquoteÚcenterÚdetailsÚdirrh   ÚdlÚfieldsetÚ
figcaptionÚfigureÚfooterÚheaderÚhgroupÚmainÚmenuÚnavÚolr  ÚsectionÚsummaryÚul)r  r  r$  )r  r	  r
  r0   r-  )ÚbÚbigÚcodeÚemÚfontÚiÚsÚsmallÚstrikeÚstrongÚttÚur4  r  )ZappletZmarqueeÚobjectZxmpr   )ÚarearÃ   ÚembedrA  ÚkeygenZwbr)ÚparamÚsourceZtrackrL  rH  r@  rF  r  Ziframerè   )Znoembedræ   rx   )r_  r`  )rS  r^  ÚmathrO   )r   Úcolr€   Úframer‚   r|   ry   r~   rz   r}   r{   )r'  rw  rx  ry  r  rz  r{  Zdialogr|  rh   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  r4  r‘  r’  r“  r”  r•  r–  rÃ   )>r   r   r‘   r±   r'   r  r  rd   r  r[   r   r  rú   rû   r"  r#  r&  r*  r+  r,  r2  r3  r5  r6  r8  r9  r:  r;  r=  r>  r?  rE  rN  rO  rQ  rÜ   rP  rT  rV  rY  rZ  r[  r\  r¦   r!  rd  re  rg  rh  rl  rn  r1  rv  rø   r°   r™   rš   r®   r
   r¥   r¯   Ú__classcell__r   r   r  r   rþ   (  sà   		
 'ÿýÿÿÚ*ýÿòrþ   c                   @   sP   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	e
g ƒZe
defgƒZdS )Ú	TextPhasec                 C   s   | j  |d ¡ d S r¡   r¢   rm   r   r   r   r[   ý  s    zTextPhase.process_charactersc                 C   s8   | j  dd| jjd ji¡ | jj ¡  | j j| j _dS )Nz&expected-named-closing-tag-but-got-eofr   rK   T)r(   rT   r   rS   r   r§   rŒ   r9   r   r   r   r   rd      s    þzTextPhase.process_eofc                 C   s   dsJ d|d › dƒ‚d S )NFzTried to process start tag r   z in RCDATA/RAWTEXT moder   rm   r   r   r   r¦     s    ÿzTextPhase.start_tag_otherc                 C   s*   | j j ¡ }|jdksJ ‚| jj| j_d S )Nré   )r   rS   r§   r   r(   rŒ   r9   rà   r   r   r   Úend_tag_script  s    zTextPhase.end_tag_scriptc                 C   s   | j j ¡  | jj| j_d S rI   )r   rS   r§   r(   rŒ   r9   rm   r   r   r   r°     s    zTextPhase.end_tag_otherré   N)r   r   r‘   r½   r±   r[   rd   r¦   r¢  r°   r™   r¥   r¯   r   r   r   r   r¡  ú  s   r¡  c                   @   sü   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zed%ejfd&e
fd'efd(efd)efd*efd+efd,efd-efd.efg
ƒZed+efd/efgƒZd0S )1ÚInTablePhasec                 C   s$   | j jd jdvr | j j ¡  q d S )NrK   )r   r…   )r   rS   r   r§   r   r   r   r   Ú_clear_stack_to_table_context  s    z*InTablePhase._clear_stack_to_table_contextc                 C   s0   | j jd jdkr | j d¡ n| jjs,J ‚d S )NrK   r…   zeof-in-table©r   rS   r   r(   rT   r)   r   r   r   r   rd   '  s    zInTablePhase.process_eofc                 C   s4   | j j}| j jd | j _|| j j_| j j |¡ d S ©Núin table text)r(   r9   r&   rŒ   r\   ©r    re   rŒ   r   r   r   r\   .  s    
z%InTablePhase.process_space_charactersc                 C   s4   | j j}| j jd | j _|| j j_| j j |¡ d S r¦  )r(   r9   r&   rŒ   r[   r¨  r   r   r   r[   4  s    
zInTablePhase.process_charactersc                 C   s&   d| j _| jjd  |¡ d| j _d S )NTru   F)r   Úinsert_from_tabler(   r&   r[   rm   r   r   r   r£   :  s    zInTablePhase.insert_textc                 C   s6   |   ¡  | jj t¡ | j |¡ | jjd | j_d S )Nrr   )	r¤  r   r  rc   r   r‹   r(   r&   r9   rm   r   r   r   Ústart_tag_captionA  s    zInTablePhase.start_tag_captionc                 C   s(   |   ¡  | j |¡ | jjd | j_d S )Nrs   ©r¤  r   r‹   r(   r&   r9   rm   r   r   r   Ústart_tag_colgroupG  s    zInTablePhase.start_tag_colgroupc                 C   s   |   tddƒ¡ |S )Nr€   rX   )r¬  r¿   rm   r   r   r   Ústart_tag_colL  s    zInTablePhase.start_tag_colc                 C   s(   |   ¡  | j |¡ | jjd | j_d S )Nrq   r«  rm   r   r   r   Ústart_tag_rowgroupP  s    zInTablePhase.start_tag_rowgroupc                 C   s   |   tddƒ¡ |S )Nr|   rX   )r®  r¿   rm   r   r   r   Ústart_tag_imply_tbodyU  s    z"InTablePhase.start_tag_imply_tbodyc                 C   s6   | j  ddddœ¡ | j j tdƒ¡ | j js2|S d S )Nr.  r   r/  )r(   rT   r9   r_   r¿   r)   rm   r   r   r   r:  Y  s    þzInTablePhase.start_tag_tablec                 C   s   | j jd  |¡S rñ   rÉ   rm   r   r   r   Ústart_tag_style_scripta  s    z#InTablePhase.start_tag_style_scriptc                 C   sV   d|d v rH|d d   t¡dkrH| j d¡ | j |¡ | jj ¡  n
|  |¡ d S )NrL   rM   r<  z unexpected-hidden-input-in-table)	rD   r   r(   rT   r   r‹   rS   r§   r¦   rm   r   r   r   r=  d  s    ÿzInTablePhase.start_tag_inputc                 C   sD   | j  d¡ | jjd u r@| j |¡ | jjd | j_| jj ¡  d S )Nzunexpected-form-in-tablerK   )r(   rT   r   r%  r‹   rS   r§   rm   r   r   r   r&  n  s
    zInTablePhase.start_tag_formc                 C   s<   | j  dd|d i¡ d| j_| j jd  |¡ d| j_d S )Nz)unexpected-start-tag-implies-table-voodoor   Tru   F)r(   rT   r   r©  r&   r]   rm   r   r   r   r¦   u  s    ÿzInTablePhase.start_tag_otherc                 C   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j	sŽJ ‚| j dd|d i¡ d S )Nr   r  rK   zend-tag-too-early-namedrb  rä   r   )
r   r   rX  rS   r   r(   rT   r§   r;   r)   rm   r   r   r   Úend_tag_table}  s    
þzInTablePhase.end_tag_tablec                 C   s   | j  dd|d i¡ d S rã   r    rm   r   r   r   Úend_tag_ignore  s    zInTablePhase.end_tag_ignorec                 C   s<   | j  dd|d i¡ d| j_| j jd  |¡ d| j_d S )Nz'unexpected-end-tag-implies-table-voodoor   Tru   F)r(   rT   r   r©  r&   r_   rm   r   r   r   r°     s    ÿzInTablePhase.end_tag_otherr…   r   r€   rž  ©r|   r~   r}   )ry   rz   r{   r   )rç   ré   rL  r$  )rƒ   r   rž  r€   r…   r|   ry   r~   rz   r}   r{   N)r   r   r‘   r½   r±   r¤  rd   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£    sJ   
öÿþr£  c                       sX   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Z‡  ZS )ÚInTableTextPhase)rŒ   Úcharacter_tokensc                    s"   t ƒ j|i |¤Ž d | _g | _d S rI   )rÿ   r'   rŒ   rµ  r  r  r   r   r'   ¯  s    zInTableTextPhase.__init__c                 C   sb   d  dd„ | jD ƒ¡}tdd„ |D ƒƒrHtj|dœ}| jjd  |¡ n|rX| j |¡ g | _d S )Nrµ   c                 S   s   g | ]}|d  ‘qS )rM   r   ©r   rm  r   r   r   Ú
<listcomp>µ  r"   z5InTableTextPhase.flush_characters.<locals>.<listcomp>c                 s   s   | ]}|t vV  qd S rI   r  r¶  r   r   r   r  ¶  r"   z4InTableTextPhase.flush_characters.<locals>.<genexpr>rK  rt   )	Újoinrµ  r  r   rZ   r(   r&   r£   r   )r    rM   re   r   r   r   Úflush_characters´  s    z!InTableTextPhase.flush_charactersc                 C   s   |   ¡  | j| j_|S rI   ©r¹  rŒ   r(   r9   rm   r   r   r   ra   ½  s    
z InTableTextPhase.process_commentc                 C   s   |   ¡  | j| j_dS rÀ   rº  r   r   r   r   rd   Â  s    
zInTableTextPhase.process_eofc                 C   s    |d dkrd S | j  |¡ d S ©NrM   r  ©rµ  rc   rm   r   r   r   r[   Ç  s    z#InTableTextPhase.process_charactersc                 C   s   | j  |¡ d S rI   r¼  rm   r   r   r   r\   Ì  s    z)InTableTextPhase.process_space_charactersc                 C   s   |   ¡  | j| j_|S rI   rº  rm   r   r   r   r]   Ñ  s    
z"InTableTextPhase.process_start_tagc                 C   s   |   ¡  | j| j_|S rI   rº  rm   r   r   r   r_   Ö  s    
z InTableTextPhase.process_end_tag)r   r   r‘   r±   r'   r¹  ra   rd   r[   r\   r]   r_   r   r   r   r  r   r´  ¬  s   	r´  c                   @   sŠ   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZedejfdefgƒZede
fdefdefgƒZdS )ÚInCaptionPhasec                 C   s   | j jddd S )Nr   r   r  ©r   r   r   r   r   r   Úignore_end_tag_captionà  s    z%InCaptionPhase.ignore_end_tag_captionc                 C   s   | j jd  ¡  d S rÈ   ©r(   r&   rd   r   r   r   r   rd   ã  s    zInCaptionPhase.process_eofc                 C   s   | j jd  |¡S rÈ   ©r(   r&   r[   rm   r   r   r   r[   æ  s    z!InCaptionPhase.process_charactersc                 C   s2   | j  d¡ |  ¡ }| j j tdƒ¡ |s.|S d S )Nz%unexpected-table-start-tag-in-captionr   ©r(   rT   r¿  r9   r_   r¿   ©r    re   Úignore_end_tagr   r   r   Ústart_tag_table_elementé  s
    z&InCaptionPhase.start_tag_table_elementc                 C   s   | j jd  |¡S rÈ   rÉ   rm   r   r   r   r¦   ñ  s    zInCaptionPhase.start_tag_otherc                 C   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js–J ‚| j dd|d i¡ d S )NrK   r   ra  rb  rt   rä   r   )r¿  r   rX  rS   r   r(   rT   r§   ru  r&   r9   r)   rm   r   r   r   Úend_tag_captionô  s    
þ
zInCaptionPhase.end_tag_captionc                 C   s2   | j  d¡ |  ¡ }| j j tdƒ¡ |s.|S d S )Nz#unexpected-table-end-tag-in-captionr   rÂ  rÃ  r   r   r   r±    s
    zInCaptionPhase.end_tag_tablec                 C   s   | j  dd|d i¡ d S rã   r    rm   r   r   r   r²    s    zInCaptionPhase.end_tag_ignorec                 C   s   | j jd  |¡S rÈ   ©r(   r&   r_   rm   r   r   r   r°     s    zInCaptionPhase.end_tag_otherr…   ©	r   rž  r€   r|   ry   r~   rz   r}   r{   r   r   )
rƒ   rž  r€   r…   r|   ry   r~   rz   r}   r{   N)r   r   r‘   r½   r±   r¿  rd   r[   rÅ  r¦   rÆ  r±  r²  r°   r™   rš   r®   r¥   r¯   r   r   r   r   r½  Ü  s.   ÿþÿýr½  c                   @   s|   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ ZedejfdefgƒZede
fdefgƒZdS )ÚInColumnGroupPhasec                 C   s   | j jd jdkS )NrK   r…   )r   rS   r   r   r   r   r   Úignore_end_tag_colgroup%  s    z*InColumnGroupPhase.ignore_end_tag_colgroupc                 C   sD   | j jd jdkr"| jjsJ ‚d S |  ¡ }|  tdƒ¡ |s@dS d S )NrK   r…   r€   T)r   rS   r   r(   r)   rÊ  Úend_tag_colgroupr¿   )r    rÄ  r   r   r   rd   (  s    zInColumnGroupPhase.process_eofc                 C   s"   |   ¡ }|  tdƒ¡ |s|S d S ©Nr€   ©rÊ  rË  r¿   rÃ  r   r   r   r[   2  s    z%InColumnGroupPhase.process_charactersc                 C   s$   | j  |¡ | j j ¡  d|d< d S rÏ   rÐ   rm   r   r   r   r­  8  s    z InColumnGroupPhase.start_tag_colc                 C   s"   |   ¡ }|  tdƒ¡ |s|S d S rÌ  rÍ  rÃ  r   r   r   r¦   =  s    z"InColumnGroupPhase.start_tag_otherc                 C   sL   |   ¡ r,| jjsJ ‚| j dd|d i¡ n| jj ¡  | jjd | j_d S )Nrä   r   rt   )	rÊ  r(   r)   rT   r   rS   r§   r&   r9   rm   r   r   r   rË  C  s
    z#InColumnGroupPhase.end_tag_colgroupc                 C   s   | j  dddi¡ d S )Nz
no-end-tagr   rž  r    rm   r   r   r   Úend_tag_colL  s    zInColumnGroupPhase.end_tag_colc                 C   s"   |   ¡ }|  tdƒ¡ |s|S d S rÌ  rÍ  rÃ  r   r   r   r°   O  s    z InColumnGroupPhase.end_tag_otherr…   rž  r€   N)r   r   r‘   r½   r±   rÊ  rd   r[   r­  r¦   rË  rÎ  r°   r™   rš   r®   r¥   r¯   r   r   r   r   rÉ  !  s"   
	þþrÉ  c                   @   s®   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedejfde	fde
fdefgƒZedefdefdefgƒZd S )!ÚInTableBodyPhasec                 C   sB   | j jd jdvr | j j ¡  q | j jd jdkr>| jjs>J ‚d S )NrK   )r|   r~   r}   r…   r…   )r   rS   r   r§   r(   r)   r   r   r   r   Ú"_clear_stack_to_table_body_contextd  s    z3InTableBodyPhase._clear_stack_to_table_body_contextc                 C   s   | j jd  ¡  d S ©Nrt   rÀ  r   r   r   r   rd   m  s    zInTableBodyPhase.process_eofc                 C   s   | j jd  |¡S rÑ  rò   rm   r   r   r   r\   p  s    z)InTableBodyPhase.process_space_charactersc                 C   s   | j jd  |¡S rÑ  rÁ  rm   r   r   r   r[   s  s    z#InTableBodyPhase.process_charactersc                 C   s(   |   ¡  | j |¡ | jjd | j_d S )Nrp   )rÐ  r   r‹   r(   r&   r9   rm   r   r   r   Ústart_tag_trv  s    zInTableBodyPhase.start_tag_trc                 C   s*   | j  dd|d i¡ |  tddƒ¡ |S )Nzunexpected-cell-in-table-bodyr   r{   rX   )r(   rT   rÒ  r¿   rm   r   r   r   Ústart_tag_table_cell{  s
    ÿz%InTableBodyPhase.start_tag_table_cellc                 C   sz   | j jddds0| j jddds0| j jdddrT|  ¡  |  t| j jd jƒ¡ |S | jjs`J ‚| j 	dd|d i¡ d S )	Nr|   r   r  r}   r~   rK   z!unexpected-start-tag-out-of-tabler   ©
r   r   rÐ  Úend_tag_table_rowgroupr¿   rS   r   r(   r)   rT   rm   r   r   r   Ústart_tag_table_other  s    ÿþÿÿz&InTableBodyPhase.start_tag_table_otherc                 C   s   | j jd  |¡S rÑ  rÉ   rm   r   r   r   r¦     s    z InTableBodyPhase.start_tag_otherc                 C   sT   | j j|d ddr:|  ¡  | j j ¡  | jjd | j_n| j dd|d i¡ d S )Nr   r   r  rt   ú unexpected-end-tag-in-table-body)	r   r   rÐ  rS   r§   r(   r&   r9   rT   rm   r   r   r   rÕ  “  s    ÿz'InTableBodyPhase.end_tag_table_rowgroupc                 C   sz   | j jddds0| j jddds0| j jdddrT|  ¡  |  t| j jd jƒ¡ |S | jjs`J ‚| j 	dd|d i¡ d S )	Nr|   r   r  r}   r~   rK   rä   r   rÔ  rm   r   r   r   r±  œ  s    ÿþÿzInTableBodyPhase.end_tag_tablec                 C   s   | j  dd|d i¡ d S )Nr×  r   r    rm   r   r   r   r²  ©  s    ÿzInTableBodyPhase.end_tag_ignorec                 C   s   | j jd  |¡S rÑ  rÇ  rm   r   r   r   r°   ­  s    zInTableBodyPhase.end_tag_otherr…   r{   ©ry   rz   )r   rž  r€   r|   r~   r}   r³  r   )rƒ   r   rž  r€   r…   ry   rz   r{   N)r   r   r‘   r½   r±   rÐ  rd   r\   r[   rÒ  rÓ  rÖ  r¦   rÕ  r±  r²  r°   r™   rš   r®   r¥   r¯   r   r   r   r   rÏ  `  s8   		ÿüÿýrÏ  c                   @   s¶   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedejfde
fdefgƒZedefdefd efd!efgƒZd"S )#Ú
InRowPhasec                 C   s@   | j jd jdvr<| j dd| j jd ji¡ | j j ¡  q d S )NrK   )r{   r…   z'unexpected-implied-end-tag-in-table-rowr   )r   rS   r   r(   rT   r§   r   r   r   r   Ú!_clear_stack_to_table_row_contextÄ  s    þz,InRowPhase._clear_stack_to_table_row_contextc                 C   s   | j jddd S )Nr{   r   r  r¾  r   r   r   r   Úignore_end_tag_trË  s    zInRowPhase.ignore_end_tag_trc                 C   s   | j jd  ¡  d S rÑ  rÀ  r   r   r   r   rd   Î  s    zInRowPhase.process_eofc                 C   s   | j jd  |¡S rÑ  rò   rm   r   r   r   r\   Ñ  s    z#InRowPhase.process_space_charactersc                 C   s   | j jd  |¡S rÑ  rÁ  rm   r   r   r   r[   Ô  s    zInRowPhase.process_charactersc                 C   s6   |   ¡  | j |¡ | jjd | j_| jj t¡ d S )Nro   )	rÚ  r   r‹   r(   r&   r9   r  rc   r   rm   r   r   r   rÓ  ×  s    zInRowPhase.start_tag_table_cellc                 C   s"   |   ¡ }|  tdƒ¡ |s|S d S ©Nr{   ©rÛ  Ú
end_tag_trr¿   rÃ  r   r   r   rÖ  Ý  s    z InRowPhase.start_tag_table_otherc                 C   s   | j jd  |¡S rÑ  rÉ   rm   r   r   r   r¦   ä  s    zInRowPhase.start_tag_otherc                 C   sT   |   ¡ s.|  ¡  | jj ¡  | jjd | j_n"| jjs:J ‚| j 	dd|d i¡ d S )Nrq   rä   r   )
rÛ  rÚ  r   rS   r§   r(   r&   r9   r)   rT   rm   r   r   r   rÞ  ç  s    zInRowPhase.end_tag_trc                 C   s"   |   ¡ }|  tdƒ¡ |s|S d S rÜ  rÝ  rÃ  r   r   r   r±  ñ  s    zInRowPhase.end_tag_tablec                 C   s@   | j j|d ddr&|  tdƒ¡ |S | j dd|d i¡ d S )Nr   r   r  r{   rä   )r   r   rÞ  r¿   r(   rT   rm   r   r   r   rÕ  ù  s    z!InRowPhase.end_tag_table_rowgroupc                 C   s   | j  dd|d i¡ d S )Nzunexpected-end-tag-in-table-rowr   r    rm   r   r   r   r²     s    ÿzInRowPhase.end_tag_ignorec                 C   s   | j jd  |¡S rÑ  rÇ  rm   r   r   r   r°     s    zInRowPhase.end_tag_otherr…   rØ  )r   rž  r€   r|   r~   r}   r{   r{   r   r³  )rƒ   r   rž  r€   r…   ry   rz   N)r   r   r‘   r½   r±   rÚ  rÛ  rd   r\   r[   rÓ  rÖ  r¦   rÞ  r±  rÕ  r²  r°   r™   rš   r®   r¥   r¯   r   r   r   r   rÙ  À  s6   
ÿýürÙ  c                   @   sŠ   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZedejfdefgƒZede
fdefdefgƒZdS )ÚInCellPhasec                 C   sB   | j jdddr |  tdƒ¡ n| j jdddr>|  tdƒ¡ d S )Nry   r   r  rz   )r   r   Úend_tag_table_cellr¿   r   r   r   r   Ú_close_cell  s    zInCellPhase._close_cellc                 C   s   | j jd  ¡  d S rÈ   rÀ  r   r   r   r   rd      s    zInCellPhase.process_eofc                 C   s   | j jd  |¡S rÈ   rÁ  rm   r   r   r   r[   #  s    zInCellPhase.process_charactersc                 C   sR   | j jddds | j jdddr,|  ¡  |S | jjs8J ‚| j dd|d i¡ d S )Nry   r   r  rz   z&unexpected-start-tag-out-of-table-cellr   )r   r   rá  r(   r)   rT   rm   r   r   r   rÖ  &  s    ÿÿz!InCellPhase.start_tag_table_otherc                 C   s   | j jd  |¡S rÈ   rÉ   rm   r   r   r   r¦   1  s    zInCellPhase.start_tag_otherc                 C   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  rK   zunexpected-cell-end-tagrp   rä   )r   r   rX  rS   r   r(   rT   r§   ru  r&   r9   rà   r   r   r   rà  4  s    ÿ
zInCellPhase.end_tag_table_cellc                 C   s   | j  dd|d i¡ d S rã   r    rm   r   r   r   r²  E  s    zInCellPhase.end_tag_ignorec                 C   s:   | j j|d ddr |  ¡  |S | j dd|d i¡ d S )Nr   r   r  rä   )r   r   rá  r(   rT   rm   r   r   r   Úend_tag_implyH  s    zInCellPhase.end_tag_implyc                 C   s   | j jd  |¡S rÈ   rÇ  rm   r   r   r   r°   P  s    zInCellPhase.end_tag_otherr…   rÈ  rØ  )rƒ   r   rž  r€   r…   rp  N)r   r   r‘   r½   r±   rá  rd   r[   rÖ  r¦   rà  r²  râ  r°   r™   rš   r®   r¥   r¯   r   r   r   r   rß    s*   ÿþýrß  c                   @   sº   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedejfdefdefde	fde
fdefgƒZedefdefdefgƒZdS ) ÚInSelectPhasec                 C   s0   | j jd jdkr | j d¡ n| jjs,J ‚d S )NrK   r…   zeof-in-selectr¥  r   r   r   r   rd   d  s    zInSelectPhase.process_eofc                 C   s$   |d dkrd S | j  |d ¡ d S r»  r¢   rm   r   r   r   r[   j  s    z InSelectPhase.process_charactersc                 C   s.   | j jd jdkr| j j ¡  | j  |¡ d S rR  ©r   rS   r   r§   r‹   rm   r   r   r   Ústart_tag_optiono  s    zInSelectPhase.start_tag_optionc                 C   sL   | j jd jdkr| j j ¡  | j jd jdkr<| j j ¡  | j  |¡ d S )NrK   rS  r^  rä  rm   r   r   r   Ústart_tag_optgroupu  s
    z InSelectPhase.start_tag_optgroupc                 C   s   | j  d¡ |  tdƒ¡ d S )Nzunexpected-select-in-selectrx   )r(   rT   Úend_tag_selectr¿   rm   r   r   r   rV  |  s    zInSelectPhase.start_tag_selectc                 C   s>   | j  d¡ | jjdddr.|  tdƒ¡ |S | j js:J ‚d S )Nzunexpected-input-in-selectrx   r  )r(   rT   r   r   rç  r¿   r)   rm   r   r   r   r=  €  s
    zInSelectPhase.start_tag_inputc                 C   s   | j jd  |¡S rñ   rÉ   rm   r   r   r   rÝ   ˆ  s    zInSelectPhase.start_tag_scriptc                 C   s   | j  dd|d i¡ d S )Nzunexpected-start-tag-in-selectr   r    rm   r   r   r   r¦   ‹  s    ÿzInSelectPhase.start_tag_otherc                 C   s6   | j jd jdkr | j j ¡  n| j dddi¡ d S )NrK   rS  úunexpected-end-tag-in-selectr   ©r   rS   r   r§   r(   rT   rm   r   r   r   Úend_tag_option  s    zInSelectPhase.end_tag_optionc                 C   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 )NrK   rS  éþÿÿÿr^  rè  r   ré  rm   r   r   r   Úend_tag_optgroup•  s    ÿÿzInSelectPhase.end_tag_optgroupc                 C   sf   | j jdddr@| j j ¡ }|jdkr4| j j ¡ }q| j ¡  n"| jjsLJ ‚| j dd|d i¡ d S )Nrx   r  rä   r   )	r   r   rS   r§   r   r(   r;   r)   rT   rà   r   r   r   rç  ¢  s    
zInSelectPhase.end_tag_selectc                 C   s   | j  dd|d i¡ d S )Nrè  r   r    rm   r   r   r   r°   ­  s    zInSelectPhase.end_tag_otherr…   rS  r^  rx   )rL  rš  r  ré   N)r   r   r‘   r½   r±   rd   r[   rå  ræ  rV  r=  rÝ   r¦   rê  rì  rç  r°   r™   rš   r®   r¥   r¯   r   r   r   r   rã  `  s4   ú	ýrã  c                   @   s^   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
edefgƒZede	fgƒZdS )ÚInSelectInTablePhasec                 C   s   | j jd  ¡  d S ©Nrn   rÀ  r   r   r   r   rd   Ã  s    z InSelectInTablePhase.process_eofc                 C   s   | j jd  |¡S rî  rÁ  rm   r   r   r   r[   Æ  s    z'InSelectInTablePhase.process_charactersc                 C   s(   | j  dd|d i¡ |  tdƒ¡ |S )Nz5unexpected-table-element-start-tag-in-select-in-tabler   rx   )r(   rT   r°   r¿   rm   r   r   r   r:  É  s    
þz$InSelectInTablePhase.start_tag_tablec                 C   s   | j jd  |¡S rî  rÉ   rm   r   r   r   r¦   Ð  s    z$InSelectInTablePhase.start_tag_otherc                 C   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  rx   )r(   rT   r   r   r°   r¿   rm   r   r   r   r±  Ó  s    
þz"InSelectInTablePhase.end_tag_tablec                 C   s   | j jd  |¡S rî  rÇ  rm   r   r   r   r°   Û  s    z"InSelectInTablePhase.end_tag_other)r   r   r|   r~   r}   r{   ry   rz   N)r   r   r‘   r½   r±   rd   r[   r:  r¦   r±  r°   r™   r¥   r¯   r   r   r   r   rí  À  s"   ÿÿÿÿrí  c                   @   s>   e Zd Zeƒ Zeg d¢ƒZdd„ Zdd„ Zdd„ Z	dd	„ Z
d
S )ÚInForeignContentPhase),r‹  rŒ  ry  rƒ   rÃ   rz  r  r	  rh   r}  r
  rŽ  r™  Úh1Úh2Úh3Úh4Úh5Úh6r‚   rH  r  rA  r  r  r…  rï   r4  r‡  r  r  rW  r‘  r’  Úspanr”  r“  ÚsubÚsupr   r•  r–  rŠ  Úvarc              %   C   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& |v rj||d&  |d&< d S )'NZaltGlyphZaltGlyphDefZaltGlyphItemZanimateColorZanimateMotionZanimateTransformÚ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glyphRefÚlinearGradientÚradialGradientZtextPath)$ZaltglyphZaltglyphdefZaltglyphitemZanimatecolorZanimatemotionZanimatetransformZclippathZfeblendZfecolormatrixZfecomponenttransferZfecompositeZfeconvolvematrixZfediffuselightingZfedisplacementmapZfedistantlightZfefloodZfefuncaZfefuncbZfefuncgZfefuncrZfegaussianblurZfeimageZfemergeZfemergenodeZfemorphologyZfeoffsetZfepointlightZfespecularlightingZfespotlightZfetileZfeturbulenceZforeignobjectZglyphrefZlineargradientZradialgradientZtextpathr   r   )r    re   Úreplacementsr   r   r   Úadjust_svg_tag_namesó  sN    Ü'z*InForeignContentPhase.adjust_svg_tag_namesc                 C   sL   |d dkrd|d< n&| j jr<tdd„ |d D ƒƒr<d| j _t | |¡ d S )NrM   r  u   ï¿½c                 s   s   | ]}|t vV  qd S rI   r  r  r   r   r   r  "	  r"   z;InForeignContentPhase.process_characters.<locals>.<genexpr>F)r(   r<   r  rš   r[   rm   r   r   r   r[   	  s    
ÿz(InForeignContentPhase.process_charactersc                 C   s(  | j jd }|d | jv s>|d dkr¤t|d  ¡ ƒh d£@ 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 ¡  qT|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 )NrK   r   r  rM   >   ÚcolorÚfaceÚsizez*unexpected-html-element-in-foreign-contentr@   rO   rB   rQ   TrR   )r   rS   Úbreakout_elementsÚsetr–   r(   rT   rB   rW   rH   rJ   r§   r   r   rþ  r   r   r‹   )r    re   rg   r   r   r   r]   &	  sB    
ÿþÿÿ
ÿþ
ÿü


z'InForeignContentPhase.process_start_tagc                 C   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¦| jjsˆJ ‚qˆd }qä|d8 }| jj| }|j| jjkrÒqFqF| jj |¡}qäqF|S )Nr   rK   r   rä   r§  )rV   r   rS   r   rD   r   r(   rT   r9   r&   r¹  rŒ   r§   rB   rW   r_   )r    re   Z
node_indexr‡   rf   r   r   r   r_   C	  s&    z%InForeignContentPhase.process_end_tagN)r   r   r‘   r½   r±   rY   r  rþ  r[   r]   r_   r   r   r   r   rï  é  s   +rï  c                   @   sf   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ ZedefgƒZede
fgƒZdS )ÚAfterBodyPhasec                 C   s   d S rI   r   r   r   r   r   rd   a	  s    zAfterBodyPhase.process_eofc                 C   s   | j  || j jd ¡ d S )Nr=   rž   rm   r   r   r   ra   e	  s    zAfterBodyPhase.process_commentc                 C   s    | j  d¡ | j jd | j _|S )Nzunexpected-char-after-bodyru   ©r(   rT   r&   r9   rm   r   r   r   r[   j	  s    z!AfterBodyPhase.process_charactersc                 C   s   | j jd  |¡S rÈ   rÉ   rm   r   r   r   r®   o	  s    zAfterBodyPhase.start_tag_htmlc                 C   s*   | j  dd|d i¡ | j jd | j _|S )Nzunexpected-start-tag-after-bodyr   ru   r  rm   r   r   r   r¦   r	  s
    ÿzAfterBodyPhase.start_tag_otherc                 C   s*   | j jr| j  d¡ n| j jd | j _d S )Nz'unexpected-end-tag-after-body-innerhtmlúafter after body)r(   r)   rT   r&   r9   )r    r   r   r   r   re  x	  s    zAfterBodyPhase.end_tag_htmlc                 C   s*   | j  dd|d i¡ | j jd | j _|S )Nzunexpected-end-tag-after-bodyr   ru   r  rm   r   r   r   r°   ~	  s
    ÿzAfterBodyPhase.end_tag_otherr…   N)r   r   r‘   r½   r±   rd   ra   r[   r®   r¦   re  r°   r™   r¥   r¯   r   r   r   r   r  ^	  s   ÿr  c                   @   s‚   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zedejfdefdefde	fgƒZedefgƒZdS )ÚInFramesetPhasec                 C   s0   | j jd jdkr | j d¡ n| jjs,J ‚d S )NrK   r…   zeof-in-framesetr¥  r   r   r   r   rd   	  s    zInFramesetPhase.process_eofc                 C   s   | j  d¡ d S )Nzunexpected-char-in-framesetr    rm   r   r   r   r[   •	  s    z"InFramesetPhase.process_charactersc                 C   s   | j  |¡ d S rI   )r   r‹   rm   r   r   r   rû   ˜	  s    z"InFramesetPhase.start_tag_framesetc                 C   s   | j  |¡ | j j ¡  d S rI   rÐ   rm   r   r   r   Ústart_tag_frame›	  s    zInFramesetPhase.start_tag_framec                 C   s   | j jd  |¡S rÈ   rÉ   rm   r   r   r   Ústart_tag_noframesŸ	  s    z"InFramesetPhase.start_tag_noframesc                 C   s   | j  dd|d i¡ d S )Nz unexpected-start-tag-in-framesetr   r    rm   r   r   r   r¦   ¢	  s    ÿzInFramesetPhase.start_tag_otherc                 C   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 )NrK   r…   z)unexpected-frameset-in-frameset-innerhtmlr„   úafter frameset)	r   rS   r   r(   rT   r§   r)   r&   r9   rm   r   r   r   Úend_tag_frameset¦	  s    ÿz InFramesetPhase.end_tag_framesetc                 C   s   | j  dd|d i¡ d S )Nzunexpected-end-tag-in-framesetr   r    rm   r   r   r   r°   ²	  s    ÿzInFramesetPhase.end_tag_otherr…   r„   rŸ  ræ   N)r   r   r‘   r½   r±   rd   r[   rû   r  r	  r¦   r  r°   r™   rš   r®   r¥   r¯   r   r   r   r   r  ‹	  s$   üÿr  c                   @   sf   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
edejfdefgƒZede	fgƒZdS )ÚAfterFramesetPhasec                 C   s   d S rI   r   r   r   r   r   rd   Æ	  s    zAfterFramesetPhase.process_eofc                 C   s   | j  d¡ d S )Nzunexpected-char-after-framesetr    rm   r   r   r   r[   Ê	  s    z%AfterFramesetPhase.process_charactersc                 C   s   | j jd  |¡S rñ   rÉ   rm   r   r   r   r	  Í	  s    z%AfterFramesetPhase.start_tag_noframesc                 C   s   | j  dd|d i¡ d S )Nz#unexpected-start-tag-after-framesetr   r    rm   r   r   r   r¦   Ð	  s    ÿz"AfterFramesetPhase.start_tag_otherc                 C   s   | j jd | j _d S )Núafter after frameset)r(   r&   r9   rm   r   r   r   re  Ô	  s    zAfterFramesetPhase.end_tag_htmlc                 C   s   | j  dd|d i¡ d S )Nz!unexpected-end-tag-after-framesetr   r    rm   r   r   r   r°   ×	  s    ÿz AfterFramesetPhase.end_tag_otherr…   ræ   N)r   r   r‘   r½   r±   rd   r[   r	  r¦   re  r°   r™   rš   r®   r¥   r¯   r   r   r   r   r  Â	  s   þÿr  c                   @   sX   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zede	fgƒZdS )ÚAfterAfterBodyPhasec                 C   s   d S rI   r   r   r   r   r   rd   è	  s    zAfterAfterBodyPhase.process_eofc                 C   s   | j  || j j¡ d S rI   r³   rm   r   r   r   ra   ë	  s    z#AfterAfterBodyPhase.process_commentc                 C   s   | j jd  |¡S rÈ   rò   rm   r   r   r   r\   î	  s    z,AfterAfterBodyPhase.process_space_charactersc                 C   s    | j  d¡ | j jd | j _|S )Núexpected-eof-but-got-charru   r  rm   r   r   r   r[   ñ	  s    z&AfterAfterBodyPhase.process_charactersc                 C   s   | j jd  |¡S rÈ   rÉ   rm   r   r   r   r®   ö	  s    z"AfterAfterBodyPhase.start_tag_htmlc                 C   s*   | j  dd|d i¡ | j jd | j _|S )Núexpected-eof-but-got-start-tagr   ru   r  rm   r   r   r   r¦   ù	  s
    ÿz#AfterAfterBodyPhase.start_tag_otherc                 C   s*   | j  dd|d i¡ | j jd | j _|S )Núexpected-eof-but-got-end-tagr   ru   r  rm   r   r   r   r_   ÿ	  s
    ÿz#AfterAfterBodyPhase.process_end_tagr…   N)r   r   r‘   r½   r±   rd   ra   r\   r[   r®   r¦   r_   r™   r¥   r   r   r   r   r  å	  s   ÿr  c                   @   sf   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zede	fde
fgƒZdS )ÚAfterAfterFramesetPhasec                 C   s   d S rI   r   r   r   r   r   rd   
  s    z#AfterAfterFramesetPhase.process_eofc                 C   s   | j  || j j¡ d S rI   r³   rm   r   r   r   ra   
  s    z'AfterAfterFramesetPhase.process_commentc                 C   s   | j jd  |¡S rÈ   rò   rm   r   r   r   r\   
  s    z0AfterAfterFramesetPhase.process_space_charactersc                 C   s   | j  d¡ d S )Nr  r    rm   r   r   r   r[   
  s    z*AfterAfterFramesetPhase.process_charactersc                 C   s   | j jd  |¡S rÈ   rÉ   rm   r   r   r   r®   
  s    z&AfterAfterFramesetPhase.start_tag_htmlc                 C   s   | j jd  |¡S rñ   rÉ   rm   r   r   r   r	  
  s    z*AfterAfterFramesetPhase.start_tag_noframesc                 C   s   | j  dd|d i¡ d S )Nr  r   r    rm   r   r   r   r¦   
  s    ÿz'AfterAfterFramesetPhase.start_tag_otherc                 C   s   | j  dd|d i¡ d S )Nr  r   r    rm   r   r   r   r_   #
  s    ÿz'AfterAfterFramesetPhase.process_end_tagr…   ræ   N)r   r   r‘   r½   r±   rd   ra   r\   r[   r®   r	  r¦   r_   r™   r¥   r   r   r   r   r  

  s   þr  )r2   r1   rw   rÊ   rÛ   rÞ   ru   rŠ   rt   r§  rr   rs   rq   rp   ro   rn   rU  rP   rc  rv   r
  r  r  c                    sB   | d   ¡ ˆ   ¡ @ r>t| d ƒ‡ fdd„| d  ¡ D ƒƒ| d< d S )NrM   c                 3   s"   | ]\}}ˆ   ||¡|fV  qd S rI   )rU   )r   r˜   r—   ©rý  r   r   r  J
  s   z$adjust_attributes.<locals>.<genexpr>)r–   rL   r%   )re   rý  r   r  r   rl   H
  s    
ÿrl   r^   NFc                 C   s   t | | |d u ri n||dœS )N)rL   r   rM   rQ   )r   )r   rL   rC   rD  r   r   r   r¿   N
  s
    ür¿   )T)r^   NF)4rµ   r   Ú	constantsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r+   r   Ztreebuilderr   r   r   r   r™   rš   r²   r¾   rÄ   rÍ   rð   rù   rþ   r¡  r£  r´  r½  rÉ  rÏ  rÙ  rß  rã  rí  rï  r  r  r  r  r  r$   rl   r¿   r   r   r   r   Ú<module>   s€   @
% fD $+eAA     W! 0E?`VJ`)u-7#%$é