
    ,g[                    &   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 dNdZ G d d      Zd Z G d	 d
      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z  G d de      Z! G d de      Z" G d de      Z# G d d e      Z$ G d! d"e      Z% G d# d$e      Z& G d% d&e      Z' G d' d(e      Z( G d) d*e      Z) G d+ d,e      Z* G d- d.e      Z+ G d/ d0e      Z, G d1 d2e      Z- G d3 d4e      Z. G d5 d6e      Z/ G d7 d8e      Z0i d9ed:ed;ed<ed=ed>ed?e d@e!dAe"dBe#dCe$dDe%dEe&dFe'dGe(dHe)dIe*e+e,e-e.e/e0dJZ1dK Z2dOdMZ3yL)P   )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TreeBuilderc                 :     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kwargss      h/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/tinyhtml5/parser.pyr   r      s#    D 5:-.44XHHH    c                   ~    e Zd ZdZddZddZd Zed        Zd Z	d Z
d	 Zdd
ZddZddZd Zd Zd Zd Zd Zy)r   z]HTML parser.

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

    c           	          t        |      | _        g | _        t        j	                         D ci c]  \  }}| || | j                         c}}| _        y c c}}w N)r   treeerrors_phasesitemsphases)selfr   nameclss       r   __init__zHTMLParser.__init__B   sE     78	CJ==?SidCtStyy11SSs   ANc                     || _         || _        t        |fd| i|| _        | j	                          	 | j                          y # t        $ r# | j	                          | j                          Y y w xY w)Nparser)	container	scriptingr   	tokenizerreset	main_loopr   )r%   streamr+   r,   r   s        r   _parsezHTMLParser._parseG   s`    ""&vEdEfE

	NN 	JJLNN	s   A )A0/A0c                    | j                   j                          d| _        g | _        d| _        | j
                  r| j
                  t        v r&| j                  j                  | j                  _	        nn| j
                  t        v r&| j                  j                  | j                  _	        n6| j
                  dk(  r&| j                  j                  | j                  _	        n	 | j                  d   | _        | j                  j                          | j!                          n| j                  d   | _        d | _        d | _        d| _        y )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_okr%   s    r   r.   zHTMLParser.resetR   s    		$"->>~~/'+~~'B'B$?2'+~~'C'C$;.'+~~'E'E$ ]3DJJJ++-%%'Y/DJ#' r   c                 v    t        | d      r-| j                  j                  j                  d   j                  S y)zName of the character encoding that was used to decode the input stream.

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

        r-       N)hasattrr-   r0   encodingr&   rB   s    r   rF   zHTMLParser.encodingo   s4     4%>>((11!4999 &r   c                     |j                   |j                  f}|t        d   dfk(  r4d|j                  v xr$ |j                  d   j	                  t
              dv S |t        v S )Nmathmlannotation-xmlrF   )z	text/htmlzapplication/xhtml+xml)	namespacer&   r   
attributes	translater	   r   r%   element	full_names      r   is_html_integration_pointz$HTMLParser.is_html_integration_pointy   sq    &&5	H-/?@@g000 7"":.889MN678 ;;;r   c                 B    |j                   |j                  f}|t        v S r   )rJ   r&   r   rM   s      r    is_mathml_text_integration_pointz+HTMLParser.is_mathml_text_integration_point   s"    &&5	BBBr   c                 r   | j                   D ]  }d }|}||}| j                  j                  r| j                  j                  d   nd }|r|j                  nd }|r|j                  nd }|d   }|t
        j                  k(  r)| j                  |d   |j                  di              d }nt        | j                  j                        dk(  s|| j                  j                  k(  s| j                  |      rG|t
        j                  k(  r|d   t        ddg      vs|t
        j                  t
        j                  fv sn|t         d	   k(  r |d
k(  r|t
        j                  k(  r|d   dk(  sB| j#                  |      r>|t
        j                  t
        j                  t
        j                  fv r| j$                  }n| j&                  d   }|t
        j                  k(  r|j)                  |      }n|t
        j                  k(  r|j+                  |      }n|t
        j                  k(  r|j-                  |      }nn|t
        j.                  k(  r|j1                  |      }nI|t
        j2                  k(  r|j5                  |      }n$|t
        j6                  k(  r|j9                  |      }|t
        j                  k(  s|d   s|d   r| j                  dd|d   i        d}	g }
|	rK|
j;                  | j$                         | j$                  j=                         }	|	r| j$                  |
vsJ |	rJy y )NtypedatadatavarsrD   r&   mglyph
malignmarkrH   rI   svgin foreign contentselfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r-   r    open_elementsrJ   r&   r   PARSE_ERRORparse_errorgetlendefault_namespacerR   	START_TAG	frozenset
CHARACTERSSPACE_CHARACTERSr   rP   r<   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_namerU   r<   	reprocessr$   s              r   r/   zHTMLParser.main_loop   s   ^^ 3	6E!NI'!*37993J3JDII++B/PT  /;L** '9EL$5$54! (5,,,$$Yv%6	jRT8UV $IDII3349.$))2M2MM>>|L5??2 =	8\:R0SS5#3#3U5K5K"LL/:h3GG*.>>0v%/77E$!OOU-=-=!22S4 K4 !%

 $,@ Au///$)$<$<Y$G	!7!77$)$B$B9$M	0$)$;$;I$F	.$)$9$9)$D	.$)$9$9)$D	.$)$9$9)$D	U 'X 'N=,I&'@A  <^F346c3	6l 	MM$**%

..0Izz///	 r   c                 ^     | j                   |fi | | j                  j                  |      S )zvParse a HTML document into a well-formed tree.

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

        )r1   r    get_document)r%   r0   	full_treer   s       r   r   zHTMLParser.parse   s,     	F%f%yy%%i00r   c                 `     | j                   |fd|i| | j                  j                         S )u   Parse a HTML fragment into a well-formed tree fragment.

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

        r+   )r1   r    get_fragment)r%   r0   r+   r   s       r   parse_fragmentzHTMLParser.parse_fragment   s/     	F:i:6:yy%%''r   c                     |i }| j                   j                  | j                  j                  j	                         ||f       y r   )r!   rq   r-   r0   position)r%   	errorcoderW   s      r   r`   zHTMLParser.parse_error   s9    HDNN11::<iRSr   c                 $    t        |t               y r   )adjust_attributesr   r%   rs   s     r   r   z#HTMLParser.adjust_mathml_attributes   s    %!9:r   c                 $    t        |t               y r   )r   r   r   s     r   r   z HTMLParser.adjust_svg_attributes   s    %!67r   c                 $    t        |t               y r   )r   r   r   s     r   r   z$HTMLParser.adjust_foreign_attributes   s    %!:;r   c                    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(  r| j                  sJ d}| j                  }|dv r| j                  sJ |s$|j                  | j                   j
                  k7  r||v r| j                  ||      } || _        y |s| j                  d	   } || _        y  | _        y )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htmlrT   rD   T)r   r   r   r   )r    r^   r&   r+   rJ   rc   r$   r<   )r%   last	new_modesnode	node_name	new_phases         r   r>   zHTMLParser.reset_insertion_mode   s    !$$$#)%!
	  II++DbD1 	D		IItyy..q11~~%~ NN	BB~~%~DNNdii.I.III% KK	)(<=	
 
	  KK	2	
+	* 
r   c                 0   |dv sJ | j                   j                  |       |dk(  r&| j                  j                  | j                  _        n%| j                  j
                  | j                  _        | j                  | _        | j                  d   | _        y )N)RAWTEXTRCDATAr   text)	r    insert_elementr-   r:   r9   r8   r<   original_phaser$   )r%   rs   content_types      r   parse_rcdata_rawtextzHTMLParser.parse_rcdata_rawtext  ss    4444		  '9$#'>>#?#?DNN #'>>#>#>DNN "jj[[(
r   TNF)F)divr   )__name__
__module____qualname____doc__r(   r1   r.   propertyrF   rP   rR   r/   r   r   r`   r   r   r   r>   r    r   r   r   r   ;   sf    T
	 : : :<C=0~1(T
;8<)V)r   r   c           	      t    | D ci c]"  \  }}t        |t              r|fn|D ]  }|| $ c}}}S c c}}}w r   )
isinstancestr)r#   keysvaluekeys       r   dispatchr      sS     ! D%)$4TG$  	U
  s   '3c                   J    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)Phasez?Base class for helper that implements each phase of processing.)r*   r    __start_tag_cache__end_tag_cachec                 <    || _         || _        i | _        i | _        y r   )r*   r    _Phase__start_tag_cache_Phase__end_tag_cache)r%   r*   r    s      r   r(   zPhase.__init__,  s     	!#!r   c                     t         r   )NotImplementedErrorrB   s    r   rr   zPhase.process_eof2  s    !!r   c                 j    | j                   j                  || j                   j                  d          y )NrT   r    insert_commentr^   r   s     r   rn   zPhase.process_comment5  s'     			  		(?(?(CDr   c                 :    | j                   j                  d       y )Nzunexpected-doctyper*   r`   r   s     r   rp   zPhase.process_doctype:  s     45r   c                 @    | j                   j                  |d          y NrV   r    insert_textr   s     r   rh   zPhase.process_characters=      		eFm,r   c                 @    | j                   j                  |d          y r   r   r   s     r   ri   zPhase.process_space_characters@  r   r   c                    |d   }|| j                   v r| j                   |   }n| j                  j                  |t        |       j                        x}| j                   |<   t        | j                         t        | j                        dz  kD  rf| j                   j                  t        t        | j                                      t        | j                         t        | j                        dz  kD  rf || |      S Nr&   g?)	r   start_tag_handlerra   rU   start_tag_otherrb   popnextiterr%   rs   r&   functions       r   rj   zPhase.process_start_tagC  s    V} 4)))--d3H6:6L6L6P6Pd4j0072 2Ht--d3 d,,-D4J4J0Kc0QQ&&**4T5K5K0L+MN d,,-D4J4J0Kc0QQ e$$r   c                 f   | j                   j                  s#|d   dk(  r| j                   j                  d       |d   j                         D ]Q  \  }}|| j                  j
                  d   j                  vs,|| j                  j
                  d   j                  |<   S d| j                   _        y )Nr&   r   znon-html-rootrV   rD   F)r*   r6   r`   r#   r    r^   rK   r%   rs   attrr   s       r   start_tag_htmlzPhase.start_tag_htmlR  s    {{**uV}/FKK##O4 !=..0 	DKD%4992215@@@>C		''*55d;	D ',#r   c                    |d   }|| j                   v r| j                   |   }n| j                  j                  |t        |       j                        x}| j                   |<   t        | j                         t        | j                        dz  kD  rf| j                   j                  t        t        | j                                      t        | j                         t        | j                        dz  kD  rf || |      S r   )	r   end_tag_handlerra   rU   end_tag_otherrb   r   r   r   r   s       r   rl   zPhase.process_end_tag\  s    V} 4'''++D1H484H4H4L4Ld4j..50 0Ht++D1 d**+c$2F2F.G#.MM$$((d43G3G.H)IJ d**+c$2F2F.G#.MM e$$r   N)r   r   r   r   	__slots__r(   rr   rn   rp   rh   ri   rj   r   rl   r   r   r   r   r   (  s8    IJI""E
6--%,%r   r   c                   J    e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zy	)
InitialPhasec                      y r   r   r   s     r   ri   z%InitialPhase.process_space_characterso      r   c                 d    | j                   j                  || j                   j                         y r   r    r   r   r   s     r   rn   zInitialPhase.process_commentr       		  		(:(:;r   c                 \   |d   }|d   }|d   }|d   }|dk7  s	|| |dk7  r| j                   j                  d       |d}| j                  j                  |       |dk7  r|j	                  t
              }|rE|d   dk7  s=|j                  d	      s,|d
v s(|j                  d      r||r%|j                         dk(  rd| j                   _        n5|j                  d      s|j                  d      r|d| j                   _        | j                   j                  d   | j                   _
        y )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 quirksr4   )r*   r`   r    insert_doctyperL   r	   
startswithlowerr7   r$   r<   )r%   rs   r&   	public_id	system_idr   s         r   rp   zInitialPhase.process_doctypeu  sQ   V}*%	*%		"FNi3%)7L*LKK##$56I		  '?!++,@AI5=F2$$8899t  & & $$=> !ioo/LM-5DKK*""9: "";< #-=DKK* KK..}=r   c                 v    d| j                   _        | j                   j                  d   | j                   _        y )Nr   r4   )r*   r7   r$   r<   rB   s    r   anything_elsezInitialPhase.anything_else  s)    )1& KK..}=r   c                 \    | j                   j                  d       | j                          |S )Nzexpected-doctype-but-got-charsr*   r`   r   r   s     r   rh   zInitialPhase.process_characters  s&     @Ar   c                 h    | j                   j                  dd|d   i       | j                          |S )Nz"expected-doctype-but-got-start-tagr&   r   r   s     r   rj   zInitialPhase.process_start_tag  s4    065=2I	Kr   c                 h    | j                   j                  dd|d   i       | j                          |S )Nz expected-doctype-but-got-end-tagr&   r   r   s     r   rl   zInitialPhase.process_end_tag  s4    .v0G	Ir   c                 Z    | j                   j                  d       | j                          y)Nzexpected-doctype-but-got-eofTr   rB   s    r   rr   zInitialPhase.process_eof  s$     >?r   N)r   r   r   tupler   ri   rn   rp   r   rh   rj   rl   rr   r   r   r   r   r   l  s3    I<`>D>
r   r   c                   D    e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zy)	BeforeHtmlPhasec                     | j                   j                  t        dd             | j                  j                  d   | j                  _        y )Nr   rd   r   )r    insert_rootimplied_tag_tokenr*   r$   r<   rB   s    r   r=   z$BeforeHtmlPhase._insert_html_element  s7    		/DE KK..}=r   c                 $    | j                          yNTr=   rB   s    r   rr   zBeforeHtmlPhase.process_eof  s    !!#r   c                 d    | j                   j                  || j                   j                         y r   r   r   s     r   rn   zBeforeHtmlPhase.process_comment  r   r   c                      y r   r   r   s     r   ri   z(BeforeHtmlPhase.process_space_characters   r   r   c                 &    | j                          |S r   r  r   s     r   rh   z"BeforeHtmlPhase.process_characters  s    !!#r   c                 X    |d   dk(  rd| j                   _        | j                          |S )Nr&   r   T)r*   r6   r=   r   s     r   rj   z!BeforeHtmlPhase.process_start_tag  s+    =F"*.DKK'!!#r   c                 x    |d   dvr"| j                   j                  dd|d   i       y | j                          |S )Nr&   r   r   r   brzunexpected-end-tag-before-html)r*   r`   r=   r   s     r   rl   zBeforeHtmlPhase.process_end_tag  sC    = >>KK##065=2IK %%'Lr   N)r   r   r   r   r   r=   rr   rn   ri   rh   rj   rl   r   r   r   r   r     s,    I><r   r   c                   |    e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Z ed	efd
e	fg      Z edefg      Zy)BeforeHeadPhasec                 :    | j                  t        dd             y)Nr   rd   Tstart_tag_headr  rB   s    r   rr   zBeforeHeadPhase.process_eof  s    -fkBCr   c                      y r   r   r   s     r   ri   z(BeforeHeadPhase.process_space_characters  r   r   c                 <    | j                  t        dd             |S Nr   rd   r  r   s     r   rh   z"BeforeHeadPhase.process_characters       -fkBCr   c                 R    | j                   j                  d   j                  |      S Nr   r*   r$   rj   r   s     r   r   zBeforeHeadPhase.start_tag_html$  "    {{!!),>>uEEr   c                     | j                   j                  |       | j                   j                  d   | j                   _        | j                  j
                  d   | j                  _        y )NrT   in head)r    r   r^   head_elementr*   r$   r<   r   s     r   r  zBeforeHeadPhase.start_tag_head'  sJ    		  '!%!8!8!<		 KK..y9r   c                 <    | j                  t        dd             |S r  r  r   s     r   r   zBeforeHeadPhase.start_tag_other,  r  r   c                 <    | j                  t        dd             |S r  r  r   s     r   end_tag_imply_headz"BeforeHeadPhase.end_tag_imply_head0  r  r   c                 F    | j                   j                  dd|d   i       y )Nzend-tag-after-implied-rootr&   r   r   s     r   r   zBeforeHeadPhase.end_tag_other4  s      <vuV}>UVr   r   r   r
  N)r   r   r   r   r   rr   ri   rh   r   r  r   r  r   r   r   r   r   r   r   r  r    so    IF:
W !	 	 " 
 	');<  Or   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Z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y)InHeadPhasec                 $    | j                          yr  r   rB   s    r   rr   zInHeadPhase.process_eofE      r   c                 &    | j                          |S r   r#  r   s     r   rh   zInHeadPhase.process_charactersI      r   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   r   zInHeadPhase.start_tag_htmlM  r  r   c                 :    | j                   j                  d       y )Nz!two-heads-are-not-better-than-oner   r   s     r   r  zInHeadPhase.start_tag_headP  s     CDr   c                     | j                   j                  |       | j                   j                  j                          d|d<   y NTr]   r    r   r^   r   r   s     r   start_tag_base_link_commandz'InHeadPhase.start_tag_base_link_commandS  5    		  '		##%+/'(r   c                    | j                   j                  |       | j                   j                  j                          d|d<   |d   }| j                  j
                  j                  j                  d   dk(  rd|v r3| j                  j
                  j                  j                  |d          y d|v rd|v r|d   j                         d	k(  r|t        j                  |d   j                  d
            }t        j                  |      }|j                         }| j                  j
                  j                  j                  |       y y y y y )NTr]   rV   r   	tentativecharsetcontentz
http-equivzcontent-typezutf-8)r    r   r^   r   r*   r-   r0   rF   change_encodingr   r   EncodingBytesencodeContentAttributeParserr   )r%   rs   rK   rV   r*   codecs         r   start_tag_metazInHeadPhase.start_tag_metaX  s#   		  '		##%+/'(6]
;;  ''003{BJ&%%,,<<Z	=RSz)*,\*002nD
 #00I1F1M1Mg1VW$;;DA%%,,<<UC E - * Cr   c                 <    | j                   j                  |d       y )Nr   r*   r   r   s     r   start_tag_titlezInHeadPhase.start_tag_titlem  s    ((9r   c                 <    | j                   j                  |d       y Nr   r9  r   s     r   start_tag_noframes_stylez$InHeadPhase.start_tag_noframes_stylep  s    ((	:r   c                     | j                   j                  r| j                   j                  |d       y | j                  j	                  |       | j                   j
                  d   | j                   _        y )Nr   in head noscript)r*   r,   r   r    r   r$   r<   r   s     r   start_tag_noscriptzInHeadPhase.start_tag_noscriptt  sQ    ;;  KK,,UI>II$$U+ $ 2 23E FDKKr   c                 F   | j                   j                  |       | j                  j                  j                  | j                  j                  _        | j                  j                  | j                  _        | j                  j                  d   | j                  _        y )Nr   )	r    r   r*   r-   script_data_stater9   r<   r   r$   r   s     r   start_tag_scriptzInHeadPhase.start_tag_script{  sg    		  '&*kk&;&;&M&M#%)[[%6%6" KK..v6r   c                 &    | j                          |S r   r#  r   s     r   r   zInHeadPhase.start_tag_other  r&  r   c                     | j                   j                  j                  j                         }|j                  dk(  sJ d|j                  z         | j                   j
                  d   | j                   _        y )Nr   zExpected head got %s
after headr*   r    r^   r   r&   r$   r<   r%   rs   r   s      r   end_tag_headzInHeadPhase.end_tag_head  s\    {{--113yyF"F$:TYY$FF" KK..|<r   c                 &    | j                          |S r   r#  r   s     r   end_tag_html_body_brz InHeadPhase.end_tag_html_body_br  r&  r   c                 F    | j                   j                  dd|d   i       y Nunexpected-end-tagr&   r   r   s     r   r   zInHeadPhase.end_tag_other        4vuV}6MNr   c                 8    | j                  t        d             y )Nr   )rI  r  rB   s    r   r   zInHeadPhase.anything_else  s    +F34r   r   title)noframesstylenoscriptscript)basebasefontbgsoundcommandlinkmetar   )r  r   r   N)r   r   r   r   r   rr   rh   r   r  r,  r7  r:  r=  r@  rC  r   rI  rK  r   r   r   r   r   r   r   r   r!  r!  A  s    IFE0
D*:;G7=
O5 !	 	/"	 89	'(	#$	;	$	&	 	 
" 
 		!56  Or   r!  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Z ede	fde
fdefg      Z edefdefg      Zy)InHeadNoscriptPhasec                 Z    | j                   j                  d       | j                          y)Nzeof-in-head-noscriptTr   rB   s    r   rr   zInHeadNoscriptPhase.process_eof  s$     67r   c                 R    | j                   j                  d   j                  |      S Nr  )r*   r$   rn   r   s     r   rn   z#InHeadNoscriptPhase.process_comment  "    {{!!),<<UCCr   c                 \    | j                   j                  d       | j                          |S )Nzchar-in-head-noscriptr   r   s     r   rh   z&InHeadNoscriptPhase.process_characters  s&     78r   c                 R    | j                   j                  d   j                  |      S r`  r*   r$   ri   r   s     r   ri   z,InHeadNoscriptPhase.process_space_characters  "    {{!!),EEeLLr   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   r   z"InHeadNoscriptPhase.start_tag_html  r  r   c                 R    | j                   j                  d   j                  |      S r`  r  r   s     r   r,  z/InHeadNoscriptPhase.start_tag_base_link_command  r  r   c                 F    | j                   j                  dd|d   i       y Nunexpected-start-tagr&   r   r   s     r   start_tag_head_noscriptz+InHeadNoscriptPhase.start_tag_head_noscript        6v8OPr   c                 h    | j                   j                  dd|d   i       | j                          |S Nzunexpected-inhead-noscript-tagr&   r   r   s     r   r   z#InHeadNoscriptPhase.start_tag_other  4    ,vuV}.E	Gr   c                     | j                   j                  j                  j                         }|j                  dk(  sJ d|j                          | j                   j
                  d   | j                   _        y )NrT  zExpected noscript got r  rG  rH  s      r   end_tag_noscriptz$InHeadNoscriptPhase.end_tag_noscript  s^    {{--113yyJ&L*@(LL& KK..y9r   c                 h    | j                   j                  dd|d   i       | j                          |S rn  r   r   s     r   
end_tag_brzInHeadNoscriptPhase.end_tag_br  ro  r   c                 F    | j                   j                  dd|d   i       y rM  r   r   s     r   r   z!InHeadNoscriptPhase.end_tag_other  rO  r   c                 8    | j                  t        d             y )NrT  )rq  r  rB   s    r   r   z!InHeadNoscriptPhase.anything_else  s    /
;<r   r   )rW  rX  rZ  r[  rR  rS  )r   rT  rT  r  N)r   r   r   r   r   rr   rn   rh   ri   r   r,  rk  r   rq  rs  r   r   r   r   r   r   r   r   r]  r]    s    I
D
MFFQ:
O= !	 	E	$	&	67	"  	%&	z  Or   r]  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Z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y)AfterHeadPhasec                 $    | j                          yr  r#  rB   s    r   rr   zAfterHeadPhase.process_eof  r$  r   c                 &    | j                          |S r   r#  r   s     r   rh   z!AfterHeadPhase.process_characters  r&  r   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   r   zAfterHeadPhase.start_tag_html  r  r   c                     d| j                   _        | j                  j                  |       | j                   j                  d   | j                   _        y )NFr   )r*   rA   r    r   r$   r<   r   s     r   start_tag_bodyzAfterHeadPhase.start_tag_body  s;    "'		  ' KK..y9r   c                     | j                   j                  |       | j                  j                  d   | j                  _        y )Nr   )r    r   r*   r$   r<   r   s     r   start_tag_framesetz!AfterHeadPhase.start_tag_frameset  s/    		  ' KK..}=r   c                    | j                   j                  dd|d   i       | j                  j                  j	                  | j                  j
                         | j                   j                  d   j                  |       | j                  j                  d d d   D ]8  }|j                  dk(  s| j                  j                  j                  |        y  y )Nz#unexpected-start-tag-out-of-my-headr&   r  rT   r   )
r*   r`   r    r^   rq   r  r$   rj   r&   removerH  s      r   start_tag_from_headz"AfterHeadPhase.start_tag_from_head  s    1FE&M3J	L		&&tyy'='=>9%77>II++DbD1 	DyyF"		''..t4	r   c                 F    | j                   j                  dd|d   i       y ri  r   r   s     r   r  zAfterHeadPhase.start_tag_head  rl  r   c                 &    | j                          |S r   r#  r   s     r   r   zAfterHeadPhase.start_tag_other  r&  r   c                 &    | j                          |S r   r#  r   s     r   rK  z#AfterHeadPhase.end_tag_html_body_br  r&  r   c                 F    | j                   j                  dd|d   i       y rM  r   r   s     r   r   zAfterHeadPhase.end_tag_other  rO  r   c                     | j                   j                  t        dd             | j                  j                  d   | j                  _        d| j                  _        y )Nr   rd   r   T)r    r   r  r*   r$   r<   rA   rB   s    r   r   zAfterHeadPhase.anything_else  sC    		  !26;!GH KK..y9"&r   r   r   r   )	rV  rW  rX  rZ  r[  rR  rU  rS  rQ  r   )r   r   r  N)r   r   r   r   r   rr   rh   r   r|  r~  r  r  r   rK  r   r   r   r   r   r   r   r   rw  rw    s    IF:
>QO'
 !	 	 	'(
0	2	 "  	!56  Or   rw  c                       e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6 e7g d5e8jr                  fd6efd7efd8efd9efe:efd:efd;efd<efd=efd>efd?efd@efdAefdBefdCefdDefdEefdFefdGefdHefdIefdJe fdKe!fdLe"fdMe#fdNe$fdOe&fdPe'fdQe%fdRe(fdSe)fdTe*f      Z; e7d7e-fd5e.fdUe/fd;e0fdVe,fdWe1fe:e2fdXe3fdBe4fdYe5fg
      Z< xZ=S )ZInBodyPhase)ri   c                 F    t        |   |i | | j                  | _        y r   )superr(    process_space_characters_non_preri   r%   argsr   	__class__s      r   r(   zInBodyPhase.__init__-  s#    $)&)(,(M(M%r   c                     |j                   |j                   k(  xr4 |j                  |j                  k(  xr |j                  |j                  k(  S r   )r&   rJ   rK   )r%   node1node2s      r   is_matching_formatting_elementz*InBodyPhase.is_matching_formatting_element2  sE    JJ%**$ 1OOu.1 0 00	2r   c                    | j                   j                  |       | j                   j                  d   }g }| j                   j                  d d d   D ]0  }|t        u r n&| j                  ||      s |j                  |       2 t        |      dk  sJ t        |      dk(  r(| j                   j                  j                  |d          | j                   j                  j                  |       y )NrT      )	r    r   r^   active_formatting_elementsr   r  rq   rb   r  )r%   rs   rN   matching_elementsr   s        r   add_formatting_elementz"InBodyPhase.add_formatting_element8  s    		  '))))"-II882> 	/Dv~44T7C!((.		/ $%*** !Q&II00778I"8MN		,,33G<r   c                     t        d      }| j                  j                  d d d   D ]-  }|j                  |vs| j                  j                  d        y  y )N)dddtlipr   r   r   r   r   r   r   r   rT   z expected-closing-tag-but-got-eof)re   r    r^   r&   r*   r`   )r%   allowed_elementsr   s      r   rr   zInBodyPhase.process_eofI  sY    $ &  II++DbD1 	Dyy 00''(JK	r   c                 d   |d   }| j                   | _        |j                  d      rQ| j                  j                  d   j
                  dv r,| j                  j                  d   j                         s|dd  }|r6| j                  j                          | j                  j                  |       y y )NrV   
rT   )prelistingtextarear   )	r  ri   r   r    r^   r&   has_content&reconstruct_active_formatting_elementsr   )r%   rs   rV   s      r   %process_space_characters_drop_newlinez1InBodyPhase.process_space_characters_drop_newlineT  s     V}(,(M(M%OOD!II##B',,0NNII++B/;;=8DII<<>II!!$' r   c                    |d   dk(  ry | j                   j                          | j                   j                  |d          | j                  j                  r(t        d |d   D              rd| j                  _        y y y )NrV    c              3   ,   K   | ]  }|t         v  y wr   r   .0chars     r   	<genexpr>z1InBodyPhase.process_characters.<locals>.<genexpr>h  s      +H15,,+H   F)r    r  r   r*   rA   anyr   s     r   rh   zInBodyPhase.process_charactersa  st    =H$		88:		eFm,;;""s +H9>v+H (H&+DKK#(H"r   c                 t    | j                   j                          | j                   j                  |d          y r   )r    r  r   r   s     r   r  z,InBodyPhase.process_space_characters_non_prel  s(    		88:		eFm,r   c                 R    | j                   j                  d   j                  |      S r`  r  r   s     r   start_tag_process_in_headz%InBodyPhase.start_tag_process_in_headp  r  r   c                    | j                   j                  dddi       t        | j                  j                        dk(  s&| j                  j                  d   j
                  dk7  r| j                   j                  sJ y d| j                   _        |d   j                         D ]Q  \  }}|| j                  j                  d   j                  vs,|| j                  j                  d   j                  |<   S y )Nrj  r&   r   r   FrV   )
r*   r`   rb   r    r^   r&   r+   rA   r#   rK   r   s       r   r|  zInBodyPhase.start_tag_bodys  s     68HI		''(A-		''*//69;;((((&+DKK#$V}224 Hetyy66q9DDDBGDII++A.99$?Hr   c                 p   | j                   j                  dddi       t        | j                  j                        dk(  s&| j                  j                  d   j
                  dk7  r| j                   j                  sJ y | j                   j                  sy | j                  j                  d   j                  rI| j                  j                  d   j                  j                  | j                  j                  d          | j                  j                  d   j
                  dk7  rK| j                  j                  j                          | j                  j                  d   j
                  dk7  rK| j                  j                  |       | j                   j                  d   | j                   _        y )	Nrj  r&   r   r   r   rT   r   r   )r*   r`   rb   r    r^   r&   r+   rA   parentremove_childr   r   r$   r<   r   s     r   r~  zInBodyPhase.start_tag_frameset~  s?    68LM		''(A-		''*//69;;((((((yy&&q)00		''*11>>II++A.0))))"-22f<		''++- ))))"-22f<II$$U+ $ 2 2= ADKKr   c                     | j                   j                  dd      r| j                  t        d             | j                   j	                  |       y Nr  buttonvariant)r    element_in_scope	end_tag_pr  r   r   s     r   start_tag_close_pzInBodyPhase.start_tag_close_p  s=    99%%c8%<NN,S12		  'r   c                     | j                   j                  dd      r| j                  t        d             | j                   j	                  |       d| j
                  _        | j                  | _        y )Nr  r  r  F)	r    r  r  r  r   r*   rA   r  ri   r   s     r   start_tag_pre_listingz!InBodyPhase.start_tag_pre_listing  sW    99%%c8%<NN,S12		  '"'(,(R(R%r   c                 b   | j                   j                  r| j                  j                  dddi       y | j                   j	                  dd      r| j                  t        d             | j                   j                  |       | j                   j                  d   | j                   _        y )Nrj  r&   formr  r  r  rT   )	r    form_elementr*   r`   r  r  r  r   r^   r   s     r   start_tag_formzInBodyPhase.start_tag_form  s    99!!KK##$:VV<LMyy))#x)@056II$$U+%)YY%<%<R%@DII"r   c                 6   d| j                   _        dgddgddgd}||d      }t        | j                  j                        D ]m  }|j
                  |v r:| j                   j                  j                  t        |j
                                n%|j                  t        v s^|j
                  dvsm n | j                  j                  dd	
      r.| j                   j                  j                  t        d             | j                  j                  |       y )NFr  r  r  )r  r  r  r&   )addressr   r  r  r  r  )r*   rA   reversedr    r^   r&   r<   rl   r  
name_tupler   r  r   )r%   rs   stop_names_map
stop_namesr   s        r   start_tag_list_itemzInBodyPhase.start_tag_list_item  s    "'!%tTl4,O#E&M2
TYY445 	DyyJ&!!11%dii02#33II%<<	 99%%c8%<KK--.?.DE		  'r   c                    | j                   j                  dd      r| j                  t        d             | j                   j	                  |       | j
                  j                  j                  | j
                  j                  _        y r  )	r    r  r  r  r   r*   r-   r;   r9   r   s     r   start_tag_plaintextzInBodyPhase.start_tag_plaintext  s_    99%%c8%<NN,S12		  '&*kk&;&;&K&K#r   c                    | j                   j                  dd      r| j                  t        d             | j                   j                  d   j
                  t        v rE| j                  j                  dd|d   i       | j                   j                  j                          | j                   j                  |       y )Nr  r  r  rT   rj  r&   )r    r  r  r  r^   r&   r   r*   r`   r   r   r   s     r   start_tag_headingzInBodyPhase.start_tag_heading  s    99%%c8%<NN,S1299""2&++/??KK##$:VU6]<STII##'')		  'r   c                    | j                   j                  d      }|r| j                  j                  dddd       | j	                  t        d             || j                   j                  v r%| j                   j                  j                  |       || j                   j                  v r%| j                   j                  j                  |       | j                   j                          | j                  |       y )Na$unexpected-start-tag-implies-end-tag	startNameendName)r    %element_in_active_formatting_elementsr*   r`   end_tag_formattingr  r^   r  r  r  r  )r%   rs   afe_a_elements      r   start_tag_azInBodyPhase.start_tag_a  s    		GGLKK##6!c24 ##$5c$:;		 7 77		''..}=		 D DD		44;;MJ		88:##E*r   c                 Z    | j                   j                          | j                  |       y r   )r    r  r  r   s     r   start_tag_formattingz InBodyPhase.start_tag_formatting  s     		88:##E*r   c                 6   | j                   j                          | j                   j                  d      rS| j                  j	                  dddd       | j                  t        d             | j                   j                          | j                  |       y )Nnobrr  r  )r    r  r  r*   r`   rl   r  r  r   s     r   start_tag_nobrzInBodyPhase.start_tag_nobr  su    		88:99%%f-KK##6$8:   !26!:;II<<>##E*r   c                 <   | j                   j                  d      r;| j                  j                  dddd       | j	                  t        d             |S | j                   j                          | j                   j                  |       d| j                  _        y )Nr  r  r  F)	r    r  r*   r`   rl   r  r  r   rA   r   s     r   start_tag_buttonzInBodyPhase.start_tag_button  sz    99%%h/KK##6&8<>   !28!<=LII<<>II$$U+&+DKK#r   c                     | j                   j                          | j                   j                  |       | j                   j                  j	                  t
               d| j                  _        y r   )r    r  r   r  rq   r   r*   rA   r   s     r   start_tag_applet_marquee_objectz+InBodyPhase.start_tag_applet_marquee_object  sH    		88:		  '		,,33F;"'r   c                     | j                   j                  dd      r| j                  t        d             | j                   j	                          d| j
                  _        | j
                  j                  |d       y )Nr  r  r  Fr   )r    r  r  r  r  r*   rA   r   r   s     r   start_tag_xmpzInBodyPhase.start_tag_xmp  s[    99%%c8%<NN,S12		88:"'((	:r   c                 L   | j                   j                  dk7  r7| j                  j                  dd      r| j	                  t        d             | j                  j                  |       d| j                   _        | j                   j                  d   | j                   _	        y )Nr   r  r  r  Fr   )
r*   r7   r    r  rl   r  r   rA   r$   r<   r   s     r   start_tag_tablezInBodyPhase.start_tag_table  sx    ;;))X5yy))#x)@$$%6s%;<		  '"' KK..z:r   c                     | j                   j                          | j                   j                  |       | j                   j                  j	                          d|d<   d| j
                  _        y )NTr]   F)r    r  r   r^   r   r*   rA   r   s     r   start_tag_void_formattingz%InBodyPhase.start_tag_void_formatting  sQ    		88:		  '		##%+/'("'r   c                     | j                   j                  }| j                  |       d|d   v r1|d   d   j                  t              dk(  r|| j                   _        y y y )NrU   rV   hidden)r*   rA   r  rL   r	   )r%   rs   rA   s      r   start_tag_inputzInBodyPhase.start_tag_input	  s_    kk--&&u-eFm#ff%//0DEQ&1DKK# R $r   c                     | j                   j                  |       | j                   j                  j                          d|d<   y r*  r+  r   s     r   start_tag_param_sourcez"InBodyPhase.start_tag_param_source  r-  r   c                    | j                   j                  dd      r| j                  t        d             | j                   j	                  |       | j                   j
                  j                          d|d<   d| j                  _        y )Nr  r  r  Tr]   F)	r    r  r  r  r   r^   r   r*   rA   r   s     r   start_tag_hrzInBodyPhase.start_tag_hr  sj    99%%c8%<NN,S12		  '		##%+/'("'r   c           	          | j                   j                  dddd       | j                  t        dd|d   |d                y )	Nzunexpected-start-tag-treated-asimageimgoriginalNamenewNamerd   rV   r\   rK   self_closing)r*   r`   rj   r  r   s     r   start_tag_imagezInBodyPhase.start_tag_image  sJ    -$7	9 	0;5=}- / 	0r   c           	         | j                   j                  dddi       | j                  j                  ry i }d|d   v r|d   d   |d<   | j	                  t        dd|             | j	                  t        d	d             | j	                  t        d
d             d|d   v r	|d   d   }nd}| j                  t        j                  |d       |d   j                         }d|v r|d= d|v r|d= d|d<   | j	                  t        dd||d                | j                  t        d
             | j	                  t        d	d             | j                  t        d             y )Nzdeprecated-tagr&   isindexactionrV   r  rd   )rK   hrlabelpromptz3This is a searchable index. Enter search keywords: rU   rV   inputr\   r  )r*   r`   r    r  rj   r  rh   r   rf   copyrl   )r%   rs   
form_attrsr  rK   s        r   start_tag_isindexzInBodyPhase.start_tag_isindex'  sp    0692EF99!!
uV}$#(=#:Jx fkjI	K0{CD0+FGuV}$6]8,FJF)9)96 JK6]'')
z!8$z!8$&
60[Z}- / 	0 	.w780{CD.v67r   c                     | j                   j                  |       | j                  j                  j                  | j                  j                  _        | j                  | _        d| j                  _        y r   )	r    r   r*   r-   r8   r9   r  ri   rA   r   s     r   start_tag_textareazInBodyPhase.start_tag_textareaE  sP    		  '&*kk&;&;&H&H#(,(R(R%"'r   c                 H    d| j                   _        | j                  |       y r   )r*   rA   start_tag_rawtextr   s     r   start_tag_iframezInBodyPhase.start_tag_iframeK  s    "'u%r   c                 v    | j                   j                  r| j                  |       y | j                  |       y r   )r*   r,   r  r   r   s     r   r@  zInBodyPhase.start_tag_noscriptO  s+    ;;  ""5)  'r   c                 <    | j                   j                  |d       y r<  r9  r   s     r   r  zInBodyPhase.start_tag_rawtextU  s    ((	:r   c                 *   | j                   j                  d   j                  dk(  r.| j                  j                  j                  t        d             | j                   j                          | j                  j                   j                  |       y NrT   option)	r    r^   r&   r*   r<   rl   r  r  r   r   s     r   start_tag_optzInBodyPhase.start_tag_optX  se    99""2&++x7KK--.?.IJ		88:''.r   c                    | j                   j                          | 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                  _        y | j                  j                  d	   | j                  _        y )
NFr   r   r   r   r   r   in select in tabler   )r    r  r   r*   rA   r<   r$   r   s     r   start_tag_selectzInBodyPhase.start_tag_select^  s    		88:		  '"';;"":.""<0""#45""?3""8,""9-!/ / !% 2 23G HDKK $ 2 2; ?DKKr   c                 &   | j                   j                  d      r[| j                   j                          | j                   j                  d   j                  dk7  r| j
                  j                  d       | j                   j                  |       y )NrubyrT   zrp-or-rt-tag-not-in-ruby-scope)r    r  generate_implied_end_tagsr^   r&   r*   r`   r   r   s     r   start_tag_rp_rtzInBodyPhase.start_tag_rp_rtm  sf    99%%f-II//1yy&&r*//69''(HI		  'r   c                 P   | j                   j                          | j                  j                  |       | j                  j	                  |       t
        d   |d<   | j                   j                  |       |d   r*| j                   j                  j                          d|d<   y y )NrH   rJ   r\   Tr]   )	r    r  r*   r   r   r   r   r^   r   r   s     r   start_tag_mathzInBodyPhase.start_tag_matht  s    		88:,,U3--e4'1k		  ' II##'')/3E+,  r   c                 P   | j                   j                          | j                  j                  |       | j                  j	                  |       t
        d   |d<   | j                   j                  |       |d   r*| j                   j                  j                          d|d<   y y )NrZ   rJ   r\   Tr]   )	r    r  r*   r   r   r   r   r^   r   r   s     r   start_tag_svgzInBodyPhase.start_tag_svg  s    		88:))%0--e4'.k		  ' II##'')/3E+,  r   c                 F    | j                   j                  dd|d   i       y)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   s     r   start_tag_misplacedzInBodyPhase.start_tag_misplaced  s"     	 >v@WXr   c                 n    | j                   j                          | j                   j                  |       y r   )r    r  r   r   s     r   r   zInBodyPhase.start_tag_other  s$    		88:		  'r   c                 t   | j                   j                  dd      sT| j                  t        dd             | j                  j                  dddi       | j                  t        d             y | j                   j                  d       | j                   j                  d   j                  dk7  r| j                  j                  dddi       | j                   j                  j                         }|j                  dk7  r5| j                   j                  j                         }|j                  dk7  r4y y )Nr  r  r  rd   rN  r&   rT   )r    r  r  r  r*   r`   r  r  r^   r&   r   rH  s      r   r  zInBodyPhase.end_tag_p  s    yy))#x)@""#4S+#FGKK##$863-HNN,S12II//4yy&&r*//36''(<vsmL99**..0D))s"yy..224 ))s"r   c                    | j                   j                  d      s| j                  j                  dddi       y | j                   j                  d   j
                  dk7  r`| j                   j                  dd  D ]D  }|j
                  t        d      vs| j                  j                  dd|j
                  d        n | j                  j                  d	   | j                  _        y )
Nr   rN  r&   rT      )r  r  r  optgroupr  r  rprtr   r   r   r   r   r   r   r   $expected-one-end-tag-but-got-anothergotNameexpectedName
after body)	r    r  r*   r`   r^   r&   re   r$   r<   rH  s      r   end_tag_bodyzInBodyPhase.end_tag_body  s    yy))&1KK##$866:JKYY$$R(--7		//3 99I /U %V V KK++>$*DIIFH  !KK..|<r   c                 r    | j                   j                  d      r| j                  t        d             |S y )Nr   )r    r  r(  r  r   s     r   end_tag_htmlzInBodyPhase.end_tag_html  s2    99%%f-/78L .r   c                     |d   dk(  r| j                   | _        | j                  j                  |d         }|r| j                  j	                          | j                  j
                  d   j                  |d   k7  r!| j                  j                  dd|d   i       |ro| j                  j
                  j                         }|j                  |d   k7  r8| j                  j
                  j                         }|j                  |d   k7  r7y y y )Nr&   r  rT   end-tag-too-early)
r  ri   r    r  r  r^   r&   r*   r`   r   )r%   rs   in_scoper   s       r   end_tag_blockzInBodyPhase.end_tag_block  s    =E!,0,Q,QD)99--eFm<II//199""2&++uV}<KK##$7&%-9PQ99**..0D))uV},yy..224 ))uV}, r   c                    | j                   j                  }d | j                   _        || j                   j                  |      s| j                  j	                  dddi       y | j                   j                          | j                   j                  d   |k7  r| j                  j	                  dddi       | j                   j                  j                  |       y )NrN  r&   r  rT   zend-tag-too-early-ignored)r    r  r  r*   r`   r  r^   r  rH  s      r   end_tag_formzInBodyPhase.end_tag_form  s    yy%%!%		<tyy99$?KK##$866:JKII//1yy&&r*d2''(CffEUVII##**40r   c                 P   |d   dk(  rd}nd }| j                   j                  |d   |      s"| j                  j                  dd|d   i       y | j                   j	                  |d          | j                   j
                  d   j                  |d   k7  r!| j                  j                  dd|d   i       | j                   j
                  j                         }|j                  |d   k7  r8| j                   j
                  j                         }|j                  |d   k7  r7y y )	Nr&   r  listr  rN  excluderT   r,  )r    r  r*   r`   r  r^   r&   r   )r%   rs   r  r   s       r   end_tag_list_itemzInBodyPhase.end_tag_list_item  s    =D GGyy))%-)IKK##$865=:QRII//f/Fyy&&r*//5=@''(;feFm=TU99**..0D))uV},yy..224 ))uV},r   c                 F   t         D ]9  }| j                  j                  |      s| j                  j                           n | j                  j                  d   j
                  |d   k7  r!| j                  j                  dd|d   i       t         D ]  }| j                  j                  |      s| j                  j                  j                         }|j
                  t         vr7| j                  j                  j                         }|j
                  t         vr7 y  y )NrT   r&   r,  )	r   r    r  r  r^   r&   r*   r`   r   )r%   rs   items      r   end_tag_headingzInBodyPhase.end_tag_heading  s    $ 	Dyy))$/		335	 99""2&++uV}<KK##$7&%-9PQ$ 	Dyy))$/yy..224ii'779922668D ii'77	r   c                 
   d}|dk  rs|dz  }| j                   j                  |d         }|r=|| j                   j                  v r7| j                   j                  |j                        s| j                  |       y|| j                   j                  vrG| j                  j                  dd|d   i       | j                   j                  j                  |       y| j                   j                  |j                        s"| j                  j                  dd|d   i       y|| j                   j                  d   k7  r!| j                  j                  d	d|d   i       | j                   j                  j                  |      }d}| j                   j                  |d D ]  }|j                  t        v s|} n |y| j                   j                  j                         }||k7  r*| j                   j                  j                         }||k7  r*| j                   j                  j                  |       y| j                   j                  |dz
     }| j                   j                  j                  |      }|x}	}
d}| j                   j                  j                  |
      }|d
k  r_|dz  }|dz  }| j                   j                  |   }
|
| j                   j                  vr&| j                   j                  j                  |
       g|
|k(  rn|	|k(  r(| j                   j                  j                  |
      dz   }|
j                         }|| j                   j                  | j                   j                  j                  |
      <   || j                   j                  | j                   j                  j                  |
      <   |}
|	j                  r|	j                  j!                  |	       |
j#                  |	       |
}	|d
k  r_|	j                  r|	j                  j!                  |	       |j                  t%        d      v r0| j                   j'                         \  }}|j)                  |	|       n|j#                  |	       |j                         }|j+                  |       |j#                  |       | j                   j                  j                  |       | j                   j                  j-                  ||       | j                   j                  j                  |       | j                   j                  j-                  | j                   j                  j                  |      dz   |       |dk  rryy)z*The much-feared adoption agency algorithm.rD      r   r&   Nzadoption-agency-1.2zadoption-agency-4.4rT   zadoption-agency-1.3r  r   r   r   r   r   )r    r  r^   r  r&   r   r*   r`   r  r  indexr  r   r   cloner  r  append_childre   !get_table_misnested_node_positioninsert_beforereparent_childreninsert)r%   rs   outer_loop_counterformatting_element	afe_indexfurthest_blockrN   common_ancestorbookmark	last_noder   inner_loop_counterr<  r=  r  r@  s                   r   r  zInBodyPhase.end_tag_formatting  s     !1$ !# "&!P!Pf"&&$))*A*AA		223E3J3JK ""5) $499+B+BB''(=f?VW		44;;<NO YY//0B0G0GH''(=f?VW &)@)@)DDKK++-f/FH 		//556HII!N99229:> %%)99%,N %))11557!33"ii5599;G !33		44;;GD #ii55i!mDO yy;;AABTUH  .-I!"II++11$7E$q("a'"
yy..u5tyyCCCII++2248--.#yyCCII$ORSSH

 IN 		44II88>>tDFOT		''		(?(?(E(Ed(KL ##$$11)<!!), 	7 %q(D   --i8##y 2> (? ?(,		(S(S(U%$$Y>,,Y7 ',,.E ,,U3 ''. II00778JKII0077%H II##**+=>II##**		''--n=A5Ju !1$r   c                 T   | j                   j                  |d         r| j                   j                          | j                   j                  d   j                  |d   k7  r!| j
                  j                  dd|d   i       | j                   j                  |d         r| j                   j                  j                         }|j                  |d   k7  r7| j                   j                  j                         }|j                  |d   k7  r7| j                   j                          y y )Nr&   rT   r,  )	r    r  r  r^   r&   r*   r`   r    clear_active_formatting_elements)r%   rs   rN   s      r   end_tag_applet_marquee_objectz)InBodyPhase.end_tag_applet_marquee_object  s    99%%eFm4II//199""2&++uV}<KK##$7&%-9PQ99%%eFm4ii--113G,,%-/))11557 ,,%-/II668	 5r   c                    | j                   j                  dddd       | j                  j                          | j                  j	                  t        dd             | j                  j                  j                          y )Nzunexpected-end-tag-treated-asr  z
br elementr  rd   )r*   r`   r    r  r   r  r^   r   r   s     r   rs  zInBodyPhase.end_tag_br  sa    +!l;	= 			88:		  !24!EF		##%r   c                 L   | j                   j                  d d d   D ]  }|j                  |d   k(  r| j                   j                  |d          | j                   j                  d   j                  |d   k7  r!| j                  j                  dd|d   i       | j                   j                  j                         |k7  r)	 | j                   j                  j                         |k7  r) y |j                  t        v s| j                  j                  dd|d   i        y  y )NrT   r&   r3  rN  )	r    r^   r&   r  r*   r`   r   r  r   rH  s      r   r   zInBodyPhase.end_tag_other  s    II++DbD1 	DyyE&M)		33E&M3J99**2.33uV}DKK++,vuV}.EGii--113t; ii--113t;??&66KK++,vuV}.EG	r   r   )	rV  rW  rX  rY  rZ  r[  rU  rS  rQ  r   r   )r  articleaside
blockquotecenterdetailsdirr   dlfieldset
figcaptionfigurefooterheaderhgroupmainmenunavolr  sectionsummaryul)r  r  r  )r  r  r  r3   r  )bbigcodeemfontissmallstrikestrongttur  r  )appletmarqueeobjectxmpr   )arear  embedr  keygenwbr)paramsourcetrackr   r  r  r  r  iframerT  )noembedrR  r   )r!  r"  )r  r   mathrZ   )r   colr   framer   r   r   r   r   r   r   )r  rP  rQ  rR  r  rS  rT  dialogrU  r   rV  rW  rX  rY  rZ  r[  r\  r  r]  r^  r_  r`  r  ra  rb  rc  r  )r  r  r  )r  rd  re  rf  rg  rh  ri  r  rj  rk  rl  rm  rn  ro  r  )>r   r   r   r   r(   r  r  rr   r  rh   r  r  r|  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r@  r  r  r  r  r  r  r  r   r  r(  r*  r.  r0  r5  r8  r  rM  rs  r   r   r   r   r   r   r   __classcell__r  s   @r   r  r  (  s    .IN
2="(	,-F	HB (
SA(&L(++	+
,(;;(20
(08<(&(;/@(
4
4Y(5= 5	15dJL
9&  ! ("	%%&("
&'@	B(" 
 	("
 
'(("
& (9	:(" 
,-(" 
23(" 
 (" 
01(" 
)*(" 
k(" 
 4	6!("$ 
 %("& 
#$'("( 
)*IJ)("* 
+(", 
/"-(". 
9:ST/("0 
&'=>1("2 
/"3("4 
|5("6 
/"7("8 
%&9(": 
'(;("< 
#$=("> 
'(?("@ 
!"34A("B 
#$C("D 
'E("F 
 /G("H >"I("J - K("L
78K	MM(" (T 		
& (5	6 
	i	./	?+
)*<	>	(*GH	z  Or   r  c                   ^    e Zd Z e       Zd Zd Zd Zd Zd Z	 e
g       Z e
defg      Zy)	TextPhasec                 @    | j                   j                  |d          y r   r   r   s     r   rh   zTextPhase.process_characters  r   r   c                    | j                   j                  dd| j                  j                  d   j                  i       | j                  j                  j                          | j                   j                  | j                   _        y)Nz&expected-named-closing-tag-but-got-eofr&   rT   T)r*   r`   r    r^   r&   r   r   r<   rB   s    r   rr   zTextPhase.process_eof   se    4TYY,,R0556	8 			##% KK66r   c                     J d|d    d       )NzTried to process start tag r&   z in RCDATA/RAWTEXT moder   r   s     r   r   zTextPhase.start_tag_other  s!    	R)%-8OP	Rur   c                     | j                   j                  j                         }|j                  dk(  sJ | j                  j
                  | j                  _        y )NrU  )r    r^   r   r&   r*   r   r<   rH  s      r   end_tag_scriptzTextPhase.end_tag_script  sB    yy&&**,yyH$$$ KK66r   c                     | j                   j                  j                          | j                  j                  | j                  _        y r   )r    r^   r   r*   r   r<   r   s     r   r   zTextPhase.end_tag_other  s.    		##% KK66r   rU  N)r   r   r   r   r   rh   rr   r   r  r   r   r   r   r   r   r   r  r    sA    I-R77 !> :;<Or   r  c                      e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Z edej2                  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y)InTablePhasec                     | j                   j                  d   j                  dvrK| j                   j                  j                          | j                   j                  d   j                  dvrJy y )NrT   )r   r   )r    r^   r&   r   rB   s    r   _clear_stack_to_table_contextz*InTablePhase._clear_stack_to_table_context  sX    ii%%b)..6GG II##'') ii%%b)..6GGr   c                     | j                   j                  d   j                  dk7  r| j                  j	                  d       y | j                  j
                  sJ y )NrT   r   zeof-in-tabler    r^   r&   r*   r`   r+   rB   s    r   rr   zInTablePhase.process_eof'  sD    99""2&++v5KK##N3;;((((r   c                     | j                   j                  }| j                   j                  d   | j                   _        || j                   j                  _        | j                   j                  j	                  |       y Nin table text)r*   r<   r$   r   ri   r%   rs   r   s      r   ri   z%InTablePhase.process_space_characters.  sV    ** KK..?+9(2259r   c                     | j                   j                  }| j                   j                  d   | j                   _        || j                   j                  _        | j                   j                  j	                  |       y r  )r*   r<   r$   r   rh   r  s      r   rh   zInTablePhase.process_characters4  sV    ** KK..?+9(,,U3r   c                     d| j                   _        | j                  j                  d   j	                  |       d| j                   _        y )NTr   F)r    insert_from_tabler*   r$   rh   r   s     r   r   zInTablePhase.insert_text:  s9     '+		#9%88?&+		#r   c                     | j                          | j                  j                  j                  t               | j                  j                  |       | j                  j                  d   | j                  _        y )Nr   )	r  r    r  rq   r   r   r*   r$   r<   r   s     r   start_tag_captionzInTablePhase.start_tag_captionA  sS    **,		,,33F;		  ' KK..|<r   c                     | j                          | j                  j                  |       | j                  j                  d   | j                  _        y )Nr   r  r    r   r*   r$   r<   r   s     r   start_tag_colgroupzInTablePhase.start_tag_colgroupG  s<    **,		  ' KK../@Ar   c                 <    | j                  t        dd             |S )Nr   rd   )r  r  r   s     r   start_tag_colzInTablePhase.start_tag_colL  s     1*k JKr   c                     | j                          | j                  j                  |       | j                  j                  d   | j                  _        y )Nr   r  r   s     r   start_tag_rowgroupzInTablePhase.start_tag_rowgroupP  s;    **,		  ' KK..?r   c                 <    | j                  t        dd             |S )Nr   rd   )r  r  r   s     r   start_tag_imply_tbodyz"InTablePhase.start_tag_imply_tbodyU  s     1'; GHr   c                     | j                   j                  dddd       | j                   j                  j                  t	        d             | j                   j
                  s|S y )Nr  r   r  )r*   r`   r<   rl   r  r+   r   s     r   r  zInTablePhase.start_tag_tableY  sV    2!g6	8 	))*;G*DE{{$$L %r   c                 R    | j                   j                  d   j                  |      S r`  r  r   s     r   start_tag_style_scriptz#InTablePhase.start_tag_style_scripta  r  r   c                 &   d|d   v ry|d   d   j                  t              dk(  r[| j                  j                  d       | j                  j                  |       | j                  j                  j                          y | j                  |       y )NrU   rV   r  z unexpected-hidden-input-in-table)	rL   r	   r*   r`   r    r   r^   r   r   r   s     r   r  zInTablePhase.start_tag_inputd  st    eFm#ff%//0DEQKK##$FGII$$U+II##'')  'r   c                 6   | j                   j                  d       | j                  j                  h| j                  j	                  |       | j                  j
                  d   | j                  _        | j                  j
                  j                          y y )Nzunexpected-form-in-tablerT   )r*   r`   r    r  r   r^   r   r   s     r   r  zInTablePhase.start_tag_formn  sm     :;99!!)II$$U+%)YY%<%<R%@DII"II##'') *r   c                     | j                   j                  dd|d   i       d| j                  _        | j                   j                  d   j                  |       d| j                  _        y )Nz)unexpected-start-tag-implies-table-voodoor&   Tr   F)r*   r`   r    r  r$   rj   r   s     r   r   zInTablePhase.start_tag_otheru  sZ    7&%-9P	R '+		#9%77>&+		#r   c                    | j                   j                  dd      r0| j                   j                          | j                   j                  d   j                  dk7  r@| j
                  j                  dd| j                   j                  d   j                  d       | j                   j                  d   j                  dk7  rK| j                   j                  j                          | j                   j                  d   j                  dk7  rK| j                   j                  j                          | j
                  j                          y | j
                  j                  sJ | j
                  j                  dd|d   i       y )Nr   r  rT   zend-tag-too-early-namedr$  rN  r&   )
r    r  r  r^   r&   r*   r`   r   r>   r+   r   s     r   end_tag_tablezInTablePhase.end_tag_table}  s+   99%%gw%?II//1yy&&r*//7:''(A&$(II$;$;B$?$D$DDF G ))))"-22g=		''++- ))))"-22g=II##'')KK,,. ;;((((KK##$865=:QRr   c                 F    | j                   j                  dd|d   i       y rM  r   r   s     r   end_tag_ignorezInTablePhase.end_tag_ignore  rO  r   c                     | j                   j                  dd|d   i       d| j                  _        | j                   j                  d   j                  |       d| j                  _        y )Nz'unexpected-end-tag-implies-table-voodoor&   Tr   F)r*   r`   r    r  r$   rl   r   s     r   r   zInTablePhase.end_tag_other  sZ    5f7N	P '+		#9%55e<&+		#r   r   r   r   r~  r   r   r   )r   r   r   r   )rS  rU  r   r  )r   r   r~  r   r   r   r   r   r   r   r   N)r   r   r   r   r   r  rr   ri   rh   r   r  r  r  r  r  r  r  r  r  r   r  r  r   r   r   r   r   r   r   r   r   r  r    s    I*):4,=B
@
F(*,S O, !	%%&	%&	'(		$&89	23	/"	45	/"	 "  	- 
()7	9  Or   r  c                   L     e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Z xZS )
InTableTextPhase)r   character_tokensc                 @    t        |   |i | d | _        g | _        y r   )r  r(   r   r  r  s      r   r(   zInTableTextPhase.__init__  s%    $)&)" "r   c                 X   dj                  | j                  D cg c]  }|d   	 c}      }t        d |D              rCt        j                  |d}| j
                  j                  d   j                  |       g | _        y |r| j                  j                  |       g | _        y c c}w )Nr   rV   c              3   ,   K   | ]  }|t         v  y wr   r  )r  r7  s     r   r  z4InTableTextPhase.flush_characters.<locals>.<genexpr>  s     =t++=r  r  r   )	joinr  r  r   rf   r*   r$   r   r    )r%   r7  rV   rs   s       r   flush_charactersz!InTableTextPhase.flush_characters  s    ww1F1FGVGH==="--t<EKKz*66u= !# II!!$' " Hs   B'c                 \    | j                          | j                  | j                  _        |S r   r  r   r*   r<   r   s     r   rn   z InTableTextPhase.process_comment  %     //r   c                 Z    | j                          | j                  | j                  _        yr  r  rB   s    r   rr   zInTableTextPhase.process_eof  s#     //r   c                 L    |d   dk(  ry | j                   j                  |       y NrV   r  r  rq   r   s     r   rh   z#InTableTextPhase.process_characters  s%    =H$$$U+r   c                 :    | j                   j                  |       y r   r  r   s     r   ri   z)InTableTextPhase.process_space_characters  s    $$U+r   c                 \    | j                          | j                  | j                  _        |S r   r  r   s     r   rj   z"InTableTextPhase.process_start_tag  r  r   c                 \    | j                          | j                  | j                  _        |S r   r  r   s     r   rl   z InTableTextPhase.process_end_tag  r  r   )r   r   r   r   r(   r  rn   rr   rh   ri   rj   rl   r  r  s   @r   r  r    s0    6I#
#

,
,

r   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Z ed
ej                   fdefg      Z ede
fdefdefg      Zy)InCaptionPhasec                 >    | j                   j                  dd       S )Nr   r   r  r    r  rB   s    r   ignore_end_tag_captionz%InCaptionPhase.ignore_end_tag_caption  s    99--i-IIIr   c                 R    | j                   j                  d   j                          y r  r*   r$   rr   rB   s    r   rr   zInCaptionPhase.process_eof      9%113r   c                 R    | j                   j                  d   j                  |      S r  r*   r$   rh   r   s     r   rh   z!InCaptionPhase.process_characters  "    {{!!),??FFr   c                     | j                   j                  d       | j                         }| j                   j                  j	                  t        d             |s|S y )Nz%unexpected-table-start-tag-in-captionr   r*   r`   r  r<   rl   r  r%   rs   ignore_end_tags      r   start_tag_table_elementz&InCaptionPhase.start_tag_table_element  sN     GH446))*;I*FGL r   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   r   zInCaptionPhase.start_tag_other  r  r   c                 H   | j                         sX| j                  j                          | j                  j                  d   j                  dk7  r@| j
                  j                  dd| j                  j                  d   j                  d       | j                  j                  d   j                  dk7  rK| j                  j                  j                          | j                  j                  d   j                  dk7  rK| j                  j                  j                          | j                  j                          | j
                  j                  d   | j
                  _
        y | j
                  j                  sJ | j
                  j                  dd|d   i       y )NrT   r   r#  r$  r   rN  r&   )r  r    r  r^   r&   r*   r`   r   rL  r$   r<   r+   r   s     r   end_tag_captionzInCaptionPhase.end_tag_caption  s;   **,II//1yy&&r*//9<''(N($(II$;$;B$?$D$DQF G ))))"-22i?		''++- ))))"-22i?II##'')II668 $ 2 2: >DKK ;;((((KK##$865=:QRr   c                     | j                   j                  d       | j                         }| j                   j                  j	                  t        d             |s|S y )Nz#unexpected-table-end-tag-in-captionr   r  r  s      r   r  zInCaptionPhase.end_tag_table  sN     EF446))*;I*FGL r   c                 F    | j                   j                  dd|d   i       y rM  r   r   s     r   r  zInCaptionPhase.end_tag_ignore  rO  r   c                 R    | j                   j                  d   j                  |      S r  r*   r$   rl   r   s     r   r   zInCaptionPhase.end_tag_other  ra  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  rr   rh   r  r   r  r  r  r   r   r   r   r   r   r   r   r   r  r    s    IJ4GFS$OD !	%%&
1	3"  	O$	- 
(	*  Or   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Z ed	ej                  fd
efg      Z ede
fd
efg      Zy)InColumnGroupPhasec                 N    | j                   j                  d   j                  dk(  S )NrT   r   )r    r^   r&   rB   s    r   ignore_end_tag_colgroupz*InColumnGroupPhase.ignore_end_tag_colgroup%  s"    yy&&r*//699r   c                     | j                   j                  d   j                  dk(  r| j                  j                  sJ y | j                         }| j                  t        d             |syy )NrT   r   r   T)r    r^   r&   r*   r+   r  end_tag_colgroupr  )r%   r  s     r   rr   zInColumnGroupPhase.process_eof(  sb    99""2&++v5;;((((!99;N!!"3J"?@! "r   c                 `    | j                         }| j                  t        d             |s|S y Nr   r  r  r  r  s      r   rh   z%InColumnGroupPhase.process_characters2  1    557/
;<L r   c                     | j                   j                  |       | j                   j                  j                          d|d<   y r*  r+  r   s     r   r  z InColumnGroupPhase.start_tag_col8  r-  r   c                 `    | j                         }| j                  t        d             |s|S y r  r  r  s      r   r   z"InColumnGroupPhase.start_tag_other=  r  r   c                 0   | j                         r:| j                  j                  sJ | j                  j                  dd|d   i       y | j                  j
                  j                          | j                  j                  d   | j                  _        y )NrN  r&   r   )	r  r*   r+   r`   r    r^   r   r$   r<   r   s     r   r  z#InColumnGroupPhase.end_tag_colgroupC  sp    '');;((((KK##$865=:QRII##'') $ 2 2: >DKKr   c                 @    | j                   j                  dddi       y )Nz
no-end-tagr&   r~  r   r   s     r   end_tag_colzInColumnGroupPhase.end_tag_colL  s    vuo>r   c                 `    | j                         }| j                  t        d             |s|S y r  r  r  s      r   r   z InColumnGroupPhase.end_tag_otherO  r  r   r   r~  r   N)r   r   r   r   r   r  rr   rh   r  r   r  r  r   r   r   r   r   r   r   r   r   r  r  !  s{    I:0
?? !	%%&	" 
 	%&	  Or   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Z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y)InTableBodyPhasec                 `   | j                   j                  d   j                  dvrJ| j                   j                  j                          | j                   j                  d   j                  dvrJ| j                   j                  d   j                  dk(  r| j                  j
                  sJ y y )NrT   )r   r   r   r   r   )r    r^   r&   r   r*   r+   rB   s    r   "_clear_stack_to_table_body_contextz3InTableBodyPhase._clear_stack_to_table_body_contextd  s    ii%%b).. 73 3 II##'')	 ii%%b).. 73 3
 99""2&++v5;;(((( 6r   c                 R    | j                   j                  d   j                          y Nr   r  rB   s    r   rr   zInTableBodyPhase.process_eofm      :&224r   c                 R    | j                   j                  d   j                  |      S r  rd  r   s     r   ri   z)InTableBodyPhase.process_space_charactersp  "    {{!!*-FFuMMr   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   rh   z#InTableBodyPhase.process_characterss  "    {{!!*-@@GGr   c                     | j                          | j                  j                  |       | j                  j                  d   | j                  _        y )Nr   )r  r    r   r*   r$   r<   r   s     r   start_tag_trzInTableBodyPhase.start_tag_trv  s;    //1		  ' KK..x8r   c                 ~    | j                   j                  dd|d   i       | j                  t        dd             |S )Nzunexpected-cell-in-table-bodyr&   r   rd   )r*   r`   r  r  r   s     r   start_tag_table_cellz%InTableBodyPhase.start_tag_table_cell{  s>    +feFm-D	F+D+>?r   c                    | j                   j                  dd      s:| j                   j                  dd      s| j                   j                  dd      rM| j                          | j                  t	        | j                   j
                  d   j                               |S | j                  j                  sJ | j                  j                  dd|d   i       y )	Nr   r   r  r   r   rT   z!unexpected-start-tag-out-of-tabler&   
r    r  r  end_tag_table_rowgroupr  r^   r&   r*   r+   r`   r   s     r   start_tag_table_otherz&InTableBodyPhase.start_tag_table_other  s    II&&w&@		**7G*D		**7G*D335''!$))"9"9""="B"BCEL ;;((((KK##3feFm5LNr   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   r   z InTableBodyPhase.start_tag_other  "    {{!!*-??FFr   c                 @   | j                   j                  |d   d      r]| j                          | j                   j                  j	                          | j
                  j                  d   | j
                  _        y | j
                  j                  dd|d   i       y )Nr&   r   r  r    unexpected-end-tag-in-table-body)	r    r  r  r^   r   r*   r$   r<   r`   r   s     r   r  z'InTableBodyPhase.end_tag_table_rowgroup  s{    99%%eFmW%E335II##'') $ 2 2: >DKKKK##2VU6]4KMr   c                    | j                   j                  dd      s:| j                   j                  dd      s| j                   j                  dd      rM| j                          | j                  t	        | j                   j
                  d   j                               |S | j                  j                  sJ | j                  j                  dd|d   i       y )	Nr   r   r  r   r   rT   rN  r&   r  r   s     r   r  zInTableBodyPhase.end_tag_table  s    II&&w&@		**7G*D		**7G*D335''!$))"9"9""="B"BCEL ;;((((KK##$865=:QRr   c                 F    | j                   j                  dd|d   i       y )Nr  r&   r   r   s     r   r  zInTableBodyPhase.end_tag_ignore  #    .v0G	Ir   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   r   zInTableBodyPhase.end_tag_other  "    {{!!*-==eDDr   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  rr   ri   rh   r  r  r  r   r  r  r  r   r   r   r   r   r   r   r   r   r  r  `  s    I)5NH9
NGMSIE !	%%&	|	+,	B		"  	$&<=	- 
	!  Or   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Z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y)
InRowPhasec                 b   | j                   j                  d   j                  dvr| j                  j	                  dd| j                   j                  d   j                  i       | j                   j                  j                          | j                   j                  d   j                  dvry y )NrT   )r   r   z'unexpected-implied-end-tag-in-table-rowr&   )r    r^   r&   r*   r`   r   rB   s    r   !_clear_stack_to_table_row_contextz,InRowPhase._clear_stack_to_table_row_context  s    ii%%b)..nDKK##900499:< II##'')	 ii%%b)..nDr   c                 >    | j                   j                  dd       S )Nr   r   r  r  rB   s    r   ignore_end_tag_trzInRowPhase.ignore_end_tag_tr  s    99--dG-DDDr   c                 R    | j                   j                  d   j                          y r  r  rB   s    r   rr   zInRowPhase.process_eof  r  r   c                 R    | j                   j                  d   j                  |      S r  rd  r   s     r   ri   z#InRowPhase.process_space_characters  r  r   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   rh   zInRowPhase.process_characters  r  r   c                     | j                          | j                  j                  |       | j                  j                  d   | j                  _        | j                  j                  j                  t               y )Nr   )	r	  r    r   r*   r$   r<   r  rq   r   r   s     r   r  zInRowPhase.start_tag_table_cell  sS    ..0		  ' KK..y9		,,33F;r   c                 `    | j                         }| j                  t        d             |s|S y Nr   r  
end_tag_trr  r  s      r   r  z InRowPhase.start_tag_table_other  s/    //1)$/0L r   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   r   zInRowPhase.start_tag_other  r  r   c                 P   | j                         s]| j                          | j                  j                  j	                          | j
                  j                  d   | j
                  _        y | j
                  j                  sJ | j
                  j                  dd|d   i       y )Nr   rN  r&   )
r  r	  r    r^   r   r*   r$   r<   r+   r`   r   s     r   r  zInRowPhase.end_tag_tr  s~    %%'224II##'') $ 2 2? CDKK ;;((((KK##$865=:QRr   c                 `    | j                         }| j                  t        d             |s|S y r  r  r  s      r   r  zInRowPhase.end_tag_table  s1    //1)$/0 L r   c                     | j                   j                  |d   d      r| j                  t        d             |S | j                  j                  dd|d   i       y )Nr&   r   r  r   rN  )r    r  r  r  r*   r`   r   s     r   r  z!InRowPhase.end_tag_table_rowgroup  sR    99%%eFmW%EOO-d34LKK##$865=:QRr   c                 F    | j                   j                  dd|d   i       y )Nzunexpected-end-tag-in-table-rowr&   r   r   s     r   r  zInRowPhase.end_tag_ignore   s#    -f/F	Hr   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   r   zInRowPhase.end_tag_other  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	  r  rr   ri   rh   r  r  r   r  r  r  r  r   r   r   r   r   r   r   r   r   r  r    s    I*E5NH<GSSHE !	%%&	+,
&	("  	z	- 	$&<=	C^T	  Or   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Z ed
ej                   fdefg      Z ede
fdefdefg      Zy)InCellPhasec                     | j                   j                  dd      r| j                  t        d             y | j                   j                  dd      r| j                  t        d             y y )Nr   r   r  r   )r    r  end_tag_table_cellr  rB   s    r   _close_cellzInCellPhase._close_cell  s]    99%%dG%<##$5d$;<YY''g'>##$5d$;< ?r   c                 R    | j                   j                  d   j                          y r  r  rB   s    r   rr   zInCellPhase.process_eof   r  r   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   rh   zInCellPhase.process_characters#  r  r   c                    | j                   j                  dd      s| j                   j                  dd      r| j                          |S | j                  j                  sJ | j                  j                  dd|d   i       y )Nr   r   r  r   z&unexpected-start-tag-out-of-table-cellr&   )r    r  r  r*   r+   r`   r   s     r   r  z!InCellPhase.start_tag_table_other&  sw    II&&tW&=		**4*AL ;;((((KK##865=:QSr   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   r   zInCellPhase.start_tag_other1  r  r   c                    | j                   j                  |d   d      r| j                   j                  |d          | j                   j                  d   j                  |d   k7  rZ| j
                  j                  dd|d   i       	 | j                   j                  j                         }|j                  |d   k(  rn%8| j                   j                  j                          | j                   j                          | j
                  j                  d   | j
                  _
        y | j
                  j                  dd|d   i       y )Nr&   r   r  rT   zunexpected-cell-end-tagr   rN  )r    r  r  r^   r&   r*   r`   r   rL  r$   r<   rH  s      r   r  zInCellPhase.end_tag_table_cell4  s	   99%%eFmW%EII//f>yy&&r*//5=@''-f/FH9922668DyyE&M1 
 		''++-II668 $ 2 28 <DKKKK##$865=:QRr   c                 F    | j                   j                  dd|d   i       y rM  r   r   s     r   r  zInCellPhase.end_tag_ignoreE  rO  r   c                     | j                   j                  |d   d      r| j                          |S | j                  j	                  dd|d   i       y )Nr&   r   r  rN  )r    r  r  r*   r`   r   s     r   end_tag_implyzInCellPhase.end_tag_implyH  sN    99%%eFmW%EL KK##$865=:QRr   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   r   zInCellPhase.end_tag_otherP  ra  r   r   r  r  )r   r   r~  r   r   r;  N)r   r   r   r   r   r  rr   rh   r  r   r  r  r&  r   r   r   r   r   r   r   r   r   r  r    s    I=4G	SFS"OSD !	%%&
/	1"  	)*	7H	3]C  Or   r  c            	           e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Z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y)InSelectPhasec                     | j                   j                  d   j                  dk7  r| j                  j	                  d       y | j                  j
                  sJ y )NrT   r   zeof-in-selectr  rB   s    r   rr   zInSelectPhase.process_eofd  sD    99""2&++v5KK##O4;;((((r   c                 R    |d   dk(  ry | j                   j                  |d          y r  r   r   s     r   rh   z InSelectPhase.process_charactersj  s'    =H$		eFm,r   c                     | j                   j                  d   j                  dk(  r$| j                   j                  j                          | j                   j	                  |       y r  r    r^   r&   r   r   r   s     r   start_tag_optionzInSelectPhase.start_tag_optiono  sG    99""2&++x7II##'')		  'r   c                 b   | j                   j                  d   j                  dk(  r$| j                   j                  j                          | j                   j                  d   j                  dk(  r$| j                   j                  j                          | j                   j	                  |       y )NrT   r  r   r-  r   s     r   start_tag_optgroupz InSelectPhase.start_tag_optgroupu  sz    99""2&++x7II##'')99""2&++z9II##'')		  'r   c                 n    | j                   j                  d       | j                  t        d             y )Nzunexpected-select-in-selectr   )r*   r`   end_tag_selectr  r   s     r   r  zInSelectPhase.start_tag_select|  s)     =>-h78r   c                     | j                   j                  d       | j                  j                  dd      r| j	                  t        d             |S | j                   j                  sJ y )Nzunexpected-input-in-selectr   r  )r*   r`   r    r  r2  r  r+   r   s     r   r  zInSelectPhase.start_tag_input  sX     <=99%%h%A 1( ;<L;;((((r   c                 R    | j                   j                  d   j                  |      S r`  r  r   s     r   rC  zInSelectPhase.start_tag_script  r  r   c                 F    | j                   j                  dd|d   i       y )Nzunexpected-start-tag-in-selectr&   r   r   s     r   r   zInSelectPhase.start_tag_other  #    ,vuV}.E	Gr   c                     | j                   j                  d   j                  dk(  r%| j                   j                  j                          y | j                  j                  dddi       y )NrT   r  unexpected-end-tag-in-selectr&   r    r^   r&   r   r*   r`   r   s     r   end_tag_optionzInSelectPhase.end_tag_option  sO    99""2&++x7II##'')KK##$BVXDVWr   c                    | j                   j                  d   j                  dk(  rJ| j                   j                  d   j                  dk(  r$| j                   j                  j                          | j                   j                  d   j                  dk(  r%| j                   j                  j                          y | j                  j                  dddi       y )NrT   r  r   r8  r&   r9  r   s     r   end_tag_optgroupzInSelectPhase.end_tag_optgroup  s    II##B',,8		''+00J>II##'')99""2&++z9II##'') KK##.0DFr   c                    | j                   j                  dd      r| j                   j                  j                         }|j                  dk7  r4| j                   j                  j                         }|j                  dk7  r4| j
                  j                          y | j
                  j                  sJ | j
                  j                  dd|d   i       y )Nr   r  rN  r&   )	r    r  r^   r   r&   r*   r>   r+   r`   rH  s      r   r2  zInSelectPhase.end_tag_select  s    99%%h%A99**..0D))x'yy..224 ))x'KK,,. ;;((((KK##$865=:QRr   c                 F    | j                   j                  dd|d   i       y )Nr8  r&   r   r   s     r   r   zInSelectPhase.end_tag_other  s      >v@WXr   r   r  r   r   )r   rv  r  rU  N)r   r   r   r   r   rr   rh   r.  r0  r  r  rC  r   r:  r=  r2  r   r   r   r   r   r   r   r   r   r)  r)  `  s    I)-
((9)FGXF	SY !	%%&	#$	'(	#$	(/:	#$"  	>"	%&	>"  Or   r)  c                   j    e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
 edefg      Z ede	fg      Zy)	InSelectInTablePhasec                 R    | j                   j                  d   j                          y Nr   r  rB   s    r   rr   z InSelectInTablePhase.process_eof  s    ;'335r   c                 R    | j                   j                  d   j                  |      S rC  r  r   s     r   rh   z'InSelectInTablePhase.process_characters  s"    {{!!+.AA%HHr   c                 |    | j                   j                  dd|d   i       | j                  t        d             |S )Nz5unexpected-table-element-start-tag-in-select-in-tabler&   r   )r*   r`   r   r  r   s     r   r  z$InSelectInTablePhase.start_tag_table  s>    CU6]#	% 	,X67r   c                 R    | j                   j                  d   j                  |      S rC  r  r   s     r   r   z$InSelectInTablePhase.start_tag_other  s"    {{!!+.@@GGr   c                     | j                   j                  dd|d   i       | j                  j                  |d   d      r| j	                  t        d             |S y )Nz3unexpected-table-element-end-tag-in-select-in-tabler&   r   r  r   )r*   r`   r    r  r   r  r   s     r   r  z"InSelectInTablePhase.end_tag_table  s_    AU6]#	% 99%%eFmW%E0:;L Fr   c                 R    | j                   j                  d   j                  |      S rC  r  r   s     r   r   z"InSelectInTablePhase.end_tag_other  s"    {{!!+.>>uEEr   )r   r   r   r   r   r   r   r   N)r   r   r   r   r   rr   rh   r  r   r  r   r   r   r   r   r   r   rA  rA    sc    I6IHF !	J		" 
 	J		  Or   rA  c                   F    e Zd Z e       Z eg d      Zd Zd Zd Z	d Z
y)InForeignContentPhase),rd  re  rR  r   r  rS  rf  r  r   rV  r  rg  ru  h1h2h3h4h5h6r   r  ri  r  r  r  r^  r[  r  r`  r  r  r  rj  rk  spanrm  rl  subsupr   rn  ro  rc  varc                    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<   y y )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%   rs   replacementss      r   adjust_svg_tag_namesz*InForeignContentPhase.adjust_svg_tag_names  s   %

%
=%
 N%
 N	%

 _%
  2%
 
%
 y%
 _%
 "#8%
 =%
  2%
  !4%
  !4%
 .%
  y!%
" y#%
$ y%%
& y'%
( y)%
* .+%
, y-%
. y/%
0 =1%
2 N3%
4 
5%
6 N7%
8 !"69%
: =;%
< h=%
> N?%
@ _A%
B 
C%
D .E%
F /"I%
N =L((v7E&M )r   c                     |d   dk(  rd|d<   n<| j                   j                  r&t        d |d   D              rd| j                   _        t        j	                  | |       y )NrV   r  u   �c              3   ,   K   | ]  }|t         v  y wr   r  r  s     r   r  z;InForeignContentPhase.process_characters.<locals>.<genexpr>"	  s     I4$..Ir  F)r*   rA   r  r   rh   r   s     r   rh   z(InForeignContentPhase.process_characters	  sR    =H$$E&Mkk%%I5=II&+DKK#  u-r   c                    | j                   j                  d   }|d   | j                  v s+|d   dk(  rt        |d   j	                               h dz  r| j
                  j                  dd|d   i       | j                   j                  d   j                  | j                   j                  k7  r'| j
                  j                  | j                   j                  d         s| j
                  j                  | j                   j                  d         s| j                   j                  j                          | j                   j                  d   j                  | j                   j                  k7  re| j
                  j                  | j                   j                  d         s3| j
                  j                  | j                   j                  d         s|S |j                  t        d   k(  r| j
                  j                  |       nB|j                  t        d   k(  r,| j                  |       | j
                  j                  |       | j
                  j!                  |       |j                  |d	<   | j                   j#                  |       |d
   r*| j                   j                  j                          d|d<   y y )NrT   r&   rh  rV   >   facesizecolorz*unexpected-html-element-in-foreign-contentrH   rZ   rJ   r\   Tr]   )r    r^   breakout_elementssetr   r*   r`   rJ   rc   rP   rR   r   r   r   r  r   r   r   )r%   rs   rv   s      r   rj   z'InForeignContentPhase.process_start_tag&	  s/   yy..r2&MT333f'E&M&&(),EEKK##<vuV}>UW99**2.8899../{{<<yy..r24{{CCyy..r24		''++- 99**2.8899../{{<<yy..r24{{CCyy..r24 L %%H)==44U;'':e+<<))%011%8KK11%8!-!7!7E+II$$U+]#		''++-37/0 $r   c                    t        | j                  j                        dz
  }| j                  j                  d   }|j                  j	                  t
              |d   k7  r!| j                  j                  dd|d   i       	 |j                  j	                  t
              |d   k(  r| j                  j                  | j                  j                  d   k(  rS| j                  j                  j                          | j                  j                  j                  | j                  _        | j                  j                  j                         |k7  r@| j                  j                  sJ | j                  j                  j                         |k7  r@d }	 |S |dz  }| j                  j                  |   }|j                  | j                  j                  k7  rX| j                  j                  j                  |      }	 |S )Nr   rT   r&   rN  r  )rb   r    r^   r&   rL   r	   r*   r`   r<   r$   r  r   r   rJ   rc   rl   )r%   rs   
node_indexr   ru   s        r   rl   z%InForeignContentPhase.process_end_tagC	  s   001A5
yy&&r*9934fEKK##$865=:QRyy""#78E&MI;;$$(:(:?(KKKK%%668(,(9(9(H(HDKK%ii--113t;992222 ii--113t; 	  !OJ99**:6D~~!<!<< KK--==eD	r   N)r   r   r   r   r   re   r  r  rh   rj   rl   r   r   r   rJ  rJ    s.    I! # )8V.8:r   rJ  c                   p    e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Z edefg      Z ede
fg      Zy	)
AfterBodyPhasec                      y r   r   rB   s    r   rr   zAfterBodyPhase.process_eofa	      r   c                 j    | j                   j                  || j                   j                  d          y )NrD   r   r   s     r   rn   zAfterBodyPhase.process_commente	  s'     			  		(?(?(BCr   c                     | j                   j                  d       | j                   j                  d   | j                   _        |S )Nzunexpected-char-after-bodyr   r*   r`   r$   r<   r   s     r   rh   z!AfterBodyPhase.process_charactersj	  s5     <= KK..y9r   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   r   zAfterBodyPhase.start_tag_htmlo	  r  r   c                     | j                   j                  dd|d   i       | j                   j                  d   | j                   _        |S )Nzunexpected-start-tag-after-bodyr&   r   r  r   s     r   r   zAfterBodyPhase.start_tag_otherr	  sC    -f/F	H KK..y9r   c                     | j                   j                  r| j                   j                  d       y | j                   j                  d   | j                   _        y )Nz'unexpected-end-tag-after-body-innerhtmlafter after body)r*   r+   r`   r$   r<   )r%   r&   s     r   r*  zAfterBodyPhase.end_tag_htmlx	  s>    ;;  KK##$MN $ 2 23E FDKKr   c                     | j                   j                  dd|d   i       | j                   j                  d   | j                   _        |S )Nzunexpected-end-tag-after-bodyr&   r   r  r   s     r   r   zAfterBodyPhase.end_tag_other~	  sC    +feFm-D	F KK..y9r   r   N)r   r   r   r   r   rr   rn   rh   r   r   r*  r   r   r   r   r   r   r   r  r  ^	  s]    ID

FG !	 "   678Or   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Z ed	ej                  fd
efdefde	fg      Z ed
efg      Zy)InFramesetPhasec                     | j                   j                  d   j                  dk7  r| j                  j	                  d       y | j                  j
                  sJ y )NrT   r   zeof-in-framesetr  rB   s    r   rr   zInFramesetPhase.process_eof	  sE    99""2&++v5KK##$56;;((((r   c                 :    | j                   j                  d       y )Nzunexpected-char-in-framesetr   r   s     r   rh   z"InFramesetPhase.process_characters	  s     =>r   c                 :    | j                   j                  |       y r   )r    r   r   s     r   r~  z"InFramesetPhase.start_tag_frameset	  s    		  'r   c                     | j                   j                  |       | j                   j                  j                          y r   r+  r   s     r   start_tag_framezInFramesetPhase.start_tag_frame	  s*    		  '		##%r   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   start_tag_noframesz"InFramesetPhase.start_tag_noframes	  r  r   c                 F    | j                   j                  dd|d   i       y )Nz unexpected-start-tag-in-framesetr&   r   r   s     r   r   zInFramesetPhase.start_tag_other	  r  r   c                    | j                   j                  d   j                  dk(  r| j                  j	                  d       n$| j                   j                  j                          | j                  j                  sP| j                   j                  d   j                  dk7  r)| j                  j                  d   | j                  _        y y y )NrT   r   z)unexpected-frameset-in-frameset-innerhtmlr   after frameset)	r    r^   r&   r*   r`   r   r+   r$   r<   r   s     r   end_tag_framesetz InFramesetPhase.end_tag_frameset	  s    99""2&++v5KK##$OPII##'')%%		''+00J> !% 2 23C DDKK ? &r   c                 F    | j                   j                  dd|d   i       y )Nzunexpected-end-tag-in-framesetr&   r   r   s     r   r   zInFramesetPhase.end_tag_other	  r6  r   r   r   r  rR  N)r   r   r   r   r   rr   rh   r~  r  r  r   r  r   r   r   r   r   r   r   r   r   r  r  	  s    I)?(&FI
EG !	%%&	'(	/"	'(	"  	%&  Or   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
 edej                  fdefg      Z ede	fg      Zy	)
AfterFramesetPhasec                      y r   r   rB   s    r   rr   zAfterFramesetPhase.process_eof	  r  r   c                 :    | j                   j                  d       y )Nzunexpected-char-after-framesetr   r   s     r   rh   z%AfterFramesetPhase.process_characters	  s     @Ar   c                 R    | j                   j                  d   j                  |      S r`  r  r   s     r   r  z%AfterFramesetPhase.start_tag_noframes	  r  r   c                 F    | j                   j                  dd|d   i       y )Nz#unexpected-start-tag-after-framesetr&   r   r   s     r   r   z"AfterFramesetPhase.start_tag_other	  s#    1FE&M3J	Lr   c                 T    | j                   j                  d   | j                   _        y )Nafter after frameset)r*   r$   r<   r   s     r   r*  zAfterFramesetPhase.end_tag_html	  s     KK../EFr   c                 F    | j                   j                  dd|d   i       y )Nz!unexpected-end-tag-after-framesetr&   r   r   s     r   r   z AfterFramesetPhase.end_tag_other	  s#    /&%-1H	Jr   r   rR  N)r   r   r   r   r   rr   rh   r  r   r*  r   r   r   r   r   r   r   r   r   r  r  	  sn    IBFLGJ !	%%&	'(" 
 	  Or   r  c                   Z    e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Z ede	fg      Zy	)
AfterAfterBodyPhasec                      y r   r   rB   s    r   rr   zAfterAfterBodyPhase.process_eof	  r   r   c                 d    | j                   j                  || j                   j                         y r   r   r   s     r   rn   z#AfterAfterBodyPhase.process_comment	  r   r   c                 R    | j                   j                  d   j                  |      S r  rd  r   s     r   ri   z,AfterAfterBodyPhase.process_space_characters	  re  r   c                     | j                   j                  d       | j                   j                  d   | j                   _        |S )Nexpected-eof-but-got-charr   r  r   s     r   rh   z&AfterAfterBodyPhase.process_characters	  s5     ;< KK..y9r   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   r   z"AfterAfterBodyPhase.start_tag_html	  r  r   c                     | j                   j                  dd|d   i       | j                   j                  d   | j                   _        |S )Nexpected-eof-but-got-start-tagr&   r   r  r   s     r   r   z#AfterAfterBodyPhase.start_tag_other	  sC    ,vuV}.E	G KK..y9r   c                     | j                   j                  dd|d   i       | j                   j                  d   | j                   _        |S )Nexpected-eof-but-got-end-tagr&   r   r  r   s     r   rl   z#AfterAfterBodyPhase.process_end_tag	  sC    *VU6],C	E KK..y9r   r   N)r   r   r   r   r   rr   rn   ri   rh   r   r   rl   r   r   r   r   r   r  r  	  sH    I<M
F !	 " r   r  c                   f    e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Z ed	e	fd
e
fg      Zy)AfterAfterFramesetPhasec                      y r   r   rB   s    r   rr   z#AfterAfterFramesetPhase.process_eof
  r   r   c                 d    | j                   j                  || j                   j                         y r   r   r   s     r   rn   z'AfterAfterFramesetPhase.process_comment
  r   r   c                 R    | j                   j                  d   j                  |      S r  rd  r   s     r   ri   z0AfterAfterFramesetPhase.process_space_characters
  re  r   c                 :    | j                   j                  d       y )Nr  r   r   s     r   rh   z*AfterAfterFramesetPhase.process_characters
  s     ;<r   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r   r   z&AfterAfterFramesetPhase.start_tag_html
  r  r   c                 R    | j                   j                  d   j                  |      S r`  r  r   s     r   r  z*AfterAfterFramesetPhase.start_tag_noframes
  r  r   c                 F    | j                   j                  dd|d   i       y )Nr  r&   r   r   s     r   r   z'AfterAfterFramesetPhase.start_tag_other
  r6  r   c                 F    | j                   j                  dd|d   i       y )Nr  r&   r   r   s     r   rl   z'AfterAfterFramesetPhase.process_end_tag#
  s#    *VU6],C	Er   r   rR  N)r   r   r   r   r   rr   rn   ri   rh   r   r  r   rl   r   r   r   r   r   r  r  

  sY    I<M=FFGE !	 	'(" r   r  r5   r4   r   r  r?  rF  r   r   r   r  r   r   r   r   r   r   r  )r[   r'  r   r  r  r  c                     | d   j                         j                         z  r2 t        | d         fd| d   j                         D              | d<   y y )NrV   c              3   L   K   | ]  \  }}j                  ||      |f  y wr   )ra   )r  r   r   r  s      r   r  z$adjust_attributes.<locals>.<genexpr>J
  s.      ,Y4>C\c3'/,Ys   !$)r   rU   r#   )rs   r  s    `r   r   r   H
  s\    V}l//11+U6]+ ,YBG-BUBUBW,Y Yf 2r   Nc                 ,    t         |   | |i |dS ||dS )N)rU   r&   rV   r\   )r   )r&   rU   rK   r  s       r   r  r  N
  s3    d (#	  /9#	 r   r   )rk   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]  rw  r  r  r  r  r  r  r  r  r  r)  rA  rJ  r  r  r  r  r  r"   r   r  r   r   r   <module>r     s        % ,"IJb) b)JA% A%HC5 CL!e !H(e (Vb% bJ>% >B>U >BO% Od= =BN5 Nb-u -`BU BJ< <~]u ]@S SlG% GT]E ]@&5 &RrE rj*9U *9Z4e 4n   F"% "J e  F|? ? {	
 + . { I  % . ) % j {  !" .#$ 0 "(+3/6Yr   