o
    Xh0h[                    @   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   F/var/www/html/rh/venv/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 )zName 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 }nt	| 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 |	sd 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.)r'   r   __start_tag_cache__end_tag_cachec                 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   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   rV   r   r   r%   r8   r    rk   r   r   r   r   end_tag_head  s   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   r/  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   r/  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   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   r   r4  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&  )r5  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  r3  r   r5  r6  r   r   r   r   r   r   r   r   r   r.    s2    
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   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   r1  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   r8  r:  r<  r   r   r  r   r   r   r   r   r   r   r   r   r7    s2    

r7  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de#fde$fde&fde'fde%fde(fde)fde*fZ;e7dje-fdhe.fde/fdne0fde,fde1fe:e2fde3fdue4fde5f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   rF  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   )	r?  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   rU  r   r'   r=   anyr{   r   r   r   r`   a  s   
zInBodyPhase.process_charactersc                 C   s   | j   | j |d  d S r   )r   rU  r   r{   r   r   r   r?  l  s   
z,InBodyPhase.process_space_characters_non_prec                 C   r   r/  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 )Nr2  r   r   r   FrN   )
r'   rX   rZ   r   rV   r   r(   r=   r$   rD   r   r   r   r   r8  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 )	Nr2  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 NrN  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 )NrN  rb  rc  F)	r   re  rf  r   r   r'   r=   rV  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 )Nr2  r   formrN  rb  rc  rL   )	r   form_elementr'   rX   re  rf  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 )NFrM  rL  rK  )rM  rL  rK  r   )addressrt   rN  rN  rb  rc  )r'   r=   reversedr   rV   r   r8   rd   r   
name_tupler   re  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 ra  )	r   re  rf  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 )NrN  rb  rc  rL   r2  r   )r   re  rf  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;  rH  rU  rJ  )r    rk   afe_a_elementr   r   r   start_tag_a  s   
zInBodyPhase.start_tag_ac                 C   s   | j   | | d S rJ   )r   rU  rJ  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nobrru  rv  )r   rU  re  r'   rX   rd   r   rJ  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 )Nrb  ru  rv  F)	r   re  r'   rX   rd   r   rU  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   rU  r   rH  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 )NrN  rb  rc  Fr   )r   re  rf  r   rU  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   rN  rb  rc  Fr   )
r'   r3   r   re  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   rU  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 )NrN  rb  rc  TrU   F)	r   re  rf  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   ri  r\   )rD   hrlabelpromptz3This is a searchable index. Enter search keywords: rM   rN   inputrT   r  )r'   rX   r   rj  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   rV  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   rU  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   rU  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   re  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   rU  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   rU  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 )zElements 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   rU  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 )NrN  rb  rc  r\   r!  r   rL   )r   re  rg  r   r'   rX   rf  r  rV   r   r   r  r   r   r   rf    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      )rK  rL  rM  optgroupr  rN  rprtr   r   r   r   r   r   r   r   $expected-one-end-tag-but-got-anothergotNameexpectedName
after body)	r   re  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   re  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   rQ  rL   end-tag-too-early)
r?  ra   r   re  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   ri  rL   zend-tag-too-early-ignored)r   rj  re  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   rM  listrc  r!  excluderL   r  )r   re  r'   rX   r  rV   r   r   )r    rk   rd  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   re  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rn>|	|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.3rG  r   r   r   r   r   )r   ry  rV   re  r   r   r'   rX   rH  r;  indexrn  r   r   cloner_  r`  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  r_  r  r   r   r   rz    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   re  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   rU  r   r   rV   r   r{   r   r   r   r6    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   rn  r   r  r   r   r   r     s$   
zInBodyPhase.end_tag_otherr   )	r(  r)  r*  r+  r,  r-  r'  r%  r#  r   r   )rl  articleaside
blockquotecenterdetailsdirrt   dlfieldset
figcaptionfigurefooterheaderhgroupmainmenunavolrN  sectionsummaryul)rQ  rR  ri  )rM  rK  rL  r/   rt  )bbigcodeemfontissmallstrikestrongttur~  rb  )appletmarqueeobjectxmpr   )arear   embedr  keygenwbr)paramsourcetrackr  r  r  r  rS  iframer&  )noembedr$  r   )r  r  )r  r  mathrR   )r   colr   framer   r   r   r   r   r   r   )rl  r  r  r  rb  r  r  dialogr  rt   r  r  r  r  r  r  r  rR  r  r  r  r  rQ  r  r  r  rN  )rK  rL  rM  )rt  r  r  r  r  r  r  r~  r  r  r  r  r  r  r   )>r   r   r   r   r&   rF  rJ  rj   rV  r`   r?  r^  r8  r:  rg  rh  rk  rq  rr  rs  r|  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rf  r  r  r  r  r  r  rz  r  r6  r   r   r   r   r
   r   r   __classcell__r   r   rB  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   J d|d  d)NFzTried to process start tag r   z in RCDATA/RAWTEXT moder   r{   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   rH  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  r9  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  r9  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 )Nru  r   rv  )r'   rX   r8   rd   r   r(   r{   r   r   r   r  Y  s   zInTablePhase.start_tag_tablec                 C   r   r/  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   rj  r   rV   r   r{   r   r   r   rk  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   rc  rL   zend-tag-too-early-namedr  r!  r   )
r   re  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  ri  )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  rk  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)r   character_tokensc                    s"   t  j|i | d | _g | _d S rJ   )r>  r&   r   r!  r@  rB  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   rX  rJ   rY  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   rW  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   rB  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   rc  r   re  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   r1  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   )r1  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   r5  )Nz#unexpected-table-end-tag-in-captionr   r6  r7  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   r1  rj   r`   r9  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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(   r>  end_tag_colgroupr   )r    r8  r   r   r   rj   (  s   zInColumnGroupPhase.process_eofc                 C   "   |   }| td |s|S d S Nr   r>  r?  r   r7  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   r@  rA  rB  r7  r   r   r   r   =  rC  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   )	r>  r'   r(   rX   r   rV   r   r%   r8   r{   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   r{   r   r   r   end_tag_colL  r   zInColumnGroupPhase.end_tag_colc                 C   r@  rA  rB  r7  r   r   r   r   O  rC  z InColumnGroupPhase.end_tag_otherr   r  r   N)r   r   r   r   r   r>  rj   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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   r2  Nr   r3  r   r   r   r   rj   m  r   zInTableBodyPhase.process_eofc                 C   r   rG  r0  r{   r   r   r   ra   p  r   z)InTableBodyPhase.process_space_charactersc                 C   r   rG  r4  r{   r   r   r   r`   s  r   z#InTableBodyPhase.process_charactersc                 C   r  )Nr   )rF  r   r   r'   r%   r8   r{   r   r   r   start_tag_trv  r9  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   rH  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   rc  r   r   rL   z!unexpected-start-tag-out-of-tabler   
r   re  rF  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   rG  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   rc  r    unexpected-end-tag-in-table-body)	r   re  rF  rV   r   r'   r%   r8   rX   r{   r   r   r   rM    s   z'InTableBodyPhase.end_tag_table_rowgroupc                 C   rK  )	Nr   r   rc  r   r   rL   r!  r   rL  r{   r   r   r   r    s   zInTableBodyPhase.end_tag_tablec                 C   r   )NrO  r   r   r{   r   r   r   r       zInTableBodyPhase.end_tag_ignorec                 C   r   rG  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   rF  rj   ra   r`   rH  rI  rN  r   rM  r  r  r   r   r   r   r   r   r   r   r   r   rE  `  s:    		
rE  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   r/  )Nr   r   rc  r0  r   r   r   r   ignore_end_tag_tr  r   zInRowPhase.ignore_end_tag_trc                 C   r2  rG  r3  r   r   r   r   rj     r   zInRowPhase.process_eofc                 C   r   rG  r0  r{   r   r   r   ra     r   z#InRowPhase.process_space_charactersc                 C   r   rG  r4  r{   r   r   r   r`     r   zInRowPhase.process_charactersc                 C   s6   |    | j| | jjd | j_| jjt d S )Nr~   )	rS  r   r   r'   r%   r8   rH  ri   r   r{   r   r   r   rI    s   zInRowPhase.start_tag_table_cellc                 C   r@  Nr   rT  
end_tag_trr   r7  r   r   r   rN    s
   z InRowPhase.start_tag_table_otherc                 C   r   rG  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   )
rT  rS  r   rV   r   r'   r%   r8   r(   rX   r{   r   r   r   rW    s   zInRowPhase.end_tag_trc                 C   r@  rU  rV  r7  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   rc  r   r!  )r   re  rW  r   r'   rX   r{   r   r   r   rM    s   z!InRowPhase.end_tag_table_rowgroupc                 C   r   )Nzunexpected-end-tag-in-table-rowr   r   r{   r   r   r   r     rP  zInRowPhase.end_tag_ignorec                 C   r   rG  r;  r{   r   r   r   r     r   zInRowPhase.end_tag_otherr   rQ  )r   r  r   r   r   r   r   r   r   r  )r   r   r  r   r   r   r   N)r   r   r   r   r   rS  rT  rj   ra   r`   rI  rN  r   rW  r  rM  r  r   r   r   r   r   r   r   r   r   r   rR    s8    

rR  c                   @   r-  )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   rc  r   )r   re  end_tag_table_cellr   r   r   r   r   _close_cell  s
   zInCellPhase._close_cellc                 C   r2  r   r3  r   r   r   r   rj      r   zInCellPhase.process_eofc                 C   r   r   r4  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   rc  r   z&unexpected-start-tag-out-of-table-cellr   )r   re  rZ  r'   r(   rX   r{   r   r   r   rN  &  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   rc  rL   zunexpected-cell-end-tagTr   r!  )r   re  r  rV   r   r'   rX   r   r  r%   r8   r  r   r   r   rY  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   rc  r!  )r   re  rZ  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<  rQ  )r   r   r  r   r   r  N)r   r   r   r   r   rZ  rj   r`   rN  r   rY  r  r[  r   r   r   r   r   r   r   r   r   r   rX    s,    
rX  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   rc  )r'   rX   r   re  r`  r   r(   r{   r   r   r   r    s
   zInSelectPhase.start_tag_inputc                 C   r   r/  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     rP  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  ra  r   rb  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   rc  r!  r   )	r   re  rV   r   r   r'   r:   r(   rX   r  r   r   r   r`    s   

zInSelectPhase.end_tag_selectc                 C   r   )Nra  r   r   r{   r   r   r   r     r   zInSelectPhase.end_tag_otherr   r  r  r   )r  r  rS  r'  N)r   r   r   r   r   rj   r`   r^  r_  r  r  r  r   rc  re  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
edefgZede	fgZdS )InSelectInTablePhasec                 C   r2  Nr}   r3  r   r   r   r   rj     r   z InSelectInTablePhase.process_eofc                 C   r   rg  r4  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   rg  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   rc  r   )r'   rX   r   re  r   r   r{   r   r   r   r    s   
z"InSelectInTablePhase.end_tag_tablec                 C   r   rg  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   rf    s$    
rf  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  rK  rt   r  rL  r  r  h1h2h3h4h5h6r   r  r  r  rM  rR  r  r-  r~  r  rN  rQ  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   rW  u   �c                 s   rX  rJ   rY  rZ  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   rh    s    +rh  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	  rJ  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   ~	  rJ  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   	  rP  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   	  rP  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   r/  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   	  rP  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   	  rP  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   r0  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   	  rJ  z#AfterAfterBodyPhase.start_tag_otherc                 C   r  )Nexpected-eof-but-got-end-tagr   r   r  r{   r   r   r   rd   	  rJ  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   r0  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   r/  r   r{   r   r   r   r  
  r   z*AfterAfterFramesetPhase.start_tag_noframesc                 C   r   )Nr  r   r   r{   r   r   r   r   
  rP  z'AfterAfterFramesetPhase.start_tag_otherc                 C   r   )Nr  r   r   r{   r   r   r   rd   #
  rP  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  r.  r7  r=  r  r  r   r.  r=  rE  rR  rX  r\  rf  rh  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#%#	
