
    Bh[                    *   S SK Jr  S SKJrJrJrJrJrJrJ	r	J
r
JrJrJrJrJrJr  S SKJr  S SKJrJr  SNS jr " S S5      rS r " S	 S
5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r  " S S\5      r! " S S\5      r" " S S\5      r# " S S \5      r$ " S! S"\5      r% " S# S$\5      r& " S% S&\5      r' " S' S(\5      r( " S) S*\5      r) " S+ S,\5      r* " S- S.\5      r+ " S/ S0\5      r, " S1 S2\5      r- " S3 S4\5      r. " S5 S6\5      r/ " S7 S8\5      r00 S9\_S:\_S;\_S<\_S=\_S>\_S?\ _S@\!_SA\"_SB\#_SC\$_SD\%_SE\&_SF\'_SG\(_SH\)_SI\*_\+\,\-\.\/\0SJ.Er1SK r2SOSM jr3gL)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                 :    [        U5      R                  " U 40 UD6$ )up  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      B/var/www/html/env/lib/python3.13/site-packages/tinyhtml5/parser.pyr   r      s!    D -.44XHHH    c                       \ rS rSrSrSS jrSS jrS r\S 5       r	S r
S	 rS
 rSS jrSS jrSS jrS rS rS rS rS rSrg)r   ;   zUHTML parser.

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

c           	          [        U5      U l        / U l        [        R	                  5        VVs0 s H  u  p#X#" X R                  5      _M     snnU l        g s  snnf N)r   treeerrors_phasesitemsphases)selfr   nameclss       r   __init__HTMLParser.__init__B   sE     78	CJ==?S?idtSyy11?SSs   ANc                     X l         X0l        [        U4SU 0UD6U l        U R	                  5          U R                  5         g ! [         a#    U R	                  5         U R                  5          g f = f)Nparser)	container	scriptingr   	tokenizerreset	main_loopr   )r&   streamr-   r.   r   s        r   _parseHTMLParser._parseG   s\    ""&vEdEfE

	NN 	JJLNN	s   A *A/.A/c                    U R                   R                  5         SU l        / U l        SU l        U R
                  (       a  U R
                  [        ;   a&  U R                  R                  U R                  l	        OqU R
                  [        ;   a&  U R                  R                  U R                  l	        O7U R
                  S:X  a&  U R                  R                  U R                  l	        O U R                  S   U l        U R                  R                  5         U R!                  5         OU R                  S   U l        S U l        S U l        SU l        g )NFz	no quirks	plaintextbefore htmlinitialT)r!   r0   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   r0   HTMLParser.resetR   s    		$"->>~~/'+~~'B'B$?2'+~~'C'C$;.'+~~'E'E$ ]3DJJJ++-%%'Y/DJ#' r   c                     [        U S5      (       a-  U R                  R                  R                  S   R                  $ g)zvName of the character encoding that was used to decode the input stream.

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

r/       N)hasattrr/   r2   encodingr'   rE   s    r   rJ   HTMLParser.encodingo   s7     4%%>>((11!4999 &r   c                     UR                   UR                  4nU[        S   S4:X  a;  SUR                  ;   =(       a%    UR                  S   R	                  [
        5      S;   $ U[        ;   $ )Nmathmlannotation-xmlrJ   )z	text/htmlzapplication/xhtml+xml)	namespacer'   r   
attributes	translater	   r   r&   element	full_names      r   is_html_integration_point$HTMLParser.is_html_integration_pointy   sq    &&5	H-/?@@g000 7"":.889MN678 ;;;r   c                 D    UR                   UR                  4nU[        ;   $ r    )rO   r'   r   rR   s      r    is_mathml_text_integration_point+HTMLParser.is_mathml_text_integration_point   s"    &&5	BBBr   c                    U R                    GH  nS nUnUGb  UnU R                  R                  (       a  U R                  R                  S   OS nU(       a  UR                  OS nU(       a  UR                  OS nUS   nU[
        R                  :X  a)  U R                  US   UR                  S0 5      5        S nGO[        U R                  R                  5      S:X  d  XPR                  R                  :X  d  U R                  U5      (       aL  U[
        R                  :X  a  US   [        SS/5      ;  d  U[
        R                  [
        R                  4;   dy  U[         S	   :X  a#  US
:X  a  U[
        R                  :X  a	  US   S:X  dI  U R#                  U5      (       a@  U[
        R                  [
        R                  [
        R                  4;   a  U R$                  nOU R&                  S   nU[
        R                  :X  a  UR)                  U5      nOU[
        R                  :X  a  UR+                  U5      nOU[
        R                  :X  a  UR-                  U5      nOqU[
        R.                  :X  a  UR1                  U5      nOKU[
        R2                  :X  a  UR5                  U5      nO%U[
        R6                  :X  a  UR9                  U5      nUb  GM  W[
        R                  :X  d  GM  US   (       d  GM  US   (       a  GM  U R                  SSUS   05        GM     Sn	/ n
U	(       aX  U
R;                  U R$                  5        U R$                  R=                  5       n	U	(       a  U R$                  U
;  d   eU	(       a  MW  g g )NtypedatadatavarsrH   r'   mglyph
malignmarkrM   rN   svgin foreign contentselfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r/   r!   open_elementsrO   r'   r   PARSE_ERRORparse_errorgetlendefault_namespacerX   	START_TAG	frozenset
CHARACTERSSPACE_CHARACTERSr   rU   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_namer\   r?   	reprocessr%   s              r   r1   HTMLParser.main_loop   s   ^^E!NI'!*37993J3JDII++B/PT  /;L** '9EL$5$54! (5,,,$$Yv%6	jRT8UV $IDII3349.))2M2MM>>|LL5??2 =	8\:R0SS5#3#3U5K5K"LL/:h3GG*.>>0v%/77E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,I&'@AA  <^F346c $l 	MM$**%

..0Izz///	 ir   c                 ^    U R                   " U40 UD6  U R                  R                  U5      $ )zfParse a HTML document into a well-formed tree.

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

)r3   r!   get_document)r&   r2   	full_treer   s       r   r   HTMLParser.parse   s*     	F%f%yy%%i00r   c                 `    U R                   " U4SU0UD6  U R                  R                  5       $ )uw   Parse a HTML fragment into a well-formed tree fragment.

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

r-   )r3   r!   get_fragment)r&   r2   r-   r   s       r   parse_fragmentHTMLParser.parse_fragment   s-     	F:i:6:yy%%''r   c                     Uc  0 nU R                   R                  U R                  R                  R	                  5       X45        g r    )r"   rx   r/   r2   position)r&   	errorcoder^   s      r   rg   HTMLParser.parse_error   s7    HDNN11::<iRSr   c                 $    [        U[        5        g r    )adjust_attributesr   r&   rz   s     r   r   #HTMLParser.adjust_mathml_attributes   s    %!9:r   c                 $    [        U[        5        g r    )r   r   r   s     r   r    HTMLParser.adjust_svg_attributes   s    %!67r   c                 $    [        U[        5        g r    )r   r   r   s     r   r   $HTMLParser.adjust_foreign_attributes   s    %!:;r   c                     SnSSSSSSSSSSS	S	S
SS.nU R                   R                  S S S2    H  nUR                  nS nX0R                   R                  S   :X  a!  U R                  (       d   eSnU R                  nUS;   a  U R                  (       d   eU(       d&  UR                  U R                   R
                  :w  a  M  XB;   a  U R                  X$      n  OU(       d  M  U R                  S	   n  O   WU l        g )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htmlr[   rH   T)r   r   r   r   )r!   re   r'   r-   rO   rj   r%   r?   )r&   last	new_modesnode	node_name	new_phases         r   rA   HTMLParser.reset_insertion_mode   s     !$$$#)%!
	  II++DbD1D		IIyy..q11~~%~ NN	BB~~%~DNNdii.I.II% KK	(<=	 KK	2	' 2* 
r   c                 6   US;   d   eU R                   R                  U5        US:X  a&  U R                  R                  U R                  l        O%U R                  R
                  U R                  l        U R                  U l        U R                  S   U l        g )N)RAWTEXTRCDATAr   text)	r!   insert_elementr/   r=   r<   r;   r?   original_phaser%   )r&   rz   content_types      r   parse_rcdata_rawtextHTMLParser.parse_rcdata_rawtext  ss    4444		  '9$#'>>#?#?DNN #'>>#>#>DNN "jj[[(
r   )rC   r:   r-   r"   r9   rD   rB   r   r?   r%   r.   r/   r!   TNF)F)divr    )__name__
__module____qualname____firstlineno____doc__r)   r3   r0   propertyrJ   rU   rX   r1   r   r   rg   r   r   r   rA   r   __static_attributes__ r   r   r   r   ;   sf    T
	 : : :<C=0~1(T
;8<)V)r   r   c           	          U  VVVs0 s H)  u  p[        U[        5      (       a  U4OU  H  nX2_M     M+     snnn$ s  snnnf r    )
isinstancestr)r$   keysvaluekeys       r   dispatchr      sM     ! KD)$44TG$>C 	
> 	   s   0<c                   R    \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rS rS rSrg)Phasei(  z?Base class for helper that implements each phase of processing.)r,   r!   __start_tag_cache__end_tag_cachec                 8    Xl         X l        0 U l        0 U l        g r    )r,   r!   _Phase__start_tag_cache_Phase__end_tag_cache)r&   r,   r!   s      r   r)   Phase.__init__,  s    	!#!r   c                     [         er    )NotImplementedErrorrE   s    r   ry   Phase.process_eof2  s    !!r   c                 h    U R                   R                  XR                   R                  S   5        g )Nr[   r!   insert_commentre   r   s     r   ru   Phase.process_comment5  s%     			  		(?(?(CDr   c                 :    U R                   R                  S5        g )Nzunexpected-doctyper,   rg   r   s     r   rw   Phase.process_doctype:  s     45r   c                 @    U R                   R                  US   5        g Nr]   r!   insert_textr   s     r   ro   Phase.process_characters=      		eFm,r   c                 @    U R                   R                  US   5        g r   r   r   s     r   rp   Phase.process_space_characters@  r   r   c                    US   nX R                   ;   a  U R                   U   nOU R                  R                  U[        U 5      R                  5      =o0R                   U'   [        U R                   5      [        U R                  5      S-  :  ah  U R                   R                  [        [        U R                   5      5      5        [        U R                   5      [        U R                  5      S-  :  a  Mh  U" X5      $ Nr'   g?)	r   start_tag_handlerrh   r\   start_tag_otherri   popnextiterr&   rz   r'   functions       r   rq   Phase.process_start_tagC  s    V} )))--d3H6:6L6L6P6Pd4j0072 2H--d3 d,,-D4J4J0Kc0QQ&&**4T5K5K0L+MN d,,-D4J4J0Kc0QQ $$r   c                 v   U R                   R                  (       d$  US   S:X  a  U R                   R                  S5        US   R                  5        HR  u  p#X R                  R
                  S   R                  ;  d  M-  X0R                  R
                  S   R                  U'   MT     SU R                   l        g )Nr'   r   znon-html-rootr]   rH   F)r,   r9   rg   r$   r!   re   rP   r&   rz   attrr   s       r   start_tag_htmlPhase.start_tag_htmlR  s    {{**uV}/FKK##O4 !=..0KD992215@@@>C		''*55d; 1 ',#r   c                    US   nX R                   ;   a  U R                   U   nOU R                  R                  U[        U 5      R                  5      =o0R                   U'   [        U R                   5      [        U R                  5      S-  :  ah  U R                   R                  [        [        U R                   5      5      5        [        U R                   5      [        U R                  5      S-  :  a  Mh  U" X5      $ r   )	r   end_tag_handlerrh   r\   end_tag_otherri   r   r   r   r   s       r   rs   Phase.process_end_tag\  s    V} '''++D1H484H4H4L4Ld4j..50 0H++D1 d**+c$2F2F.G#.MM$$((d43G3G.H)IJ d**+c$2F2F.G#.MM $$r   )r   r   r,   r!   N)r   r   r   r   r   	__slots__r)   ry   ru   rw   ro   rp   rq   r   rs   r   r   r   r   r   r   (  s8    IJI""E
6--%,%r   r   c                   R    \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	 rS
rg)InitialPhaseil  c                     g r    r   r   s     r   rp   %InitialPhase.process_space_characterso      r   c                 b    U R                   R                  XR                   R                  5        g r    r!   r   r   r   s     r   ru   InitialPhase.process_commentr      		  		(:(:;r   c                    US   nUS   nUS   nUS   nUS:w  d  Uc	  Ub!  US:w  a  U R                   R                  S5        Uc  SnU R                  R                  U5        US:w  a  UR	                  [
        5      nU(       aY  US   S:w  dP  UR                  S	5      (       d:  US
;   d4  UR                  S5      (       a  Ub  U(       a&  UR                  5       S:X  a  SU R                   l        O@UR                  S5      (       d  UR                  S5      (       a  Ub  SU R                   l        U R                   R                  S   U R                   l
        g )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 quirksr7   )r,   rg   r!   insert_doctyperQ   r	   
startswithlowerr:   r%   r?   )r&   rz   r'   	public_id	system_idr
  s         r   rw   InitialPhase.process_doctypeu  se   V}*%	*%		"FNi3%)7L*LKK##$56I		  '?!++,@AI5=F2$$8899 99t  & & $$=> > !ioo/LM-5DKK*""9: : "";< < #-=DKK* KK..}=r   c                 v    SU R                   l        U R                   R                  S   U R                   l        g )Nr  r7   )r,   r:   r%   r?   rE   s    r   anything_elseInitialPhase.anything_else  s)    )1& KK..}=r   c                 \    U R                   R                  S5        U R                  5         U$ )Nzexpected-doctype-but-got-charsr,   rg   r  r   s     r   ro   InitialPhase.process_characters  s&     @Ar   c                 h    U R                   R                  SSUS   05        U R                  5         U$ )Nz"expected-doctype-but-got-start-tagr'   r  r   s     r   rq   InitialPhase.process_start_tag  s4    065=2I	Kr   c                 h    U R                   R                  SSUS   05        U R                  5         U$ )Nz expected-doctype-but-got-end-tagr'   r  r   s     r   rs   InitialPhase.process_end_tag  s4    .v0G	Ir   c                 Z    U R                   R                  S5        U R                  5         g)Nzexpected-doctype-but-got-eofTr  rE   s    r   ry   InitialPhase.process_eof  s$     >?r   r   N)r   r   r   r   tupler   rp   ru   rw   r  ro   rq   rs   ry   r   r   r   r   r   r   l  s3    I<`>D>
r   r   c                   L    \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	rg
)BeforeHtmlPhasei  c                     U R                   R                  [        SS5      5        U R                  R                  S   U R                  l        g )Nr   rk   r   )r!   insert_rootimplied_tag_tokenr,   r%   r?   rE   s    r   r@   $BeforeHtmlPhase._insert_html_element  s7    		/DE KK..}=r   c                 $    U R                  5         gNTr@   rE   s    r   ry   BeforeHtmlPhase.process_eof  s    !!#r   c                 b    U R                   R                  XR                   R                  5        g r    r  r   s     r   ru   BeforeHtmlPhase.process_comment  r  r   c                     g r    r   r   s     r   rp   (BeforeHtmlPhase.process_space_characters   r  r   c                 &    U R                  5         U$ r    r(  r   s     r   ro   "BeforeHtmlPhase.process_characters  s    !!#r   c                 Z    US   S:X  a  SU R                   l        U R                  5         U$ )Nr'   r   T)r,   r9   r@   r   s     r   rq   !BeforeHtmlPhase.process_start_tag  s+    =F"*.DKK'!!#r   c                 |    US   S;  a"  U R                   R                  SSUS   05        g U R                  5         U$ )Nr'   r   r   r   brzunexpected-end-tag-before-html)r,   rg   r@   r   s     r   rs   BeforeHtmlPhase.process_end_tag  sC    = >>KK##065=2IK %%'Lr   r   N)r   r   r   r   r  r   r@   ry   ru   rp   ro   rq   rs   r   r   r   r   r!  r!    s,    I><r   r!  c                       \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	 r\" S
\	4S\
4/5      r\" S\4/5      rSrg)BeforeHeadPhasei  c                 :    U R                  [        SS5      5        g)Nr   rk   Tstart_tag_headr$  rE   s    r   ry   BeforeHeadPhase.process_eof  s    -fkBCr   c                     g r    r   r   s     r   rp   (BeforeHeadPhase.process_space_characters  r  r   c                 <    U R                  [        SS5      5        U$ Nr   rk   r9  r   s     r   ro   "BeforeHeadPhase.process_characters       -fkBCr   c                 R    U R                   R                  S   R                  U5      $ Nr   r,   r%   rq   r   s     r   r   BeforeHeadPhase.start_tag_html$  "    {{!!),>>uEEr   c                     U R                   R                  U5        U R                   R                  S   U R                   l        U R                  R
                  S   U R                  l        g )Nr[   in head)r!   r   re   head_elementr,   r%   r?   r   s     r   r:  BeforeHeadPhase.start_tag_head'  sJ    		  '!%!8!8!<		 KK..y9r   c                 <    U R                  [        SS5      5        U$ r?  r9  r   s     r   r   BeforeHeadPhase.start_tag_other,  rA  r   c                 <    U R                  [        SS5      5        U$ r?  r9  r   s     r   end_tag_imply_head"BeforeHeadPhase.end_tag_imply_head0  rA  r   c                 F    U R                   R                  SSUS   05        g )Nzend-tag-after-implied-rootr'   r   r   s     r   r   BeforeHeadPhase.end_tag_other4  s      <vuV}>UVr   r   r   r3  r   N)r   r   r   r   r  r   ry   rp   ro   r   r:  r   rN  r   r   r   r   r   r   r   r   r7  r7    so    IF:
W !	 	 " 
 	');<  Or   r7  c                       \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	 rS
 rS rS rS rS rS rS r\" S\4S\4S\4S\4S\4S\
4S\4S\	4/5      r\" S\4S\4/5      rSrg)InHeadPhaseiA  c                 $    U R                  5         gr'  r  rE   s    r   ry   InHeadPhase.process_eofE      r   c                 &    U R                  5         U$ r    rU  r   s     r   ro   InHeadPhase.process_charactersI      r   c                 R    U R                   R                  S   R                  U5      $ rC  rD  r   s     r   r   InHeadPhase.start_tag_htmlM  rF  r   c                 :    U R                   R                  S5        g )Nz!two-heads-are-not-better-than-oner   r   s     r   r:  InHeadPhase.start_tag_headP  s     CDr   c                     U R                   R                  U5        U R                   R                  R                  5         SUS'   g NTrd   r!   r   re   r   r   s     r   start_tag_base_link_command'InHeadPhase.start_tag_base_link_commandS  5    		  '		##%+/'(r   c                    U R                   R                  U5        U R                   R                  R                  5         SUS'   US   nU R                  R
                  R                  R                  S   S:X  a  SU;   a3  U R                  R
                  R                  R                  US   5        g SU;   a  SU;   a  US   R                  5       S	:X  a~  [        R                  " US   R                  S
5      5      n[        R                  " U5      nUR                  5       nU R                  R
                  R                  R                  U5        g g g g g )NTrd   r]   r   	tentativecharsetcontentz
http-equivzcontent-typezutf-8)r!   r   re   r   r,   r/   r2   rJ   change_encodingr  r   EncodingBytesencodeContentAttributeParserr   )r&   rz   rP   r]   r,   codecs         r   start_tag_meta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                 <    U R                   R                  US5        g )Nr   r,   r   r   s     r   start_tag_titleInHeadPhase.start_tag_titlem  s    ((9r   c                 <    U R                   R                  US5        g Nr   rq  r   s     r   start_tag_noframes_style$InHeadPhase.start_tag_noframes_stylep  s    ((	:r   c                     U R                   R                  (       a  U R                   R                  US5        g U R                  R	                  U5        U R                   R
                  S   U R                   l        g )Nr   in head noscript)r,   r.   r   r!   r   r%   r?   r   s     r   start_tag_noscriptInHeadPhase.start_tag_noscriptt  sQ    ;;  KK,,UI>II$$U+ $ 2 23E FDKKr   c                 F   U R                   R                  U5        U R                  R                  R                  U R                  R                  l        U R                  R                  U R                  l        U R                  R                  S   U R                  l        g )Nr   )	r!   r   r,   r/   script_data_stater<   r?   r   r%   r   s     r   start_tag_scriptInHeadPhase.start_tag_script{  sg    		  '&*kk&;&;&M&M#%)[[%6%6" KK..v6r   c                 &    U R                  5         U$ r    rU  r   s     r   r   InHeadPhase.start_tag_other  rZ  r   c                     U R                   R                  R                  R                  5       nUR                  S:X  d   SUR                  -  5       eU R                   R
                  S   U R                   l        g )Nr   zExpected head got %s
after headr,   r!   re   r   r'   r%   r?   r&   rz   r   s      r   end_tag_headInHeadPhase.end_tag_head  s\    {{--113yyF"F$:TYY$FF" KK..|<r   c                 &    U R                  5         U$ r    rU  r   s     r   end_tag_html_body_br InHeadPhase.end_tag_html_body_br  rZ  r   c                 F    U R                   R                  SSUS   05        g Nunexpected-end-tagr'   r   r   s     r   r   InHeadPhase.end_tag_other        4vuV}6MNr   c                 8    U R                  [        S5      5        g )Nr   )r  r$  rE   s    r   r  InHeadPhase.anything_else  s    +F34r   r   title)noframesstylenoscriptscript)basebasefontbgsoundcommandlinkmetar   )r4  r   r   r   N)r   r   r   r   r  r   ry   ro   r   r:  rb  rn  rr  rv  rz  r~  r   r  r  r   r  r   r   r   r   r   r   r   rS  rS  A  s    IFE0
D*:;G7=
O5 !	 	/"	 89	'(	#$	;	$	&	 	 
" 
 		!56  Or   rS  c                       \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	 rS
 rS rS rS r\" S\
4S\4S\4/5      r\" S\4S\4/5      rSrg)InHeadNoscriptPhasei  c                 Z    U R                   R                  S5        U R                  5         g)Nzeof-in-head-noscriptTr  rE   s    r   ry   InHeadNoscriptPhase.process_eof  s$     67r   c                 R    U R                   R                  S   R                  U5      $ NrH  )r,   r%   ru   r   s     r   ru   #InHeadNoscriptPhase.process_comment  "    {{!!),<<UCCr   c                 \    U R                   R                  S5        U R                  5         U$ )Nzchar-in-head-noscriptr  r   s     r   ro   &InHeadNoscriptPhase.process_characters  s&     78r   c                 R    U R                   R                  S   R                  U5      $ r  r,   r%   rp   r   s     r   rp   ,InHeadNoscriptPhase.process_space_characters  "    {{!!),EEeLLr   c                 R    U R                   R                  S   R                  U5      $ rC  rD  r   s     r   r   "InHeadNoscriptPhase.start_tag_html  rF  r   c                 R    U R                   R                  S   R                  U5      $ r  rD  r   s     r   rb  /InHeadNoscriptPhase.start_tag_base_link_command  rF  r   c                 F    U R                   R                  SSUS   05        g Nunexpected-start-tagr'   r   r   s     r   start_tag_head_noscript+InHeadNoscriptPhase.start_tag_head_noscript        6v8OPr   c                 h    U R                   R                  SSUS   05        U R                  5         U$ Nzunexpected-inhead-noscript-tagr'   r  r   s     r   r   #InHeadNoscriptPhase.start_tag_other  4    ,vuV}.E	Gr   c                     U R                   R                  R                  R                  5       nUR                  S:X  d   SUR                   35       eU R                   R
                  S   U R                   l        g )Nr  zExpected noscript got rH  r  r  s      r   end_tag_noscript$InHeadNoscriptPhase.end_tag_noscript  s^    {{--113yyJ&L*@(LL& KK..y9r   c                 h    U R                   R                  SSUS   05        U R                  5         U$ r  r  r   s     r   
end_tag_brInHeadNoscriptPhase.end_tag_br  r  r   c                 F    U R                   R                  SSUS   05        g r  r   r   s     r   r   !InHeadNoscriptPhase.end_tag_other  r  r   c                 8    U R                  [        S5      5        g )Nr  )r  r$  rE   s    r   r  !InHeadNoscriptPhase.anything_else  s    /
;<r   r   )r  r  r  r  r  r  )r   r  r  r4  r   N)r   r   r   r   r  r   ry   ru   ro   rp   r   rb  r  r   r  r  r   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                       \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	 rS
 rS rS r\" S\4S\	4S\
4S\4S\4/5      r\" S\4/5      rSrg)AfterHeadPhasei  c                 $    U R                  5         gr'  rU  rE   s    r   ry   AfterHeadPhase.process_eof  rW  r   c                 &    U R                  5         U$ r    rU  r   s     r   ro   !AfterHeadPhase.process_characters  rZ  r   c                 R    U R                   R                  S   R                  U5      $ rC  rD  r   s     r   r   AfterHeadPhase.start_tag_html  rF  r   c                     SU R                   l        U R                  R                  U5        U R                   R                  S   U R                   l        g )NFr   )r,   rD   r!   r   r%   r?   r   s     r   start_tag_bodyAfterHeadPhase.start_tag_body  s;    "'		  ' KK..y9r   c                     U R                   R                  U5        U R                  R                  S   U R                  l        g )Nr   )r!   r   r,   r%   r?   r   s     r   start_tag_frameset!AfterHeadPhase.start_tag_frameset  s/    		  ' KK..}=r   c                    U R                   R                  SSUS   05        U R                  R                  R	                  U R                  R
                  5        U R                   R                  S   R                  U5        U R                  R                  S S S2    H:  nUR                  S:X  d  M  U R                  R                  R                  U5          g    g )Nz#unexpected-start-tag-out-of-my-headr'   rH  r[   r   )
r,   rg   r!   re   rx   rI  r%   rq   r'   remover  s      r   start_tag_from_head"AfterHeadPhase.start_tag_from_head  s    1FE&M3J	L		&&tyy'='=>9%77>II++DbD1DyyF"		''..t4 2r   c                 F    U R                   R                  SSUS   05        g r  r   r   s     r   r:  AfterHeadPhase.start_tag_head  r  r   c                 &    U R                  5         U$ r    rU  r   s     r   r   AfterHeadPhase.start_tag_other  rZ  r   c                 &    U R                  5         U$ r    rU  r   s     r   r  #AfterHeadPhase.end_tag_html_body_br  rZ  r   c                 F    U R                   R                  SSUS   05        g r  r   r   s     r   r   AfterHeadPhase.end_tag_other  r  r   c                     U R                   R                  [        SS5      5        U R                  R                  S   U R                  l        SU R                  l        g )Nr   rk   r   T)r!   r   r$  r,   r%   r?   rD   rE   s    r   r  AfterHeadPhase.anything_else  sC    		  !26;!GH KK..y9"&r   r   r   r   )	r  r  r  r  r  r  r  r  r  r   )r   r   r4  r   N)r   r   r   r   r  r   ry   ro   r   r  r  r  r:  r   r  r   r  r   r   r   r   r   r   r   r  r    s    IF:
>QO'
 !	 	 	'(
0	2	 "  	!56  Or   r  c                     ^  \ rS rSrSrU 4S jrS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1S0 r2S1 r3S2 r4S3 r5S4 r6S5 r7\8" / S6\9Rt                  4PS7\4PS8\4PS9\4PS:\4P\;\4PS;\4PS<\4PS=\4PS>\4PS?\4PS@\4PSA\4PSB\4PSC\4PSD\4PSE\4PSF\4PSG\4PSH\4PSI\4PSJ\ 4PSK\!4PSL\"4PSM\#4PSN\$4PSO\%4PSP\'4PSQ\(4PSR\&4PSS\)4PST\*4PSU\+4P5      r<\8" S8\.4S6\/4SV\04S<\14SW\-4SX\24\;\34SY\44SC\54SZ\64/
5      r=Sr>U =r?$ )[InBodyPhasei(  )rp   c                 H   > [         TU ]  " U0 UD6  U R                  U l        g r    )superr)    process_space_characters_non_prerp   r&   argsr   	__class__s      r   r)   InBodyPhase.__init__-  s#    $)&)(,(M(M%r   c                     UR                   UR                   :H  =(       a9    UR                  UR                  :H  =(       a    UR                  UR                  :H  $ r    )r'   rO   rP   )r&   node1node2s      r   is_matching_formatting_element*InBodyPhase.is_matching_formatting_element2  sE    JJ%**$ 1OOu.1 0 00	2r   c                    U R                   R                  U5        U R                   R                  S   n/ nU R                   R                  S S S2    H7  nU[        L a    O-U R                  XB5      (       d  M&  UR                  U5        M9     [        U5      S::  d   e[        U5      S:X  a(  U R                   R                  R                  US   5        U R                   R                  R                  U5        g )Nr[      )	r!   r   re   active_formatting_elementsr   r  rx   ri   r  )r&   rz   rS   matching_elementsr   s        r   add_formatting_element"InBodyPhase.add_formatting_element8  s    		  '))))"-II882>Dv~44TCC!((.	 ? $%*** !Q&II00778I"8MN		,,33G<r   c                     [        S5      nU R                  R                  S S S2    H0  nUR                  U;  d  M  U R                  R                  S5          g    g )N)dddtlipr   r   r   r   r   r   r   r   r[   z expected-closing-tag-but-got-eof)rl   r!   re   r'   r,   rg   )r&   allowed_elementsr   s      r   ry   InBodyPhase.process_eofI  sT    $ &  II++DbD1Dyy 00''(JK 2r   c                    US   nU R                   U l        UR                  S5      (       aX  U R                  R                  S   R
                  S;   a1  U R                  R                  S   R                  5       (       d  USS  nU(       a6  U R                  R                  5         U R                  R                  U5        g g )Nr]   
r[   )prelistingtextarear   )	r  rp   r  r!   re   r'   has_content&reconstruct_active_formatting_elementsr   )r&   rz   r]   s      r   %process_space_characters_drop_newline1InBodyPhase.process_space_characters_drop_newlineT  s     V}(,(M(M%OOD!!II##B',,0NNII++B/;;==8DII<<>II!!$' r   c                    US   S:X  a  g U R                   R                  5         U R                   R                  US   5        U R                  R                  (       a-  [        S US    5       5      (       a  SU R                  l        g g g )Nr]    c              3   2   #    U  H  o[         ;  v   M     g 7fr    r   .0chars     r   	<genexpr>1InBodyPhase.process_characters.<locals>.<genexpr>h  s      +H9F,,   F)r!   r   r   r,   rD   anyr   s     r   ro   InBodyPhase.process_charactersa  sz    =H$		88:		eFm,;;""s +H9>v+H (H (H&+DKK#(H"r   c                 t    U R                   R                  5         U R                   R                  US   5        g r   )r!   r   r   r   s     r   r  ,InBodyPhase.process_space_characters_non_prel  s(    		88:		eFm,r   c                 R    U R                   R                  S   R                  U5      $ r  rD  r   s     r   start_tag_process_in_head%InBodyPhase.start_tag_process_in_headp  rF  r   c                    U R                   R                  SSS05        [        U R                  R                  5      S:X  d'  U R                  R                  S   R
                  S:w  a  U R                   R                  (       d   eg SU R                   l        US   R                  5        HR  u  p#X R                  R                  S   R                  ;  d  M-  X0R                  R                  S   R                  U'   MT     g )Nr  r'   r   r   Fr]   )
r,   rg   ri   r!   re   r'   r-   rD   r$   rP   r   s       r   r  InBodyPhase.start_tag_bodys  s     68HI		''(A-		''*//69;;((((&+DKK#$V}224yy66q9DDDBGII++A.99$?  5r   c                    U R                   R                  SSS05        [        U R                  R                  5      S:X  d'  U R                  R                  S   R
                  S:w  a  U R                   R                  (       d   eg U R                   R                  (       d  g U R                  R                  S   R                  (       aI  U R                  R                  S   R                  R                  U R                  R                  S   5        U R                  R                  S   R
                  S:w  aM  U R                  R                  R                  5         U R                  R                  S   R
                  S:w  a  MM  U R                  R                  U5        U R                   R                  S   U R                   l        g )	Nr  r'   r   r   r   r[   r   r   )r,   rg   ri   r!   re   r'   r-   rD   parentremove_childr   r   r%   r?   r   s     r   r  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                     U R                   R                  SSS9(       a  U R                  [        S5      5        U R                   R	                  U5        g Nr  buttonvariant)r!   element_in_scope	end_tag_pr$  r   r   s     r   start_tag_close_pInBodyPhase.start_tag_close_p  s=    99%%c8%<NN,S12		  'r   c                     U R                   R                  SSS9(       a  U R                  [        S5      5        U R                   R	                  U5        SU R
                  l        U R                  U l        g )Nr  r  r  F)	r!   r  r   r$  r   r,   rD   r  rp   r   s     r   start_tag_pre_listing!InBodyPhase.start_tag_pre_listing  sW    99%%c8%<NN,S12		  '"'(,(R(R%r   c                 p   U R                   R                  (       a  U R                  R                  SSS05        g U R                   R	                  SSS9(       a  U R                  [        S5      5        U R                   R                  U5        U R                   R                  S   U R                   l        g )Nr  r'   formr  r  r  r[   )	r!   form_elementr,   rg   r  r   r$  r   re   r   s     r   start_tag_formInBodyPhase.start_tag_form  s    99!!KK##$:VV<LMyy))#x)@056II$$U+%)YY%<%<R%@DII"r   c                 J   SU R                   l        S/SS/SS/S.nX!S      n[        U R                  R                  5       Hu  nUR
                  U;   a:  U R                   R                  R                  [        UR
                  5      5          O,UR                  [        ;   d  Mc  UR
                  S;  d  Mu    O   U R                  R                  SS	S
9(       a.  U R                   R                  R                  [        S5      5        U R                  R                  U5        g )NFr  r  r  )r  r  r  r'   )addressr   r  r  r  r  )r,   rD   reversedr!   re   r'   r?   rs   r$  
name_tupler   r  r   )r&   rz   stop_names_map
stop_namesr   s        r   start_tag_list_itemInBodyPhase.start_tag_list_item  s    "'!%tTl4,O#&M2
TYY445DyyJ&!!11%dii02#33II%<< 6 99%%c8%<KK--.?.DE		  'r   c                    U R                   R                  SSS9(       a  U R                  [        S5      5        U R                   R	                  U5        U R
                  R                  R                  U R
                  R                  l        g r  )	r!   r  r   r$  r   r,   r/   r>   r<   r   s     r   start_tag_plaintextInBodyPhase.start_tag_plaintext  s_    99%%c8%<NN,S12		  '&*kk&;&;&K&K#r   c                    U R                   R                  SSS9(       a  U R                  [        S5      5        U R                   R                  S   R
                  [        ;   aE  U R                  R                  SSUS   05        U R                   R                  R                  5         U R                   R                  U5        g )Nr  r  r  r[   r  r'   )r!   r  r   r$  re   r'   r   r,   rg   r   r   r   s     r   start_tag_headingInBodyPhase.start_tag_heading  s    99%%c8%<NN,S1299""2&++/??KK##$:VU6]<STII##'')		  'r   c                    U R                   R                  S5      nU(       a  U R                  R                  SSSS.5        U R	                  [        S5      5        X R                   R                  ;   a%  U R                   R                  R                  U5        X R                   R                  ;   a%  U R                   R                  R                  U5        U R                   R                  5         U R                  U5        g )Na$unexpected-start-tag-implies-end-tag	startNameendName)r!   %element_in_active_formatting_elementsr,   rg   end_tag_formattingr$  re   r  r  r   r  )r&   rz   afe_a_elements      r   start_tag_a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    U R                   R                  5         U R                  U5        g r    )r!   r   r  r   s     r   start_tag_formatting InBodyPhase.start_tag_formatting  s     		88:##E*r   c                 @   U R                   R                  5         U R                   R                  S5      (       aS  U R                  R	                  SSSS.5        U R                  [        S5      5        U R                   R                  5         U R                  U5        g )Nnobrr;  r<  )r!   r   r  r,   rg   rs   r$  r  r   s     r   start_tag_nobrInBodyPhase.start_tag_nobr  sx    		88:99%%f--KK##6$8:   !26!:;II<<>##E*r   c                 F   U R                   R                  S5      (       a;  U R                  R                  SSSS.5        U R	                  [        S5      5        U$ U R                   R                  5         U R                   R                  U5        SU R                  l        g )Nr  r;  r<  F)	r!   r  r,   rg   rs   r$  r   r   rD   r   s     r   start_tag_buttonInBodyPhase.start_tag_button  s}    99%%h//KK##6&8<>   !28!<=LII<<>II$$U+&+DKK#r   c                     U R                   R                  5         U R                   R                  U5        U R                   R                  R	                  [
        5        SU R                  l        g r   )r!   r   r   r  rx   r   r,   rD   r   s     r   start_tag_applet_marquee_object+InBodyPhase.start_tag_applet_marquee_object  sH    		88:		  '		,,33F;"'r   c                    U R                   R                  SSS9(       a  U R                  [        S5      5        U R                   R	                  5         SU R
                  l        U R
                  R                  US5        g )Nr  r  r  Fr   )r!   r  r   r$  r   r,   rD   r   r   s     r   start_tag_xmpInBodyPhase.start_tag_xmp  s[    99%%c8%<NN,S12		88:"'((	:r   c                 R   U R                   R                  S:w  a9  U R                  R                  SSS9(       a  U R	                  [        S5      5        U R                  R                  U5        SU R                   l        U R                   R                  S   U R                   l	        g )Nr  r  r  r  Fr   )
r,   r:   r!   r  rs   r$  r   rD   r%   r?   r   s     r   start_tag_tableInBodyPhase.start_tag_table  sx    ;;))X5yy))#x)@$$%6s%;<		  '"' KK..z:r   c                     U R                   R                  5         U R                   R                  U5        U R                   R                  R	                  5         SUS'   SU R
                  l        g )NTrd   F)r!   r   r   re   r   r,   rD   r   s     r   start_tag_void_formatting%InBodyPhase.start_tag_void_formatting  sQ    		88:		  '		##%+/'("'r   c                     U R                   R                  nU R                  U5        SUS   ;   a1  US   S   R                  [        5      S:X  a  X R                   l        g g g )Nr\   r]   hidden)r,   rD   rX  rQ   r	   )r&   rz   rD   s      r   start_tag_inputInBodyPhase.start_tag_input	  s]    kk--&&u-eFm#ff%//0DEQ&1KK# R $r   c                     U R                   R                  U5        U R                   R                  R                  5         SUS'   g r`  ra  r   s     r   start_tag_param_source"InBodyPhase.start_tag_param_source  rd  r   c                     U R                   R                  SSS9(       a  U R                  [        S5      5        U R                   R	                  U5        U R                   R
                  R                  5         SUS'   SU R                  l        g )Nr  r  r  Trd   F)	r!   r  r   r$  r   re   r   r,   rD   r   s     r   start_tag_hrInBodyPhase.start_tag_hr  sj    99%%c8%<NN,S12		  '		##%+/'("'r   c           	          U R                   R                  SSSS.5        U R                  [        SSUS   US   S95        g )	Nzunexpected-start-tag-treated-asimageimgoriginalNamenewNamerk   r]   rc   rP   self_closing)r,   rg   rq   r$  r   s     r   start_tag_imageInBodyPhase.start_tag_image  sJ    -$7	9 	0;5=}- / 	0r   c           	         U R                   R                  SSS05        U R                  R                  (       a  g 0 nSUS   ;   a  US   S   US'   U R	                  [        SSUS95        U R	                  [        S	S5      5        U R	                  [        S
S5      5        SUS   ;   a	  US   S   nOSnU R                  [        R                  US.5        US   R                  5       nSU;   a  US	 SU;   a  US	 SUS'   U R	                  [        SSUUS   S95        U R                  [        S
5      5        U R	                  [        S	S5      5        U R                  [        S5      5        g )Nzdeprecated-tagr'   isindexactionr]   r'  rk   )rP   hrlabelpromptz3This is a searchable index. Enter search keywords: r\   r]   inputrc   rj  )r,   rg   r!   r(  rq   r$  ro   r   rm   copyrs   )r&   rz   
form_attrsrs  rP   s        r   start_tag_isindex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                     U R                   R                  U5        U R                  R                  R                  U R                  R                  l        U R                  U l        SU R                  l        g r   )	r!   r   r,   r/   r;   r<   r  rp   rD   r   s     r   start_tag_textareaInBodyPhase.start_tag_textareaE  sP    		  '&*kk&;&;&H&H#(,(R(R%"'r   c                 H    SU R                   l        U R                  U5        g r   )r,   rD   start_tag_rawtextr   s     r   start_tag_iframeInBodyPhase.start_tag_iframeK  s    "'u%r   c                     U R                   R                  (       a  U R                  U5        g U R                  U5        g r    )r,   r.   r~  r   r   s     r   rz  InBodyPhase.start_tag_noscriptO  s+    ;;  ""5)  'r   c                 <    U R                   R                  US5        g ru  rq  r   s     r   r~  InBodyPhase.start_tag_rawtextU  s    ((	:r   c                 ,   U R                   R                  S   R                  S:X  a.  U R                  R                  R                  [        S5      5        U R                   R                  5         U R                  R                   R                  U5        g Nr[   option)	r!   re   r'   r,   r?   rs   r$  r   r   r   s     r   start_tag_optInBodyPhase.start_tag_optX  se    99""2&++x7KK--.?.IJ		88:''.r   c                    U R                   R                  5         U R                   R                  U5        SU R                  l        U R                  R
                  U R                  R                  S   U R                  R                  S   U R                  R                  S   U R                  R                  S   U R                  R                  S   U R                  R                  S   4;   a)  U R                  R                  S   U R                  l        g U R                  R                  S	   U R                  l        g )
NFr   r   r   r   r   r   in select in tabler   )r!   r   r   r,   rD   r?   r%   r   s     r   start_tag_selectInBodyPhase.start_tag_select^  s    		88:		  '"';;"":.""<0""#45""?3""8,""9-!/ / !% 2 23G HDKK $ 2 2; ?DKKr   c                 2   U R                   R                  S5      (       a\  U R                   R                  5         U R                   R                  S   R                  S:w  a  U R
                  R                  S5        U R                   R                  U5        g )Nrubyr[   zrp-or-rt-tag-not-in-ruby-scope)r!   r  generate_implied_end_tagsre   r'   r,   rg   r   r   s     r   start_tag_rp_rtInBodyPhase.start_tag_rp_rtm  si    99%%f--II//1yy&&r*//69''(HI		  'r   c                 Z   U R                   R                  5         U R                  R                  U5        U R                  R	                  U5        [
        S   US'   U R                   R                  U5        US   (       a*  U R                   R                  R                  5         SUS'   g g )NrM   rO   rc   Trd   )	r!   r   r,   r   r   r   r   re   r   r   s     r   start_tag_mathInBodyPhase.start_tag_matht  s    		88:,,U3--e4'1k		  ' II##'')/3E+,  r   c                 Z   U R                   R                  5         U R                  R                  U5        U R                  R	                  U5        [
        S   US'   U R                   R                  U5        US   (       a*  U R                   R                  R                  5         SUS'   g g )Nra   rO   rc   Trd   )	r!   r   r,   r   r   r   r   re   r   r   s     r   start_tag_svgInBodyPhase.start_tag_svg  s    		88:))%0--e4'.k		  ' II##'')/3E+,  r   c                 F    U R                   R                  SSUS   05        g)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_misplacedInBodyPhase.start_tag_misplaced  s"     	 >v@WXr   c                 n    U R                   R                  5         U R                   R                  U5        g r    )r!   r   r   r   s     r   r   InBodyPhase.start_tag_other  s$    		88:		  'r   c                    U R                   R                  SSS9(       dT  U R                  [        SS5      5        U R                  R                  SSS05        U R                  [        S5      5        g U R                   R                  S5        U R                   R                  S   R                  S:w  a  U R                  R                  SSS05        U R                   R                  R                  5       nUR                  S:w  a7  U R                   R                  R                  5       nUR                  S:w  a  M6  g g )Nr  r  r  rk   r  r'   r[   )r!   r  r!  r$  r,   rg   r   r  re   r'   r   r  s      r   r   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                    U R                   R                  S5      (       d  U R                  R                  SSS05        g U R                   R                  S   R
                  S:w  ad  U R                   R                  SS   HG  nUR
                  [        S5      ;  d  M  U R                  R                  SSUR
                  S.5          O   U R                  R                  S	   U R                  l        g )
Nr   r  r'   r[      )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,   rg   re   r'   rl   r%   r?   r  s      r   end_tag_bodyInBodyPhase.end_tag_body  s    yy))&11KK##$866:JKYY$$R(--7		//399I /U %V V KK++>$*DIIFH  4 !KK..|<r   c                 |    U R                   R                  S5      (       a  U R                  [        S5      5        U$ g )Nr   )r!   r  r  r$  r   s     r   end_tag_htmlInBodyPhase.end_tag_html  s5    99%%f--/78L .r   c                 >   US   S:X  a  U R                   U l        U R                  R                  US   5      nU(       a  U R                  R	                  5         U R                  R
                  S   R                  US   :w  a!  U R                  R                  SSUS   05        U(       ar  U R                  R
                  R                  5       nUR                  US   :w  a:  U R                  R
                  R                  5       nUR                  US   :w  a  M9  g g g )Nr'   r  r[   end-tag-too-early)
r  rp   r!   r  r  re   r'   r,   rg   r   )r&   rz   in_scoper   s       r   end_tag_block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                    U R                   R                  nS U R                   l        Ub   U R                   R                  U5      (       d  U R                  R	                  SSS05        g U R                   R                  5         U R                   R                  S   U:w  a  U R                  R	                  SSS05        U R                   R                  R                  U5        g )Nr  r'   r'  r[   zend-tag-too-early-ignored)r!   r(  r  r,   rg   r  re   r  r  s      r   end_tag_form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                 X   US   S:X  a  SnOS nU R                   R                  US   US9(       d"  U R                  R                  SSUS   05        g U R                   R	                  US   S9  U R                   R
                  S   R                  US   :w  a!  U R                  R                  SSUS   05        U R                   R
                  R                  5       nUR                  US   :w  a:  U R                   R
                  R                  5       nUR                  US   :w  a  M9  g g )	Nr'   r  listr  r  excluder[   r  )r!   r  r,   rg   r  re   r'   r   )r&   rz   r  r   s       r   end_tag_list_item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                 n   [          H?  nU R                  R                  U5      (       d  M%  U R                  R                  5           O   U R                  R                  S   R
                  US   :w  a!  U R                  R                  SSUS   05        [          H  nU R                  R                  U5      (       d  M%  U R                  R                  R                  5       nUR
                  [         ;  a:  U R                  R                  R                  5       nUR
                  [         ;  a  M:    g    g )Nr[   r'   r  )	r   r!   r  r  re   r'   r,   rg   r   )r&   rz   items      r   end_tag_heading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                 F   SnUS:  Ga  US-  nU R                   R                  US   5      nU(       aC  X0R                   R                  ;   a<  U R                   R                  UR                  5      (       d  U R                  U5        gX0R                   R                  ;  aG  U R                  R                  SSUS   05        U R                   R                  R                  U5        gU R                   R                  UR                  5      (       d"  U R                  R                  SSUS   05        gX0R                   R                  S   :w  a!  U R                  R                  S	SUS   05        U R                   R                  R                  U5      nSnU R                   R                  US  H  nUR                  [        ;   d  M  Un  O   Ucz  U R                   R                  R                  5       nXc:w  a+  U R                   R                  R                  5       nXc:w  a  M+  U R                   R                  R                  U5        gU R                   R                  US-
     nU R                   R                  R                  U5      nU=pSnU R                   R                  R                  U
5      nUS
:  Gag  US-  nUS-  nU R                   R                  U   n
XR                   R                  ;  a'  U R                   R                  R                  U
5        Mj  X:X  a  OX:X  a(  U R                   R                  R                  U
5      S-   nU
R                  5       nUU R                   R                  U R                   R                  R                  U
5      '   XR                   R                  U R                   R                  R                  U
5      '   Un
U	R                  (       a  U	R                  R!                  U	5        U
R#                  U	5        U
n	US
:  a  GMg  U	R                  (       a  U	R                  R!                  U	5        UR                  [%        S5      ;   a.  U R                   R'                  5       u  pUR)                  X5        OUR#                  U	5        UR                  5       nUR+                  U5        UR#                  U5        U R                   R                  R                  U5        U R                   R                  R-                  X5        U R                   R                  R                  U5        U R                   R                  R-                  U R                   R                  R                  U5      S-   U5        US:  a  GM  gg)z*The much-feared adoption agency algorithm.rH      r   r'   Nzadoption-agency-1.2zadoption-agency-4.4r[   zadoption-agency-1.3r  r   r   r   r   r   )r!   r?  re   r  r'   r   r,   rg   r  r  indexr.  r   r   cloner  r  append_childrl   !get_table_misnested_node_positioninsert_beforereparent_childreninsert)r&   rz   outer_loop_counterformatting_element	afe_indexfurthest_blockrS   common_ancestorbookmark	last_noder   inner_loop_counterr  r  r  r  s                   r   r@  InBodyPhase.end_tag_formatting  s     !1$ !# "&!P!Pf"&&))*A*AA		223E3J3JKK ""5) $99+B+BB''(=f?VW		44;;<NO YY//0B0G0GH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"ii5599;G 3		44;;GD #ii55i!mDO yy;;AABTUH  .-I!"II++11$7E$q("a'"
yy..u5yy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                 p   U R                   R                  US   5      (       a  U R                   R                  5         U R                   R                  S   R                  US   :w  a!  U R
                  R                  SSUS   05        U R                   R                  US   5      (       a  U R                   R                  R                  5       nUR                  US   :w  a9  U R                   R                  R                  5       nUR                  US   :w  a  M9  U R                   R                  5         g g )Nr'   r[   r  )	r!   r  r  re   r'   r,   rg   r    clear_active_formatting_elements)r&   rz   rS   s      r   end_tag_applet_marquee_object)InBodyPhase.end_tag_applet_marquee_object  s    99%%eFm44II//199""2&++uV}<KK##$7&%-9PQ99%%eFm44ii--113G,,%-/))11557 ,,%-/II668	 5r   c                    U R                   R                  SSSS.5        U R                  R                  5         U R                  R	                  [        SS5      5        U R                  R                  R                  5         g )Nzunexpected-end-tag-treated-asr4  z
br elementrg  rk   )r,   rg   r!   r   r   r$  re   r   r   s     r   r  InBodyPhase.end_tag_br  sa    +!l;	= 			88:		  !24!EF		##%r   c                 X   U R                   R                  S S S2    GH	  nUR                  US   :X  a  U R                   R                  US   S9  U R                   R                  S   R                  US   :w  a!  U R                  R                  SSUS   05        U R                   R                  R                  5       U:w  a+   U R                   R                  R                  5       U:w  a  M+    g UR                  [        ;   d  M  U R                  R                  SSUS   05          g    g )Nr[   r'   r  r  )	r!   re   r'   r  r,   rg   r   r.  r   r  s      r   r   InBodyPhase.end_tag_other  s    II++DbD1D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 2r   r   )	r  r  r  r  r  r  r  r  r  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  r6   r:  )bbigcodeemfontissmallstrikestrongtturH  r  )appletmarqueeobjectxmpr   )arear4  embedrf  keygenwbr)paramsourcetrackru  rq  re  ro  r  iframer  )noembedr  r   )r  r  )r  r  mathra   )r   colr   framer   r   r   r   r   r   r   )r,  r  r  r  r  r  r  dialogr  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  rH  r  r  r  r  r  r  r4  )@r   r   r   r   r   r)   r  r  ry   r  ro   r  r  r  r  r!  r$  r)  r1  r4  r7  rB  rE  rI  rL  rO  rR  rU  rX  r\  r_  rb  rl  rx  r{  r  rz  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   __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                   f    \ rS rSr\" 5       rS rS rS rS r	S r
\" / 5      r\" S\	4/5      rSrg	)
	TextPhasei  c                 @    U R                   R                  US   5        g r   r   r   s     r   ro   TextPhase.process_characters  r   r   c                    U R                   R                  SSU R                  R                  S   R                  05        U R                  R                  R                  5         U R                   R                  U R                   l        g)Nz&expected-named-closing-tag-but-got-eofr'   r[   T)r,   rg   r!   re   r'   r   r   r?   rE   s    r   ry   TextPhase.process_eof   se    4TYY,,R0556	8 			##% KK66r   c                      SUS    S35       e)NzTried to process start tag r'   z in RCDATA/RAWTEXT moder   r   s     r   r   TextPhase.start_tag_other  s!    	R)%-8OP	Rur   c                     U R                   R                  R                  5       nUR                  S:X  d   eU R                  R
                  U R                  l        g )Nr  )r!   re   r   r'   r,   r   r?   r  s      r   end_tag_scriptTextPhase.end_tag_script  sB    yy&&**,yyH$$$ KK66r   c                     U R                   R                  R                  5         U R                  R                  U R                  l        g r    )r!   re   r   r,   r   r?   r   s     r   r   TextPhase.end_tag_other  s.    		##% KK66r   r  r   N)r   r   r   r   r  r   ro   ry   r   r  r   r   r   r   r   r   r   r   r  r    sA    I-R77 !> :;<Or   r  c                   
   \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	 rS
 rS rS rS rS rS rS rS rS rS r\" S\R4                  4S\4S\4S\4S\4S\4S\4S\4S\4S\4/
5      r\" S\4S\4/5      rSrg )!InTablePhasei  c                     U R                   R                  S   R                  S;  aN  U R                   R                  R                  5         U R                   R                  S   R                  S;  a  MM  g g )Nr[   )r   r   )r!   re   r'   r   rE   s    r   _clear_stack_to_table_context*InTablePhase._clear_stack_to_table_context  sX    ii%%b)..6GG II##'') ii%%b)..6GGr   c                     U R                   R                  S   R                  S:w  a  U R                  R	                  S5        g U R                  R
                  (       d   eg )Nr[   r   zeof-in-tabler!   re   r'   r,   rg   r-   rE   s    r   ry   InTablePhase.process_eof'  sD    99""2&++v5KK##N3;;((((r   c                     U R                   R                  nU R                   R                  S   U R                   l        X R                   R                  l        U R                   R                  R	                  U5        g Nin table text)r,   r?   r%   r   rp   r&   rz   r   s      r   rp   %InTablePhase.process_space_characters.  sT    ** KK..?+9(2259r   c                     U R                   R                  nU R                   R                  S   U R                   l        X R                   R                  l        U R                   R                  R	                  U5        g r%  )r,   r?   r%   r   ro   r'  s      r   ro   InTablePhase.process_characters4  sT    ** KK..?+9(,,U3r   c                     SU R                   l        U R                  R                  S   R	                  U5        SU R                   l        g )NTr   F)r!   insert_from_tabler,   r%   ro   r   s     r   r   InTablePhase.insert_text:  s9     '+		#9%88?&+		#r   c                     U R                  5         U R                  R                  R                  [        5        U R                  R                  U5        U R                  R                  S   U R                  l        g )Nr   )	r  r!   r  rx   r   r   r,   r%   r?   r   s     r   start_tag_captionInTablePhase.start_tag_captionA  sS    **,		,,33F;		  ' KK..|<r   c                     U R                  5         U R                  R                  U5        U R                  R                  S   U R                  l        g )Nr   r  r!   r   r,   r%   r?   r   s     r   start_tag_colgroupInTablePhase.start_tag_colgroupG  s<    **,		  ' KK../@Ar   c                 <    U R                  [        SS5      5        U$ )Nr   rk   )r3  r$  r   s     r   start_tag_colInTablePhase.start_tag_colL  s     1*k JKr   c                     U R                  5         U R                  R                  U5        U R                  R                  S   U R                  l        g )Nr   r2  r   s     r   start_tag_rowgroupInTablePhase.start_tag_rowgroupP  s;    **,		  ' KK..?r   c                 <    U R                  [        SS5      5        U$ )Nr   rk   )r9  r$  r   s     r   start_tag_imply_tbody"InTablePhase.start_tag_imply_tbodyU  s     1'; GHr   c                     U R                   R                  SSSS.5        U R                   R                  R                  [	        S5      5        U R                   R
                  (       d  U$ g )Nr;  r   r<  )r,   rg   r?   rs   r$  r-   r   s     r   rU  InTablePhase.start_tag_tableY  sV    2!g6	8 	))*;G*DE{{$$L %r   c                 R    U R                   R                  S   R                  U5      $ r  rD  r   s     r   start_tag_style_script#InTablePhase.start_tag_style_scripta  rF  r   c                 ,   SUS   ;   az  US   S   R                  [        5      S:X  a[  U R                  R                  S5        U R                  R                  U5        U R                  R                  R                  5         g U R                  U5        g )Nr\   r]   r[  z unexpected-hidden-input-in-table)	rQ   r	   r,   rg   r!   r   re   r   r   r   s     r   r\  InTablePhase.start_tag_inputd  st    eFm#ff%//0DEQKK##$FGII$$U+II##'')  'r   c                 8   U R                   R                  S5        U R                  R                  ch  U R                  R	                  U5        U R                  R
                  S   U R                  l        U R                  R
                  R                  5         g g )Nzunexpected-form-in-tabler[   )r,   rg   r!   r(  r   re   r   r   s     r   r)  InTablePhase.start_tag_formn  sm     :;99!!)II$$U+%)YY%<%<R%@DII"II##'') *r   c                     U R                   R                  SSUS   05        SU R                  l        U R                   R                  S   R                  U5        SU R                  l        g )Nz)unexpected-start-tag-implies-table-voodoor'   Tr   F)r,   rg   r!   r,  r%   rq   r   s     r   r   InTablePhase.start_tag_otheru  sZ    7&%-9P	R '+		#9%77>&+		#r   c                 (   U R                   R                  SSS9(       Ga4  U R                   R                  5         U R                   R                  S   R                  S:w  a@  U R
                  R                  SSU R                   R                  S   R                  S.5        U R                   R                  S   R                  S:w  aM  U R                   R                  R                  5         U R                   R                  S   R                  S:w  a  MM  U R                   R                  R                  5         U R
                  R                  5         g U R
                  R                  (       d   eU R
                  R                  SSUS   05        g )Nr   r  r[   zend-tag-too-early-namedr  r  r'   )
r!   r  r  re   r'   r,   rg   r   rA   r-   r   s     r   end_tag_table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    U R                   R                  SSUS   05        g r  r   r   s     r   end_tag_ignoreInTablePhase.end_tag_ignore  r  r   c                     U R                   R                  SSUS   05        SU R                  l        U R                   R                  S   R                  U5        SU R                  l        g )Nz'unexpected-end-tag-implies-table-voodoor'   Tr   F)r,   rg   r!   r,  r%   rs   r   s     r   r   InTablePhase.end_tag_other  sZ    5f7N	P '+		#9%55e<&+		#r   r   r   r   r
  r   r   r   )r   r   r   r   )r  r  ru  r'  )r   r   r
  r   r   r   r   r   r   r   r   r   N)r   r   r   r   r  r   r  ry   rp   ro   r   r/  r3  r6  r9  r<  rU  rA  r\  r)  r   rJ  rM  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                   V   ^  \ rS rSrSrU 4S jrS rS rS rS r	S r
S	 rS
 rSrU =r$ )InTableTextPhasei  )r   character_tokensc                 B   > [         TU ]  " U0 UD6  S U l        / U l        g r    )r  r)   r   rT  r  s      r   r)   InTableTextPhase.__init__  s%    $)&)" "r   c                 b   SR                  U R                   Vs/ s H  oS   PM	     sn5      n[        S U 5       5      (       a<  [        R                  US.nU R
                  R                  S   R                  U5        O"U(       a  U R                  R                  U5        / U l        g s  snf )Nr  r]   c              3   2   #    U  H  o[         ;  v   M     g 7fr    r  )r  r  s     r   r
  4InTableTextPhase.flush_characters.<locals>.<genexpr>  s     =++r  rt  r   )	joinrT  r  r   rm   r,   r%   r   r!   )r&   r  r]   rz   s       r   flush_characters!InTableTextPhase.flush_characters  s    ww1F1FG1FV1FGH===="--t<EKKz*66u=II!!$' " Hs   B,c                 \    U R                  5         U R                  U R                  l        U$ r    r[  r   r,   r?   r   s     r   ru    InTableTextPhase.process_comment  %     //r   c                 Z    U R                  5         U R                  U R                  l        gr'  r^  rE   s    r   ry   InTableTextPhase.process_eof  s#     //r   c                 N    US   S:X  a  g U R                   R                  U5        g Nr]   r  rT  rx   r   s     r   ro   #InTableTextPhase.process_characters  s%    =H$$$U+r   c                 :    U R                   R                  U5        g r    re  r   s     r   rp   )InTableTextPhase.process_space_characters  s    $$U+r   c                 \    U R                  5         U R                  U R                  l        U$ r    r^  r   s     r   rq   "InTableTextPhase.process_start_tag  r`  r   c                 \    U R                  5         U R                  U R                  l        U$ r    r^  r   s     r   rs    InTableTextPhase.process_end_tag  r`  r   )rT  r   )r   r   r   r   r   r)   r[  ru   ry   ro   rp   rq   rs   r   r  r  s   @r   rS  rS    s5    6I#
#

,
,

 r   rS  c                       \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	 rS
 r\" S\R"                  4S\	4/5      r\" S\4S\4S\4/5      rSrg)InCaptionPhasei  c                 @    U R                   R                  SSS9(       + $ )Nr   r   r  r!   r  rE   s    r   ignore_end_tag_caption%InCaptionPhase.ignore_end_tag_caption  s    99--i-IIIr   c                 R    U R                   R                  S   R                  5         g rC  r,   r%   ry   rE   s    r   ry   InCaptionPhase.process_eof      9%113r   c                 R    U R                   R                  S   R                  U5      $ rC  r,   r%   ro   r   s     r   ro   !InCaptionPhase.process_characters  "    {{!!),??FFr   c                     U R                   R                  S5        U R                  5       nU R                   R                  R	                  [        S5      5        U(       d  U$ g )Nz%unexpected-table-start-tag-in-captionr   r,   rg   rq  r?   rs   r$  r&   rz   ignore_end_tags      r   start_tag_table_element&InCaptionPhase.start_tag_table_element  sN     GH446))*;I*FGL r   c                 R    U R                   R                  S   R                  U5      $ rC  rD  r   s     r   r   InCaptionPhase.start_tag_other  rF  r   c                 d   U R                  5       (       Gd\  U R                  R                  5         U R                  R                  S   R                  S:w  a@  U R
                  R                  SSU R                  R                  S   R                  S.5        U R                  R                  S   R                  S:w  aM  U R                  R                  R                  5         U R                  R                  S   R                  S:w  a  MM  U R                  R                  R                  5         U R                  R                  5         U R
                  R                  S   U R
                  l
        g U R
                  R                  (       d   eU R
                  R                  SSUS   05        g )Nr[   r   r  r  r   r  r'   )rq  r!   r  re   r'   r,   rg   r   r  r%   r?   r-   r   s     r   end_tag_caption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                     U R                   R                  S5        U R                  5       nU R                   R                  R	                  [        S5      5        U(       d  U$ g )Nz#unexpected-table-end-tag-in-captionr   r|  r}  s      r   rJ  InCaptionPhase.end_tag_table  sN     EF446))*;I*FGL r   c                 F    U R                   R                  SSUS   05        g r  r   r   s     r   rM  InCaptionPhase.end_tag_ignore  r  r   c                 R    U R                   R                  S   R                  U5      $ rC  r,   r%   rs   r   s     r   r   InCaptionPhase.end_tag_other  r  r   r   	r   r
  r   r   r   r   r   r   r   r   r   )
r   r
  r   r   r   r   r   r   r   r   r   N)r   r   r   r   r  r   rq  ry   ro   r  r   r  rJ  rM  r   r   r   r   r   r   r   r   r   r   rn  rn    s    IJ4GFS$OD !	%%&
1	3"  	O$	- 
(	*  Or   rn  c                       \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	 r\" S
\R                   4S\	4/5      r\" S\4S\4/5      rSrg)InColumnGroupPhasei!  c                 N    U R                   R                  S   R                  S:H  $ )Nr[   r   )r!   re   r'   rE   s    r   ignore_end_tag_colgroup*InColumnGroupPhase.ignore_end_tag_colgroup%  s"    yy&&r*//699r   c                     U R                   R                  S   R                  S:X  a  U R                  R                  (       d   eg U R                  5       nU R                  [        S5      5        U(       d  gg )Nr[   r   r   T)r!   re   r'   r,   r-   r  end_tag_colgroupr$  )r&   r~  s     r   ry   InColumnGroupPhase.process_eof(  sb    99""2&++v5;;((((!99;N!!"3J"?@! "r   c                 j    U R                  5       nU R                  [        S5      5        U(       d  U$ g Nr   r  r  r$  r}  s      r   ro   %InColumnGroupPhase.process_characters2  1    557/
;<L r   c                     U R                   R                  U5        U R                   R                  R                  5         SUS'   g r`  ra  r   s     r   r6   InColumnGroupPhase.start_tag_col8  rd  r   c                 j    U R                  5       nU R                  [        S5      5        U(       d  U$ g r  r  r}  s      r   r   "InColumnGroupPhase.start_tag_other=  r  r   c                 D   U R                  5       (       a?  U R                  R                  (       d   eU R                  R                  SSUS   05        g U R                  R
                  R                  5         U R                  R                  S   U R                  l        g )Nr  r'   r   )	r  r,   r-   rg   r!   re   r   r%   r?   r   s     r   r  #InColumnGroupPhase.end_tag_colgroupC  ss    ''));;((((KK##$865=:QRII##'') $ 2 2: >DKKr   c                 @    U R                   R                  SSS05        g )Nz
no-end-tagr'   r
  r   r   s     r   end_tag_colInColumnGroupPhase.end_tag_colL  s    vuo>r   c                 j    U R                  5       nU R                  [        S5      5        U(       d  U$ g r  r  r}  s      r   r    InColumnGroupPhase.end_tag_otherO  r  r   r   r
  r   r   N)r   r   r   r   r  r   r  ry   ro   r6  r   r  r  r   r   r   r   r   r   r   r   r   r   r  r  !  s{    I:0
?? !	%%&	" 
 	%&	  Or   r  c                       \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	 rS
 rS rS rS r\" S\R(                  4S\
4S\4S\4/5      r\" S\4S\4S\4/5      rSrg)InTableBodyPhasei`  c                 v   U R                   R                  S   R                  S;  aM  U R                   R                  R                  5         U R                   R                  S   R                  S;  a  MM  U R                   R                  S   R                  S:X  a  U R                  R
                  (       d   eg g )Nr[   )r   r   r   r   r   )r!   re   r'   r   r,   r-   rE   s    r   "_clear_stack_to_table_body_context3InTableBodyPhase._clear_stack_to_table_body_contextd  s    ii%%b).. 73 3 II##'')	 ii%%b).. 73 3
 99""2&++v5;;(((( 6r   c                 R    U R                   R                  S   R                  5         g Nr   rt  rE   s    r   ry   InTableBodyPhase.process_eofm      :&224r   c                 R    U R                   R                  S   R                  U5      $ r  r  r   s     r   rp   )InTableBodyPhase.process_space_charactersp  "    {{!!*-FFuMMr   c                 R    U R                   R                  S   R                  U5      $ r  rx  r   s     r   ro   #InTableBodyPhase.process_characterss  "    {{!!*-@@GGr   c                     U R                  5         U R                  R                  U5        U R                  R                  S   U R                  l        g )Nr   )r  r!   r   r,   r%   r?   r   s     r   start_tag_trInTableBodyPhase.start_tag_trv  s;    //1		  ' KK..x8r   c                 ~    U R                   R                  SSUS   05        U R                  [        SS5      5        U$ )Nzunexpected-cell-in-table-bodyr'   r   rk   )r,   rg   r  r$  r   s     r   start_tag_table_cell%InTableBodyPhase.start_tag_table_cell{  s>    +feFm-D	F+D+>?r   c                    U R                   R                  SSS9(       d>  U R                   R                  SSS9(       d  U R                   R                  SSS9(       aM  U R                  5         U R                  [	        U R                   R
                  S   R                  5      5        U$ U R                  R                  (       d   eU R                  R                  SSUS   05        g )	Nr   r   r  r   r   r[   z!unexpected-start-tag-out-of-tabler'   
r!   r  r  end_tag_table_rowgroupr$  re   r'   r,   r-   rg   r   s     r   start_tag_table_other&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    U R                   R                  S   R                  U5      $ r  rD  r   s     r   r    InTableBodyPhase.start_tag_other  "    {{!!*-??FFr   c                 D   U R                   R                  US   SS9(       a]  U R                  5         U R                   R                  R	                  5         U R
                  R                  S   U R
                  l        g U R
                  R                  SSUS   05        g )Nr'   r   r  r    unexpected-end-tag-in-table-body)	r!   r  r  re   r   r,   r%   r?   rg   r   s     r   r  'InTableBodyPhase.end_tag_table_rowgroup  s{    99%%eFmW%E335II##'') $ 2 2: >DKKKK##2VU6]4KMr   c                    U R                   R                  SSS9(       d>  U R                   R                  SSS9(       d  U R                   R                  SSS9(       aM  U R                  5         U R                  [	        U R                   R
                  S   R                  5      5        U$ U R                  R                  (       d   eU R                  R                  SSUS   05        g )	Nr   r   r  r   r   r[   r  r'   r  r   s     r   rJ  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    U R                   R                  SSUS   05        g )Nr  r'   r   r   s     r   rM  InTableBodyPhase.end_tag_ignore  #    .v0G	Ir   c                 R    U R                   R                  S   R                  U5      $ r  r  r   s     r   r   InTableBodyPhase.end_tag_other  "    {{!!*-==eDDr   r   r   r   r   )r   r
  r   r   r   r   rQ  r   )r   r   r
  r   r   r   r   r   r   N)r   r   r   r   r  r   r  ry   rp   ro   r  r  r  r   r  rJ  rM  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                       \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	 rS
 rS rS rS rS r\" S\R*                  4S\4S\4/5      r\" S\4S\4S\4S\4/5      rSrg)
InRowPhasei  c                 l   U R                   R                  S   R                  S;  a  U R                  R	                  SSU R                   R                  S   R                  05        U R                   R                  R                  5         U R                   R                  S   R                  S;  a  M  g g )Nr[   )r   r   z'unexpected-implied-end-tag-in-table-rowr'   )r!   re   r'   r,   rg   r   rE   s    r   !_clear_stack_to_table_row_context,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                 @    U R                   R                  SSS9(       + $ )Nr   r   r  rp  rE   s    r   ignore_end_tag_trInRowPhase.ignore_end_tag_tr  s    99--dG-DDDr   c                 R    U R                   R                  S   R                  5         g r  rt  rE   s    r   ry   InRowPhase.process_eof  r  r   c                 R    U R                   R                  S   R                  U5      $ r  r  r   s     r   rp   #InRowPhase.process_space_characters  r  r   c                 R    U R                   R                  S   R                  U5      $ r  rx  r   s     r   ro   InRowPhase.process_characters  r  r   c                     U R                  5         U R                  R                  U5        U R                  R                  S   U R                  l        U R                  R                  R                  [        5        g )Nr   )	r  r!   r   r,   r%   r?   r  rx   r   r   s     r   r  InRowPhase.start_tag_table_cell  sS    ..0		  ' KK..y9		,,33F;r   c                 j    U R                  5       nU R                  [        S5      5        U(       d  U$ g Nr   r  
end_tag_trr$  r}  s      r   r   InRowPhase.start_tag_table_other  s/    //1)$/0L r   c                 R    U R                   R                  S   R                  U5      $ r  rD  r   s     r   r   InRowPhase.start_tag_other  r  r   c                 d   U R                  5       (       d]  U R                  5         U R                  R                  R	                  5         U R
                  R                  S   U R
                  l        g U R
                  R                  (       d   eU R
                  R                  SSUS   05        g )Nr   r  r'   )
r  r  r!   re   r   r,   r%   r?   r-   rg   r   s     r   r  InRowPhase.end_tag_tr  s    %%''224II##'') $ 2 2? CDKK ;;((((KK##$865=:QRr   c                 j    U R                  5       nU R                  [        S5      5        U(       d  U$ g r  r  r}  s      r   rJ  InRowPhase.end_tag_table  s1    //1)$/0 L r   c                     U R                   R                  US   SS9(       a  U R                  [        S5      5        U$ U R                  R                  SSUS   05        g )Nr'   r   r  r   r  )r!   r  r  r$  r,   rg   r   s     r   r  !InRowPhase.end_tag_table_rowgroup  sR    99%%eFmW%EOO-d34LKK##$865=:QRr   c                 F    U R                   R                  SSUS   05        g )Nzunexpected-end-tag-in-table-rowr'   r   r   s     r   rM  InRowPhase.end_tag_ignore   s#    -f/F	Hr   c                 R    U R                   R                  S   R                  U5      $ r  r  r   s     r   r   InRowPhase.end_tag_other  r  r   r   r  )r   r
  r   r   r   r   r   r   r   rQ  )r   r   r
  r   r   r   r   r   N)r   r   r   r   r  r   r  r  ry   rp   ro   r  r  r   r  rJ  r  rM  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                       \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	 rS
 r\" S\R"                  4S\	4/5      r\" S\4S\4S\4/5      rSrg)InCellPhasei  c                     U R                   R                  SSS9(       a  U R                  [        S5      5        g U R                   R                  SSS9(       a  U R                  [        S5      5        g g )Nr   r   r  r   )r!   r  end_tag_table_cellr$  rE   s    r   _close_cellInCellPhase._close_cell  s]    99%%dG%<##$5d$;<YY''g'>##$5d$;< ?r   c                 R    U R                   R                  S   R                  5         g rC  rt  rE   s    r   ry   InCellPhase.process_eof   rv  r   c                 R    U R                   R                  S   R                  U5      $ rC  rx  r   s     r   ro   InCellPhase.process_characters#  rz  r   c                     U R                   R                  SSS9(       d  U R                   R                  SSS9(       a  U R                  5         U$ U R                  R                  (       d   eU R                  R                  SSUS   05        g )Nr   r   r  r   z&unexpected-start-tag-out-of-table-cellr'   )r!   r  r  r,   r-   rg   r   s     r   r  !InCellPhase.start_tag_table_other&  sw    II&&tW&=		**4*AL ;;((((KK##865=:QSr   c                 R    U R                   R                  S   R                  U5      $ rC  rD  r   s     r   r   InCellPhase.start_tag_other1  rF  r   c                    U R                   R                  US   SS9(       Ga  U R                   R                  US   5        U R                   R                  S   R                  US   :w  a\  U R
                  R                  SSUS   05         U R                   R                  R                  5       nUR                  US   :X  a  O&M:  U R                   R                  R                  5         U R                   R                  5         U R
                  R                  S   U R
                  l
        g U R
                  R                  SSUS   05        g )Nr'   r   r  r[   zunexpected-cell-end-tagr   r  )r!   r  r  re   r'   r,   rg   r   r  r%   r?   r  s      r   r  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    U R                   R                  SSUS   05        g r  r   r   s     r   rM  InCellPhase.end_tag_ignoreE  r  r   c                     U R                   R                  US   SS9(       a  U R                  5         U$ U R                  R	                  SSUS   05        g )Nr'   r   r  r  )r!   r  r  r,   rg   r   s     r   end_tag_implyInCellPhase.end_tag_implyH  sN    99%%eFmW%EL KK##$865=:QRr   c                 R    U R                   R                  S   R                  U5      $ rC  r  r   s     r   r   InCellPhase.end_tag_otherP  r  r   r   r  r  )r   r   r
  r   r   r  r   N)r   r   r   r   r  r   r  ry   ro   r  r   r  rM  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            	           \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	 rS
 rS rS rS r\" S\R(                  4S\4S\	4S\
4S\4S\4/5      r\" S\4S\4S\4/5      rSrg)InSelectPhasei`  c                     U R                   R                  S   R                  S:w  a  U R                  R	                  S5        g U R                  R
                  (       d   eg )Nr[   r   zeof-in-selectr"  rE   s    r   ry   InSelectPhase.process_eofd  sD    99""2&++v5KK##O4;;((((r   c                 T    US   S:X  a  g U R                   R                  US   5        g rd  r   r   s     r   ro    InSelectPhase.process_charactersj  s'    =H$		eFm,r   c                     U R                   R                  S   R                  S:X  a$  U R                   R                  R                  5         U R                   R	                  U5        g r  r!   re   r'   r   r   r   s     r   start_tag_optionInSelectPhase.start_tag_optiono  sG    99""2&++x7II##'')		  'r   c                 f   U R                   R                  S   R                  S:X  a$  U R                   R                  R                  5         U R                   R                  S   R                  S:X  a$  U R                   R                  R                  5         U R                   R	                  U5        g )Nr[   r  r  r  r   s     r   start_tag_optgroup InSelectPhase.start_tag_optgroupu  sz    99""2&++x7II##'')99""2&++z9II##'')		  'r   c                 n    U R                   R                  S5        U R                  [        S5      5        g )Nzunexpected-select-in-selectr   )r,   rg   end_tag_selectr$  r   s     r   r  InSelectPhase.start_tag_select|  s)     =>-h78r   c                     U R                   R                  S5        U R                  R                  SSS9(       a  U R	                  [        S5      5        U$ U R                   R                  (       d   eg )Nzunexpected-input-in-selectr   r  )r,   rg   r!   r  r  r$  r-   r   s     r   r\  InSelectPhase.start_tag_input  sX     <=99%%h%A 1( ;<L;;((((r   c                 R    U R                   R                  S   R                  U5      $ r  rD  r   s     r   r~  InSelectPhase.start_tag_script  rF  r   c                 F    U R                   R                  SSUS   05        g )Nzunexpected-start-tag-in-selectr'   r   r   s     r   r   InSelectPhase.start_tag_other  #    ,vuV}.E	Gr   c                     U R                   R                  S   R                  S:X  a%  U R                   R                  R                  5         g U R                  R                  SSS05        g )Nr[   r  unexpected-end-tag-in-selectr'   r!   re   r'   r   r,   rg   r   s     r   end_tag_optionInSelectPhase.end_tag_option  sO    99""2&++x7II##'')KK##$BVXDVWr   c                    U R                   R                  S   R                  S:X  aK  U R                   R                  S   R                  S:X  a$  U R                   R                  R                  5         U R                   R                  S   R                  S:X  a%  U R                   R                  R                  5         g U R                  R                  SSS05        g )Nr[   r  r  r  r'   r   r   s     r   end_tag_optgroupInSelectPhase.end_tag_optgroup  s    II##B',,8		''+00J>II##'')99""2&++z9II##'') KK##.0DFr   c                    U R                   R                  SSS9(       a  U R                   R                  R                  5       nUR                  S:w  a6  U R                   R                  R                  5       nUR                  S:w  a  M6  U R
                  R                  5         g U R
                  R                  (       d   eU R
                  R                  SSUS   05        g )Nr   r  r  r'   )	r!   r  re   r   r'   r,   rA   r-   rg   r  s      r   r  InSelectPhase.end_tag_select  s    99%%h%A99**..0D))x'yy..224 ))x'KK,,. ;;((((KK##$865=:QRr   c                 F    U R                   R                  SSUS   05        g )Nr  r'   r   r   s     r   r   InSelectPhase.end_tag_other  s      >v@WXr   r   r  r  r   )ru  r  r  r  r   N)r   r   r   r   r  r   ry   ro   r  r  r  r\  r~  r   r!  r%  r  r   r   r   r   r   r   r   r   r   r   r  r  `  s    I)-
((9)FGXF	SY !	%%&	#$	'(	#$	(/:	#$"  	>"	%&	>"  Or   r  c                   r    \ rS rSr\" 5       rS rS rS rS r	S r
S r\" S\4/5      r\" S\
4/5      rS	rg
)InSelectInTablePhasei  c                 R    U R                   R                  S   R                  5         g Nr   rt  rE   s    r   ry    InSelectInTablePhase.process_eof  s    ;'335r   c                 R    U R                   R                  S   R                  U5      $ r.  rx  r   s     r   ro   'InSelectInTablePhase.process_characters  s"    {{!!+.AA%HHr   c                 |    U R                   R                  SSUS   05        U R                  [        S5      5        U$ )Nz5unexpected-table-element-start-tag-in-select-in-tabler'   r   )r,   rg   r   r$  r   s     r   rU  $InSelectInTablePhase.start_tag_table  s>    CU6]#	% 	,X67r   c                 R    U R                   R                  S   R                  U5      $ r.  rD  r   s     r   r   $InSelectInTablePhase.start_tag_other  s"    {{!!+.@@GGr   c                     U R                   R                  SSUS   05        U R                  R                  US   SS9(       a  U R	                  [        S5      5        U$ g )Nz3unexpected-table-element-end-tag-in-select-in-tabler'   r   r  r   )r,   rg   r!   r  r   r$  r   s     r   rJ  "InSelectInTablePhase.end_tag_table  s_    AU6]#	% 99%%eFmW%E0:;L Fr   c                 R    U R                   R                  S   R                  U5      $ r.  r  r   s     r   r   "InSelectInTablePhase.end_tag_other  s"    {{!!+.>>uEEr   )r   r   r   r   r   r   r   r   r   N)r   r   r   r   r  r   ry   ro   rU  r   rJ  r   r   r   r   r   r   r   r   r,  r,    sc    I6IHF !	J		" 
 	J		  Or   r,  c                   N    \ rS rSr\" 5       r\" / SQ5      rS rS r	S r
S rSrg)	InForeignContentPhasei  ),r  r  r  r   r4  r  r  r  r   r  r  r  r  h1h2h3h4h5h6r   rq  r  rf  r  r  r  r  rH  r  r  r  r  r  r  spanr  r  subsupr   r  r  r  varc                 
   0 SS_SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_0 S#S$_S%S&_S'S(_S)S*_S+S,_S-S._S/S0_S1S2_S3S4_S5S6_S7S8_S9S:_S;S<_S=S>_S?S@_SASB_SCSD_ESESFSG.EnUSH   U;   a  X!SH      USH'   g g )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&   rz   replacementss      r   adjust_svg_tag_names*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                     US   S:X  a  SUS'   OFU R                   R                  (       a+  [        S US    5       5      (       a  SU R                   l        [        R	                  X5        g )Nr]   r  u   �c              3   2   #    U  H  o[         ;  v   M     g 7fr    r  r  s     r   r
  ;InForeignContentPhase.process_characters.<locals>.<genexpr>"	  s     I=4..=r  F)r,   rD   r  r   ro   r   s     r   ro   (InForeignContentPhase.process_characters	  sS    =H$$E&Mkk%%I5=III&+DKK#  -r   c                    U R                   R                  S   nUS   U R                  ;   d1  US   S:X  Ga  [        US   R	                  5       5      1 Sk-  (       Ga  U R
                  R                  SSUS   05        U R                   R                  S   R                  U R                   R                  :w  Ga>  U R
                  R                  U R                   R                  S   5      (       Gd  U R
                  R                  U R                   R                  S   5      (       d  U R                   R                  R                  5         U R                   R                  S   R                  U R                   R                  :w  ap  U R
                  R                  U R                   R                  S   5      (       d9  U R
                  R                  U R                   R                  S   5      (       d  M  U$ UR                  [        S   :X  a  U R
                  R                  U5        OCUR                  [        S   :X  a,  U R                  U5        U R
                  R                  U5        U R
                  R!                  U5        UR                  US	'   U R                   R#                  U5        US
   (       a*  U R                   R                  R                  5         SUS'   g g )Nr[   r'   r  r]   >   facesizecolorz*unexpected-html-element-in-foreign-contentrM   ra   rO   rc   Trd   )r!   re   breakout_elementssetr   r,   rg   rO   rj   rU   rX   r   r   r   r  r   r   r   )r&   rz   r}   s      r   rq   'InForeignContentPhase.process_start_tag&	  sF   yy..r2&MT333f'E&M&&(),EEEKK##<vuV}>UW99**2.8899../{{<<yy..r24 4{{CCyy..r24 4		''++- 99**2.8899../{{<<yy..r24 4{{CCyy..r24 4 L %%H)==44U;'':e+<<))%011%8KK11%8!-!7!7E+II$$U+]#		''++-37/0 $r   c                    [        U R                  R                  5      S-
  nU R                  R                  S   nUR                  R	                  [
        5      US   :w  a!  U R                  R                  SSUS   05         UR                  R	                  [
        5      US   :X  a  U R                  R                  U R                  R                  S   :X  aS  U R                  R                  R                  5         U R                  R                  R                  U R                  l        U R                  R                  R                  5       U:w  aG  U R                  R                  (       d   eU R                  R                  R                  5       U:w  a  MG  S n U$ US-  nU R                  R                  U   nUR                  U R                  R                  :w  a  GMd  U R                  R                  R                  U5      n U$ )Nr   r[   r'   r  r&  )ri   r!   re   r'   rQ   r	   r,   rg   r?   r%   r[  r   r   rO   rj   rs   )r&   rz   
node_indexr   r|   s        r   rs   %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   r   N)r   r   r   r   r  r   rl   r  r  ro   rq   rs   r   r   r   r   r;  r;    s.    I! # )8V.8:r   r;  c                   x    \ rS rSr\" 5       rS rS rS rS r	S r
S rS r\" S	\	4/5      r\" S	\4/5      rS
rg)AfterBodyPhasei^	  c                     g r    r   rE   s    r   ry   AfterBodyPhase.process_eofa	      r   c                 h    U R                   R                  XR                   R                  S   5        g )NrH   r   r   s     r   ru   AfterBodyPhase.process_commente	  s%     			  		(?(?(BCr   c                     U R                   R                  S5        U R                   R                  S   U R                   l        U$ )Nzunexpected-char-after-bodyr   r,   rg   r%   r?   r   s     r   ro   !AfterBodyPhase.process_charactersj	  s5     <= KK..y9r   c                 R    U R                   R                  S   R                  U5      $ rC  rD  r   s     r   r   AfterBodyPhase.start_tag_htmlo	  rF  r   c                     U R                   R                  SSUS   05        U R                   R                  S   U R                   l        U$ )Nzunexpected-start-tag-after-bodyr'   r   r  r   s     r   r   AfterBodyPhase.start_tag_otherr	  sC    -f/F	H KK..y9r   c                     U R                   R                  (       a  U R                   R                  S5        g U R                   R                  S   U R                   l        g )Nz'unexpected-end-tag-after-body-innerhtmlafter after body)r,   r-   rg   r%   r?   )r&   r'   s     r   r  AfterBodyPhase.end_tag_htmlx	  s>    ;;  KK##$MN $ 2 23E FDKKr   c                     U R                   R                  SSUS   05        U R                   R                  S   U R                   l        U$ )Nzunexpected-end-tag-after-bodyr'   r   r  r   s     r   r   AfterBodyPhase.end_tag_other~	  sC    +feFm-D	F KK..y9r   r   r   N)r   r   r   r   r  r   ry   ru   ro   r   r   r  r   r   r   r   r   r   r   r   r  r  ^	  s]    ID

FG !	 "   678Or   r  c                       \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	 r\" S
\R                   4S\4S\	4S\
4/5      r\" S\4/5      rSrg)InFramesetPhasei	  c                     U R                   R                  S   R                  S:w  a  U R                  R	                  S5        g U R                  R
                  (       d   eg )Nr[   r   zeof-in-framesetr"  rE   s    r   ry   InFramesetPhase.process_eof	  sE    99""2&++v5KK##$56;;((((r   c                 :    U R                   R                  S5        g )Nzunexpected-char-in-framesetr   r   s     r   ro   "InFramesetPhase.process_characters	  s     =>r   c                 :    U R                   R                  U5        g r    )r!   r   r   s     r   r  "InFramesetPhase.start_tag_frameset	  s    		  'r   c                     U R                   R                  U5        U R                   R                  R                  5         g r    ra  r   s     r   start_tag_frameInFramesetPhase.start_tag_frame	  s*    		  '		##%r   c                 R    U R                   R                  S   R                  U5      $ rC  rD  r   s     r   start_tag_noframes"InFramesetPhase.start_tag_noframes	  rF  r   c                 F    U R                   R                  SSUS   05        g )Nz unexpected-start-tag-in-framesetr'   r   r   s     r   r   InFramesetPhase.start_tag_other	  r  r   c                    U R                   R                  S   R                  S:X  a  U R                  R	                  S5        O$U R                   R                  R                  5         U R                  R                  (       dQ  U R                   R                  S   R                  S:w  a)  U R                  R                  S   U R                  l        g g g )Nr[   r   z)unexpected-frameset-in-frameset-innerhtmlr   after frameset)	r!   re   r'   r,   rg   r   r-   r%   r?   r   s     r   end_tag_frameset InFramesetPhase.end_tag_frameset	  s    99""2&++v5KK##$OPII##'')%%		''+00J> !% 2 23C DDKK ? &r   c                 F    U R                   R                  SSUS   05        g )Nzunexpected-end-tag-in-framesetr'   r   r   s     r   r   InFramesetPhase.end_tag_other	  r  r   r   r   r  r  r   N)r   r   r   r   r  r   ry   ro   r  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                       \ rS rSr\" 5       rS rS rS rS r	S r
S r\" S\R                  4S	\4/5      r\" S\
4/5      rS
rg)AfterFramesetPhasei	  c                     g r    r   rE   s    r   ry   AfterFramesetPhase.process_eof	  r  r   c                 :    U R                   R                  S5        g )Nzunexpected-char-after-framesetr   r   s     r   ro   %AfterFramesetPhase.process_characters	  s     @Ar   c                 R    U R                   R                  S   R                  U5      $ r  rD  r   s     r   r  %AfterFramesetPhase.start_tag_noframes	  rF  r   c                 F    U R                   R                  SSUS   05        g )Nz#unexpected-start-tag-after-framesetr'   r   r   s     r   r   "AfterFramesetPhase.start_tag_other	  s#    1FE&M3J	Lr   c                 T    U R                   R                  S   U R                   l        g )Nafter after frameset)r,   r%   r?   r   s     r   r  AfterFramesetPhase.end_tag_html	  s     KK../EFr   c                 F    U R                   R                  SSUS   05        g )Nz!unexpected-end-tag-after-framesetr'   r   r   s     r   r    AfterFramesetPhase.end_tag_other	  s#    /&%-1H	Jr   r   r  r   N)r   r   r   r   r  r   ry   ro   r  r   r  r   r   r   r   r   r   r   r   r   r   r  r  	  sn    IBFLGJ !	%%&	'(" 
 	  Or   r  c                   b    \ rS rSr\" 5       rS rS rS rS r	S r
S rS r\" S	\
4/5      rS
rg)AfterAfterBodyPhasei	  c                     g r    r   rE   s    r   ry   AfterAfterBodyPhase.process_eof	  r  r   c                 b    U R                   R                  XR                   R                  5        g r    r  r   s     r   ru   #AfterAfterBodyPhase.process_comment	  r  r   c                 R    U R                   R                  S   R                  U5      $ rC  r  r   s     r   rp   ,AfterAfterBodyPhase.process_space_characters	  r  r   c                     U R                   R                  S5        U R                   R                  S   U R                   l        U$ )Nexpected-eof-but-got-charr   r  r   s     r   ro   &AfterAfterBodyPhase.process_characters	  s5     ;< KK..y9r   c                 R    U R                   R                  S   R                  U5      $ rC  rD  r   s     r   r   "AfterAfterBodyPhase.start_tag_html	  rF  r   c                     U R                   R                  SSUS   05        U R                   R                  S   U R                   l        U$ )Nexpected-eof-but-got-start-tagr'   r   r  r   s     r   r   #AfterAfterBodyPhase.start_tag_other	  sC    ,vuV}.E	G KK..y9r   c                     U R                   R                  SSUS   05        U R                   R                  S   U R                   l        U$ )Nexpected-eof-but-got-end-tagr'   r   r  r   s     r   rs   #AfterAfterBodyPhase.process_end_tag	  sC    *VU6],C	E KK..y9r   r   r   N)r   r   r   r   r  r   ry   ru   rp   ro   r   r   rs   r   r   r   r   r   r   r  r  	  sH    I<M
F !	 " r   r  c                   n    \ rS rSr\" 5       rS rS rS rS r	S r
S rS rS	 r\" S
\
4S\4/5      rSrg)AfterAfterFramesetPhasei

  c                     g r    r   rE   s    r   ry   #AfterAfterFramesetPhase.process_eof
  r  r   c                 b    U R                   R                  XR                   R                  5        g r    r  r   s     r   ru   'AfterAfterFramesetPhase.process_comment
  r  r   c                 R    U R                   R                  S   R                  U5      $ rC  r  r   s     r   rp   0AfterAfterFramesetPhase.process_space_characters
  r  r   c                 :    U R                   R                  S5        g )Nr  r   r   s     r   ro   *AfterAfterFramesetPhase.process_characters
  s     ;<r   c                 R    U R                   R                  S   R                  U5      $ rC  rD  r   s     r   r   &AfterAfterFramesetPhase.start_tag_html
  rF  r   c                 R    U R                   R                  S   R                  U5      $ r  rD  r   s     r   r  *AfterAfterFramesetPhase.start_tag_noframes
  rF  r   c                 F    U R                   R                  SSUS   05        g )Nr  r'   r   r   s     r   r   'AfterAfterFramesetPhase.start_tag_other
  r  r   c                 F    U R                   R                  SSUS   05        g )Nr  r'   r   r   s     r   rs   'AfterAfterFramesetPhase.process_end_tag#
  s#    *VU6],C	Er   r   r  r   N)r   r   r   r   r  r   ry   ru   rp   ro   r   r  r   rs   r   r   r   r   r   r   r  r  

  sY    I<M=FFGE !	 	'(" r   r  r8   r7   r   rH  ry  r  r   r   r   r&  r   r   r   r   r   r   r  )rb   r  r   r  r  r  c                    ^ U S   R                  5       TR                  5       -  (       a3  [        U S   5      " U4S jU S   R                  5        5       5      U S'   g g )Nr]   c              3   N   >#    U  H  u  pTR                  X5      U4v   M     g 7fr    )rh   )r  r   r   r  s      r   r
  $adjust_attributes.<locals>.<genexpr>J
  s(      ,YBWJC\c'/BWs   "%)r   r\   r$   )rz   r  s    `r   r   r   H
  sZ    V}l//11U6]+ ,YBG-BUBUBW,Y Yf 2r   Nc                 .    [         U   U Uc  0 US.$ UUS.$ )N)r\   r'   r]   rc   )r   )r'   r\   rP   rk  s       r   r$  r$  N
  s3    d (#	  /9#	 r   r   )rr   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!  r7  rS  r  r  r  r  r  rS  rn  r  r  r  r  r  r,  r;  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   