o
    »Ùøic‘ ã                   @   s˜  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 dUd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ƒZ0i d<e“d=e“d>e“d?e“d@e“dAe“dBe “dCe!“dDe"“dEe#“dFe$“dGe%“dHe&“dIe'“dJe(“dKe)“dLe*“e+e,e-e.e/e0dMœ¥Z1dNdO„ Z2dVdSdT„Z3dQS )Wé   )Ú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   ú]/home/develop/edictos_py/central_edictos/env/lib/python3.10/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   s    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 d S  ty.   |  ¡  |  ¡  Y d S w )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rF| jtv r| jj| j_	n| jt
v r)| jj| j_	n| jdkr5| 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_modeÚ
last_phaseÚ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 o|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)rC   r   r   rF   r   r   r   Ú is_mathml_text_integration_point‚   s   z+HTMLParser.is_mathml_text_integration_pointc                 C   s0  | j D ]ñ}d }|}|d urÝ|}| jjr| jjd nd }|r |jnd }|r'|jnd }|d }|tjkrA|  |d | di ¡¡ d }n˜t	| jjƒdks�|| jj
ks�|  |¡rk|tjkrc|d tddgƒvs�|tjtjfv s�|td	 kr€|d
kr€|tjkr€|d dks�|  |¡r“|tjtjtjfv r“| j}n| jd }|tjkr£| |¡}n6|tjkr®| |¡}n+|tjkr¹| |¡}n |tjkrÄ| |¡}n|tjkrÏ| |¡}n
|tjkrÙ| |¡}|d us|tjkrô|d rô|d sô|  dd|d i¡ qd}	g }
|	�r|
 | j¡ | j ¡ }	|	�r| j|
v�sJ ‚|	süd S d S )NéÿÿÿÿÚtypeÚdataÚdatavarsr>   r   ÚmglyphÚ
malignmarkrA   rB   Úsvgúin foreign contentÚselfClosingÚselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r*   r   Úopen_elementsrC   r   r   ÚPARSE_ERRORÚparse_errorÚgetÚlenÚdefault_namespacerK   Ú	START_TAGÚ	frozensetÚ
CHARACTERSÚSPACE_CHARACTERSr   rI   r8   r%   Úprocess_charactersÚprocess_space_charactersÚprocess_start_tagÚEND_TAGÚprocess_end_tagÚCOMMENTÚprocess_commentÚDOCTYPEÚprocess_doctypeÚappendÚprocess_eof)r    ÚtokenÚprevious_tokenÚ	new_tokenÚcurrent_nodeÚcurrent_node_namespaceÚcurrent_node_namerM   r8   Ú	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   Úget_document)r    r-   Ú	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   Ú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 rJ   )r"   ri   r*   r-   Úposition)r    Ú	errorcoderO   r   r   r   rX   ×   s   zHTMLParser.parse_errorc                 C   ó   t |tƒ d S rJ   )Úadjust_attributesr   ©r    rk   r   r   r   r   Ü   ó   z#HTMLParser.adjust_mathml_attributesc                 C   ry   rJ   )rz   r   r{   r   r   r   r   ß   r|   z HTMLParser.adjust_svg_attributesc                 C   ry   rJ   )rz   r   r{   r   r   r   r   â   r|   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 ]B}|j}d }|| j jd kr5| js0J ‚d}| j}|dv r>| js>J ‚|sH|j| j jkrHq||v rU| j||  } n
|r^| jd	 } nq|| _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ÚhtmlrL   r>   T)r‡   r�   r‘   r”   )r   rV   r   r(   rC   r[   r%   r8   )r    ÚlastÚ	new_modesÚnodeÚ	node_nameÚ	new_phaser   r   r   r:   å   sF   ò


þ
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*   r6   r5   r4   r8   Úoriginal_phaser%   )r    rk   Úcontent_typer   r   r   Úparse_rcdata_rawtext  s   zHTMLParser.parse_rcdata_rawtext©T©NF)F)rt   rJ   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r.   r+   Úpropertyr@   rI   rK   r,   r   rv   rX   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.)Ú__end_tag_cacheÚ__start_tag_cacher'   r   c                 C   s   || _ || _i | _i | _d S rJ   )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 ‚rJ   )ÚNotImplementedErrorr   r   r   r   rj   2  ó   zPhase.process_eofc                 C   ó   | j  || j jd ¡ d S )NrL   ©r   Úinsert_commentrV   r{   r   r   r   rf   5  ó   zPhase.process_commentc                 C   ó   | j  d¡ d S )Nzunexpected-doctype©r'   rX   r{   r   r   r   rh   :  ó   zPhase.process_doctypec                 C   ó   | j  |d ¡ d S ©NrN   ©r   Úinsert_textr{   r   r   r   r`   =  ó   zPhase.process_charactersc                 C   r¼   r½   r¾   r{   r   r   r   ra   @  rÀ   zPhase.process_space_charactersc                 C   óŒ   |d }|| j v r| j | }n2| j |t| ƒj¡ }| j |< t| j ƒt| jƒd krA| j  tt| j ƒƒ¡ t| j ƒt| jƒd ks*|| |ƒS ©Nr   gš™™™™™ñ?)	r±   Ústart_tag_handlerrY   rM   Ústart_tag_otherrZ   ÚpopÚnextÚiter©r    rk   r   Úfunctionr   r   r   rb   C  ó   

ÿþ
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-rootrN   r>   F)r'   r2   rX   r$   r   rV   rD   ©r    rk   Úattrr«   r   r   r   Ústart_tag_htmlR  s   €zPhase.start_tag_htmlc                 C   rÁ   rÂ   )	r²   Úend_tag_handlerrY   rM   Úend_tag_otherrZ   rÅ   rÆ   rÇ   rÈ   r   r   r   rd   \  rÊ   zPhase.process_end_tagN)r£   r¤   r¥   r¦   Ú	__slots__r&   rj   rf   rh   r`   ra   rb   rÍ   rd   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   ó   d S rJ   r   r{   r   r   r   ra   o  r´   z%InitialPhase.process_space_charactersc                 C   ó   | j  || j j¡ d S rJ   ©r   r·   r   r{   r   r   r   rf   r  ó   zInitialPhase.process_commentc                 C   sü   |d }|d }|d }|d }|dks |d us |d ur&|dkr&| j  d¡ |d u r,d}| j |¡ |dkr;| t¡}|r]|d dks]| d	¡s]|d
v s]| d¡rU|d u s]|rb| ¡ dkrbd| j _n| d¡sp| d¡rt|d urtd| 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 quirksr0   )r'   rX   r   Úinsert_doctyperE   r   Ú
startswithÚlowerr3   r%   r8   )r    rk   r   Ú	public_idÚ	system_idrØ   r   r   r   rh   u  sN   
ÿÿ;ÿýÿÿ
ÿÿýzInitialPhase.process_doctypec                 C   s   d| j _| j jd | j _d S )NrÚ   r0   )r'   r3   r%   r8   r   r   r   r   Úanything_else×  s   zInitialPhase.anything_elsec                 C   ó   | j  d¡ |  ¡  |S )Nzexpected-doctype-but-got-chars©r'   rX   rà   r{   r   r   r   r`   Û  ó   zInitialPhase.process_charactersc                 C   ó"   | j  dd|d i¡ |  ¡  |S )Nz"expected-doctype-but-got-start-tagr   râ   r{   r   r   r   rb   à  ó
   ÿzInitialPhase.process_start_tagc                 C   rä   )Nz expected-doctype-but-got-end-tagr   râ   r{   r   r   r   rd   æ  rå   zInitialPhase.process_end_tagc                 C   ó   | j  d¡ |  ¡  dS )Nzexpected-doctype-but-got-eofTrâ   r   r   r   r   rj   ì  rã   zInitialPhase.process_eofN)r£   r¤   r¥   ÚtuplerÐ   ra   rf   rh   rà   r`   rb   rd   rj   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”   r\   r†   )r   Úinsert_rootÚimplied_tag_tokenr'   r%   r8   r   r   r   r   r9   õ  s   z$BeforeHtmlPhase._insert_html_elementc                 C   ó   |   ¡  dS ©NT©r9   r   r   r   r   rj   ù  ó   zBeforeHtmlPhase.process_eofc                 C   rÓ   rJ   rÔ   r{   r   r   r   rf   ý  rÕ   zBeforeHtmlPhase.process_commentc                 C   rÒ   rJ   r   r{   r   r   r   ra      r´   z(BeforeHtmlPhase.process_space_charactersc                 C   ó   |   ¡  |S rJ   rí   r{   r   r   r   r`     rî   z"BeforeHtmlPhase.process_charactersc                 C   s    |d dkr
d| j _|  ¡  |S )Nr   r”   T)r'   r2   r9   r{   r   r   r   rb     s   z!BeforeHtmlPhase.process_start_tagc                 C   s2   |d dvr| j  dd|d i¡ d S |  ¡  |S )Nr   ©r‘   r’   r”   Úbrzunexpected-end-tag-before-html)r'   rX   r9   r{   r   r   r   rd     s   ÿzBeforeHtmlPhase.process_end_tagN)r£   r¤   r¥   rç   rÐ   r9   rj   rf   ra   r`   rb   rd   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‘   r\   T©Ústart_tag_headrê   r   r   r   r   rj     ó   zBeforeHeadPhase.process_eofc                 C   rÒ   rJ   r   r{   r   r   r   ra     r´   z(BeforeHeadPhase.process_space_charactersc                 C   ó   |   tddƒ¡ |S ©Nr‘   r\   ró   r{   r   r   r   r`      rõ   z"BeforeHeadPhase.process_charactersc                 C   ó   | j jd  |¡S ©Nr„   ©r'   r%   rb   r{   r   r   r   rÍ   $  ó   zBeforeHeadPhase.start_tag_htmlc                 C   s0   | j  |¡ | j jd | j _| jjd | j_d S )NrL   úin head)r   r�   rV   Úhead_elementr'   r%   r8   r{   r   r   r   rô   '  s   zBeforeHeadPhase.start_tag_headc                 C   rö   r÷   ró   r{   r   r   r   rÄ   ,  rõ   zBeforeHeadPhase.start_tag_otherc                 C   rö   r÷   ró   r{   r   r   r   Úend_tag_imply_head0  rõ   z"BeforeHeadPhase.end_tag_imply_headc                 C   ó   | j  dd|d i¡ d S )Nzend-tag-after-implied-rootr   rº   r{   r   r   r   rÏ   4  ó   zBeforeHeadPhase.end_tag_otherr”   r‘   rð   N)r£   r¤   r¥   rç   rÐ   rj   ra   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   rë   rì   ©rà   r   r   r   r   rj   E  rî   zInHeadPhase.process_eofc                 C   rï   rJ   r  r{   r   r   r   r`   I  rî   zInHeadPhase.process_charactersc                 C   rø   rù   rú   r{   r   r   r   rÍ   M  rû   zInHeadPhase.start_tag_htmlc                 C   r¹   )Nz!two-heads-are-not-better-than-onerº   r{   r   r   r   rô   P  r»   zInHeadPhase.start_tag_headc                 C   ó$   | j  |¡ | j j ¡  d|d< d S ©NTrU   ©r   r�   rV   rÅ   r{   r   r   r   Ústart_tag_base_link_commandS  ó   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 r.| jjj |d ¡ d S d|v r]d|v r_|d  	¡ d	krat
 |d  d
¡¡}t
 |¡}| ¡ }| jjj |¡ d S d S d S d S d S )NTrU   rN   r   Ú	tentativeÚcharsetÚcontentz
http-equivzcontent-typezutf-8)r   r�   rV   rÅ   r'   r*   r-   r@   Úchange_encodingrÝ   r   ÚEncodingBytesÚencodeÚContentAttributeParserr   )r    rk   rD   rN   r'   Úcodecr   r   r   Ústart_tag_metaX  s$   
ózInHeadPhase.start_tag_metac                 C   ó   | j  |d¡ d S )Nr›   ©r'   r    r{   r   r   r   Ústart_tag_titlem  rû   zInHeadPhase.start_tag_titlec                 C   r  ©Nrš   r  r{   r   r   r   Ústart_tag_noframes_stylep  ó   z$InHeadPhase.start_tag_noframes_stylec                 C   s:   | j jr| j  |d¡ d S | j |¡ | j jd | j _d S )Nrš   úin head noscript)r'   r)   r    r   r�   r%   r8   r{   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*   Úscript_data_stater5   r8   rž   r%   r{   r   r   r   Ústart_tag_script{  s   zInHeadPhase.start_tag_scriptc                 C   rï   rJ   r  r{   r   r   r   rÄ   �  rî   zInHeadPhase.start_tag_otherc                 C   ó<   | j jj ¡ }|jdksJ d|j› �ƒ‚| j jd | j _d S )Nr‘   zExpected head got ú
after head©r'   r   rV   rÅ   r   r%   r8   ©r    rk   r—   r   r   r   Úend_tag_head…  ó   zInHeadPhase.end_tag_headc                 C   rï   rJ   r  r{   r   r   r   Úend_tag_html_body_brŠ  rî   z InHeadPhase.end_tag_html_body_brc                 C   rÿ   ©Núunexpected-end-tagr   rº   r{   r   r   r   rÏ   Ž  r   zInHeadPhase.end_tag_otherc                 C   ó   |   tdƒ¡ d S )Nr‘   )r  rê   r   r   r   r   rà   ‘  rû   zInHeadPhase.anything_elser”   Útitle)ÚnoframesÚstyleÚnoscriptÚscript)ÚbaseÚbasefontÚbgsoundÚcommandÚlinkÚmetar‘   )rñ   r”   r’   N)r£   r¤   r¥   rç   rÐ   rj   r`   rÍ   rô   r  r  r  r  r  r  rÄ   r  r!  rÏ   rà   r­   rÃ   rÎ   r   r   r   r   r  A  sB    ÿ÷
þ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   ræ   )Nzeof-in-head-noscriptTrâ   r   r   r   r   rj   ©  rã   zInHeadNoscriptPhase.process_eofc                 C   rø   ©Nrü   )r'   r%   rf   r{   r   r   r   rf   ®  rû   z#InHeadNoscriptPhase.process_commentc                 C   rá   )Nzchar-in-head-noscriptrâ   r{   r   r   r   r`   ±  rã   z&InHeadNoscriptPhase.process_charactersc                 C   rø   r1  ©r'   r%   ra   r{   r   r   r   ra   ¶  rû   z,InHeadNoscriptPhase.process_space_charactersc                 C   rø   rù   rú   r{   r   r   r   rÍ   ¹  rû   z"InHeadNoscriptPhase.start_tag_htmlc                 C   rø   r1  rú   r{   r   r   r   r  ¼  rû   z/InHeadNoscriptPhase.start_tag_base_link_commandc                 C   rÿ   ©Núunexpected-start-tagr   rº   r{   r   r   r   Ústart_tag_head_noscript¿  r   z+InHeadNoscriptPhase.start_tag_head_noscriptc                 C   rä   ©Nzunexpected-inhead-noscript-tagr   râ   r{   r   r   r   rÄ   Â  rå   z#InHeadNoscriptPhase.start_tag_otherc                 C   r  )Nr(  zExpected noscript got rü   r  r  r   r   r   Úend_tag_noscriptÈ  r   z$InHeadNoscriptPhase.end_tag_noscriptc                 C   rä   r6  râ   r{   r   r   r   Ú
end_tag_brÍ  rå   zInHeadNoscriptPhase.end_tag_brc                 C   rÿ   r"  rº   r{   r   r   r   rÏ   Ó  r   z!InHeadNoscriptPhase.end_tag_otherc                 C   r$  )Nr(  )r7  rê   r   r   r   r   rà   Ö  r  z!InHeadNoscriptPhase.anything_elser”   )r+  r,  r.  r/  r&  r'  )r‘   r(  r(  rñ   N)r£   r¤   r¥   rç   rÐ   rj   rf   r`   ra   rÍ   r  r5  rÄ   r7  r8  rÏ   rà   r­   rÃ   rÎ   r   r   r   r   r0  ¦  s2    ÿü
þr0  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   rë   rì   r  r   r   r   r   rj   ê  rî   zAfterHeadPhase.process_eofc                 C   rï   rJ   r  r{   r   r   r   r`   î  rî   z!AfterHeadPhase.process_charactersc                 C   rø   rù   rú   r{   r   r   r   rÍ   ò  rû   zAfterHeadPhase.start_tag_htmlc                 C   s(   d| j _| j |¡ | j jd | j _d S )NFr„   )r'   r=   r   r�   r%   r8   r{   r   r   r   Ústart_tag_bodyõ  ó   zAfterHeadPhase.start_tag_bodyc                 C   s    | j  |¡ | jjd | j_d S )Nr…   )r   r�   r'   r%   r8   r{   r   r   r   Ústart_tag_framesetú  s   z!AfterHeadPhase.start_tag_framesetc                 C   st   | j  dd|d i¡ | jj | jj¡ | j jd  |¡ | jjd d d… D ]}|jdkr7| jj 	|¡  d S q&d S )Nz#unexpected-start-tag-out-of-my-headr   rü   rL   r‘   )
r'   rX   r   rV   ri   rý   r%   rb   r   Úremover  r   r   r   Ústart_tag_from_headþ  s   ÿ
þÿz"AfterHeadPhase.start_tag_from_headc                 C   rÿ   r3  rº   r{   r   r   r   rô     r   zAfterHeadPhase.start_tag_headc                 C   rï   rJ   r  r{   r   r   r   rÄ     rî   zAfterHeadPhase.start_tag_otherc                 C   rï   rJ   r  r{   r   r   r   r!    rî   z#AfterHeadPhase.end_tag_html_body_brc                 C   rÿ   r"  rº   r{   r   r   r   rÏ     r   zAfterHeadPhase.end_tag_otherc                 C   s.   | j  tddƒ¡ | jjd | j_d| j_d S )Nr’   r\   r„   T)r   r�   rê   r'   r%   r8   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Ð   rj   r`   rÍ   r:  r<  r>  rô   rÄ   r!  rÏ   rà   r­   rÃ   rÎ   r   r   r   r   r9  ç  s2    
ÿú
ÿr9  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„ Z6e7g dhe8j9f‘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‘d�e$f‘d‚e&f‘dƒe'f‘d„e%f‘d…e(f‘d†e)f‘d‡e*f‘ƒ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)ra   c                    s   t ƒ j|i |¤Ž | j| _d S rJ   )Úsuperr&   Ú process_space_characters_non_prera   ©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 rJ   )r   rC   rD   )r    Únode1Ú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 n|  ||¡r*| |¡ qt|ƒdks3J ‚t|ƒdkrB| j j |d ¡ | j j |¡ d S )NrL   é   )	r   r�   rV   Úactive_formatting_elementsr   rH  ri   rZ   r=  )r    rk   rG   Ú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¡  d S qd S )N)ÚddÚdtÚliÚpr‹   rˆ   r�   r‰   rŒ   rŠ   r’   r”   rL   z expected-closing-tag-but-got-eof)r]   r   rV   r   r'   rX   )r    Úallowed_elementsr—   r   r   r   rj   I  s   
þÿzInBodyPhase.process_eofc                 C   sj   |d }| j | _| d¡r$| jjd jdv r$| jjd  ¡ s$|dd … }|r3| j ¡  | j |¡ d S d S )NrN   Ú
rL   )ÚpreÚlistingÚtextarear   )	rA  ra   rÜ   r   rV   r   Úhas_contentÚ&reconstruct_active_formatting_elementsr¿   )r    rk   rN   r   r   r   Ú%process_space_characters_drop_newlineT  s   
ÿ
þz1InBodyPhase.process_space_characters_drop_newlinec                 C   s\   |d dkrd S | j  ¡  | j  |d ¡ | jjr*tdd„ |d D ƒƒr,d| j_d S d S d S )NrN   ú c                 s   ó   � | ]}|t vV  qd S rJ   ©r   ©r   Úcharr   r   r   Ú	<genexpr>h  s   € 
ÿz1InBodyPhase.process_characters.<locals>.<genexpr>F)r   rW  r¿   r'   r=   Úanyr{   r   r   r   r`   a  s   
ÿþzInBodyPhase.process_charactersc                 C   s   | j  ¡  | j  |d ¡ d S r½   )r   rW  r¿   r{   r   r   r   rA  l  s   
z,InBodyPhase.process_space_characters_non_prec                 C   rø   r1  rú   r{   r   r   r   Ústart_tag_process_in_headp  rû   z%InBodyPhase.start_tag_process_in_headc                 C   sŠ   | j  dddi¡ t| jjƒdks| jjd jdkr"| j js J ‚d S d| j _|d  ¡ D ]\}}|| jjd j	vrB|| jjd j	|< q,d S )Nr4  r   r’   r   FrN   )
r'   rX   rZ   r   rV   r   r(   r=   r$   rD   rË   r   r   r   r:  s  s   €þzInBodyPhase.start_tag_bodyc                 C   sÊ   | j  dddi¡ t| jjƒdks| jjd jdkr"| j js J ‚d S | j js(d S | jjd jr=| jjd j 	| jjd ¡ | jjd jdkrU| jj 
¡  | jjd jdksF| j |¡ | j jd | j _d S )	Nr4  r   r“   r   r’   rL   r”   r…   )r'   rX   rZ   r   rV   r   r(   r=   ÚparentÚremove_childrÅ   r�   r%   r8   r{   r   r   r   r<  ~  s   
ÿÿzInBodyPhase.start_tag_framesetc                 C   s.   | j jddd�r|  tdƒ¡ | j  |¡ d S ©NrP  Úbutton©Úvariant)r   Úelement_in_scopeÚ	end_tag_prê   r�   r{   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 )NrP  rd  re  F)	r   rg  rh  rê   r�   r'   r=   rX  ra   r{   r   r   r   Ústart_tag_pre_listing“  s
   z!InBodyPhase.start_tag_pre_listingc                 C   s\   | j jr| j dddi¡ d S | j jddd�r|  tdƒ¡ | j  |¡ | j jd | j _d S )Nr4  r   ÚformrP  rd  re  rL   )	r   Úform_elementr'   rX   rg  rh  rê   r�   rV   r{   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ƒ¡  n|j	t
v r:|jdvr: nq| jjdd	d
�rL| j j tdƒ¡ | j |¡ d S )NFrO  rN  rM  )rO  rN  rM  r   )Úaddressrt   rP  rP  rd  re  )r'   r=   Úreversedr   rV   r   r8   rd   rê   Ú
name_tupler   rg  r�   )r    rk   Ústop_names_mapÚ
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 rc  )	r   rg  rh  rê   r�   r'   r*   r7   r5   r{   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 r)| j dd|d i¡ | j j 	¡  | j  
|¡ d S )NrP  rd  re  rL   r4  r   )r   rg  rh  rê   rV   r   r
   r'   rX   rÅ   r�   r{   r   r   r   Ústart_tag_heading¼  s   zInBodyPhase.start_tag_headingc                 C   s~   | j  d¡}|r3| j ddddœ¡ |  tdƒ¡ || j jv r&| j j |¡ || j jv r3| j j |¡ | j  	¡  |  
|¡ d S )NÚaú$unexpected-start-tag-implies-end-tag©Ú	startNameÚendName)r   Ú%element_in_active_formatting_elementsr'   rX   Úend_tag_formattingrê   rV   r=  rJ  rW  rL  )r    rk   Úafe_a_elementr   r   r   Ústart_tag_aÄ  s   þ
zInBodyPhase.start_tag_ac                 C   s   | j  ¡  |  |¡ d S rJ   )r   rW  rL  r{   r   r   r   Ústart_tag_formattingÒ  s   
z InBodyPhase.start_tag_formattingc                 C   sP   | j  ¡  | j  d¡r!| j ddddœ¡ |  tdƒ¡ | j  ¡  |  |¡ d S )NÚnobrrw  rx  )r   rW  rg  r'   rX   rd   rê   rL  r{   r   r   r   Ústart_tag_nobrÖ  s   
þ
zInBodyPhase.start_tag_nobrc                 C   sT   | j  d¡r| j ddddœ¡ |  tdƒ¡ |S | j  ¡  | j  |¡ d| j_d S )Nrd  rw  rx  F)	r   rg  r'   rX   rd   rê   rW  r�   r=   r{   r   r   r   Ústart_tag_buttoná  s   þ
zInBodyPhase.start_tag_buttonc                 C   s0   | j  ¡  | j  |¡ | j j t¡ d| j_d S r¢   )r   rW  r�   rJ  ri   r   r'   r=   r{   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 )NrP  rd  re  Frš   )r   rg  rh  rê   rW  r'   r=   r    r{   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Ú   rP  rd  re  Frƒ   )
r'   r3   r   rg  rd   rê   r�   r=   r%   r8   r{   r   r   r   Ústart_tag_tableú  s   zInBodyPhase.start_tag_tablec                 C   s6   | j  ¡  | j  |¡ | j j ¡  d|d< d| j_d S )NTrU   F)r   rW  r�   rV   rÅ   r'   r=   r{   r   r   r   Ústart_tag_void_formatting  s
   
z%InBodyPhase.start_tag_void_formattingc                 C   sH   | j j}|  |¡ d|d v r |d d  t¡dkr"|| j _d S d S d S )NrM   rN   Úhidden)r'   r=   r†  rE   r   )r    rk   r=   r   r   r   Ústart_tag_input	  s   
ýzInBodyPhase.start_tag_inputc                 C   r  r  r  r{   r   r   r   Ústart_tag_param_source  r  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 )NrP  rd  re  TrU   F)	r   rg  rh  rê   r�   rV   rÅ   r'   r=   r{   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©ÚoriginalNameÚnewNamer\   rN   rT   ©rD   Úself_closing)r'   rX   rb   rê   r{   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 rF|d d }nd}|  tj|dœ¡ |d  	¡ }d|v r^|d= d|v re|d= d|d< |  tdd||d d�¡ |  
td
ƒ¡ |  td	dƒ¡ |  
tdƒ¡ d S )Nzdeprecated-tagr   ÚisindexÚactionrN   rk  r\   )rD   ÚhrÚlabelÚpromptz3This is a searchable index. Enter search keywords: ©rM   rN   ÚinputrT   r�  )r'   rX   r   rl  rb   rê   r`   r   r^   Úcopyrd   )r    rk   Ú
form_attrsr—  rD   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 r¢   )	r   r�   r'   r*   r4   r5   rX  ra   r=   r{   r   r   r   Ústart_tag_textareaE  s   zInBodyPhase.start_tag_textareac                 C   s   d| j _|  |¡ d S r¢   )r'   r=   Ústart_tag_rawtextr{   r   r   r   Ústart_tag_iframeK  s   zInBodyPhase.start_tag_iframec                 C   s$   | j jr|  |¡ d S |  |¡ d S rJ   )r'   r)   rž  rÄ   r{   r   r   r   r  O  s   zInBodyPhase.start_tag_noscriptc                 C   r  r  r  r{   r   r   r   rž  U  rû   zInBodyPhase.start_tag_rawtextc                 C   s@   | j jd jdkr| jj tdƒ¡ | j  ¡  | jj  |¡ d S ©NrL   Úoption)	r   rV   r   r'   r8   rd   rê   rW  r�   r{   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 r=| jjd | j_d S | jjd	 | j_d S )
NFrƒ   r�   r‚   r€   r   r~   úin select in tabler}   )r   rW  r�   r'   r=   r8   r%   r{   r   r   r   Ústart_tag_select^  s   






úzInBodyPhase.start_tag_selectc                 C   sD   | j  d¡r| j  ¡  | j jd jdkr| j d¡ | j  |¡ d S )NÚrubyrL   zrp-or-rt-tag-not-in-ruby-scope)r   rg  Úgenerate_implied_end_tagsrV   r   r'   rX   r�   r{   r   r   r   Ústart_tag_rp_rtm  s
   
zInBodyPhase.start_tag_rp_rtc                 C   ó^   | j  ¡  | j |¡ | j |¡ td |d< | j  |¡ |d r-| j j ¡  d|d< d S d S )NrA   rC   rT   TrU   )	r   rW  r'   r   r   r   r�   rV   rÅ   r{   r   r   r   Ústart_tag_matht  ó   
þzInBodyPhase.start_tag_mathc                 C   r¨  )NrR   rC   rT   TrU   )	r   rW  r'   r   r   r   r�   rV   rÅ   r{   r   r   r   Ústart_tag_svg€  rª  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º   r{   r   r   r   Ústart_tag_misplacedŒ  s   zInBodyPhase.start_tag_misplacedc                 C   s   | j  ¡  | j  |¡ d S rJ   )r   rW  r�   r{   r   r   r   rÄ   –  s   
zInBodyPhase.start_tag_otherc                 C   s¨   | j jddd�s"|  tddƒ¡ | j dddi¡ |  tdƒ¡ d S | j  d¡ | j jd j	dkr:| j dddi¡ | j j 
¡ }|j	dkrR| j j 
¡ }|j	dksEd S d S )NrP  rd  re  r\   r#  r   rL   )r   rg  ri  rê   r'   rX   rh  r¦  rV   r   rÅ   r  r   r   r   rh  š  s   
ÿzInBodyPhase.end_tag_pc                 C   s†   | j  d¡s| j dddi¡ d S | j jd jdkr9| j jdd … D ]}|jtdƒvr8| j dd|jdœ¡  nq"| jjd	 | j_d S )
Nr’   r#  r   rL   é   )rM  rN  rO  Úoptgroupr¡  rP  ÚrpÚrtr‹   rˆ   r�   r‰   rŒ   rŠ   r’   r”   ú$expected-one-end-tag-but-got-another©ÚgotNameÚexpectedNameú
after body)	r   rg  r'   rX   rV   r   r]   r%   r8   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   rg  r¶  rê   r{   r   r   r   Úend_tag_html·  s   þzInBodyPhase.end_tag_htmlc                 C   s¢   |d dkr
| j | _| j |d ¡}|r| j ¡  | jjd j|d kr/| j dd|d i¡ |rM| jj 	¡ }|j|d krO| jj 	¡ }|j|d ks>d S d S d S )Nr   rS  rL   úend-tag-too-early)
rA  ra   r   rg  r¦  rV   r   r'   rX   rÅ   )r    rk   Úin_scoper—   r   r   r   Úend_tag_block½  s   
ÿþzInBodyPhase.end_tag_blockc                 C   sx   | j j}d | j _|d u s| j  |¡s| j dddi¡ d S | j  ¡  | j jd |kr3| j dddi¡ | j j |¡ d S )Nr#  r   rk  rL   zend-tag-too-early-ignored)r   rl  rg  r'   rX   r¦  rV   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�s"| j dd|d i¡ d S | j j|d d� | j jd j|d krA| j dd|d i¡ | j j ¡ }|j|d kr]| j j ¡ }|j|d ksNd S d S )	Nr   rO  Úlistre  r#  ©ÚexcluderL   r¸  )r   rg  r'   rX   r¦  rV   r   rÅ   )r    rk   rf  r—   r   r   r   Úend_tag_list_itemÖ  s   ÿzInBodyPhase.end_tag_list_itemc                 C   sœ   t D ]}| j |¡r| j ¡   nq| jjd j|d kr(| j dd|d i¡ t D ]!}| j |¡rK| jj ¡ }|jt vrH| jj ¡ }|jt vs= d S q*d S )NrL   r   r¸  )	r
   r   rg  r¦  rV   r   r'   rX   rÅ   )r    rk   Úitemr   r   r   Úend_tag_headingå  s    
þ

ÿüÿzInBodyPhase.end_tag_headingc                 C   s  d}|dk �r†|d7 }| j  |d ¡}|r"|| j jv r)| j  |j¡s)|  |¡ dS || j jvrC| j dd|d i¡ | j j 	|¡ dS | j  |j¡sW| j dd|d i¡ dS || j jd krj| j d	d|d i¡ | j j 
|¡}d}| j j|d… D ]}|jtv r†|} nq{|du r¨| j j ¡ }||krŸ| j j ¡ }||ks•| j j 	|¡ dS | j j|d  }| j j 
|¡}| }	}
d}| j j 
|
¡}|d
k �r(|d7 }|d8 }| j j| }
|
| j jvrå| j j 	|
¡ qÄ|
|krên>|	|kr÷| j j 
|
¡d }|
 ¡ }|| j j| j j 
|
¡< || j j| j j 
|
¡< |}
|	j�r|	j |	¡ |
 |	¡ |
}	|d
k sÉ|	j�r2|	j |	¡ |jtdƒv �rH| j  ¡ \}}| |	|¡ n| |	¡ | ¡ }| |¡ | |¡ | j j 	|¡ | j j ||¡ | j j 	|¡ | j j | j j 
|¡d |¡ |dk sdS dS )z*The much-feared adoption agency algorithm.r>   é   r   r   Nzadoption-agency-1.2zadoption-agency-4.4rL   zadoption-agency-1.3rI  ©r�   r‹   r�   rŒ   rŠ   )r   r{  rV   rg  r   rÏ   r'   rX   rJ  r=  Úindexrp  r   rÅ   Úclonera  rb  Úappend_childr]   Ú!get_table_misnested_node_positionÚinsert_beforeÚreparent_childrenÚinsert)r    rk   Úouter_loop_counterÚformatting_elementÚ	afe_indexÚfurthest_blockrG   Úcommon_ancestorÚbookmarkÚ	last_noder—   Úinner_loop_counterrÄ  rÅ  ra  rÈ  r   r   r   r|  ô  s¤   

ÿÿ
ÿ	
þÿ
ÿÿ
å"


ÿ �åzInBodyPhase.end_tag_formattingc                 C   sœ   | j  |d ¡r| j  ¡  | j jd j|d kr#| j dd|d i¡ | j  |d ¡rL| j j ¡ }|j|d krE| j j ¡ }|j|d ks8| j  ¡  d S d S )Nr   rL   r¸  )	r   rg  r¦  rV   r   r'   rX   rÅ   Ú clear_active_formatting_elements)r    rk   rG   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 elementr�  r\   )r'   rX   r   rW  r�   rê   rV   rÅ   r{   r   r   r   r8  ¦  s   þ
zInBodyPhase.end_tag_brc                 C   s¶   | j jd d d… D ]O}|j|d krE| j j|d d� | j jd j|d kr1| j dd|d i¡ | j j ¡ |krB	 | j j ¡ |ks9 d S |jtv rX| j dd|d i¡  d S q	d S )NrL   r   r½  r#  )	r   rV   r   r¦  r'   rX   rÅ   rp  r   r  r   r   r   rÏ   ®  s$   ÿÿ
ÿýözInBodyPhase.end_tag_otherr”   )	r*  r+  r,  r-  r.  r/  r)  r'  r%  r’   r“   )rn  ÚarticleÚasideÚ
blockquoteÚcenterÚdetailsÚdirrt   ÚdlÚfieldsetÚ
figcaptionÚfigureÚfooterÚheaderÚhgroupÚmainÚmenuÚnavÚolrP  ÚsectionÚsummaryÚul)rS  rT  rk  )rO  rM  rN  r/   rv  )ÚbÚbigÚcodeÚemÚfontÚiÚsÚsmallÚstrikeÚstrongÚttÚur€  rd  )ÚappletÚmarqueeÚobjectÚxmpr�   )Úarearñ   ÚembedrŒ  ÚkeygenÚwbr)ÚparamÚsourceÚtrackr™  r•  r‹  r“  rU  Úiframer(  )Únoembedr&  r‡   )r¯  r°  )r¡  r®  ÚmathrR   )rŽ   Úcolr�   Úframer‘   r‹   rˆ   r�   r‰   rŒ   rŠ   )rn  rÕ  rÖ  r×  rd  rØ  rÙ  ÚdialogrÚ  rt   rÛ  rÜ  rÝ  rÞ  rß  rà  rá  rT  râ  rã  rä  rå  rS  ræ  rç  rè  rP  )rM  rN  rO  )rv  ré  rê  rë  rì  rí  rî  r€  rï  rð  rñ  rò  ró  rô  rñ   )>r£   r¤   r¥   rÐ   r&   rH  rL  rj   rX  r`   rA  r`  r:  r<  ri  rj  rm  rs  rt  ru  r~  r  r�  r‚  rƒ  r„  r…  r†  rˆ  r‰  rŠ  r’  rœ  r�  rŸ  r  rž  r¢  r¤  r§  r©  r«  r¬  rÄ   rh  r¶  r·  rº  r»  r¿  rÁ  r|  rÔ  r8  rÏ   r­   r®   rÍ   r
   rÃ   rÎ   Ú__classcell__r   r   rD  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   r¼   r½   r¾   r{   r   r   r   r`   ý  rÀ   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   rL   T)r'   rX   r   rV   r   rÅ   rž   r8   r   r   r   r   rj      s   þzTextPhase.process_eofc                 C   s   t d|d › d�ƒ‚)NzTried to process start tag r   z in RCDATA/RAWTEXT mode)Ú
ValueErrorr{   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   rV   rÅ   r   r'   rž   r8   r  r   r   r   Úend_tag_script  s   zTextPhase.end_tag_scriptc                 C   s   | j j ¡  | jj| j_d S rJ   )r   rV   rÅ   r'   rž   r8   r{   r   r   r   rÏ     ó   zTextPhase.end_tag_otherr)  N)r£   r¤   r¥   rç   rÐ   r`   rj   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   s8   | j jd jdvr| j j ¡  | j jd jdvs	d S d S )NrL   )r�   r”   )r   rV   r   rÅ   r   r   r   r   Ú_clear_stack_to_table_context  s   ýz*InTablePhase._clear_stack_to_table_contextc                 C   ó2   | j jd jdkr| j d¡ d S | jjsJ ‚d S )NrL   r”   zeof-in-table©r   rV   r   r'   rX   r(   r   r   r   r   rj   '  ó   zInTablePhase.process_eofc                 C   ó4   | j j}| j jd | j _|| j j_| j j |¡ d S ©Núin table text)r'   r8   r%   rž   ra   ©r    rk   rž   r   r   r   ra   .  ó   
z%InTablePhase.process_space_charactersc                 C   r  r  )r'   r8   r%   rž   r`   r  r   r   r   r`   4  r  zInTablePhase.process_charactersc                 C   s&   d| j _| jjd  |¡ d| j _d S )NTr„   F)r   Úinsert_from_tabler'   r%   r`   r{   r   r   r   r¿   :  s   zInTablePhase.insert_textc                 C   s6   |   ¡  | jj t¡ | j |¡ | jjd | j_d S )Nr�   )	r  r   rJ  ri   r   r�   r'   r%   r8   r{   r   r   r   Ústart_tag_captionA  s   zInTablePhase.start_tag_captionc                 C   ó(   |   ¡  | j |¡ | jjd | j_d S )Nr‚   ©r  r   r�   r'   r%   r8   r{   r   r   r   Ústart_tag_colgroupG  r;  zInTablePhase.start_tag_colgroupc                 C   rö   )Nr�   r\   )r  rê   r{   r   r   r   Ústart_tag_colL  rõ   zInTablePhase.start_tag_colc                 C   r  )Nr€   r  r{   r   r   r   Ústart_tag_rowgroupP  r;  zInTablePhase.start_tag_rowgroupc                 C   rö   )Nr‹   r\   )r  rê   r{   r   r   r   Ústart_tag_imply_tbodyU  rõ   z"InTablePhase.start_tag_imply_tbodyc                 C   s6   | j  ddddœ¡ | j j tdƒ¡ | j js|S d S )Nrw  r�   rx  )r'   rX   r8   rd   rê   r(   r{   r   r   r   r…  Y  s   þÿzInTablePhase.start_tag_tablec                 C   rø   r1  rú   r{   r   r   r   Ústart_tag_style_scripta  rû   z#InTablePhase.start_tag_style_scriptc                 C   sX   d|d v r%|d d   t¡dkr%| j d¡ | j |¡ | jj ¡  d S |  |¡ d S )NrM   rN   r‡  z unexpected-hidden-input-in-table)	rE   r   r'   rX   r   r�   rV   rÅ   rÄ   r{   r   r   r   rˆ  d  s   zInTablePhase.start_tag_inputc                 C   sH   | j  d¡ | jjd u r"| j |¡ | jjd | j_| jj ¡  d S d S )Nzunexpected-form-in-tablerL   )r'   rX   r   rl  r�   rV   rÅ   r{   r   r   r   rm  n  s   ýzInTablePhase.start_tag_formc                 C   ó<   | j  dd|d i¡ d| j_| j jd  |¡ d| j_d S )Nz)unexpected-start-tag-implies-table-voodoor   Tr„   F)r'   rX   r   r  r%   rb   r{   r   r   r   rÄ   u  ó   ÿzInTablePhase.start_tag_otherc                 C   sº   | j jddd�rJ| j  ¡  | j jd jdkr%| j dd| j jd jdœ¡ | j jd jdkr=| j j ¡  | j jd jdks.| j j ¡  | j ¡  d S | jj	sPJ ‚| j dd|d i¡ d S )Nr�   re  rL   zend-tag-too-early-namedr²  r#  r   )
r   rg  r¦  rV   r   r'   rX   rÅ   r:   r(   r{   r   r   r   Úend_tag_table}  s   
þÿzInTablePhase.end_tag_tablec                 C   rÿ   r"  rº   r{   r   r   r   Úend_tag_ignore�  r   zInTablePhase.end_tag_ignorec                 C   r  )Nz'unexpected-end-tag-implies-table-voodoor   Tr„   F)r'   rX   r   r  r%   rd   r{   r   r   r   rÏ   �  r  zInTablePhase.end_tag_otherr”   rŽ   r�   r  ©r‹   r�   rŒ   )rˆ   r‰   rŠ   r�   )r'  r)  r™  rk  )r’   rŽ   r  r�   r”   r‹   rˆ   r�   r‰   rŒ   rŠ   N)r£   r¤   r¥   rç   rÐ   r  rj   ra   r`   r¿   r  r  r  r  r  r…  r  rˆ  rm  rÄ   r   r!  rÏ   r­   r®   rÍ   rÃ   rÎ   r   r   r   r   r    sL    
öÿ
þ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)Úcharacter_tokensrž   c                    s"   t ƒ j|i |¤Ž d | _g | _d S rJ   )r@  r&   rž   r$  rB  rD  r   r   r&   ¯  s   
zInTableTextPhase.__init__c                 C   sb   d  dd„ | jD ƒ¡}tdd„ |D ƒƒr$tj|dœ}| jjd  |¡ n|r,| j |¡ g | _d S )NrÙ   c                 S   s   g | ]}|d  ‘qS )rN   r   ©r   rÀ  r   r   r   Ú
<listcomp>µ  s    z5InTableTextPhase.flush_characters.<locals>.<listcomp>c                 s   rZ  rJ   r[  r%  r   r   r   r^  ¶  ó   € z4InTableTextPhase.flush_characters.<locals>.<genexpr>r˜  rƒ   )	Újoinr$  r_  r   r^   r'   r%   r¿   r   )r    rN   rk   r   r   r   Úflush_characters´  s   
z!InTableTextPhase.flush_charactersc                 C   ó   |   ¡  | j| j_|S rJ   ©r)  rž   r'   r8   r{   r   r   r   rf   ½  ó   
z InTableTextPhase.process_commentc                 C   s   |   ¡  | j| j_dS rì   r+  r   r   r   r   rj   Â  r,  zInTableTextPhase.process_eofc                 C   s    |d dkrd S | j  |¡ d S ©NrN   rY  ©r$  ri   r{   r   r   r   r`   Ç  s   z#InTableTextPhase.process_charactersc                 C   ó   | j  |¡ d S rJ   r.  r{   r   r   r   ra   Ì  s   z)InTableTextPhase.process_space_charactersc                 C   r*  rJ   r+  r{   r   r   r   rb   Ñ  r,  z"InTableTextPhase.process_start_tagc                 C   r*  rJ   r+  r{   r   r   r   rd   Ö  r,  z InTableTextPhase.process_end_tag)r£   r¤   r¥   rÐ   r&   r)  rf   rj   r`   ra   rb   rd   r  r   r   rD  r   r#  ¬  s    	r#  c                   @   óŠ   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   ó   | j jddd� S )NrŽ   r�   re  ©r   rg  r   r   r   r   Úignore_end_tag_captionà  rû   z%InCaptionPhase.ignore_end_tag_captionc                 C   ó   | j jd  ¡  d S rù   ©r'   r%   rj   r   r   r   r   rj   ã  rÀ   zInCaptionPhase.process_eofc                 C   rø   rù   ©r'   r%   r`   r{   r   r   r   r`   æ  rû   z!InCaptionPhase.process_charactersc                 C   ó2   | j  d¡ |  ¡ }| j j tdƒ¡ |s|S d S )Nz%unexpected-table-start-tag-in-captionrŽ   ©r'   rX   r4  r8   rd   rê   ©r    rk   Úignore_end_tagr   r   r   Ústart_tag_table_elementé  s   ÿz&InCaptionPhase.start_tag_table_elementc                 C   rø   rù   rú   r{   r   r   r   rÄ   ñ  rû   zInCaptionPhase.start_tag_otherc                 C   sÂ   |   ¡ sN| j ¡  | jjd jdkr!| j dd| jjd jdœ¡ | jjd jdkr9| jj ¡  | jjd jdks*| jj ¡  | j ¡  | jj	d | j_
d S | jjsTJ ‚| j dd|d i¡ d S )NrL   rŽ   r±  r²  rƒ   r#  r   )r4  r   r¦  rV   r   r'   rX   rÅ   rÓ  r%   r8   r(   r{   r   r   r   Úend_tag_captionô  s   
þÿ
zInCaptionPhase.end_tag_captionc                 C   r8  )Nz#unexpected-table-end-tag-in-captionrŽ   r9  r:  r   r   r   r     s   ÿzInCaptionPhase.end_tag_tablec                 C   rÿ   r"  rº   r{   r   r   r   r!    r   zInCaptionPhase.end_tag_ignorec                 C   rø   rù   ©r'   r%   rd   r{   r   r   r   rÏ     rû   zInCaptionPhase.end_tag_otherr”   ©	rŽ   r  r�   r‹   rˆ   r�   r‰   rŒ   rŠ   rŽ   r�   )
r’   r  r�   r”   r‹   rˆ   r�   r‰   rŒ   rŠ   N)r£   r¤   r¥   rç   rÐ   r4  rj   r`   r<  rÄ   r=  r   r!  rÏ   r­   r®   rÍ   rÃ   rÎ   r   r   r   r   r1  Ü  s0    ÿþÿ
ýr1  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 )NrL   r”   )r   rV   r   r   r   r   r   Úignore_end_tag_colgroup%  rû   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 )NrL   r”   r�   T)r   rV   r   r'   r(   rA  Úend_tag_colgrouprê   )r    r;  r   r   r   rj   (  s   ÿzInColumnGroupPhase.process_eofc                 C   ó"   |   ¡ }|  tdƒ¡ |s|S d S ©Nr�   ©rA  rB  rê   r:  r   r   r   r`   2  ó
   ÿz%InColumnGroupPhase.process_charactersc                 C   r  r  r  r{   r   r   r   r  8  r  z InColumnGroupPhase.start_tag_colc                 C   rC  rD  rE  r:  r   r   r   rÄ   =  rF  z"InColumnGroupPhase.start_tag_otherc                 C   sN   |   ¡ r| jjs
J ‚| j dd|d i¡ d S | jj ¡  | jjd | j_d S )Nr#  r   rƒ   )	rA  r'   r(   rX   r   rV   rÅ   r%   r8   r{   r   r   r   rB  C  s
   z#InColumnGroupPhase.end_tag_colgroupc                 C   s   | j  dddi¡ d S )Nz
no-end-tagr   r  rº   r{   r   r   r   Úend_tag_colL  rÕ   zInColumnGroupPhase.end_tag_colc                 C   rC  rD  rE  r:  r   r   r   rÏ   O  rF  z InColumnGroupPhase.end_tag_otherr”   r  r�   N)r£   r¤   r¥   rç   rÐ   rA  rj   r`   r  rÄ   rB  rG  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   sV   | j jd jdvr| j j ¡  | j jd jdvs	| j jd jdkr'| jjs)J ‚d S d S )NrL   )r‹   r�   rŒ   r”   r”   )r   rV   r   rÅ   r'   r(   r   r   r   r   Ú"_clear_stack_to_table_body_contextd  s   üÿz3InTableBodyPhase._clear_stack_to_table_body_contextc                 C   r5  ©Nrƒ   r6  r   r   r   r   rj   m  rÀ   zInTableBodyPhase.process_eofc                 C   rø   rJ  r2  r{   r   r   r   ra   p  rû   z)InTableBodyPhase.process_space_charactersc                 C   rø   rJ  r7  r{   r   r   r   r`   s  rû   z#InTableBodyPhase.process_charactersc                 C   r  )Nr   )rI  r   r�   r'   r%   r8   r{   r   r   r   Ústart_tag_trv  r;  zInTableBodyPhase.start_tag_trc                 C   s*   | j  dd|d i¡ |  tddƒ¡ |S )Nzunexpected-cell-in-table-bodyr   rŠ   r\   )r'   rX   rK  rê   r{   r   r   r   Ústart_tag_table_cell{  ó
   ÿz%InTableBodyPhase.start_tag_table_cellc                 C   óz   | j jddd�s| j jddd�s| j jddd�r*|  ¡  |  t| j jd jƒ¡ |S | jjs0J ‚| j 	dd|d i¡ d S )	Nr‹   r�   re  rŒ   r�   rL   z!unexpected-start-tag-out-of-tabler   ©
r   rg  rI  Úend_tag_table_rowgrouprê   rV   r   r'   r(   rX   r{   r   r   r   Ústart_tag_table_other�  s   ÿþÿÿz&InTableBodyPhase.start_tag_table_otherc                 C   rø   rJ  rú   r{   r   r   r   rÄ   �  rû   z InTableBodyPhase.start_tag_otherc                 C   sV   | j j|d dd�r|  ¡  | j j ¡  | jjd | j_d S | j dd|d i¡ d S )Nr   r�   re  rƒ   ú unexpected-end-tag-in-table-body)	r   rg  rI  rV   rÅ   r'   r%   r8   rX   r{   r   r   r   rP  “  s   ÿz'InTableBodyPhase.end_tag_table_rowgroupc                 C   rN  )	Nr‹   r�   re  rŒ   r�   rL   r#  r   rO  r{   r   r   r   r   œ  s   ÿþÿzInTableBodyPhase.end_tag_tablec                 C   rÿ   )NrR  r   rº   r{   r   r   r   r!  ©  ó   ÿzInTableBodyPhase.end_tag_ignorec                 C   rø   rJ  r>  r{   r   r   r   rÏ   ­  rû   zInTableBodyPhase.end_tag_otherr”   rŠ   ©rˆ   r‰   )rŽ   r  r�   r‹   r�   rŒ   r"  r�   )r’   rŽ   r  r�   r”   rˆ   r‰   rŠ   N)r£   r¤   r¥   rç   rÐ   rI  rj   ra   r`   rK  rL  rQ  rÄ   rP  r   r!  rÏ   r­   r®   rÍ   rÃ   rÎ   r   r   r   r   rH  `  s:    		ÿüÿ
ýrH  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   sT   | j jd jdvr(| j dd| j jd ji¡ | j j ¡  | j jd jdvs	d S d S )NrL   )rŠ   r”   z'unexpected-implied-end-tag-in-table-rowr   )r   rV   r   r'   rX   rÅ   r   r   r   r   Ú!_clear_stack_to_table_row_contextÄ  s   þüz,InRowPhase._clear_stack_to_table_row_contextc                 C   r2  )NrŠ   r�   re  r3  r   r   r   r   Úignore_end_tag_trË  rû   zInRowPhase.ignore_end_tag_trc                 C   r5  rJ  r6  r   r   r   r   rj   Î  rÀ   zInRowPhase.process_eofc                 C   rø   rJ  r2  r{   r   r   r   ra   Ñ  rû   z#InRowPhase.process_space_charactersc                 C   rø   rJ  r7  r{   r   r   r   r`   Ô  rû   zInRowPhase.process_charactersc                 C   s6   |   ¡  | j |¡ | jjd | j_| jj t¡ d S )Nr~   )	rV  r   r�   r'   r%   r8   rJ  ri   r   r{   r   r   r   rL  ×  s   zInRowPhase.start_tag_table_cellc                 C   rC  ©NrŠ   ©rW  Ú
end_tag_trrê   r:  r   r   r   rQ  Ý  s
   ÿz InRowPhase.start_tag_table_otherc                 C   rø   rJ  rú   r{   r   r   r   rÄ   ä  rû   zInRowPhase.start_tag_otherc                 C   sV   |   ¡ s|  ¡  | jj ¡  | jjd | j_d S | jjsJ ‚| j 	dd|d i¡ d S )Nr€   r#  r   )
rW  rV  r   rV   rÅ   r'   r%   r8   r(   rX   r{   r   r   r   rZ  ç  s   zInRowPhase.end_tag_trc                 C   rC  rX  rY  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�   re  rŠ   r#  )r   rg  rZ  rê   r'   rX   r{   r   r   r   rP  ù  s   z!InRowPhase.end_tag_table_rowgroupc                 C   rÿ   )Nzunexpected-end-tag-in-table-rowr   rº   r{   r   r   r   r!     rS  zInRowPhase.end_tag_ignorec                 C   rø   rJ  r>  r{   r   r   r   rÏ     rû   zInRowPhase.end_tag_otherr”   rT  )rŽ   r  r�   r‹   r�   rŒ   rŠ   rŠ   r�   r"  )r’   rŽ   r  r�   r”   rˆ   r‰   N)r£   r¤   r¥   rç   rÐ   rV  rW  rj   ra   r`   rL  rQ  rÄ   rZ  r   rP  r!  rÏ   r­   r®   rÍ   rÃ   rÎ   r   r   r   r   rU  À  s8    
ÿý
ürU  c                   @   r0  )ÚInCellPhasec                 C   sH   | j jddd�r|  tdƒ¡ d S | j jddd�r"|  tdƒ¡ d S d S )Nrˆ   r�   re  r‰   )r   rg  Úend_tag_table_cellrê   r   r   r   r   Ú_close_cell  s
   ÿzInCellPhase._close_cellc                 C   r5  rù   r6  r   r   r   r   rj      rÀ   zInCellPhase.process_eofc                 C   rø   rù   r7  r{   r   r   r   r`   #  rû   zInCellPhase.process_charactersc                 C   sR   | j jddd�s| j jddd�r|  ¡  |S | jjsJ ‚| j dd|d i¡ d S )Nrˆ   r�   re  r‰   z&unexpected-start-tag-out-of-table-cellr   )r   rg  r]  r'   r(   rX   r{   r   r   r   rQ  &  s   ÿÿz!InCellPhase.start_tag_table_otherc                 C   rø   rù   rú   r{   r   r   r   rÄ   1  rû   zInCellPhase.start_tag_otherc                 C   s¶   | j j|d dd�rN| j  |d ¡ | j jd j|d kr9| j dd|d i¡ 	 | j j ¡ }|j|d kr7nq)n| j j ¡  | j  ¡  | jj	d | j_
d S | j dd|d i¡ d S )	Nr   r�   re  rL   zunexpected-cell-end-tagTr   r#  )r   rg  r¦  rV   r   r'   rX   rÅ   rÓ  r%   r8   r  r   r   r   r\  4  s    ÿý
zInCellPhase.end_tag_table_cellc                 C   rÿ   r"  rº   r{   r   r   r   r!  E  r   zInCellPhase.end_tag_ignorec                 C   s:   | j j|d dd�r|  ¡  |S | j dd|d i¡ d S )Nr   r�   re  r#  )r   rg  r]  r'   rX   r{   r   r   r   Úend_tag_implyH  s   zInCellPhase.end_tag_implyc                 C   rø   rù   r>  r{   r   r   r   rÏ   P  rû   zInCellPhase.end_tag_otherr”   r?  rT  )r’   rŽ   r  r�   r”   rÃ  N)r£   r¤   r¥   rç   rÐ   r]  rj   r`   rQ  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   r  )NrL   r”   zeof-in-selectr  r   r   r   r   rj   d  r  zInSelectPhase.process_eofc                 C   s$   |d dkrd S | j  |d ¡ d S r-  r¾   r{   r   r   r   r`   j  s   z InSelectPhase.process_charactersc                 C   s.   | j jd jdkr| j j ¡  | j  |¡ d S r   ©r   rV   r   rÅ   r�   r{   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 )NrL   r¡  r®  r`  r{   r   r   r   Ústart_tag_optgroupu  s
   z InSelectPhase.start_tag_optgroupc                 C   s   | j  d¡ |  tdƒ¡ d S )Nzunexpected-select-in-selectr‡   )r'   rX   Úend_tag_selectrê   r{   r   r   r   r¤  |  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-selectr‡   re  )r'   rX   r   rg  rc  rê   r(   r{   r   r   r   rˆ  €  s
   zInSelectPhase.start_tag_inputc                 C   rø   r1  rú   r{   r   r   r   r  ˆ  rû   zInSelectPhase.start_tag_scriptc                 C   rÿ   )Nzunexpected-start-tag-in-selectr   rº   r{   r   r   r   rÄ   ‹  rS  zInSelectPhase.start_tag_otherc                 C   s8   | j jd jdkr| j j ¡  d S | j dddi¡ d S )NrL   r¡  úunexpected-end-tag-in-selectr   ©r   rV   r   rÅ   r'   rX   r{   r   r   r   Úend_tag_option�  s   zInSelectPhase.end_tag_optionc                 C   sh   | j jd jdkr| j jd jdkr| j j ¡  | j jd jdkr)| j j ¡  d S | j dddi¡ d S )NrL   r¡  éþÿÿÿr®  rd  r   re  r{   r   r   r   Úend_tag_optgroup•  s   ÿzInSelectPhase.end_tag_optgroupc                 C   sp   | j jddd�r%| j j ¡ }|jdkr| j j ¡ }|jdks| j ¡  d S | jjs+J ‚| j dd|d i¡ d S )Nr‡   re  r#  r   )	r   rg  rV   rÅ   r   r'   r:   r(   rX   r  r   r   r   rc  ¢  s   

ÿzInSelectPhase.end_tag_selectc                 C   rÿ   )Nrd  r   rº   r{   r   r   r   rÏ   ­  r   zInSelectPhase.end_tag_otherr”   r¡  r®  r‡   )r™  rû  rU  r)  N)r£   r¤   r¥   rç   rÐ   rj   r`   ra  rb  r¤  rˆ  r  rÄ   rf  rh  rc  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
edefgƒZede	fgƒZdS )ÚInSelectInTablePhasec                 C   r5  ©Nr}   r6  r   r   r   r   rj   Ã  rÀ   z InSelectInTablePhase.process_eofc                 C   rø   rj  r7  r{   r   r   r   r`   Æ  rû   z'InSelectInTablePhase.process_charactersc                 C   s(   | j  dd|d i¡ |  tdƒ¡ |S )Nz5unexpected-table-element-start-tag-in-select-in-tabler   r‡   )r'   rX   rÏ   rê   r{   r   r   r   r…  É  s   
þz$InSelectInTablePhase.start_tag_tablec                 C   rø   rj  rú   r{   r   r   r   rÄ   Ð  rû   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�   re  r‡   )r'   rX   r   rg  rÏ   rê   r{   r   r   r   r   Ó  s   
þþz"InSelectInTablePhase.end_tag_tablec                 C   rø   rj  r>  r{   r   r   r   rÏ   Û  rû   z"InSelectInTablePhase.end_tag_other)rŽ   r�   r‹   r�   rŒ   rŠ   rˆ   r‰   N)r£   r¤   r¥   rç   rÐ   rj   r`   r…  rÄ   r   rÏ   r­   rÃ   rÎ   r   r   r   r   ri  À  s$    ÿÿÿ
ÿri  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ê  r×  r’   rñ   rØ  rë  rM  rt   rÛ  rN  rì  rú  Úh1Úh2Úh3Úh4Úh5Úh6r‘   r•  rî  rŒ  rO  rT  rã  r/  r€  rå  rP  rS  r¥  rï  rð  Úspanrò  rñ  ÚsubÚsupr�   ró  rô  rè  Úvarc                 C   s  i 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"“i d#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdD“¥dEdFdGœ¥}|dH |v r||dH  |dH< d S d S )INÚaltglyphÚaltGlyphÚaltglyphdefÚaltGlyphDefÚaltglyphitemÚaltGlyphItemÚanimatecolorÚanimateColorÚanimatemotionÚanimateMotionÚanimatetransformÚanimateTransformÚclippathÚclipPathÚfeblendÚfeBlendÚfecolormatrixÚfeColorMatrixÚfecomponenttransferÚfeComponentTransferÚfecompositeÚfeCompositeÚfeconvolvematrixÚfeConvolveMatrixÚfediffuselightingÚfeDiffuseLightingÚfedisplacementmapÚfeDisplacementMapÚfedistantlightÚfeDistantLightÚfefloodÚfeFloodÚfefuncaÚfeFuncAÚfefuncbÚfeFuncBÚfefuncgÚfeFuncGÚfefuncrÚfeFuncRÚfegaussianblurÚfeGaussianBlurÚfeimageÚfeImageÚfemergeÚfeMergeÚfemergenodeÚfeMergeNodeÚfemorphologyÚfeMorphologyÚfeoffsetÚfeOffsetÚfepointlightÚfePointLightÚfespecularlightingÚfeSpecularLightingÚfespotlightÚfeSpotLightÚfetileÚfeTileÚfeturbulenceÚfeTurbulenceÚforeignobjectÚforeignObjectÚglyphrefÚglyphRefÚlineargradientÚlinearGradientÚradialGradientÚtextPath)ÚradialgradientÚtextpathr   r   )r    rk   Úreplacementsr   r   r   Úadjust_svg_tag_namesó  s–   ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Ü'ÿ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 )NrN   rY  u   ï¿½c                 s   rZ  rJ   r[  r\  r   r   r   r^  "	  r'  z;InForeignContentPhase.process_characters.<locals>.<genexpr>F)r'   r=   r_  r®   r`   r{   r   r   r   r`   	  s   
ÿz(InForeignContentPhase.process_charactersc                 C   sf  | j jd }|d | jv s|d dkrpt|d  ¡ ƒh d£@ rp| j dd|d i¡ | j jd j| j jkrn| j 	| j jd ¡sn| j 
| j jd ¡sn| j j ¡  | j jd j| j jkrn| j 	| j jd ¡sn| j 
| j jd ¡rI|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 d S )NrL   r   rí  rN   >   ÚfaceÚsizeÚcolorz*unexpected-html-element-in-foreign-contentrA   rR   rC   rT   TrU   )r   rV   Úbreakout_elementsÚsetrª   r'   rX   rC   r[   rI   rK   rÅ   r   r   r¿  r   r   r�   )r    rk   rn   r   r   r   rb   &	  sX   ÿÿÿ
ÿþ
ÿüúÿ
ÿþ
ÿü

þz'InForeignContentPhase.process_start_tagc                 C   sø   t | jjƒd }| jjd }|j t¡|d kr#| j dd|d i¡ 	 |j t¡|d kr`| jj| jj	d krE| jj 
¡  | jjj| j_| jj ¡ |kr[| jjsSJ ‚| jj ¡ |ksMd }	 |S |d8 }| jj| }|j| jjkrrq#| jj |¡}	 |S )Nr   rL   r   r#  Tr  )rZ   r   rV   r   rE   r   r'   rX   r8   r%   r)  rž   rÅ   rC   r[   rd   )r    rk   Ú
node_indexr—   rm   r   r   r   rd   C	  s,   ÿ	øz%InForeignContentPhase.process_end_tagN)r£   r¤   r¥   rç   rÐ   r]   rÃ  r¿  r`   rb   rd   r   r   r   r   rk  é  s    +rk  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   rÒ   rJ   r   r   r   r   r   rj   a	  ó   zAfterBodyPhase.process_eofc                 C   rµ   )Nr>   r¶   r{   r   r   r   rf   e	  r¸   zAfterBodyPhase.process_commentc                 C   ó    | j  d¡ | j jd | j _|S )Nzunexpected-char-after-bodyr„   ©r'   rX   r%   r8   r{   r   r   r   r`   j	  ó   z!AfterBodyPhase.process_charactersc                 C   rø   rù   rú   r{   r   r   r   rÍ   o	  rû   zAfterBodyPhase.start_tag_htmlc                 C   ó*   | j  dd|d i¡ | j jd | j _|S )Nzunexpected-start-tag-after-bodyr   r„   rÉ  r{   r   r   r   rÄ   r	  rM  zAfterBodyPhase.start_tag_otherc                 C   s,   | j jr| j  d¡ d S | j jd | j _d S )Nz'unexpected-end-tag-after-body-innerhtmlúafter after body)r'   r(   rX   r%   r8   )r    r   r   r   r   r·  x	  s   zAfterBodyPhase.end_tag_htmlc                 C   rË  )Nzunexpected-end-tag-after-bodyr   r„   rÉ  r{   r   r   r   rÏ   ~	  rM  zAfterBodyPhase.end_tag_otherr”   N)r£   r¤   r¥   rç   rÐ   rj   rf   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defde	fgƒZedefgƒZdS )ÚInFramesetPhasec                 C   r  )NrL   r”   zeof-in-framesetr  r   r   r   r   rj   �	  r  zInFramesetPhase.process_eofc                 C   r¹   )Nzunexpected-char-in-framesetrº   r{   r   r   r   r`   •	  r»   z"InFramesetPhase.process_charactersc                 C   r/  rJ   )r   r�   r{   r   r   r   r<  ˜	  r»   z"InFramesetPhase.start_tag_framesetc                 C   s   | j  |¡ | j j ¡  d S rJ   r  r{   r   r   r   Ústart_tag_frame›	  r
  zInFramesetPhase.start_tag_framec                 C   rø   rù   rú   r{   r   r   r   Ústart_tag_noframesŸ	  rû   z"InFramesetPhase.start_tag_noframesc                 C   rÿ   )Nz unexpected-start-tag-in-framesetr   rº   r{   r   r   r   rÄ   ¢	  rS  zInFramesetPhase.start_tag_otherc                 C   sb   | j jd jdkr| j d¡ n| j j ¡  | jjs-| j jd jdkr/| jjd | j_d S d S d S )NrL   r”   z)unexpected-frameset-in-frameset-innerhtmlr“   úafter frameset)	r   rV   r   r'   rX   rÅ   r(   r%   r8   r{   r   r   r   Úend_tag_frameset¦	  s   üz InFramesetPhase.end_tag_framesetc                 C   rÿ   )Nzunexpected-end-tag-in-framesetr   rº   r{   r   r   r   rÏ   ²	  rS  zInFramesetPhase.end_tag_otherr”   r“   r  r&  N)r£   r¤   r¥   rç   rÐ   rj   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   rÒ   rJ   r   r   r   r   r   rj   Æ	  rÇ  zAfterFramesetPhase.process_eofc                 C   r¹   )Nzunexpected-char-after-framesetrº   r{   r   r   r   r`   Ê	  r»   z%AfterFramesetPhase.process_charactersc                 C   rø   r1  rú   r{   r   r   r   rÏ  Í	  rû   z%AfterFramesetPhase.start_tag_noframesc                 C   rÿ   )Nz#unexpected-start-tag-after-framesetr   rº   r{   r   r   r   rÄ   Ð	  rS  z"AfterFramesetPhase.start_tag_otherc                 C   s   | j jd | j _d S )Núafter after frameset)r'   r%   r8   r{   r   r   r   r·  Ô	  rÀ   zAfterFramesetPhase.end_tag_htmlc                 C   rÿ   )Nz!unexpected-end-tag-after-framesetr   rº   r{   r   r   r   rÏ   ×	  rS  z AfterFramesetPhase.end_tag_otherr”   r&  N)r£   r¤   r¥   rç   rÐ   rj   r`   rÏ  rÄ   r·  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   rÒ   rJ   r   r   r   r   r   rj   è	  r´   zAfterAfterBodyPhase.process_eofc                 C   rÓ   rJ   rÔ   r{   r   r   r   rf   ë	  rÕ   z#AfterAfterBodyPhase.process_commentc                 C   rø   rù   r2  r{   r   r   r   ra   î	  rû   z,AfterAfterBodyPhase.process_space_charactersc                 C   rÈ  )Núexpected-eof-but-got-charr„   rÉ  r{   r   r   r   r`   ñ	  rÊ  z&AfterAfterBodyPhase.process_charactersc                 C   rø   rù   rú   r{   r   r   r   rÍ   ö	  rû   z"AfterAfterBodyPhase.start_tag_htmlc                 C   rË  )Núexpected-eof-but-got-start-tagr   r„   rÉ  r{   r   r   r   rÄ   ù	  rM  z#AfterAfterBodyPhase.start_tag_otherc                 C   rË  )Núexpected-eof-but-got-end-tagr   r„   rÉ  r{   r   r   r   rd   ÿ	  rM  z#AfterAfterBodyPhase.process_end_tagr”   N)r£   r¤   r¥   rç   rÐ   rj   rf   ra   r`   rÍ   rÄ   rd   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   rÒ   rJ   r   r   r   r   r   rj   
  r´   z#AfterAfterFramesetPhase.process_eofc                 C   rÓ   rJ   rÔ   r{   r   r   r   rf   
  rÕ   z'AfterAfterFramesetPhase.process_commentc                 C   rø   rù   r2  r{   r   r   r   ra   
  rû   z0AfterAfterFramesetPhase.process_space_charactersc                 C   r¹   )NrÕ  rº   r{   r   r   r   r`   
  r»   z*AfterAfterFramesetPhase.process_charactersc                 C   rø   rù   rú   r{   r   r   r   rÍ   
  rû   z&AfterAfterFramesetPhase.start_tag_htmlc                 C   rø   r1  rú   r{   r   r   r   rÏ  
  rû   z*AfterAfterFramesetPhase.start_tag_noframesc                 C   rÿ   )NrÖ  r   rº   r{   r   r   r   rÄ   
  rS  z'AfterAfterFramesetPhase.start_tag_otherc                 C   rÿ   )Nr×  r   rº   r{   r   r   r   rd   #
  rS  z'AfterAfterFramesetPhase.process_end_tagr”   r&  N)r£   r¤   r¥   rç   rÐ   rj   rf   ra   r`   rÍ   rÏ  rÄ   rd   r­   rÃ   r   r   r   r   rØ  

  s    
þrØ  r1   r0   r†   rü   r  r  r„   rœ   rƒ   r  r�   r‚   r€   r   r~   r}   r£  )rS   rµ  r…   rÐ  rÌ  rÓ  c                    sF   | d   ¡ ˆ   ¡ @ r!t| d ƒ‡ fdd„| d  ¡ D ƒƒ| d< d S d S )NrN   c                 3   s$   � | ]\}}ˆ   ||¡|fV  qd S rJ   )rY   )r   r¬   r«   ©r¾  r   r   r^  J
  s   € 
ÿz$adjust_attributes.<locals>.<genexpr>)rª   rM   r$   )rk   r¾  r   rÙ  r   rz   H
  s
   
ÿÿrz   rc   NFc                 C   s$   t | | |d u ri |dœS ||dœS )N)rM   r   rN   rT   )r   )r   rM   rD   r‘  r   r   r   rê   N
  s   
üürê   r¡   )rc   NF)4rÙ   r   Ú	constantsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r*   r   Útreebuilderr   r   r   r   r­   r®   rÑ   rè   rò   r  r0  r9  r?  r  r  r#  r1  r@  rH  rU  r[  r_  ri  rk  rÆ  rÍ  rÒ  rÔ  rØ  r#   rz   rê   r   r   r   r   Ú<module>   s¦    @
% fD $+eAA     W! 0E?`VJ`)u-7#%#ÿþýüûúùø	÷
öõôóòñðïé