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

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

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

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

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

    Example:

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

    )
HTMLParserparse)documentnamespace_html_elementskwargs r   U/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/tinyhtml5/parser.pyr      s    "r   c                   @   s   e Zd ZdZd$ddZd%ddZd	d
 Zedd Zdd Z	dd Z
dd Zd&ddZd'ddZd(ddZdd Zdd Zdd Zd d! Zd"d# ZdS ))r   z]HTML parser.

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

    Tc                    s,   t | _g  _ fddt D  _d S )Nc                    s   i | ]\}}||  j qS r   )tree).0nameclsselfr   r   
<dictcomp>E       z'HTMLParser.__init__.<locals>.<dictcomp>)r   r   errors_phasesitemsphases)r    r   r   r   r   __init__B   s    
zHTMLParser.__init__NFc                 K   s^   || _ || _t|fd| i|| _|   z|   W n" tyX   |   |   Y n0 d S )Nparser)	container	scriptingr   	tokenizerreset	main_loopr   )r    streamr)   r*   r   r   r   r   _parseG   s    zHTMLParser._parsec                 C   s   | j   d| _g | _d| _| jr| jtv r:| jj| j_	n0| jt
v rR| jj| j_	n| jdkrj| jj| j_	n | jd | _| j  |   n| jd | _d | _d | _d| _d S )NFz	no quirks	plaintextbefore htmlinitialT)r   r,   first_start_tagr#   compatibility_moder)   r	   r+   rcdata_statestater   rawtext_stateplaintext_stater&   phase_insert_html_elementreset_insertion_modeZ
last_phaseZbefore_rcdata_phaseframeset_okr   r   r   r   r,   R   s$    





zHTMLParser.resetc                 C   s   t | dr| jjjd jS dS )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 o8|jd tdv S |tv S )Nmathmlannotation-xmlr?   )z	text/htmlzapplication/xhtml+xml)	namespacer   r   
attributes	translater   r   r    elementZ	full_namer   r   r   is_html_integration_pointy   s    
z$HTMLParser.is_html_integration_pointc                 C   s   |j |jf}|tv S N)rB   r   r   rE   r   r   r    is_mathml_text_integration_point   s    z+HTMLParser.is_mathml_text_integration_pointc                 C   sH  | j D ]}d }|}|d ur|}| jjr6| jjd nd }|rD|jnd }|rR|jnd }|d }|tjkr| |d |di  d }qt	| jjdks6|| jj
ks6| |r|tjkr|d tddgvs6|tjtjfv s6|td	 kr|d
kr|tjkr|d dks6| |r>|tjtjtjfv r>| j}n
| jd }|tjkr`||}q|tjkrx||}q|tjkr||}q|tjkr||}q|tjkr||}q|tjkr||}q|tjkr|d r|d s| dd|d i qd}	g }
|	rD|
| j | j }	|	r| j|
vsJ qd S )Ntypedatadatavarsr=   r   mglyph
malignmarkr@   rA   svgin foreign contentselfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r+   r   open_elementsrB   r   r   PARSE_ERRORparse_errorgetlendefault_namespacerI   	START_TAG	frozenset
CHARACTERSZSPACE_CHARACTERSr   rG   r9   r&   process_charactersprocess_space_charactersprocess_start_tagEND_TAGprocess_end_tagCOMMENTprocess_commentZDOCTYPEprocess_doctypeappendprocess_eof)r    tokenZprevious_token	new_tokencurrent_nodeZcurrent_node_namespaceZcurrent_node_namerK   r9   	reprocessr&   r   r   r   r-      s    



	






zHTMLParser.main_loopc                 K   s   | j |fi | | j|S )zvParse a HTML document into a well-formed tree.

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

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

        ``container`` is the tag name of the fragment’s container.

        r)   )r/   r   Zget_fragment)r    r.   r)   r   r   r   r   parse_fragment   s    zHTMLParser.parse_fragmentc                 C   s*   |d u ri }| j | jj ||f d S rH   )r#   re   r+   r.   position)r    	errorcoderM   r   r   r   rV      s    zHTMLParser.parse_errorc                 C   s   t |t d S rH   )adjust_attributesr   r    rg   r   r   r   r      s    z#HTMLParser.adjust_mathml_attributesc                 C   s   t |t d S rH   )ro   r   rp   r   r   r   r      s    z HTMLParser.adjust_svg_attributesc                 C   s   t |t d S rH   )ro   r   rp   r   r   r   r      s    z$HTMLParser.adjust_foreign_attributesc                 C   s   d}ddddddddddd	d	d
dd}| j jd d d D ]}|j}d }|| j jd krj| js`J d}| j}|dv r|| js|J |s|j| j jkrq8||v r| j||  } qq8|r8| jd	 } qq8|| _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htmlrJ   r=   T)r{   r   r   r   )r   rT   r   r)   rB   rY   r&   r9   )r    lastZ	new_modesnodeZ	node_name	new_phaser   r   r   r;      sD    


zHTMLParser.reset_insertion_modec                 C   sR   |dv sJ | j | |dkr.| jj| j_n| jj| j_| j| _| jd | _d S )N)RAWTEXTRCDATAr   text)	r   insert_elementr+   r7   r6   r5   r9   original_phaser&   )r    rg   content_typer   r   r   parse_rcdata_rawtext  s    zHTMLParser.parse_rcdata_rawtext)T)NF)F)rk   )N)__name__
__module____qualname____doc__r'   r/   r,   propertyr?   rG   rI   r-   r   rl   rV   r   r   r   r;   r   r   r   r   r   r   ;   s"   


		?
	
	
+r   c                 C   s   dd | D S )Nc                 S   s0   i | ](\}}t |tr|fn|D ]
}||q qS r   )
isinstancestr)r   keysvaluekeyr   r   r   r!   !  s   zdispatch.<locals>.<dictcomp>r   )r%   r   r   r   dispatch   s    r   c                   @   s\   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd ZdS )Phasez?Base class for helper that implements each phase of processing.)r(   r   Z__start_tag_cacheZ__end_tag_cachec                 C   s   || _ || _i | _i | _d S rH   )r(   r   _Phase__start_tag_cache_Phase__end_tag_cache)r    r(   r   r   r   r   r'   ,  s    zPhase.__init__c                 C   s   t d S rH   )NotImplementedErrorr   r   r   r   rf   2  s    zPhase.process_eofc                 C   s   | j || j jd  d S )NrJ   r   insert_commentrT   rp   r   r   r   rc   5  s    zPhase.process_commentc                 C   s   | j d d S )Nzunexpected-doctyper(   rV   rp   r   r   r   rd   :  s    zPhase.process_doctypec                 C   s   | j |d  d S NrL   r   insert_textrp   r   r   r   r]   =  s    zPhase.process_charactersc                 C   s   | j |d  d S r   r   rp   r   r   r   r^   @  s    zPhase.process_space_charactersc                 C   sv   |d }|| j v r| j | }nN| j|t| j }| j |< t| j t| jd krl| j tt| j  q<|| |S Nr   g?)	r   start_tag_handlerrW   rK   start_tag_otherrX   popnextiterr    rg   r   functionr   r   r   r_   C  s    

zPhase.process_start_tagc                 C   sf   | j js |d dkr | j d |d  D ],\}}|| jjd jvr,|| jjd j|< q,d| j _d S )Nr   r   znon-html-rootrL   r=   F)r(   r3   rV   r%   r   rT   rC   r    rg   attrr   r   r   r   start_tag_htmlR  s    zPhase.start_tag_htmlc                 C   sv   |d }|| j v r| j | }nN| j|t| j }| j |< t| j t| jd krl| j tt| j  q<|| |S r   )	r   end_tag_handlerrW   rK   end_tag_otherrX   r   r   r   r   r   r   r   ra   \  s    

zPhase.process_end_tagN)r   r   r   r   	__slots__r'   rf   rc   rd   r]   r^   r_   r   ra   r   r   r   r   r   (  s   
r   c                   @   sR   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd ZdS )InitialPhasec                 C   s   d S rH   r   rp   r   r   r   r^   o  s    z%InitialPhase.process_space_charactersc                 C   s   | j || j j d S rH   r   r   r   rp   r   r   r   rc   r  s    zInitialPhase.process_commentc                 C   s   |d }|d }|d }|d }|dks@|d us@|d urL|dkrL| j d |d u rXd}| j| |dkrv|t}|r|d dks|d	s|d
v s|dr|d u s|r| dkrd| j _n$|ds|dr|d urd| 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 quirksr1   )r(   rV   r   Zinsert_doctyperD   r   
startswithlowerr4   r&   r9   )r    rg   r   	public_id	system_idr   r   r   r   rd   u  s\    
;>ABBD
zInitialPhase.process_doctypec                 C   s   d| j _| j jd | j _d S )Nr   r1   )r(   r4   r&   r9   r   r   r   r   anything_else  s    zInitialPhase.anything_elsec                 C   s   | j d |   |S )Nzexpected-doctype-but-got-charsr(   rV   r   rp   r   r   r   r]     s    zInitialPhase.process_charactersc                 C   s"   | j dd|d i |   |S )Nz"expected-doctype-but-got-start-tagr   r   rp   r   r   r   r_     s
    zInitialPhase.process_start_tagc                 C   s"   | j dd|d i |   |S )Nz expected-doctype-but-got-end-tagr   r   rp   r   r   r   ra     s
    zInitialPhase.process_end_tagc                 C   s   | j d |   dS )Nzexpected-doctype-but-got-eofTr   r   r   r   r   rf     s    zInitialPhase.process_eofN)r   r   r   tupler   r^   rc   rd   r   r]   r_   ra   rf   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   rZ   rz   )r   Zinsert_rootimplied_tag_tokenr(   r&   r9   r   r   r   r   r:     s    z$BeforeHtmlPhase._insert_html_elementc                 C   s   |    dS NTr:   r   r   r   r   rf     s    zBeforeHtmlPhase.process_eofc                 C   s   | j || j j d S rH   r   rp   r   r   r   rc     s    zBeforeHtmlPhase.process_commentc                 C   s   d S rH   r   rp   r   r   r   r^      s    z(BeforeHtmlPhase.process_space_charactersc                 C   s   |    |S rH   r   rp   r   r   r   r]     s    z"BeforeHtmlPhase.process_charactersc                 C   s    |d dkrd| j _|   |S )Nr   r   T)r(   r3   r:   rp   r   r   r   r_     s    z!BeforeHtmlPhase.process_start_tagc                 C   s4   |d dvr$| j dd|d i n|   |S d S )Nr   r   r   r   brzunexpected-end-tag-before-html)r(   rV   r:   rp   r   r   r   ra     s    zBeforeHtmlPhase.process_end_tagN)r   r   r   r   r   r:   rf   rc   r^   r]   r_   ra   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   rZ   Tstart_tag_headr   r   r   r   r   rf     s    zBeforeHeadPhase.process_eofc                 C   s   d S rH   r   rp   r   r   r   r^     s    z(BeforeHeadPhase.process_space_charactersc                 C   s   |  tdd |S Nr   rZ   r   rp   r   r   r   r]      s    z"BeforeHeadPhase.process_charactersc                 C   s   | j jd |S Nrx   r(   r&   r_   rp   r   r   r   r   $  s    zBeforeHeadPhase.start_tag_htmlc                 C   s0   | j | | j jd | j _| jjd | j_d S )NrJ   in head)r   r   rT   head_elementr(   r&   r9   rp   r   r   r   r   '  s    zBeforeHeadPhase.start_tag_headc                 C   s   |  tdd |S r   r   rp   r   r   r   r   ,  s    zBeforeHeadPhase.start_tag_otherc                 C   s   |  tdd |S r   r   rp   r   r   r   end_tag_imply_head0  s    z"BeforeHeadPhase.end_tag_imply_headc                 C   s   | j dd|d i d S )Nzend-tag-after-implied-rootr   r   rp   r   r   r   r   4  s    zBeforeHeadPhase.end_tag_otherr   r   r   N)r   r   r   r   r   rf   r^   r]   r   r   r   r   r   r   r   r   r   r   r   r   r     s    r   c                
   @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zedefd efd!efd"efd#efd$e	fd%e
fd&efgZed&efd'efgZd(S ))InHeadPhasec                 C   s   |    dS r   r   r   r   r   r   rf   E  s    zInHeadPhase.process_eofc                 C   s   |    |S rH   r   rp   r   r   r   r]   I  s    zInHeadPhase.process_charactersc                 C   s   | j jd |S r   r   rp   r   r   r   r   M  s    zInHeadPhase.start_tag_htmlc                 C   s   | j d d S )Nz!two-heads-are-not-better-than-oner   rp   r   r   r   r   P  s    zInHeadPhase.start_tag_headc                 C   s$   | j | | j j  d|d< d S NTrS   r   r   rT   r   rp   r   r   r   start_tag_base_link_commandS  s    z'InHeadPhase.start_tag_base_link_commandc                 C   s   | j | | j j  d|d< |d }| jjjjd dkrd|v rZ| jjj|d  nVd|v rd|v r|d 	 d	krt
|d d
}t
|}| }| jjj| d S )NTrS   rL   r   	tentativecharsetcontentz
http-equivzcontent-typezutf-8)r   r   rT   r   r(   r+   r.   r?   Zchange_encodingr   r   EncodingBytesencodeZContentAttributeParserr   )r    rg   rC   rL   r(   codecr   r   r   start_tag_metaX  s     
zInHeadPhase.start_tag_metac                 C   s   | j |d d S )Nr   r(   r   rp   r   r   r   start_tag_titlem  s    zInHeadPhase.start_tag_titlec                 C   s   | j |d d S Nr   r   rp   r   r   r   start_tag_noframes_stylep  s    z$InHeadPhase.start_tag_noframes_stylec                 C   s8   | j jr| j |d n| j| | j jd | j _d S )Nr   in head noscript)r(   r*   r   r   r   r&   r9   rp   r   r   r   start_tag_noscriptt  s    zInHeadPhase.start_tag_noscriptc                 C   s<   | j | | jjj| jj_| jj| j_| jjd | j_d S )Nr   )	r   r   r(   r+   Zscript_data_stater6   r9   r   r&   rp   r   r   r   start_tag_script{  s    zInHeadPhase.start_tag_scriptc                 C   s   |    |S rH   r   rp   r   r   r   r     s    zInHeadPhase.start_tag_otherc                 C   s:   | j jj }|jdks&J d|j | j jd | j _d S )Nr   zExpected head got %s
after headr(   r   rT   r   r   r&   r9   r    rg   r   r   r   r   end_tag_head  s    zInHeadPhase.end_tag_headc                 C   s   |    |S rH   r   rp   r   r   r   end_tag_html_body_br  s    z InHeadPhase.end_tag_html_body_brc                 C   s   | j dd|d i d S Nunexpected-end-tagr   r   rp   r   r   r   r     s    zInHeadPhase.end_tag_otherc                 C   s   |  td d S )Nr   )r   r   r   r   r   r   r     s    zInHeadPhase.anything_elser   title)noframesstylenoscriptscript)basebasefontbgsoundcommandlinkmetar   )r   r   r   N)r   r   r   r   r   rf   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   A  s@   r   c                   @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zede	fde
fdefgZedefdefgZdS )InHeadNoscriptPhasec                 C   s   | j d |   dS )Nzeof-in-head-noscriptTr   r   r   r   r   rf     s    zInHeadNoscriptPhase.process_eofc                 C   s   | j jd |S Nr   )r(   r&   rc   rp   r   r   r   rc     s    z#InHeadNoscriptPhase.process_commentc                 C   s   | j d |   |S )Nzchar-in-head-noscriptr   rp   r   r   r   r]     s    z&InHeadNoscriptPhase.process_charactersc                 C   s   | j jd |S r   r(   r&   r^   rp   r   r   r   r^     s    z,InHeadNoscriptPhase.process_space_charactersc                 C   s   | j jd |S r   r   rp   r   r   r   r     s    z"InHeadNoscriptPhase.start_tag_htmlc                 C   s   | j jd |S r   r   rp   r   r   r   r     s    z/InHeadNoscriptPhase.start_tag_base_link_commandc                 C   s   | j dd|d i d S Nunexpected-start-tagr   r   rp   r   r   r   start_tag_head_noscript  s    z+InHeadNoscriptPhase.start_tag_head_noscriptc                 C   s"   | j dd|d i |   |S Nzunexpected-inhead-noscript-tagr   r   rp   r   r   r   r     s
    z#InHeadNoscriptPhase.start_tag_otherc                 C   s<   | j jj }|jdks(J d|j | j jd | j _d S )Nr   zExpected noscript got r   r   r   r   r   r   end_tag_noscript  s    z$InHeadNoscriptPhase.end_tag_noscriptc                 C   s"   | j dd|d i |   |S r   r   rp   r   r   r   
end_tag_br  s
    zInHeadNoscriptPhase.end_tag_brc                 C   s   | j dd|d i d S r   r   rp   r   r   r   r     s    z!InHeadNoscriptPhase.end_tag_otherc                 C   s   |  td d S )Nr   )r   r   r   r   r   r   r     s    z!InHeadNoscriptPhase.anything_elser   )r   r   r   r   r   r   )r   r   r   r   N)r   r   r   r   r   rf   rc   r]   r^   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s0   r   c                   @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zedefdefde	fde
fdefgZedefgZdS )AfterHeadPhasec                 C   s   |    dS r   r   r   r   r   r   rf     s    zAfterHeadPhase.process_eofc                 C   s   |    |S rH   r   rp   r   r   r   r]     s    z!AfterHeadPhase.process_charactersc                 C   s   | j jd |S r   r   rp   r   r   r   r     s    zAfterHeadPhase.start_tag_htmlc                 C   s(   d| j _| j| | j jd | j _d S )NFrx   )r(   r<   r   r   r&   r9   rp   r   r   r   start_tag_body  s    zAfterHeadPhase.start_tag_bodyc                 C   s    | j | | jjd | j_d S )Nry   )r   r   r(   r&   r9   rp   r   r   r   start_tag_frameset  s    z!AfterHeadPhase.start_tag_framesetc                 C   sr   | j dd|d i | jj| jj | j jd | | jjd d d D ] }|jdkrL| jj	|  qnqLd S )Nz#unexpected-start-tag-out-of-my-headr   r   rJ   r   )
r(   rV   r   rT   re   r   r&   r_   r   remover   r   r   r   start_tag_from_head  s    
z"AfterHeadPhase.start_tag_from_headc                 C   s   | j dd|d i d S r   r   rp   r   r   r   r     s    zAfterHeadPhase.start_tag_headc                 C   s   |    |S rH   r   rp   r   r   r   r     s    zAfterHeadPhase.start_tag_otherc                 C   s   |    |S rH   r   rp   r   r   r   r     s    z#AfterHeadPhase.end_tag_html_body_brc                 C   s   | j dd|d i d S r   r   rp   r   r   r   r     s    zAfterHeadPhase.end_tag_otherc                 C   s.   | j tdd | jjd | j_d| j_d S )Nr   rZ   rx   T)r   r   r   r(   r&   r9   r<   r   r   r   r   r     s    zAfterHeadPhase.anything_elser   r   r   )	r   r   r   r   r   r   r   r   r   r   )r   r   r   N)r   r   r   r   r   rf   r]   r   r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r    s0   
r  c                #       s  e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddde Z5dfdg Z6e7dhe8j9fdiefdjefdkefdlefe:efdmefdnefdoefdpefdqefdrefdsefdtefduefdvefdwefdxefdyefdzefd{efd|efd}e fd~e!fde"fde#fde$fde&fde'fde%fde(fde)fde*fg!Z;e7dje-fdhe.fde/fdne0fde,fde1fe:e2fde3fdue4fde5fg
Z<  Z=S )InBodyPhase)r^   c                    s   t  j|i | | j| _d S rH   )superr'    process_space_characters_non_prer^   r    argsr   	__class__r   r   r'   -  s    zInBodyPhase.__init__c                 C   s$   |j |j ko"|j|jko"|j|jkS rH   )r   rB   rC   )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@ qXq.| ||r.|| q.t|dkshJ t|dkr| j j|d  | j j| d S )NrJ      )	r   r   rT   active_formatting_elementsr   r  re   rX   r  )r    rg   rF   Zmatching_elementsr   r   r   r   add_formatting_element8  s    z"InBodyPhase.add_formatting_elementc                 C   s>   t d}| jjd d d D ]}|j|vr| jd  q:qd S )N)dddtlipr   r|   r   r}   r   r~   r   r   rJ   z expected-closing-tag-but-got-eof)r[   r   rT   r   r(   rV   )r    allowed_elementsr   r   r   r   rf   I  s
    
zInBodyPhase.process_eofc                 C   sf   |d }| j | _|drH| jjd jdv rH| jjd  sH|dd  }|rb| j  | j| d S )NrL   
rJ   )prelistingtextarear   )	r  r^   r   r   rT   r   Zhas_content&reconstruct_active_formatting_elementsr   )r    rg   rL   r   r   r   %process_space_characters_drop_newlineT  s    

z1InBodyPhase.process_space_characters_drop_newlinec                 C   sT   |d dkrd S | j   | j |d  | jjrPtdd |d D rPd| j_d S )NrL    c                 s   s   | ]}|t vV  qd S rH   r   r   charr   r   r   	<genexpr>h  s   z1InBodyPhase.process_characters.<locals>.<genexpr>F)r   r  r   r(   r<   anyrp   r   r   r   r]   a  s    
zInBodyPhase.process_charactersc                 C   s   | j   | j |d  d S r   )r   r  r   rp   r   r   r   r  l  s    
z,InBodyPhase.process_space_characters_non_prec                 C   s   | j jd |S r   r   rp   r   r   r   start_tag_process_in_headp  s    z%InBodyPhase.start_tag_process_in_headc                 C   s   | j dddi t| jjdks4| jjd jdkrB| j jsJ nBd| j _|d  D ],\}}|| jjd j	vrV|| jjd j	|< qVd S )Nr   r   r   r   FrL   )
r(   rV   rX   r   rT   r   r)   r<   r%   rC   r   r   r   r   r  s  s    zInBodyPhase.start_tag_bodyc                 C   s   | j dddi t| jjdks4| jjd jdkrB| j jsJ np| j jsLnf| jjd jrv| jjd j	| jjd  | jjd jdkr| jj
  qv| j| | j jd | j _d S )	Nr   r   r   r   r   rJ   r   ry   )r(   rV   rX   r   rT   r   r)   r<   parentremove_childr   r   r&   r9   rp   r   r   r   r  ~  s    
zInBodyPhase.start_tag_framesetc                 C   s.   | j jdddr| td | j | d S Nr  buttonvariant)r   element_in_scope	end_tag_pr   r   rp   r   r   r   start_tag_close_p  s    zInBodyPhase.start_tag_close_pc                 C   s>   | j jdddr| td | j | d| j_| j| _d S )Nr  r(  r)  F)	r   r+  r,  r   r   r(   r<   r  r^   rp   r   r   r   start_tag_pre_listing  s
    z!InBodyPhase.start_tag_pre_listingc                 C   sZ   | j jr| jdddi n:| j jdddr:| td | j | | j jd | j _d S )Nr   r   formr  r(  r)  rJ   )	r   form_elementr(   rV   r+  r,  r   r   rT   rp   r   r   r   start_tag_form  s    zInBodyPhase.start_tag_formc                 C   s   d| j _dgddgddgd}||d  }t| jjD ]>}|j|v r\| j jt|j  qv|j	t
v r6|jdvr6 qvq6| jjdd	d
r| j jtd | j| d S )NFr  r  r  )r  r  r  r   )addressrk   r  r  r(  r)  )r(   r<   reversedr   rT   r   r9   ra   r   
name_tupler   r+  r   )r    rg   Zstop_names_mapZ
stop_namesr   r   r   r   start_tag_list_item  s     

zInBodyPhase.start_tag_list_itemc                 C   s>   | j jdddr| td | j | | jjj| jj_d S r'  )	r   r+  r,  r   r   r(   r+   r8   r6   rp   r   r   r   start_tag_plaintext  s    zInBodyPhase.start_tag_plaintextc                 C   sb   | j jdddr| td | j jd jtv rR| jdd|d i | j j	  | j 
| d S )Nr  r(  r)  rJ   r   r   )r   r+  r,  r   rT   r   r
   r(   rV   r   r   rp   r   r   r   start_tag_heading  s    zInBodyPhase.start_tag_headingc                 C   s~   | j d}|rf| jdddd | td || j jv rL| j j| || j jv rf| j j| | j 	  | 
| d S )Na$unexpected-start-tag-implies-end-tag	startNameendName)r   %element_in_active_formatting_elementsr(   rV   end_tag_formattingr   rT   r  r  r  r  )r    rg   Zafe_a_elementr   r   r   start_tag_a  s    
zInBodyPhase.start_tag_ac                 C   s   | j   | | d S rH   )r   r  r  rp   r   r   r   start_tag_formatting  s    
z InBodyPhase.start_tag_formattingc                 C   sP   | j   | j drB| jdddd | td | j   | | d S )Nnobrr9  r:  )r   r  r+  r(   rV   ra   r   r  rp   r   r   r   start_tag_nobr  s    

zInBodyPhase.start_tag_nobrc                 C   sT   | j dr2| jdddd | td |S | j   | j | d| j_d S )Nr(  r9  r:  F)	r   r+  r(   rV   ra   r   r  r   r<   rp   r   r   r   start_tag_button  s    
zInBodyPhase.start_tag_buttonc                 C   s0   | j   | j | | j jt d| j_d S NF)r   r  r   r  re   r   r(   r<   rp   r   r   r   start_tag_applet_marquee_object  s    
z+InBodyPhase.start_tag_applet_marquee_objectc                 C   sB   | j jdddr| td | j   d| j_| j|d d S )Nr  r(  r)  Fr   )r   r+  r,  r   r  r(   r<   r   rp   r   r   r   start_tag_xmp  s
    
zInBodyPhase.start_tag_xmpc                 C   sR   | j jdkr*| jjdddr*| td | j| d| j _| j jd | j _	d S )Nr   r  r(  r)  Frw   )
r(   r4   r   r+  ra   r   r   r<   r&   r9   rp   r   r   r   start_tag_table  s    zInBodyPhase.start_tag_tablec                 C   s6   | j   | j | | j j  d|d< d| j_d S )NTrS   F)r   r  r   rT   r   r(   r<   rp   r   r   r   start_tag_void_formatting  s
    
z%InBodyPhase.start_tag_void_formattingc                 C   s@   | j j}| | d|d v r<|d d tdkr<|| j _d S )NrK   rL   hidden)r(   r<   rH  rD   r   )r    rg   r<   r   r   r   start_tag_input	  s    
zInBodyPhase.start_tag_inputc                 C   s$   | j | | j j  d|d< d S r   r   rp   r   r   r   start_tag_param_source  s    z"InBodyPhase.start_tag_param_sourcec                 C   sJ   | j jdddr| td | j | | j j  d|d< d| j_d S )Nr  r(  r)  TrS   F)	r   r+  r,  r   r   rT   r   r(   r<   rp   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newNamerZ   rL   rR   rC   self_closing)r(   rV   r_   r   rp   r   r   r   start_tag_image  s    
zInBodyPhase.start_tag_imagec                 C   s  | j dddi | jjrd S i }d|d v r>|d d |d< | tdd|d | td	d | td
d d|d v r|d d }nd}| tj|d |d 	 }d|v r|d= d|v r|d= d|d< | tdd||d d | 
td
 | td	d | 
td d S )Nzdeprecated-tagr   isindexactionrL   r/  rZ   )rC   hrlabelpromptz3This is a searchable index. Enter search keywords: rK   rL   inputrR   rR  )r(   rV   r   r0  r_   r   r]   r   r\   copyra   )r    rg   
form_attrsrY  rC   r   r   r   start_tag_isindex'  s8    zInBodyPhase.start_tag_isindexc                 C   s0   | j | | jjj| jj_| j| _d| j_d S rD  )	r   r   r(   r+   r5   r6   r  r^   r<   rp   r   r   r   start_tag_textareaE  s    zInBodyPhase.start_tag_textareac                 C   s   d| j _| | d S rD  )r(   r<   start_tag_rawtextrp   r   r   r   start_tag_iframeK  s    zInBodyPhase.start_tag_iframec                 C   s"   | j jr| | n
| | d S rH   )r(   r*   r`  r   rp   r   r   r   r   O  s    zInBodyPhase.start_tag_noscriptc                 C   s   | j |d d S r   r   rp   r   r   r   r`  U  s    zInBodyPhase.start_tag_rawtextc                 C   s@   | j jd jdkr$| jjtd | j   | jj | d S NrJ   option)	r   rT   r   r(   r9   ra   r   r  r   rp   r   r   r   start_tag_optX  s    
zInBodyPhase.start_tag_optc                 C   s   | j   | j | d| j_| jj| jjd | jjd | jjd | jjd | jjd | jjd fv rx| jjd | j_n| jjd	 | j_d S )
NFrw   ru   rv   rt   rs   rr   in select in tablerq   )r   r  r   r(   r<   r9   r&   rp   r   r   r   start_tag_select^  s    






zInBodyPhase.start_tag_selectc                 C   sD   | j dr4| j   | j jd jdkr4| jd | j | d S )NrubyrJ   zrp-or-rt-tag-not-in-ruby-scope)r   r+  generate_implied_end_tagsrT   r   r(   rV   r   rp   r   r   r   start_tag_rp_rtm  s
    
zInBodyPhase.start_tag_rp_rtc                 C   sZ   | j   | j| | j| td |d< | j | |d rV| j j  d|d< d S )Nr@   rB   rR   TrS   )	r   r  r(   r   r   r   r   rT   r   rp   r   r   r   start_tag_matht  s    
zInBodyPhase.start_tag_mathc                 C   sZ   | j   | j| | j| td |d< | j | |d rV| j j  d|d< d S )NrP   rB   rR   TrS   )	r   r  r(   r   r   r   r   rT   r   rp   r   r   r   start_tag_svg  s    
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   rp   r   r   r   start_tag_misplaced  s    zInBodyPhase.start_tag_misplacedc                 C   s   | j   | j | d S rH   )r   r  r   rp   r   r   r   r     s    
zInBodyPhase.start_tag_otherc                 C   s   | j jdddsB| tdd | jdddi | td nT| j d | j jd j	dkrr| jdddi | j j
 }|j	dkr| j j
 }q~d S )Nr  r(  r)  rZ   r   r   rJ   )r   r+  r-  r   r(   rV   r,  rh  rT   r   r   r   r   r   r   r,    s    
zInBodyPhase.end_tag_pc                 C   s   | j ds"| jdddi d S | j jd jdkrr| j jdd  D ],}|jtdvrD| jdd|jd  qrqD| jjd	 | j_d S )
Nr   r   r   rJ      )r  r  r  optgrouprc  r  rprtr   r|   r   r}   r   r~   r   r   $expected-one-end-tag-but-got-anothergotNameexpectedName
after body)	r   r+  r(   rV   rT   r   r[   r&   r9   r   r   r   r   end_tag_body  s    
zInBodyPhase.end_tag_bodyc                 C   s"   | j dr| td |S d S )Nr   )r   r+  rv  r   rp   r   r   r   end_tag_html  s    zInBodyPhase.end_tag_htmlc                 C   s   |d dkr| j | _| j|d }|r2| j  | jjd j|d kr^| jdd|d i |r| jj	 }|j|d kr| jj	 }qnd S )Nr   r  rJ   end-tag-too-early)
r  r^   r   r+  rh  rT   r   r(   rV   r   )r    rg   Zin_scoper   r   r   r   end_tag_block  s    
zInBodyPhase.end_tag_blockc                 C   sv   | j j}d | j _|d u s$| j |s8| jdddi n:| j   | j jd |krd| jdddi | j j| d S )Nr   r   r/  rJ   zend-tag-too-early-ignored)r   r0  r+  r(   rV   rh  rT   r  r   r   r   r   end_tag_form  s    
zInBodyPhase.end_tag_formc                 C   s   |d dkrd}nd }| j j|d |dsB| jdd|d i nf| j j|d d | j jd j|d kr| jdd|d i | j j }|j|d kr| j j }qd S )	Nr   r  listr)  r   excluderJ   rx  )r   r+  r(   rV   rh  rT   r   r   )r    rg   r*  r   r   r   r   end_tag_list_item  s    zInBodyPhase.end_tag_list_itemc                 C   s   t D ]}| j|r| j   q$q| jjd j|d krP| jdd|d i t D ]8}| j|rT| jj }|jt vr| jj }qp qqTd S )NrJ   r   rx  )	r
   r   r+  rh  rT   r   r(   rV   r   )r    rg   itemr   r   r   end_tag_heading  s    

zInBodyPhase.end_tag_headingc                 C   s  d}|dk r
|d7 }| j |d }|rD|| j jv rR| j |jsR| | dS || j jvr| jdd|d i | j j	| dS | j |js| jdd|d i dS || j jd kr| jd	d|d i | j j
|}d}| j j|d D ]}|jtv r|} qq|du rR| j j }||kr@| j j }q&| j j	| dS | j j|d  }| j j
|}| }	}
d}| j j
|
}|d
k rX|d7 }|d8 }| j j| }
|
| j jvr| j j	|
 q|
|krސqX|	|kr| j j
|
d }|
 }|| j j| j j
|
< || j j| j j
|
< |}
|	jrF|	j|	 |
|	 |
}	q|	jrl|	j|	 |jtdv r| j  \}}||	| n
||	 | }|| || | j j	| | j j|| | j j	| | j j| j j
|d | qdS )z*The much-feared adoption agency algorithm.r=      r   r   Nzadoption-agency-1.2zadoption-agency-4.4rJ   zadoption-agency-1.3r  r   r   r   r   r~   )r   r=  rT   r+  r   r   r(   rV   r  r  indexr4  r   r   cloner%  r&  Zappend_childr[   Z!get_table_misnested_node_positioninsert_beforeZreparent_childreninsert)r    rg   Zouter_loop_counterZformatting_elementZ	afe_indexZfurthest_blockrF   Zcommon_ancestorbookmarkZ	last_noder   Zinner_loop_counterr  r  r%  r  r   r   r   r>    s    



	










zInBodyPhase.end_tag_formattingc                 C   s   | j |d r| j   | j jd j|d krF| jdd|d i | j |d r| j j }|j|d kr~| j j }qb| j   d S )Nr   rJ   rx  )	r   r+  rh  rT   r   r(   rV   r    clear_active_formatting_elements)r    rg   rF   r   r   r   end_tag_applet_marquee_object  s    
z)InBodyPhase.end_tag_applet_marquee_objectc                 C   s@   | j dddd | j  | jtdd | jj  d S )Nzunexpected-end-tag-treated-asr   z
br elementrO  rZ   )r(   rV   r   r  r   r   rT   r   rp   r   r   r   r     s    
zInBodyPhase.end_tag_brc                 C   s   | j jd d d D ]}|j|d krz| j j|d d | j jd j|d krb| jdd|d i | j j |krtqb qq|jtv r| jdd|d i  qqd S )NrJ   r   r|  r   )	r   rT   r   rh  r(   rV   r   r4  r   r   r   r   r   r     s    
zInBodyPhase.end_tag_otherr   )	r   r   r   r   r   r   r   r   r   r   r   )r2  articleaside
blockquotecenterdetailsdirrk   dlfieldset
figcaptionfigurefooterheaderhgroupmainmenunavolr  sectionsummaryul)r  r  r/  )r  r  r  r0   r8  )bbigcodeemfontissmallstrikestrongtturA  r(  )appletmarqueeobjectxmpr   )arear   embedrN  keygenwbr)paramsourcetrackr[  rW  rM  rU  r  iframer   )noembedr   r{   )ro  rp  )rc  rn  mathrP   )r   colr   framer   r   r|   r   r}   r   r~   )r2  r  r  r  r(  r  r  dialogr  rk   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r  r  r  )r8  r  r  r  r  r  r  rA  r  r  r  r  r  r  r   )>r   r   r   r   r'   r  r  rf   r  r]   r  r$  r  r  r-  r.  r1  r5  r6  r7  r?  r@  rB  rC  rE  rF  rG  rH  rJ  rK  rL  rT  r^  r_  ra  r   r`  rd  rf  ri  rj  rk  rl  r   r,  rv  rw  ry  rz  r~  r  r>  r  r   r   r   r   r   r
   r   r   __classcell__r   r   r  r   r  (  s   		
 '*r  c                   @   sP   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	e
g Ze
defgZdS )	TextPhasec                 C   s   | j |d  d S r   r   rp   r   r   r   r]     s    zTextPhase.process_charactersc                 C   s8   | j dd| jjd ji | jj  | j j| j _dS )Nz&expected-named-closing-tag-but-got-eofr   rJ   T)r(   rV   r   rT   r   r   r   r9   r   r   r   r   rf      s    zTextPhase.process_eofc                 C   s   dsJ d|d  dd S )NFzTried to process start tag r   z in RCDATA/RAWTEXT moder   rp   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   rT   r   r   r(   r   r9   r   r   r   r   end_tag_script  s    zTextPhase.end_tag_scriptc                 C   s   | j j  | jj| j_d S rH   )r   rT   r   r(   r   r9   rp   r   r   r   r     s    zTextPhase.end_tag_otherr   N)r   r   r   r   r   r]   rf   r   r  r   r   r   r   r   r   r   r   r    s   r  c                   @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zed%ejfd&e
fd'efd(efd)efd*efd+efd,efd-efd.efg
Zed+efd/efgZd0S )1InTablePhasec                 C   s$   | j jd jdvr | j j  q d S )NrJ   )r   r   )r   rT   r   r   r   r   r   r   _clear_stack_to_table_context  s    z*InTablePhase._clear_stack_to_table_contextc                 C   s0   | j jd jdkr | jd n| jjs,J d S )NrJ   r   zeof-in-tabler   rT   r   r(   rV   r)   r   r   r   r   rf   '  s    zInTablePhase.process_eofc                 C   s4   | j j}| j jd | j _|| j j_| j j| d S Nin table text)r(   r9   r&   r   r^   r    rg   r   r   r   r   r^   .  s    
z%InTablePhase.process_space_charactersc                 C   s4   | j j}| j jd | j _|| j j_| j j| d S r  )r(   r9   r&   r   r]   r  r   r   r   r]   4  s    
zInTablePhase.process_charactersc                 C   s&   d| j _| jjd | d| j _d S )NTrx   F)r   insert_from_tabler(   r&   r]   rp   r   r   r   r   :  s    zInTablePhase.insert_textc                 C   s6   |    | jjt | j| | jjd | j_d S )Nru   )	r  r   r  re   r   r   r(   r&   r9   rp   r   r   r   start_tag_captionA  s    zInTablePhase.start_tag_captionc                 C   s(   |    | j| | jjd | j_d S )Nrv   r  r   r   r(   r&   r9   rp   r   r   r   start_tag_colgroupG  s    zInTablePhase.start_tag_colgroupc                 C   s   |  tdd |S )Nr   rZ   )r  r   rp   r   r   r   start_tag_colL  s    zInTablePhase.start_tag_colc                 C   s(   |    | j| | jjd | j_d S )Nrt   r  rp   r   r   r   start_tag_rowgroupP  s    zInTablePhase.start_tag_rowgroupc                 C   s   |  tdd |S )Nr   rZ   )r  r   rp   r   r   r   start_tag_imply_tbodyU  s    z"InTablePhase.start_tag_imply_tbodyc                 C   s6   | j dddd | j jtd | j js2|S d S )Nr9  r   r:  )r(   rV   r9   ra   r   r)   rp   r   r   r   rG  Y  s    zInTablePhase.start_tag_tablec                 C   s   | j jd |S r   r   rp   r   r   r   start_tag_style_scripta  s    z#InTablePhase.start_tag_style_scriptc                 C   sV   d|d v rH|d d  tdkrH| jd | j| | jj  n
| | d S )NrK   rL   rI  z unexpected-hidden-input-in-table)	rD   r   r(   rV   r   r   rT   r   r   rp   r   r   r   rJ  d  s    zInTablePhase.start_tag_inputc                 C   sD   | j d | jjd u r@| j| | jjd | j_| jj  d S )Nzunexpected-form-in-tablerJ   )r(   rV   r   r0  r   rT   r   rp   r   r   r   r1  n  s
    zInTablePhase.start_tag_formc                 C   s<   | j dd|d i d| j_| j jd | d| j_d S )Nz)unexpected-start-tag-implies-table-voodoor   Trx   F)r(   rV   r   r  r&   r_   rp   r   r   r   r   u  s    zInTablePhase.start_tag_otherc                 C   s   | j jdddr| j   | j jd jdkrJ| jdd| j jd jd | j jd jdkrj| j j  qJ| j j  | j  n"| jj	sJ | jdd|d i d S )Nr   r)  rJ   zend-tag-too-early-namedrr  r   r   )
r   r+  rh  rT   r   r(   rV   r   r;   r)   rp   r   r   r   end_tag_table}  s    
zInTablePhase.end_tag_tablec                 C   s   | j dd|d i d S r   r   rp   r   r   r   end_tag_ignore  s    zInTablePhase.end_tag_ignorec                 C   s<   | j dd|d i d| j_| j jd | d| j_d S )Nz'unexpected-end-tag-implies-table-voodoor   Trx   F)r(   rV   r   r  r&   ra   rp   r   r   r   r     s    zInTablePhase.end_tag_otherr   r   r   r  r   r   r   )r|   r}   r~   r   )r   r   r[  r/  )r   r   r  r   r   r   r|   r   r}   r   r~   N)r   r   r   r   r   r  rf   r^   r]   r   r  r  r  r  r  rG  r  rJ  r1  r   r  r  r   r   r   r   r   r   r   r   r   r   r    sJ   
r  c                       sX   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Z  ZS )InTableTextPhase)r   character_tokensc                    s"   t  j|i | d | _g | _d S rH   )r  r'   r   r  r	  r  r   r   r'     s    zInTableTextPhase.__init__c                 C   sb   d dd | jD }tdd |D rHtj|d}| jjd | n|rX| j| g | _d S )Nr   c                 S   s   g | ]}|d  qS )rL   r   r   r  r   r   r   
<listcomp>  r"   z5InTableTextPhase.flush_characters.<locals>.<listcomp>c                 s   s   | ]}|t vV  qd S rH   r  r  r   r   r   r"    r"   z4InTableTextPhase.flush_characters.<locals>.<genexpr>rZ  rw   )	joinr  r#  r   r\   r(   r&   r   r   )r    rL   rg   r   r   r   flush_characters  s    z!InTableTextPhase.flush_charactersc                 C   s   |    | j| j_|S rH   r  r   r(   r9   rp   r   r   r   rc     s    
z InTableTextPhase.process_commentc                 C   s   |    | j| j_dS r   r  r   r   r   r   rf     s    
zInTableTextPhase.process_eofc                 C   s    |d dkrd S | j | d S NrL   r  r  re   rp   r   r   r   r]     s    z#InTableTextPhase.process_charactersc                 C   s   | j | d S rH   r  rp   r   r   r   r^     s    z)InTableTextPhase.process_space_charactersc                 C   s   |    | j| j_|S rH   r  rp   r   r   r   r_     s    
z"InTableTextPhase.process_start_tagc                 C   s   |    | j| j_|S rH   r  rp   r   r   r   ra     s    
z InTableTextPhase.process_end_tag)r   r   r   r   r'   r  rc   rf   r]   r^   r_   ra   r  r   r   r  r   r    s   	r  c                   @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd ZedejfdefgZede
fdefdefgZdS )InCaptionPhasec                 C   s   | j jddd S )Nr   r   r)  r   r+  r   r   r   r   ignore_end_tag_caption  s    z%InCaptionPhase.ignore_end_tag_captionc                 C   s   | j jd   d S r   r(   r&   rf   r   r   r   r   rf     s    zInCaptionPhase.process_eofc                 C   s   | j jd |S r   r(   r&   r]   rp   r   r   r   r]     s    z!InCaptionPhase.process_charactersc                 C   s2   | j d |  }| j jtd |s.|S d S )Nz%unexpected-table-start-tag-in-captionr   r(   rV   r  r9   ra   r   r    rg   ignore_end_tagr   r   r   start_tag_table_element  s
    z&InCaptionPhase.start_tag_table_elementc                 C   s   | j jd |S r   r   rp   r   r   r   r     s    zInCaptionPhase.start_tag_otherc                 C   s   |   s| j  | jjd jdkrB| jdd| jjd jd | jjd jdkrb| jj  qB| jj  | j  | jj	d | j_
n"| jjsJ | jdd|d i d S )NrJ   r   rq  rr  rw   r   r   )r  r   rh  rT   r   r(   rV   r   r  r&   r9   r)   rp   r   r   r   end_tag_caption  s    

zInCaptionPhase.end_tag_captionc                 C   s2   | j d |  }| j jtd |s.|S d S )Nz#unexpected-table-end-tag-in-captionr   r  r  r   r   r   r    s
    zInCaptionPhase.end_tag_tablec                 C   s   | j dd|d i d S r   r   rp   r   r   r   r    s    zInCaptionPhase.end_tag_ignorec                 C   s   | j jd |S r   r(   r&   ra   rp   r   r   r   r     s    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   r  rf   r]   r  r   r  r  r  r   r   r   r   r   r   r   r   r   r   r    s.   r  c                   @   s|   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd ZedejfdefgZede
fdefgZdS )InColumnGroupPhasec                 C   s   | j jd jdkS )NrJ   r   )r   rT   r   r   r   r   r   ignore_end_tag_colgroup%  s    z*InColumnGroupPhase.ignore_end_tag_colgroupc                 C   sD   | j jd jdkr"| jjsJ d S |  }| td |s@dS d S )NrJ   r   r   T)r   rT   r   r(   r)   r  end_tag_colgroupr   )r    r  r   r   r   rf   (  s    zInColumnGroupPhase.process_eofc                 C   s"   |   }| td |s|S d S Nr   r  r  r   r  r   r   r   r]   2  s    z%InColumnGroupPhase.process_charactersc                 C   s$   | j | | j j  d|d< d S r   r   rp   r   r   r   r  8  s    z InColumnGroupPhase.start_tag_colc                 C   s"   |   }| td |s|S d S r  r  r  r   r   r   r   =  s    z"InColumnGroupPhase.start_tag_otherc                 C   sL   |   r,| jjsJ | jdd|d i n| jj  | jjd | j_d S )Nr   r   rw   )	r  r(   r)   rV   r   rT   r   r&   r9   rp   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   rp   r   r   r   end_tag_colL  s    zInColumnGroupPhase.end_tag_colc                 C   s"   |   }| td |s|S d S r  r  r  r   r   r   r   O  s    z InColumnGroupPhase.end_tag_otherr   r  r   N)r   r   r   r   r   r  rf   r]   r  r   r  r  r   r   r   r   r   r   r   r   r   r   r  !  s"   
	r  c                   @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zedejfde	fde
fdefgZedefdefdefgZd S )!InTableBodyPhasec                 C   sB   | j jd jdvr | j j  q | j jd jdkr>| jjs>J d S )NrJ   )r   r   r   r   r   )r   rT   r   r   r(   r)   r   r   r   r   "_clear_stack_to_table_body_contextd  s    z3InTableBodyPhase._clear_stack_to_table_body_contextc                 C   s   | j jd   d S Nrw   r  r   r   r   r   rf   m  s    zInTableBodyPhase.process_eofc                 C   s   | j jd |S r  r   rp   r   r   r   r^   p  s    z)InTableBodyPhase.process_space_charactersc                 C   s   | j jd |S r  r  rp   r   r   r   r]   s  s    z#InTableBodyPhase.process_charactersc                 C   s(   |    | j| | jjd | j_d S )Nrs   )r  r   r   r(   r&   r9   rp   r   r   r   start_tag_trv  s    zInTableBodyPhase.start_tag_trc                 C   s*   | j dd|d i | tdd |S )Nzunexpected-cell-in-table-bodyr   r~   rZ   )r(   rV   r  r   rp   r   r   r   start_tag_table_cell{  s
    z%InTableBodyPhase.start_tag_table_cellc                 C   sz   | j jddds0| j jddds0| j jdddrT|   | t| j jd j |S | jjs`J | j	dd|d i d S )	Nr   r   r)  r   r   rJ   z!unexpected-start-tag-out-of-tabler   
r   r+  r  end_tag_table_rowgroupr   rT   r   r(   r)   rV   rp   r   r   r   start_tag_table_other  s    z&InTableBodyPhase.start_tag_table_otherc                 C   s   | j jd |S r  r   rp   r   r   r   r     s    z InTableBodyPhase.start_tag_otherc                 C   sT   | j j|d ddr:|   | j j  | jjd | j_n| jdd|d i d S )Nr   r   r)  rw    unexpected-end-tag-in-table-body)	r   r+  r  rT   r   r(   r&   r9   rV   rp   r   r   r   r    s    z'InTableBodyPhase.end_tag_table_rowgroupc                 C   sz   | j jddds0| j jddds0| j jdddrT|   | t| j jd j |S | jjs`J | j	dd|d i d S )	Nr   r   r)  r   r   rJ   r   r   r  rp   r   r   r   r    s    zInTableBodyPhase.end_tag_tablec                 C   s   | j dd|d i d S )Nr  r   r   rp   r   r   r   r    s    zInTableBodyPhase.end_tag_ignorec                 C   s   | j jd |S r  r  rp   r   r   r   r     s    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   r  rf   r^   r]   r  r  r  r   r  r  r  r   r   r   r   r   r   r   r   r   r   r  `  s8   		r  c                   @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zedejfde
fdefgZedefdefd efd!efgZd"S )#
InRowPhasec                 C   s@   | j jd jdvr<| jdd| j jd ji | j j  q d S )NrJ   )r~   r   z'unexpected-implied-end-tag-in-table-rowr   )r   rT   r   r(   rV   r   r   r   r   r   !_clear_stack_to_table_row_context  s    z,InRowPhase._clear_stack_to_table_row_contextc                 C   s   | j jddd S )Nr~   r   r)  r  r   r   r   r   ignore_end_tag_tr  s    zInRowPhase.ignore_end_tag_trc                 C   s   | j jd   d S r  r  r   r   r   r   rf     s    zInRowPhase.process_eofc                 C   s   | j jd |S r  r   rp   r   r   r   r^     s    z#InRowPhase.process_space_charactersc                 C   s   | j jd |S r  r  rp   r   r   r   r]     s    zInRowPhase.process_charactersc                 C   s6   |    | j| | jjd | j_| jjt d S )Nrr   )	r  r   r   r(   r&   r9   r  re   r   rp   r   r   r   r    s    zInRowPhase.start_tag_table_cellc                 C   s"   |   }| td |s|S d S Nr~   r  
end_tag_trr   r  r   r   r   r    s    z InRowPhase.start_tag_table_otherc                 C   s   | j jd |S r  r   rp   r   r   r   r     s    zInRowPhase.start_tag_otherc                 C   sT   |   s.|   | jj  | jjd | j_n"| jjs:J | j	dd|d i d S )Nrt   r   r   )
r  r  r   rT   r   r(   r&   r9   r)   rV   rp   r   r   r   r    s    zInRowPhase.end_tag_trc                 C   s"   |   }| td |s|S d S r  r  r  r   r   r   r    s    zInRowPhase.end_tag_tablec                 C   s@   | j j|d ddr&| td |S | jdd|d i d S )Nr   r   r)  r~   r   )r   r+  r  r   r(   rV   rp   r   r   r   r    s    z!InRowPhase.end_tag_table_rowgroupc                 C   s   | j dd|d i d S )Nzunexpected-end-tag-in-table-rowr   r   rp   r   r   r   r     s    zInRowPhase.end_tag_ignorec                 C   s   | j jd |S r  r  rp   r   r   r   r     s    zInRowPhase.end_tag_otherr   r  )r   r  r   r   r   r   r~   r~   r   r  )r   r   r  r   r   r|   r}   N)r   r   r   r   r   r  r  rf   r^   r]   r  r  r   r  r  r  r  r   r   r   r   r   r   r   r   r   r   r    s6   
r  c                   @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd ZedejfdefgZede
fdefdefgZdS )InCellPhasec                 C   sB   | j jdddr | td n| j jdddr>| td d S )Nr|   r   r)  r}   )r   r+  end_tag_table_cellr   r   r   r   r   _close_cell  s    zInCellPhase._close_cellc                 C   s   | j jd   d S r   r  r   r   r   r   rf      s    zInCellPhase.process_eofc                 C   s   | j jd |S r   r  rp   r   r   r   r]   #  s    zInCellPhase.process_charactersc                 C   sR   | j jddds | j jdddr,|   |S | jjs8J | jdd|d i d S )Nr|   r   r)  r}   z&unexpected-start-tag-out-of-table-cellr   )r   r+  r  r(   r)   rV   rp   r   r   r   r  &  s    z!InCellPhase.start_tag_table_otherc                 C   s   | j jd |S r   r   rp   r   r   r   r   1  s    zInCellPhase.start_tag_otherc                 C   s   | j j|d ddr| j |d  | j jd j|d krp| jdd|d i | j j }|j|d krPq|qPn| j j  | j   | jj	d | j_
n| jdd|d i d S )Nr   r   r)  rJ   zunexpected-cell-end-tagrs   r   )r   r+  rh  rT   r   r(   rV   r   r  r&   r9   r   r   r   r   r  4  s    
zInCellPhase.end_tag_table_cellc                 C   s   | j dd|d i d S r   r   rp   r   r   r   r  E  s    zInCellPhase.end_tag_ignorec                 C   s:   | j j|d ddr |   |S | jdd|d i d S )Nr   r   r)  r   )r   r+  r  r(   rV   rp   r   r   r   end_tag_implyH  s    zInCellPhase.end_tag_implyc                 C   s   | j jd |S r   r  rp   r   r   r   r   P  s    zInCellPhase.end_tag_otherr   r  r  )r   r   r  r   r   r  N)r   r   r   r   r   r  rf   r]   r  r   r  r  r  r   r   r   r   r   r   r   r   r   r   r    s*   r  c                   @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zedejfdefdefde	fde
fdefgZedefdefdefgZdS ) InSelectPhasec                 C   s0   | j jd jdkr | jd n| jjs,J d S )NrJ   r   zeof-in-selectr  r   r   r   r   rf   d  s    zInSelectPhase.process_eofc                 C   s$   |d dkrd S | j |d  d S r  r   rp   r   r   r   r]   j  s    z InSelectPhase.process_charactersc                 C   s.   | j jd jdkr| j j  | j | d S rb  r   rT   r   r   r   rp   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 )NrJ   rc  rn  r  rp   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(   rV   end_tag_selectr   rp   r   r   r   rf  |  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{   r)  )r(   rV   r   r+  r  r   r)   rp   r   r   r   rJ    s
    zInSelectPhase.start_tag_inputc                 C   s   | j jd |S r   r   rp   r   r   r   r     s    zInSelectPhase.start_tag_scriptc                 C   s   | j dd|d i d S )Nzunexpected-start-tag-in-selectr   r   rp   r   r   r   r     s    zInSelectPhase.start_tag_otherc                 C   s6   | j jd jdkr | j j  n| jdddi d S )NrJ   rc  unexpected-end-tag-in-selectr   r   rT   r   r   r(   rV   rp   r   r   r   end_tag_option  s    zInSelectPhase.end_tag_optionc                 C   sf   | j jd jdkr0| j jd jdkr0| j j  | j jd jdkrP| j j  n| jdddi d S )NrJ   rc  rn  r  r   r  rp   r   r   r   end_tag_optgroup  s    zInSelectPhase.end_tag_optgroupc                 C   sf   | j jdddr@| j j }|jdkr4| j j }q| j  n"| jjsLJ | jdd|d i d S )Nr{   r)  r   r   )	r   r+  rT   r   r   r(   r;   r)   rV   r   r   r   r   r    s    
zInSelectPhase.end_tag_selectc                 C   s   | j dd|d i d S )Nr  r   r   rp   r   r   r   r     s    zInSelectPhase.end_tag_otherr   rc  rn  r{   )r[  r  r  r   N)r   r   r   r   r   rf   r]   r   r  rf  rJ  r   r   r  r  r  r   r   r   r   r   r   r   r   r   r   r  `  s4   	r  c                   @   s^   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
edefgZede	fgZdS )InSelectInTablePhasec                 C   s   | j jd   d S Nrq   r  r   r   r   r   rf     s    z InSelectInTablePhase.process_eofc                 C   s   | j jd |S r	  r  rp   r   r   r   r]     s    z'InSelectInTablePhase.process_charactersc                 C   s(   | j dd|d i | td |S )Nz5unexpected-table-element-start-tag-in-select-in-tabler   r{   )r(   rV   r   r   rp   r   r   r   rG    s    
z$InSelectInTablePhase.start_tag_tablec                 C   s   | j jd |S r	  r   rp   r   r   r   r     s    z$InSelectInTablePhase.start_tag_otherc                 C   s@   | j dd|d i | jj|d ddr<| td |S d S )Nz3unexpected-table-element-end-tag-in-select-in-tabler   r   r)  r{   )r(   rV   r   r+  r   r   rp   r   r   r   r    s    
z"InSelectInTablePhase.end_tag_tablec                 C   s   | j jd |S r	  r  rp   r   r   r   r     s    z"InSelectInTablePhase.end_tag_other)r   r   r   r   r   r~   r|   r}   N)r   r   r   r   r   rf   r]   rG  r   r  r   r   r   r   r   r   r   r   r    s"   r  c                   @   s>   e Zd Ze Zeg dZdd Zdd Zdd Z	dd	 Z
d
S )InForeignContentPhase),r  r  r  r   r   r  r  r  rk   r  r  r  r  h1h2h3h4h5h6r   rW  r  rN  r  r  r  r   rA  r  r  r  rg  r  r  spanr  r  subsupr   r  r  r  varc              %   C   sn   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%$}|d& |v rj||d&  |d&< d S )'NaltGlyphaltGlyphDefaltGlyphItemanimateColoranimateMotionanimateTransformclipPathfeBlendfeColorMatrixfeComponentTransferfeCompositefeConvolveMatrixfeDiffuseLightingfeDisplacementMapfeDistantLightfeFloodfeFuncAfeFuncBfeFuncGfeFuncRfeGaussianBlurfeImagefeMergefeMergeNodefeMorphologyfeOffsetfePointLightfeSpecularLightingfeSpotLightfeTilefeTurbulenceforeignObjectglyphReflinearGradientradialGradienttextPath)$altglyphaltglyphdefaltglyphitemanimatecoloranimatemotionanimatetransformclippathfeblendfecolormatrixfecomponenttransferfecompositefeconvolvematrixfediffuselightingfedisplacementmapfedistantlightfefloodfefuncafefuncbfefuncgfefuncrfegaussianblurfeimagefemergefemergenodefemorphologyfeoffsetfepointlightfespecularlightingfespotlightfetilefeturbulenceforeignobjectglyphreflineargradientradialgradienttextpathr   r   )r    rg   replacementsr   r   r   adjust_svg_tag_names  sN    'z*InForeignContentPhase.adjust_svg_tag_namesc                 C   sL   |d dkrd|d< n&| j jr<tdd |d D r<d| j _t| | d S )NrL   r  u   �c                 s   s   | ]}|t vV  qd S rH   r  r   r   r   r   r"  "	  r"   z;InForeignContentPhase.process_characters.<locals>.<genexpr>F)r(   r<   r#  r   r]   rp   r   r   r   r]   	  s    
z(InForeignContentPhase.process_charactersc                 C   s(  | j jd }|d | jv s>|d dkrt|d  h d@ r| jdd|d i | j jd j| j jkr| j	| j jd s| j
| j jd s| j j  qT|S |jtd kr| j| n$|jtd kr| | | j| | j| |j|d	< | j | |d
 r$| j j  d|d< d S )NrJ   r   r  rL   >   colorfacesizez*unexpected-html-element-in-foreign-contentr@   rP   rB   rR   TrS   )r   rT   breakout_elementssetr   r(   rV   rB   rY   rG   rI   r   r   r   r^  r   r   r   )r    rg   ri   r   r   r   r_   &	  sB    





z'InForeignContentPhase.process_start_tagc                 C   s   t | jjd }| jjd }|jt|d krF| jdd|d i |jt|d kr| jj| jj	d kr| jj
  | jjj| j_| jj |kr| jjsJ qd }q|d8 }| jj| }|j| jjkrqFqF| jj|}qqF|S )Nr   rJ   r   r   r  )rX   r   rT   r   rD   r   r(   rV   r9   r&   r  r   r   rB   rY   ra   )r    rg   Z
node_indexr   rh   r   r   r   ra   C	  s&    z%InForeignContentPhase.process_end_tagN)r   r   r   r   r   r[   rb  r^  r]   r_   ra   r   r   r   r   r
    s   +r
  c                   @   sf   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd ZedefgZede
fgZdS )AfterBodyPhasec                 C   s   d S rH   r   r   r   r   r   rf   a	  s    zAfterBodyPhase.process_eofc                 C   s   | j || j jd  d S )Nr=   r   rp   r   r   r   rc   e	  s    zAfterBodyPhase.process_commentc                 C   s    | j d | j jd | j _|S )Nzunexpected-char-after-bodyrx   r(   rV   r&   r9   rp   r   r   r   r]   j	  s    z!AfterBodyPhase.process_charactersc                 C   s   | j jd |S r   r   rp   r   r   r   r   o	  s    zAfterBodyPhase.start_tag_htmlc                 C   s*   | j dd|d i | j jd | j _|S )Nzunexpected-start-tag-after-bodyr   rx   re  rp   r   r   r   r   r	  s
    zAfterBodyPhase.start_tag_otherc                 C   s*   | j jr| j d n| j jd | j _d S )Nz'unexpected-end-tag-after-body-innerhtmlafter after body)r(   r)   rV   r&   r9   )r    r   r   r   r   rw  x	  s    zAfterBodyPhase.end_tag_htmlc                 C   s*   | j dd|d i | j jd | j _|S )Nzunexpected-end-tag-after-bodyr   rx   re  rp   r   r   r   r   ~	  s
    zAfterBodyPhase.end_tag_otherr   N)r   r   r   r   r   rf   rc   r]   r   r   rw  r   r   r   r   r   r   r   r   rd  ^	  s   rd  c                   @   s   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zedejfdefdefde	fgZedefgZdS )InFramesetPhasec                 C   s0   | j jd jdkr | jd n| jjs,J d S )NrJ   r   zeof-in-framesetr  r   r   r   r   rf   	  s    zInFramesetPhase.process_eofc                 C   s   | j d d S )Nzunexpected-char-in-framesetr   rp   r   r   r   r]   	  s    z"InFramesetPhase.process_charactersc                 C   s   | j | d S rH   )r   r   rp   r   r   r   r  	  s    z"InFramesetPhase.start_tag_framesetc                 C   s   | j | | j j  d S rH   r   rp   r   r   r   start_tag_frame	  s    zInFramesetPhase.start_tag_framec                 C   s   | j jd |S r   r   rp   r   r   r   start_tag_noframes	  s    z"InFramesetPhase.start_tag_noframesc                 C   s   | j dd|d i d S )Nz unexpected-start-tag-in-framesetr   r   rp   r   r   r   r   	  s    zInFramesetPhase.start_tag_otherc                 C   sZ   | j jd jdkr | jd n| j j  | jjsV| j jd jdkrV| jjd | j_d S )NrJ   r   z)unexpected-frameset-in-frameset-innerhtmlr   after frameset)	r   rT   r   r(   rV   r   r)   r&   r9   rp   r   r   r   end_tag_frameset	  s    z InFramesetPhase.end_tag_framesetc                 C   s   | j dd|d i d S )Nzunexpected-end-tag-in-framesetr   r   rp   r   r   r   r   	  s    zInFramesetPhase.end_tag_otherr   r   r  r   N)r   r   r   r   r   rf   r]   r  rh  ri  r   rk  r   r   r   r   r   r   r   r   r   r   rg  	  s$   rg  c                   @   sf   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
edejfdefgZede	fgZdS )AfterFramesetPhasec                 C   s   d S rH   r   r   r   r   r   rf   	  s    zAfterFramesetPhase.process_eofc                 C   s   | j d d S )Nzunexpected-char-after-framesetr   rp   r   r   r   r]   	  s    z%AfterFramesetPhase.process_charactersc                 C   s   | j jd |S r   r   rp   r   r   r   ri  	  s    z%AfterFramesetPhase.start_tag_noframesc                 C   s   | j dd|d i d S )Nz#unexpected-start-tag-after-framesetr   r   rp   r   r   r   r   	  s    z"AfterFramesetPhase.start_tag_otherc                 C   s   | j jd | j _d S )Nafter after frameset)r(   r&   r9   rp   r   r   r   rw  	  s    zAfterFramesetPhase.end_tag_htmlc                 C   s   | j dd|d i d S )Nz!unexpected-end-tag-after-framesetr   r   rp   r   r   r   r   	  s    z AfterFramesetPhase.end_tag_otherr   r   N)r   r   r   r   r   rf   r]   ri  r   rw  r   r   r   r   r   r   r   r   r   r   rl  	  s   rl  c                   @   sX   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zede	fgZdS )AfterAfterBodyPhasec                 C   s   d S rH   r   r   r   r   r   rf   	  s    zAfterAfterBodyPhase.process_eofc                 C   s   | j || j j d S rH   r   rp   r   r   r   rc   	  s    z#AfterAfterBodyPhase.process_commentc                 C   s   | j jd |S r   r   rp   r   r   r   r^   	  s    z,AfterAfterBodyPhase.process_space_charactersc                 C   s    | j d | j jd | j _|S )Nexpected-eof-but-got-charrx   re  rp   r   r   r   r]   	  s    z&AfterAfterBodyPhase.process_charactersc                 C   s   | j jd |S r   r   rp   r   r   r   r   	  s    z"AfterAfterBodyPhase.start_tag_htmlc                 C   s*   | j dd|d i | j jd | j _|S )Nexpected-eof-but-got-start-tagr   rx   re  rp   r   r   r   r   	  s
    z#AfterAfterBodyPhase.start_tag_otherc                 C   s*   | j dd|d i | j jd | j _|S )Nexpected-eof-but-got-end-tagr   rx   re  rp   r   r   r   ra   	  s
    z#AfterAfterBodyPhase.process_end_tagr   N)r   r   r   r   r   rf   rc   r^   r]   r   r   ra   r   r   r   r   r   r   rn  	  s   rn  c                   @   sf   e Zd Ze Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zede	fde
fgZdS )AfterAfterFramesetPhasec                 C   s   d S rH   r   r   r   r   r   rf   
  s    z#AfterAfterFramesetPhase.process_eofc                 C   s   | j || j j d S rH   r   rp   r   r   r   rc   
  s    z'AfterAfterFramesetPhase.process_commentc                 C   s   | j jd |S r   r   rp   r   r   r   r^   
  s    z0AfterAfterFramesetPhase.process_space_charactersc                 C   s   | j d d S )Nro  r   rp   r   r   r   r]   
  s    z*AfterAfterFramesetPhase.process_charactersc                 C   s   | j jd |S r   r   rp   r   r   r   r   
  s    z&AfterAfterFramesetPhase.start_tag_htmlc                 C   s   | j jd |S r   r   rp   r   r   r   ri  
  s    z*AfterAfterFramesetPhase.start_tag_noframesc                 C   s   | j dd|d i d S )Nrp  r   r   rp   r   r   r   r   
  s    z'AfterAfterFramesetPhase.start_tag_otherc                 C   s   | j dd|d i d S )Nrq  r   r   rp   r   r   r   ra   #
  s    z'AfterAfterFramesetPhase.process_end_tagr   r   N)r   r   r   r   r   rf   rc   r^   r]   r   ri  r   ra   r   r   r   r   r   r   rr  

  s   rr  )r2   r1   rz   r   r   r   rx   r   rw   r  ru   rv   rt   rs   rr   rq   re  rQ   ru  ry   rj  rf  rm  c                    sB   | d      @ r>t| d  fdd| d  D | d< d S )NrL   c                 3   s"   | ]\}}  |||fV  qd S rH   )rW   )r   r   r   r]  r   r   r"  J
  s   z$adjust_attributes.<locals>.<genexpr>)r   rK   r%   )rg   r]  r   rs  r   ro   H
  s    
ro   r`   NFc                 C   s   t | | |d u ri n||dS )N)rK   r   rL   rR   )r   )r   rK   rC   rS  r   r   r   r   N
  s
    r   )T)r`   NF)4r   r   	constantsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r+   r   treebuilderr   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r
  rd  rg  rl  rn  rr  r$   ro   r   r   r   r   r   <module>   s   @
% fD $+eAA     W! 0E?`VJ`)u-7#%$