
    Bh                         S SK Jr  S SKJr  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  SSKJr  \" \" \5      5      rS rS r " S	 S
5      rg)    )bisect_left)deque)html5   )	EOFTokenascii_lettersascii_upper_to_lowerdigits	hexdigitsreplacement_charactersspace_characterstag_token_types)HTMLInputStreamc                     U [         ;   a  g[        [        U 5      =n[        [         5      :X  a  g[        U   R	                  U 5      $ )NTF)entitiesr   entity_keyslen
startswithprefixis     E/var/www/html/env/lib/python3.13/site-packages/tinyhtml5/tokenizer.pyhas_keys_with_prefixr      s=    f--#h-?q>$$V,,    c                     U [         ;   a  U $ [        S[        U 5      S-   5       H  nU S U*  [         ;   d  M  U S U*  s  $    [        U 5      e)Nr   )r   ranger   KeyErrorr   s     r   longest_prefixr      sS    1c&kAo&#A2;("#A2; ' 6
r   c                      \ rS rSrSrSPS jrS rS rS rS r	SQS	 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/ r0S0 r1S1 r2S2 r3S3 r4S4 r5S5 r6S6 r7S7 r8S8 r9S9 r:S: r;S; r<S< r=S= r>S> r?S? r@S@ rASA rBSB rCSC rDSD rESE rFSF rGSG rHSH rISI rJSJ rKSK rLSL rMSM rNSN rOSOrPg)RHTMLTokenizer&   zHTML tokenizer.Nc                 b    [        U40 UD6U l        X l        U R                  U l        S U l        g N)r   streamparser
data_statestatecurrent_token)selfr%   r&   kwargss       r   __init__HTMLTokenizer.__init__)   s-    %f77 __
!r   c              #     #    [        / 5      U l        U R                  5       (       a  U R                  R                  (       aU  [
        R                  U R                  R                  R                  S5      S.v   U R                  R                  (       a  MU  U R                  (       a/  U R                  R                  5       v   U R                  (       a  M/  U R                  5       (       a  M  gg7f)zThis is where the magic happens.

We do our usually processing through the states and when we have a token
to return we yield the token which pauses processing until the next token
is requested.

r   typedataN)	r   token_queuer(   r%   errorsr   PARSE_ERRORpoppopleftr*   s    r   __iter__HTMLTokenizer.__iter__1   s      !9 jjll++$$!-- KK..2215  ++$$$
 ""&&..00 """ jjlls   BC1>C1C1/C1c                 v    [         R                  US.nU(       a  X#S'   U R                  R                  U5        g)z%Add a parse error to the token queue.r/   datavarsN)r   r4   r2   append)r*   _datar;   tokens       r   parse_errorHTMLTokenizer.parse_errorE   s1    **E: (*&r   c                 \    U R                   R                  [        R                  US.5        g)z+Add a characters string to the token queue.r/   N)r2   r<   r   
CHARACTERS)r*   r=   s     r   
charactersHTMLTokenizer.charactersL   s!    )9)95 IJr   c                    U(       a  [         O[        nU(       a  SOSn/ nU R                  R                  5       nXR;   a2  UR	                  U5        U R                  R                  5       nXR;   a  M2  [        SR                  U5      U5      nU[        ;   a  [        U   nU R                  SUS9  OSUs=::  a  S::  d  O  US:  a  S	nU R                  SUS9  OhS
Us=::  a  S::  d@  O  SUs=::  a  S::  d1  O  SUs=::  a  S::  d"  O  SUs=::  a  S::  d  O  U[        / SQ5      ;   a  U R                  SUS9  [        U5      nUS:w  a,  U R                  S5        U R                  R                  U5        U$ )zReturn either U+FFFD or the character based on the representation.

It also discards ";" if present. If not present self.parse_error is
invoked.

   
    z$illegal-codepoint-for-numeric-entity)integeri   i      �r                  i  i  )#   i  i  i i i i i i i i i i i i i i i i i	 i	 i
 i
 i i i i i i i i i i i rJ   ;z numeric-entity-without-semicolon)r   r   r%   	characterr<   intjoinr   r?   	frozensetchrunget)r*   is_hexallowedradixstackrS   rI   replacements           r   consume_number_entity#HTMLTokenizer.consume_number_entityP   sf     &)6" KK))+	"LL#--/I "
 bggene, ,,09KCWU)6)w/A"KCWU 7,f,7,f,7,f,7,f,9 &: ; ;   :G ! Mg,K ?@KKi(r   c                 8   SnU R                   R                  5       /nUS   [        SS/[        Q7;   =(       d    US L=(       a    XS   :H  nU(       a   U R                   R	                  US   5        GOqUS   S:X  a  SnUR                  U R                   R                  5       5        US   S;   a+  SnUR                  U R                   R                  5       5        US   U(       a  [        O[        ;   a1  U R                   R	                  US   5        U R                  U5      nGOU R                  S	5        U R                   R	                  UR                  5       5        SS
R                  U5       3nGOnUS   [        LaW  [        S
R                  U5      5      (       d  O7UR                  U R                   R                  5       5        US   [        La  MW   [        S
R                  US S 5      5      nUS   S:w  a  U R                  S5        [        U5      nXH   [        ;   =(       d    XH   [        ;   =(       d    XH   S:H  n	US   S:w  aL  U(       aE  U	(       a>  U R                   R	                  UR                  5       5        SS
R                  U5       3nOHU R                   R	                  UR                  5       5        [         U    S
R                  XHS  5       3n U(       a  U R$                  S   S   S==   U-  ss'   g U[        ;   a  SOSn
U R&                  R                  [(        U
   US.5        g ! ["         aQ    U R                  S5        U R                   R	                  UR                  5       5        SS
R                  U5       3n Nf = f)N&r   <#F)xXTzexpected-numeric-entityrH   rR   znamed-entity-without-semicolon=zexpected-named-entityr1   r   SPACE_CHARACTERSrB   r/   )r%   rS   r   r   rX   r<   r   r   r^   r?   r5   rU   r   r   r   r	   r   r   r)   r2   r   )r*   rZ   from_attributeoutputr\   rX   hexentity_nameentity_lengthallowed_characterr0   s              r   consume_entityHTMLTokenizer.consume_entity   s   &&()!Hc3:)9:: :D 8Wa%8 	 KKeAh'1X_CLL..01RyJ&T[[2245 Ry#Y6:!!%),33C8   !:;!!%))+.RWWU^,- )3&+BGGEN;;T[[2245 )3&X,RWWU3BZ-@A r?c)$$%EF #K 0(M9 0(F20(C/ " r?c)nARKK%%eiik2  01FKK%%eiik2 ( 56rwwu^?T7U6VWFv&r*1-7-)/3C)C%D##U4[&$IJ/  .  !89!!%))+.RWWU^,-.s   L> >ANNc                 $    U R                  USS9  g)z5Replace the need for entity_in_attribute_value_state.T)rZ   ri   N)ro   )r*   rZ   s     r   process_entity_in_attribute)HTMLTokenizer.process_entity_in_attribute   s    GDAr   c                    U R                   nUS   [        ;   a  US   R                  [        5      US'   US   [        R
                  :X  aC  US   n[        U5      n[        U5      [        U5      :  a  UR                  USSS2   5        X1S'   US   [        R                  :X  a6  US   (       a  U R                  S5        US   (       a  U R                  S5        U R                  R                  U5        U R                  U l        g)	zThis method is a generic handler for emitting the tags.

It also sets the state to "data" because that's what's needed after a
token has been emitted.

r0   namer1   Nrd   zattributes-in-end-tagselfClosingzself-closing-flag-on-end-tag)r)   r   	translater
   r   	START_TAGdictr   updateEND_TAGr?   r2   r<   r'   r(   )r*   r>   rawr1   s       r   emit_current_token HTMLTokenizer.emit_current_token   s     ""=O+!&M334HIE&MV}/FmCys8c$i'KKDbD	* $fV}-=$$%<='$$%CD&__
r   c                    U R                   R                  5       nUS:X  a  U R                  U l        gUS:X  a  U R                  U l        gUS:X  a#  U R                  S5        U R                  S5        gU[        L a  gU[        ;   aM  U R                  R                  [        R                  XR                   R                  [        S5      -   S.5        gU R                   R                  S5      nU R                  X-   5        g)	Nra   rb    invalid-codepointFTr/   ra   rb   r   )r%   rS   entity_data_stater(   tag_open_stater?   rC   r   r   r2   r<   r   rh   chars_untilr*   r1   rC   s      r   r'   HTMLTokenizer.data_state   s    {{$$&3;//DJ, + S[,,DJ( ' X01OOH%" ! S[%% ##..{{667GNN%   001EFJOOD-.r   c                 F    U R                  5         U R                  U l        gNT)ro   r'   r(   r7   s    r   r   HTMLTokenizer.entity_data_state  s    __
r   c                    U R                   R                  5       nUS:X  a  U R                  U l        gUS:X  a  U R                  U l        gU[
        L a  gUS:X  a#  U R                  S5        U R                  S5        gU[        ;   aM  U R                  R                  [        R                  XR                   R                  [        S5      -   S.5        gU R                   R                  S	5      nU R                  X-   5        g)
Nra   rb   Fr   r   rK   Tr/   r   )r%   rS   $character_reference_in_rc_data_stater(   rcdata_less_than_sign_stater   r?   rC   r   r2   r<   r   rh   r   )r*   r1   charss      r   rcdata_stateHTMLTokenizer.rcdata_state  s    {{$$&3;BBDJ. - S[99DJ* ) S[X01OOH%  %% ##..{{667GNN%   KK++,@AEOODL)r   c                 F    U R                  5         U R                  U l        gr   )ro   r   r(   r7   s    r   r   2HTMLTokenizer.character_reference_in_rc_data_state(  s    &&
r   c                 *   U R                   R                  5       nUS:X  a  U R                  U l        gUS:X  a#  U R	                  S5        U R                  S5        gU[        L a  gU R                   R                  S5      nU R                  X-   5        gNrb   r   r   rK   F)rb   r   T)r%   rS   rawtext_less_than_sign_stater(   r?   rC   r   r   r   s      r   rawtext_stateHTMLTokenizer.rawtext_state-  s    {{$$&3;::DJ  X01OOH%  S[00AJOOD-.r   c                 *   U R                   R                  5       nUS:X  a  U R                  U l        gUS:X  a#  U R	                  S5        U R                  S5        gU[        L a  gU R                   R                  S5      nU R                  X-   5        gr   )r%   rS    script_data_less_than_sign_stater(   r?   rC   r   r   r   s      r   script_data_stateHTMLTokenizer.script_data_state;  s    {{$$&3;>>DJ  X01OOH%  S[00AJOOD-.r   c                     U R                   R                  5       nU[        L a  gUS:X  a#  U R                  S5        U R	                  S5        gU R	                  XR                   R                  S5      -   5        g)NFr   r   rK   T)r%   rS   r   r?   rC   r   r*   r1   s     r   plaintext_stateHTMLTokenizer.plaintext_stateI  si    {{$$&3;X01OOH%  OOD;;#:#:8#DDEr   c                    U R                   R                  5       nUS:X  a  U R                  U l        gUS:X  a  U R                  U l        gU[
        ;   a-  [        R                  U/ SSS.U l        U R                  U l        gUS:X  a4  U R                  S5        U R                  S5        U R                  U l        gUS:X  a>  U R                  S	5        U R                   R                  U5        U R                  U l        gU R                  S
5        U R                  S5        U R                   R                  U5        U R                  U l        g)N!/F)r0   ru   r1   rv   selfClosingAcknowledged>z'expected-tag-name-but-got-right-bracketz<>?z'expected-tag-name-but-got-question-markzexpected-tag-namerb   T)r%   rS   markup_declaration_open_stater(   close_tag_open_stater	   r   rx   r)   tag_name_stater?   rC   r'   rX   bogus_comment_stater   s     r   r   HTMLTokenizer.tag_open_stateT  s4   {{$$&3;;;DJ< ; S[22DJ8 7 ]"$+0"D ,,DJ& % S[ FGOOD!DJ  S[ FGKKd#11DJ 	 01OOC KKd#DJr   c                    U R                   R                  5       nU[        ;   a,  [        R                  U/ SS.U l        U R                  U l        g	US:X  a#  U R                  S5        U R                  U l        g	U[        L a4  U R                  S5        U R                  S5        U R                  U l        g	U R                  SUS9  U R                   R                  U5        U R                  U l        g	)
NFr0   ru   r1   rv   r   z*expected-closing-tag-but-got-right-bracketz expected-closing-tag-but-got-eof</z!expected-closing-tag-but-got-charr1   T)r%   rS   r	   r   r{   r)   r   r(   r?   r'   r   rC   rX   r   r   s     r   r   "HTMLTokenizer.close_tag_open_statew  s    {{$$&= $	"D ,,DJ  S[IJDJ  S[?@OOD!DJ  @tLKKd#11DJr   c                    U R                   R                  5       nU[        ;   a  U R                  U l        gUS:X  a  U R                  5         gU[        L a#  U R                  S5        U R                  U l        gUS:X  a  U R                  U l        gUS:X  a)  U R                  S5        U R                  S==   S-  ss'   gU R                  S==   U-  ss'   g)	Nr   zeof-in-tag-namer   r   r   ru   rK   T)r%   rS   r   before_attribute_name_stater(   r}   r   r?   r'   self_closing_start_tag_stater)   r   s     r   r   HTMLTokenizer.tag_name_state  s    {{$$&##99DJ  S[##%  S[./DJ  S[::DJ  X01v&(2&
  v&$.& r   c                     U R                   R                  5       nUS:X  a  SU l        U R                  U l        gU R                  S5        U R                   R                  U5        U R                  U l        gNr   rH   rb   T)r%   rS   temporary_bufferrcdata_end_tag_open_stater(   rC   rX   r   r   s     r   r   )HTMLTokenizer.rcdata_less_than_sign_state  se    {{$$&3;$&D!77DJ
  OOC KKd#**DJr   c                    U R                   R                  5       nU[        ;   a'  U =R                  U-  sl        U R                  U l        gU R                  S5        U R                   R                  U5        U R                  U l        gNr   T)	r%   rS   r	   r   rcdata_end_tag_name_stater(   rC   rX   r   r   s     r   r   'HTMLTokenizer.rcdata_end_tag_open_state  so    {{$$&= !!T)!77DJ
  OOD!KKd#**DJr   c                 \   U R                   =(       a8    U R                   S   R                  5       U R                  R                  5       :H  nU R                  R	                  5       nU[
        ;   a=  U(       a6  [        R                  U R                  / SS.U l         U R                  U l	        gUS:X  a=  U(       a6  [        R                  U R                  / SS.U l         U R                  U l	        gUS:X  aM  U(       aF  [        R                  U R                  / SS.U l         U R                  5         U R                  U l	        gU[        ;   a  U =R                  U-  sl        gU R                  SU R                   35        U R                  R                  U5        U R                   U l	        gNru   Fr   r   r   r   T)r)   lowerr   r%   rS   r   r   r{   r   r(   r   r}   r'   r	   rC   rX   r   r*   appropriater1   s      r   r   'HTMLTokenizer.rcdata_end_tag_name_state  sz    Pv&,,.$2G2G2M2M2OO 	 {{$$&##--$	"D 99DJ0 / S[[--$	"D ::DJ   S[[--$	"D ##%DJ  ]"!!T)!
  OOb!6!6 789KKd#**DJr   c                     U R                   R                  5       nUS:X  a  SU l        U R                  U l        gU R                  S5        U R                   R                  U5        U R                  U l        gr   )r%   rS   r   rawtext_end_tag_open_stater(   rC   rX   r   r   s     r   r   *HTMLTokenizer.rawtext_less_than_sign_state  se    {{$$&3;$&D!88DJ
  OOC KKd#++DJr   c                    U R                   R                  5       nU[        ;   a'  U =R                  U-  sl        U R                  U l        gU R                  S5        U R                   R                  U5        U R                  U l        gr   )	r%   rS   r	   r   rawtext_end_tag_name_stater(   rC   rX   r   r   s     r   r   (HTMLTokenizer.rawtext_end_tag_open_state  so    {{$$&= !!T)!88DJ
  OOD!KKd#++DJr   c                 \   U R                   =(       a8    U R                   S   R                  5       U R                  R                  5       :H  nU R                  R	                  5       nU[
        ;   a=  U(       a6  [        R                  U R                  / SS.U l         U R                  U l	        gUS:X  a=  U(       a6  [        R                  U R                  / SS.U l         U R                  U l	        gUS:X  aM  U(       aF  [        R                  U R                  / SS.U l         U R                  5         U R                  U l	        gU[        ;   a  U =R                  U-  sl        gU R                  SU R                   35        U R                  R                  U5        U R                   U l	        gr   )r)   r   r   r%   rS   r   r   r{   r   r(   r   r}   r'   r	   rC   rX   r   r   s      r   r   (HTMLTokenizer.rawtext_end_tag_name_state  sz    Pv&,,.$2G2G2M2M2OO 	 {{$$&##--$	"D 99DJ0 / S[[--$	"D ::DJ   S[[--$	"D ##%DJ  ]"!!T)!
  OOb!6!6 789KKd#++DJr   c                 B   U R                   R                  5       nUS:X  a  SU l        U R                  U l        gUS:X  a#  U R                  S5        U R                  U l        gU R                  S5        U R                   R                  U5        U R                  U l        g)Nr   rH   r   z<!rb   T)	r%   rS   r   script_data_end_tag_open_stater(   rC   script_data_escape_start_staterX   r   r   s     r   r   .HTMLTokenizer.script_data_less_than_sign_state  s    {{$$&3;$&D!<<DJ  S[OOD!<<DJ
  OOC KKd#//DJr   c                    U R                   R                  5       nU[        ;   a'  U =R                  U-  sl        U R                  U l        gU R                  S5        U R                   R                  U5        U R                  U l        gr   )	r%   rS   r	   r   script_data_end_tag_name_stater(   rC   rX   r   r   s     r   r   ,HTMLTokenizer.script_data_end_tag_open_state)  so    {{$$&= !!T)!<<DJ
  OOD!KKd#//DJr   c                 \   U R                   =(       a8    U R                   S   R                  5       U R                  R                  5       :H  nU R                  R	                  5       nU[
        ;   a=  U(       a6  [        R                  U R                  / SS.U l         U R                  U l	        gUS:X  a=  U(       a6  [        R                  U R                  / SS.U l         U R                  U l	        gUS:X  aM  U(       aF  [        R                  U R                  / SS.U l         U R                  5         U R                  U l	        gU[        ;   a  U =R                  U-  sl        gU R                  SU R                   35        U R                  R                  U5        U R                   U l	        gr   )r)   r   r   r%   rS   r   r   r{   r   r(   r   r}   r'   r	   rC   rX   r   r   s      r   r   ,HTMLTokenizer.script_data_end_tag_name_state4  sz    Pv&,,.$2G2G2M2M2OO 	 {{$$&##--$	"D 99DJ0 / S[[--$	"D ::DJ   S[[--$	"D ##%DJ  ]"!!T)!
  OOb!6!6 789KKd#//DJr   c                     U R                   R                  5       nUS:X  a#  U R                  S5        U R                  U l        gU R                   R                  U5        U R                  U l        gN-T)r%   rS   rC   #script_data_escape_start_dash_stater(   rX   r   r   s     r   r   ,HTMLTokenizer.script_data_escape_start_stateZ  ]    {{$$&3;OOC AADJ  KKd#//DJr   c                     U R                   R                  5       nUS:X  a#  U R                  S5        U R                  U l        gU R                   R                  U5        U R                  U l        gr   )r%   rS   rC   #script_data_escaped_dash_dash_stater(   rX   r   r   s     r   r   1HTMLTokenizer.script_data_escape_start_dash_stated  r   r   c                    U R                   R                  5       nUS:X  a#  U R                  S5        U R                  U l        gUS:X  a  U R
                  U l        gUS:X  a#  U R                  S5        U R                  S5        gU[        L a  U R                  U l        gU R                  XR                   R                  S5      -   5        g)Nr   rb   r   r   rK   )rb   r   r   T)
r%   rS   rC   script_data_escaped_dash_stater(   (script_data_escaped_less_than_sign_stater?   r   r'   r   r   s     r   script_data_escaped_state'HTMLTokenizer.script_data_escaped_staten  s    {{$$&3;OOC <<DJ  S[FFDJ  X01OOH%
 	 S[DJ  OOD;;#:#:;O#PPQr   c                    U R                   R                  5       nUS:X  a#  U R                  S5        U R                  U l        gUS:X  a  U R
                  U l        gUS:X  a4  U R                  S5        U R                  S5        U R                  U l        gU[        L a  U R                  U l        gU R                  U5        U R                  U l        g)Nr   rb   r   r   rK   T)
r%   rS   rC   r   r(   r   r?   r   r   r'   r   s     r   r   ,HTMLTokenizer.script_data_escaped_dash_state~  s    {{$$&3;OOC AADJ  S[FFDJ  X01OOH%77DJ  S[DJ  OOD!77DJr   c                    U R                   R                  5       nUS:X  a  U R                  S5        gUS:X  a  U R                  U l        gUS:X  a#  U R                  S5        U R
                  U l        gUS:X  a4  U R                  S5        U R                  S5        U R                  U l        gU[        L a  U R                  U l        gU R                  U5        U R                  U l        g)Nr   rb   r   r   r   rK   T)
r%   rS   rC   r   r(   r   r?   r   r   r'   r   s     r   r   1HTMLTokenizer.script_data_escaped_dash_dash_state  s    {{$$&3;OOC   S[FFDJ  S[OOC //DJ  X01OOH%77DJ  S[DJ  OOD!77DJr   c                 \   U R                   R                  5       nUS:X  a  SU l        U R                  U l        gU[
        ;   a,  U R                  SU 35        Xl        U R                  U l        gU R                  S5        U R                   R                  U5        U R                  U l        gr   )
r%   rS   r   &script_data_escaped_end_tag_open_stater(   r	   rC   %script_data_double_escape_start_staterX   r   r   s     r   r   6HTMLTokenizer.script_data_escaped_less_than_sign_state  s    {{$$&3;$&D!DDDJ  ]"OOavJ'$(!CCDJ
  OOC KKd#77DJr   c                     U R                   R                  5       nU[        ;   a  Xl        U R                  U l        gU R                  S5        U R                   R                  U5        U R                  U l        gr   )	r%   rS   r	   r   &script_data_escaped_end_tag_name_stater(   rC   rX   r   r   s     r   r   4HTMLTokenizer.script_data_escaped_end_tag_open_state  sd    {{$$&= $(!DDDJ
  OOD!KKd#77DJr   c                 \   U R                   =(       a8    U R                   S   R                  5       U R                  R                  5       :H  nU R                  R	                  5       nU[
        ;   a=  U(       a6  [        R                  U R                  / SS.U l         U R                  U l	        gUS:X  a=  U(       a6  [        R                  U R                  / SS.U l         U R                  U l	        gUS:X  aM  U(       aF  [        R                  U R                  / SS.U l         U R                  5         U R                  U l	        gU[        ;   a  U =R                  U-  sl        gU R                  SU R                   35        U R                  R                  U5        U R                   U l	        gr   )r)   r   r   r%   rS   r   r   r{   r   r(   r   r}   r'   r	   rC   rX   r   r   s      r   r   4HTMLTokenizer.script_data_escaped_end_tag_name_state  sz    Pv&,,.$2G2G2M2M2OO 	 {{$$&##--$	"D 99DJ0 / S[[--$	"D ::DJ   S[[--$	"D ##%DJ  ]"!!T)!
  OOb!6!6 789KKd#77DJr   c                    U R                   R                  5       nU[        [        S5      -  ;   aT  U R	                  U5        U R
                  R                  5       S:X  a  U R                  U l        gU R                  U l         gU[        ;   a'  U R	                  U5        U =R
                  U-  sl        gU R                   R                  U5        U R                  U l        gN)r   r   scriptT)r%   rS   r   rV   rC   r   r    script_data_double_escaped_stater(   r   r	   rX   r   s     r   r   3HTMLTokenizer.script_data_double_escape_start_state  s    {{$$&$y'<<=OOD!$$**,8!BB
  ";;
  ]"OOD!!!T)!  KKd#77DJr   c                    U R                   R                  5       nUS:X  a#  U R                  S5        U R                  U l        gUS:X  a#  U R                  S5        U R
                  U l        gUS:X  a#  U R                  S5        U R                  S5        gU[        L a#  U R                  S5        U R                  U l        gU R                  U5        gNr   rb   r   r   rK   eof-in-script-in-scriptT)	r%   rS   rC   %script_data_double_escaped_dash_stater(   /script_data_double_escaped_less_than_sign_stater?   r   r'   r   s     r   r   .HTMLTokenizer.script_data_double_escaped_state  s    {{$$&3;OOC CCDJ  S[OOC MMDJ  X01OOH%  S[67DJ  OOD!r   c                    U R                   R                  5       nUS:X  a#  U R                  S5        U R                  U l        gUS:X  a#  U R                  S5        U R
                  U l        gUS:X  a4  U R                  S5        U R                  S5        U R                  U l        gU[        L a#  U R                  S5        U R                  U l        gU R                  U5        U R                  U l        gr   )
r%   rS   rC   *script_data_double_escaped_dash_dash_stater(   r   r?   r   r   r'   r   s     r   r   3HTMLTokenizer.script_data_double_escaped_dash_state  s    {{$$&3;OOC HHDJ  S[OOC MMDJ  X01OOH%>>DJ  S[67DJ  OOD!>>DJr   c                    U R                   R                  5       nUS:X  a  U R                  S5        gUS:X  a#  U R                  S5        U R                  U l        gUS:X  a#  U R                  S5        U R
                  U l        gUS:X  a4  U R                  S5        U R                  S5        U R                  U l        gU[        L a#  U R                  S5        U R                  U l        gU R                  U5        U R                  U l        g)	Nr   rb   r   r   r   rK   r   T)
r%   rS   rC   r   r(   r   r?   r   r   r'   r   s     r   r   8HTMLTokenizer.script_data_double_escaped_dash_dash_state  s    {{$$&3;OOC " ! S[OOC MMDJ  S[OOC //DJ  X01OOH%>>DJ  S[67DJ  OOD!>>DJr   c                     U R                   R                  5       nUS:X  a*  U R                  S5        SU l        U R                  U l        gU R                   R                  U5        U R                  U l        g)Nr   rH   T)r%   rS   rC   r   #script_data_double_escape_end_stater(   rX   r   r   s     r   r   =HTMLTokenizer.script_data_double_escaped_less_than_sign_state0  se    {{$$&3;OOC $&D!AADJ  KKd#>>DJr   c                    U R                   R                  5       nU[        [        S5      -  ;   aT  U R	                  U5        U R
                  R                  5       S:X  a  U R                  U l        gU R                  U l         gU[        ;   a'  U R	                  U5        U =R
                  U-  sl        gU R                   R                  U5        U R                  U l        gr   )r%   rS   r   rV   rC   r   r   r   r(   r   r	   rX   r   s     r   r   1HTMLTokenizer.script_data_double_escape_end_state;  s    {{$$&$y'<<=OOD!$$**,8!;;
  "BB
  ]"OOD!!!T)!  KKd#>>DJr   c                 B   U R                   R                  5       nU[        ;   a!  U R                   R                  [        S5        gU[        ;   a2  U R
                  S   R                  US/5        U R                  U l        gUS:X  a  U R                  5         gUS:X  a  U R                  U l        gUS;   aC  U R                  S5        U R
                  S   R                  US/5        U R                  U l        gUS:X  aC  U R                  S	5        U R
                  S   R                  S
S/5        U R                  U l        gU[        L a#  U R                  S5        U R                  U l        gU R
                  S   R                  US/5        U R                  U l        g)NTr1   rH   r   r   )'"rg   rb   #invalid-character-in-attribute-namer   r   rK   z#expected-attribute-name-but-got-eof)r%   rS   r   r   r	   r)   r<   attribute_name_stater(   r}   r   r?   r   r'   r   s     r   r   )HTMLTokenizer.before_attribute_name_stateK  s   {{$$&##KK##$4d;, + ]"v&--tRj922DJ& % S[##%" ! S[::DJ  ))BCv&--tRj922DJ  X01v&--xn=22DJ  S[BCDJ  v&--tRj922DJr   c                 2   U R                   R                  5       nSnSnUS:X  a  U R                  U l        GO@U[        ;   a@  U R
                  S   S   S==   XR                   R                  [        S5      -   -  ss'   SnOUS:X  a  SnOU[        ;   a  U R                  U l        OUS:X  a  U R                  U l        OUS	:X  a1  U R                  S
5        U R
                  S   S   S==   S-  ss'   SnOUS;   a1  U R                  S5        U R
                  S   S   S==   U-  ss'   SnOKU[        L a#  U R                  S5        U R                  U l        OU R
                  S   S   S==   U-  ss'   SnU(       a  U R
                  S   S   S   R                  [        5      U R
                  S   S   S'   U R
                  S   S S  H1  u  pEU R
                  S   S   S   U:X  d  M   U R                  S5          O   U(       a  U R                  5         g)NTFrg   r1   rd   r   r   r   r   r   rK   r  r  rb   r  zeof-in-attribute-namezduplicate-attribute)r%   rS   before_attribute_value_stater(   r	   r)   r   r   after_attribute_name_stater   r?   r   r'   rw   r
   r}   )r*   r1   leaving_this_state
emit_tokenru   _s         r   r  "HTMLTokenizer.attribute_name_statef  s   {{$$&!
3;::DJ]"v&r*1-{{..}dCCE-!&S[ J%%88DJS[::DJX01v&r*1-9-!&_$BCv&r*1-5-!&S[45DJv&r*1-5-!&
 ""6*2.q1;;<PQ v&r*1---f5cr:%%f-b1!4<$$%:; ;
 '')r   c                 r   U R                   R                  5       nU[        ;   a!  U R                   R                  [        S5        gUS:X  a  U R                  U l        gUS:X  a  U R                  5         gU[        ;   a2  U R                  S   R                  US/5        U R                  U l        gUS:X  a  U R                  U l        gUS:X  aC  U R                  S5        U R                  S   R                  S	S/5        U R                  U l        gUS
;   aC  U R                  S5        U R                  S   R                  US/5        U R                  U l        gU[        L a#  U R                  S5        U R                  U l        gU R                  S   R                  US/5        U R                  U l        g)NTrg   r   r1   rH   r   r   r   rK   r  z&invalid-character-after-attribute-namezexpected-end-of-tag-but-got-eof)r%   rS   r   r   r  r(   r}   r	   r)   r<   r  r   r?   r   r'   r   s     r   r  (HTMLTokenizer.after_attribute_name_state  s   {{$$&##KK##$4d;0 / S[::DJ, + S[##%( ' ]"v&--tRj922DJ" ! S[::DJ  X01v&--xn=22DJ  _$EFv&--tRj922DJ  S[>?DJ  v&--tRj922DJr   c                 p   U R                   R                  5       nU[        ;   a!  U R                   R                  [        S5        gUS:X  a  U R                  U l        gUS:X  a-  U R                  U l        U R                   R                  U5        gUS:X  a  U R                  U l        gUS:X  a"  U R                  S5        U R                  5         gUS:X  a@  U R                  S5        U R                  S	   S
   S==   S-  ss'   U R                  U l        gUS;   a@  U R                  S5        U R                  S	   S
   S==   U-  ss'   U R                  U l        gU[        L a#  U R                  S5        U R                  U l        gU R                  S	   S
   S==   U-  ss'   U R                  U l        g)NTr  ra   r  r   z.expected-attribute-value-but-got-right-bracketr   r   r1   rd   r   rK   )rg   rb   `z"equals-in-unquoted-attribute-valuez$expected-attribute-value-but-got-eof)r%   rS   r   r   #attribute_value_double_quoted_stater(   attribute_value_unquoted_staterX   #attribute_value_single_quoted_stater?   r}   r)   r   r'   r   s     r   r  *HTMLTokenizer.before_attribute_value_state  s   {{$$&##KK##$4d;2 1 T\AADJ. - S[<<DJKKd#( ' S[AADJ$ # S[MN##%  X01v&r*1-9-<<DJ  _$ABv&r*1-5-<<DJ  S[CDDJ  v&r*1-5-<<DJr   c                    U R                   R                  5       nUS:X  a  U R                  U l        gUS:X  a  U R	                  S5        gUS:X  a/  U R                  S5        U R                  S   S   S==   S-  ss'   gU[        L a#  U R                  S	5        U R                  U l        gU R                  S   S   S==   XR                   R                  S
5      -   -  ss'   g)Nr  ra   r   r   r1   rd   r   rK   z#eof-in-attribute-value-double-quote)r  ra   r   T
r%   rS   after_attribute_value_stater(   rr   r?   r)   r   r'   r   r   s     r   r  1HTMLTokenizer.attribute_value_double_quoted_state  s    {{$$&4<99DJ  S[,,S1  X01v&r*1-9-  S[BCDJ  v&r*1-{{../DEEG-r   c                    U R                   R                  5       nUS:X  a  U R                  U l        gUS:X  a  U R	                  S5        gUS:X  a/  U R                  S5        U R                  S   S   S==   S-  ss'   gU[        L a#  U R                  S	5        U R                  U l        gU R                  S   S   S==   XR                   R                  S
5      -   -  ss'   g)Nr  ra   r   r   r1   rd   r   rK   z#eof-in-attribute-value-single-quote)r  ra   r   Tr  r   s     r   r  1HTMLTokenizer.attribute_value_single_quoted_state  s    {{$$&3;99DJ  S[,,S1  X01v&r*1-9-  S[BCDJ  v&r*1-{{../CDDF-r   c           	         U R                   R                  5       nU[        ;   a  U R                  U l        gUS:X  a  U R                  S5        gUS:X  a  U R                  5         gUS;   a/  U R                  S5        U R                  S   S   S==   U-  ss'   gUS:X  a/  U R                  S	5        U R                  S   S   S==   S
-  ss'   gU[        L a#  U R                  S5        U R                  U l        gU R                  S   S   S==   XR                   R                  [        S5      [        -  5      -   -  ss'   g)Nra   r   )r  r  rg   rb   r  z0unexpected-character-in-unquoted-attribute-valuer1   rd   r   r   r   rK   z eof-in-attribute-value-no-quotes)ra   r   r  r  rg   rb   r  r   T)r%   rS   r   r   r(   rr   r}   r?   r)   r   r'   r   rV   r   s     r   r  ,HTMLTokenizer.attribute_value_unquoted_state  sY   {{$$&##99DJ& % S[,,S1" ! S[##%  ..OPv&r*1-5-  X01v&r*1-9-  S[?@DJ 	 v&r*1-{{..KL$%& &'- r   c                    U R                   R                  5       nU[        ;   a  U R                  U l        gUS:X  a  U R                  5         gUS:X  a  U R                  U l        gU[        L a>  U R                  S5        U R                   R                  U5        U R                  U l        gU R                  S5        U R                   R                  U5        U R                  U l        g)Nr   r   z$unexpected-eof-after-attribute-valuez*unexpected-character-after-attribute-valueT)r%   rS   r   r   r(   r}   r   r   r?   rX   r'   r   s     r   r  )HTMLTokenizer.after_attribute_value_state  s    {{$$&##99DJ  S[##%  S[::DJ  S[CDKKd#DJ
  IJKKd#99DJr   c                    U R                   R                  5       nUS:X  a   SU R                  S'   U R                  5         gU[        L a>  U R                  S5        U R                   R                  U5        U R                  U l        gU R                  S5        U R                   R                  U5        U R                  U l        g)Nr   Trv   z#unexpected-eof-after-solidus-in-tagz)unexpected-character-after-solidus-in-tag)
r%   rS   r)   r}   r   r?   rX   r'   r(   r   r   s     r   r   *HTMLTokenizer.self_closing_start_tag_state  s    {{$$&3;04D}-##%  S[BCKKd#DJ
  HIKKd#99DJr   c                    U R                   R                  S5      nUR                  SS5      nU R                  R	                  [
        R                  US.5        U R                   R                  5         U R                  U l	        g)Nr   r   rK   r/   T)
r%   r   replacer2   r<   r   COMMENTrS   r'   r(   r   s     r   r   !HTMLTokenizer.bogus_comment_state-  se     {{&&s+||Hh/ EF 	__
r   c                    U R                   R                  5       /nUS   S:X  a^  UR                  U R                   R                  5       5        US   S:X  a*  [        R                  SS.U l        U R                  U l        gGOwUS   (       a  US   S;   a  SnS HC  nUR                  U R                   R                  5       5        US   (       a  US   U;  d  MA  Sn  O   U(       a-  [        R                  SS S SS	.U l        U R                  U l        gOUS   S
:X  a  U R                  b  U R                  R                  R                  (       a  U R                  R                  R                  S   R                  U R                  R                  R                  :w  aZ  SnS H9  nUR                  U R                   R                  5       5        US   U:w  d  M7  Sn  O   U(       a  U R                  U l        gU R!                  S5        U(       a2  U R                   R#                  UR%                  5       5        U(       a  M2  U R&                  U l        g)Nrd   r   rH   r/   TdD)oOcCtTyYpPeEF)r0   ru   publicIdsystemIdcorrect[zCDATA[zexpected-dashes-or-doctype)r%   rS   r<   r   r(  r)   comment_start_stater(   DOCTYPEdoctype_stater&   treeopen_elements	namespacedefault_namespacecdata_section_stater?   rX   r5   r   )r*   r\   matchedexpecteds       r   r   +HTMLTokenizer.markup_declaration_open_state;  s   &&()9LL..01RyC.3mmR%H"!55
   2Y59,G@T[[2245RyE"IX$=#G	 A
 !MM $ $#&" "//
  Bi3kk%kk,,kk,,R0::kk001G$T[[22459(#G	 %
 !55
56KKeiik* e--
r   c                 T   U R                   R                  5       nUS:X  a  U R                  U l        g	US:X  a)  U R	                  S5        U R
                  S==   S-  ss'   g	US:X  aH  U R	                  S5        U R                  R                  U R
                  5        U R                  U l        g	U[        L aH  U R	                  S5        U R                  R                  U R
                  5        U R                  U l        g	U R
                  S==   U-  ss'   U R                  U l        g	)
Nr   r   r   r1   rK   r   incorrect-commenteof-in-commentT)r%   rS   comment_start_dash_stater(   r?   r)   r2   r<   r'   r   comment_stater   s     r   r6  !HTMLTokenizer.comment_start_statej  s   {{$$&3;66DJ  X01v&(2&  S[01##D$6$67DJ  S[-.##D$6$67DJ  v&$.&++DJr   c                 Z   U R                   R                  5       nUS:X  a  U R                  U l        g	US:X  a)  U R	                  S5        U R
                  S==   S-  ss'   g	US:X  aH  U R	                  S5        U R                  R                  U R
                  5        U R                  U l        g	U[        L aH  U R	                  S5        U R                  R                  U R
                  5        U R                  U l        g	U R
                  S==   SU 3-  ss'   U R                  U l        g	)
Nr   r   r   r1      -�r   rB  rC  T)r%   rS   comment_end_stater(   r?   r)   r2   r<   r'   r   rE  r   s     r   rD  &HTMLTokenizer.comment_start_dash_state~  s   {{$$&3;//DJ  X01v&)3&  S[01##D$6$67DJ  S[-.##D$6$67DJ  v&AdV*4&++DJr   c                    U R                   R                  5       nUS:X  a  U R                  U l        gUS:X  a)  U R	                  S5        U R
                  S==   S-  ss'   gU[        L aH  U R	                  S5        U R                  R                  U R
                  5        U R                  U l        gU R
                  S==   XR                   R                  S5      -   -  ss'   g)	Nr   r   r   r1   rK   rC  )r   r   T)r%   rS   comment_end_dash_stater(   r?   r)   r   r2   r<   r'   r   r   s     r   rE  HTMLTokenizer.comment_state  s    {{$$&3;44DJ  X01v&(2&  S[-.##D$6$67DJ  v&{{..??A&r   c                    U R                   R                  5       nUS:X  a  U R                  U l        gUS:X  a:  U R	                  S5        U R
                  S==   S-  ss'   U R                  U l        gU[        L aH  U R	                  S5        U R                  R                  U R
                  5        U R                  U l        gU R
                  S==   SU 3-  ss'   U R                  U l        g)Nr   r   r   r1   rH  zeof-in-comment-end-dashT)r%   rS   rI  r(   r?   r)   rE  r   r2   r<   r'   r   s     r   rL  $HTMLTokenizer.comment_end_dash_state  s    {{$$&3;//DJ  X01v&)3&++DJ  S[67##D$6$67DJ  v&AdV*4&++DJr   c                    U R                   R                  5       nUS:X  a7  U R                  R                  U R                  5        U R
                  U l        gUS:X  a:  U R                  S5        U R                  S==   S-  ss'   U R                  U l        gUS:X  a#  U R                  S5        U R                  U l        gUS:X  a)  U R                  S	5        U R                  S==   U-  ss'   gU[        L aH  U R                  S
5        U R                  R                  U R                  5        U R
                  U l        gU R                  S5        U R                  S==   SU 3-  ss'   U R                  U l        g)Nr   r   r   r1   u   --�r   z,unexpected-bang-after-double-dash-in-commentr   z,unexpected-dash-after-double-dash-in-commentzeof-in-comment-double-dashzunexpected-char-in-commentz--T)r%   rS   r2   r<   r)   r'   r(   r?   rE  comment_end_bang_stater   r   s     r   rI  HTMLTokenizer.comment_end_state  sb   {{$$&3;##D$6$67DJ( ' X01v&*4&++DJ   S[KL44DJ  S[KLv&$.&  S[9:##D$6$67DJ  9:v&Btf+5&++DJr   c                    U R                   R                  5       nUS:X  a7  U R                  R                  U R                  5        U R
                  U l        g	US:X  a)  U R                  S==   S-  ss'   U R                  U l        g	US:X  a:  U R                  S5        U R                  S==   S-  ss'   U R                  U l        g	U[        L aH  U R                  S5        U R                  R                  U R                  5        U R
                  U l        g	U R                  S==   SU 3-  ss'   U R                  U l        g	)
Nr   r   r1   z--!r   r   u   --!�zeof-in-comment-end-bang-stateT)r%   rS   r2   r<   r)   r'   r(   rL  r?   rE  r   r   s     r   rQ  $HTMLTokenizer.comment_end_bang_state  s'   {{$$&3;##D$6$67DJ  S[v&%/&44DJ  X01v&+5&++DJ  S[<=##D$6$67DJ  v&Cv,6&++DJr   c                    U R                   R                  5       nU[        ;   a  U R                  U l        gU[
        L aW  U R                  S5        SU R                  S'   U R                  R                  U R                  5        U R                  U l        gU R                  S5        U R                   R                  U5        U R                  U l        g)N!expected-doctype-name-but-got-eofFr4  zneed-space-after-doctypeT)r%   rS   r   before_doctype_name_stater(   r   r?   r)   r2   r<   r'   rX   r   s     r   r8  HTMLTokenizer.doctype_state  s    {{$$&##77DJ  S[@A,1Dy)##D$6$67DJ
  78KKd#77DJr   c                 x   U R                   R                  5       nU[        ;   a   g
US:X  aW  U R                  S5        SU R                  S'   U R
                  R                  U R                  5        U R                  U l        g
US:X  a2  U R                  S5        SU R                  S'   U R                  U l        g
U[        L aW  U R                  S	5        SU R                  S'   U R
                  R                  U R                  5        U R                  U l        g
XR                  S'   U R                  U l        g
)Nr   z+expected-doctype-name-but-got-right-bracketFr4  r   r   rK   ru   rV  T)r%   rS   r   r?   r)   r2   r<   r'   r(   doctype_name_stater   r   s     r   rW  'HTMLTokenizer.before_doctype_name_state  s$   {{$$&##$ # S[JK,1Dy)##D$6$67DJ  X01)1Dv&00DJ  S[@A,1Dy)##D$6$67DJ  *.v&00DJr   c                 r   U R                   R                  5       nU[        ;   aA  U R                  S   R	                  [
        5      U R                  S'   U R                  U l        g	US:X  af  U R                  S   R	                  [
        5      U R                  S'   U R                  R                  U R                  5        U R                  U l        g	US:X  a:  U R                  S5        U R                  S==   S-  ss'   U R                  U l        g	U[        L a  U R                  S5        SU R                  S'   U R                  S   R	                  [
        5      U R                  S'   U R                  R                  U R                  5        U R                  U l        g	U R                  S==   U-  ss'   g	)
Nru   r   r   r   rK   zeof-in-doctype-nameFr4  T)r%   rS   r   r)   rw   r
   after_doctype_name_stater(   r2   r<   r'   r?   rZ  r   r   s     r   rZ   HTMLTokenizer.doctype_name_state  s   {{$$&##""6*445IJ v&66DJ& % S[""6*445IJ v&##D$6$67DJ  X01v&(2&00DJ  S[23,1Dy)""6*445IJ v&##D$6$67DJ  v&$.&r   c                    U R                   R                  5       nU[        ;   a   gUS:X  a7  U R                  R	                  U R
                  5        U R                  U l        gU[        L ar  SU R
                  S'   U R                   R                  U5        U R                  S5        U R                  R	                  U R
                  5        U R                  U l        gU(       aU  US;   aO  SnS H-  nU R                   R                  5       nU(       a  X;  d  M+  Sn  O   U(       a  U R                  U l        gO[U(       aT  US;   aN  SnS	 H-  nU R                   R                  5       nU(       a  X;  d  M+  Sn  O   U(       a  U R                  U l        gU R                   R                  U5        U R                  S
US9  SU R
                  S'   U R                  U l        g)Nr   Fr4  eof-in-doctyper0  T)uUbBlLiIr-  sS)r/  re  r.  r1  mMz*expected-space-or-right-bracket-in-doctyper   )r%   rS   r   r2   r<   r)   r'   r(   r   rX   r?   "after_doctype_public_keyword_state"after_doctype_system_keyword_statebogus_doctype_state)r*   r1   r>  r?  s       r   r]  &HTMLTokenizer.after_doctype_name_state"  s   {{$$&##P O S[##D$6$67DJJ I S[,1Dy)KKd#-.##D$6$67DJ> ;  >H;;002D4#7"'	 !?
 !%!H!HDJ  $$, >H;;002D4#7"'	 !?
 !%!H!HDJ KKd#IPTU,1Dy)11DJr   c                    U R                   R                  5       nU[        ;   a  U R                  U l        gUS;   a>  U R                  S5        U R                   R                  U5        U R                  U l        gU[        L aW  U R                  S5        SU R                  S'   U R                  R                  U R                  5        U R                  U l        gU R                   R                  U5        U R                  U l        gN)r  r  unexpected-char-in-doctyper`  Fr4  T)r%   rS   r   &before_doctype_public_identifier_stater(   r?   rX   r   r)   r2   r<   r'   r   s     r   rg  0HTMLTokenizer.after_doctype_public_keyword_stateO      {{$$&##DDDJ  Z9:KKd#DDDJ  S[-.,1Dy)##D$6$67DJ  KKd#DDDJr   c                    U R                   R                  5       nU[        ;   a   gUS:X  a!  SU R                  S'   U R                  U l        gUS:X  a!  SU R                  S'   U R                  U l        gUS:X  aW  U R                  S5        SU R                  S'   U R                  R                  U R                  5        U R                  U l        gU[        L aW  U R                  S	5        SU R                  S'   U R                  R                  U R                  5        U R                  U l        gU R                  S
5        SU R                  S'   U R                  U l        g)Nr  rH   r2  r  r   unexpected-end-of-doctypeFr4  r`  rm  T)r%   rS   r   r)   -doctype_public_identifier_double_quoted_stater(   -doctype_public_identifier_single_quoted_stater?   r2   r<   r'   r   ri  r   s     r   rn  4HTMLTokenizer.before_doctype_public_identifier_statea  sP   {{$$&##* ) T\-/Dz*KKDJ$ # S[-/Dz*KKDJ  S[89,1Dy)##D$6$67DJ  S[-.,1Dy)##D$6$67DJ
  9:,1Dy)11DJr   c                 n   U R                   R                  5       nUS:X  a  U R                  U l        gUS:X  a)  U R	                  S5        U R
                  S==   S-  ss'   gUS:X  aW  U R	                  S5        SU R
                  S	'   U R                  R                  U R
                  5        U R                  U l        gU[        L aW  U R	                  S
5        SU R
                  S	'   U R                  R                  U R
                  5        U R                  U l        gU R
                  S==   U-  ss'   g)Nr  r   r   r2  rK   r   rr  Fr4  r`  T
r%   rS   %after_doctype_public_identifier_stater(   r?   r)   r2   r<   r'   r   r   s     r   rs  ;HTMLTokenizer.doctype_public_identifier_double_quoted_state{      {{$$&3;CCDJ   X01z*h6*  S[89,1Dy)##D$6$67DJ  S[-.,1Dy)##D$6$67DJ  z*d2*r   c                 n   U R                   R                  5       nUS:X  a  U R                  U l        gUS:X  a)  U R	                  S5        U R
                  S==   S-  ss'   gUS:X  aW  U R	                  S5        SU R
                  S	'   U R                  R                  U R
                  5        U R                  U l        gU[        L aW  U R	                  S
5        SU R
                  S	'   U R                  R                  U R
                  5        U R                  U l        gU R
                  S==   U-  ss'   g)Nr  r   r   r2  rK   r   rr  Fr4  r`  Trw  r   s     r   rt  ;HTMLTokenizer.doctype_public_identifier_single_quoted_state  rz  r   c                    U R                   R                  5       nU[        ;   a  U R                  U l        g
US:X  a7  U R
                  R                  U R                  5        U R                  U l        g
US:X  a2  U R                  S5        SU R                  S'   U R                  U l        g
US:X  a2  U R                  S5        SU R                  S'   U R                  U l        g
U[        L aW  U R                  S5        SU R                  S	'   U R
                  R                  U R                  5        U R                  U l        g
U R                  S5        SU R                  S	'   U R                  U l        g
)Nr   r  rm  rH   r3  r  r`  Fr4  T)r%   rS   r   3between_doctype_public_and_system_identifiers_stater(   r2   r<   r)   r'   r?   -doctype_system_identifier_double_quoted_state-doctype_system_identifier_single_quoted_stater   ri  r   s     r   rx  3HTMLTokenizer.after_doctype_public_identifier_state  sY   {{$$&##QQDJ* ) S[##D$6$67DJ$ # S[9:-/Dz*KKDJ  S[9:-/Dz*KKDJ  S[-.,1Dy)##D$6$67DJ
  9:,1Dy)11DJr   c                    U R                   R                  5       nU[        ;   a   g
US:X  a7  U R                  R	                  U R
                  5        U R                  U l        g
US:X  a!  SU R
                  S'   U R                  U l        g
US:X  a!  SU R
                  S'   U R                  U l        g
U[        L aW  U R                  S5        SU R
                  S'   U R                  R	                  U R
                  5        U R                  U l        g
U R                  S	5        SU R
                  S'   U R                  U l        g
)Nr   r  rH   r3  r  r`  Fr4  rm  T)r%   rS   r   r2   r<   r)   r'   r(   r  r  r   r?   ri  r   s     r   r~  AHTMLTokenizer.between_doctype_public_and_system_identifiers_state  s1   {{$$&##& % S[##D$6$67DJ   S[-/Dz*KKDJ  S[-/Dz*KKDJ  S[-.,1Dy)##D$6$67DJ
  9:,1Dy)11DJr   c                    U R                   R                  5       nU[        ;   a  U R                  U l        gUS;   a>  U R                  S5        U R                   R                  U5        U R                  U l        gU[        L aW  U R                  S5        SU R                  S'   U R                  R                  U R                  5        U R                  U l        gU R                   R                  U5        U R                  U l        grl  )r%   rS   r   &before_doctype_system_identifier_stater(   r?   rX   r   r)   r2   r<   r'   r   s     r   rh  0HTMLTokenizer.after_doctype_system_keyword_state  rp  r   c                    U R                   R                  5       nU[        ;   a   g
US:X  a!  SU R                  S'   U R                  U l        g
US:X  a!  SU R                  S'   U R                  U l        g
US:X  aW  U R                  S5        SU R                  S'   U R                  R                  U R                  5        U R                  U l        g
U[        L aW  U R                  S	5        SU R                  S'   U R                  R                  U R                  5        U R                  U l        g
U R                  S5        SU R                  S'   U R                  U l        g
)Nr  rH   r3  r  r   rm  Fr4  r`  T)r%   rS   r   r)   r  r(   r  r?   r2   r<   r'   r   ri  r   s     r   r  4HTMLTokenizer.before_doctype_system_identifier_state  sP   {{$$&##* ) S[-/Dz*KKDJ$ # S[-/Dz*KKDJ  S[9:,1Dy)##D$6$67DJ  S[-.,1Dy)##D$6$67DJ
  9:,1Dy)11DJr   c                 n   U R                   R                  5       nUS:X  a  U R                  U l        gUS:X  a)  U R	                  S5        U R
                  S==   S-  ss'   gUS:X  aW  U R	                  S5        SU R
                  S	'   U R                  R                  U R
                  5        U R                  U l        gU[        L aW  U R	                  S
5        SU R
                  S	'   U R                  R                  U R
                  5        U R                  U l        gU R
                  S==   U-  ss'   g)Nr  r   r   r3  rK   r   rr  Fr4  r`  T
r%   rS   %after_doctype_system_identifier_stater(   r?   r)   r2   r<   r'   r   r   s     r   r  ;HTMLTokenizer.doctype_system_identifier_double_quoted_state  s    {{$$&4<CCDJ   X01z*h6*  S[89,1Dy)##D$6$67DJ  S[-.,1Dy)##D$6$67DJ  z*d2*r   c                 n   U R                   R                  5       nUS:X  a  U R                  U l        gUS:X  a)  U R	                  S5        U R
                  S==   S-  ss'   gUS:X  aW  U R	                  S5        SU R
                  S	'   U R                  R                  U R
                  5        U R                  U l        gU[        L aW  U R	                  S
5        SU R
                  S	'   U R                  R                  U R
                  5        U R                  U l        gU R
                  S==   U-  ss'   g)Nr  r   r   r3  rK   r   rr  Fr4  r`  Tr  r   s     r   r  ;HTMLTokenizer.doctype_system_identifier_single_quoted_state  rz  r   c                    U R                   R                  5       nU[        ;   a   gUS:X  a7  U R                  R	                  U R
                  5        U R                  U l        gU[        L aW  U R                  S5        SU R
                  S'   U R                  R	                  U R
                  5        U R                  U l        gU R                  S5        U R                  U l        g)Nr   r`  Fr4  rm  T)r%   rS   r   r2   r<   r)   r'   r(   r   r?   ri  r   s     r   r  3HTMLTokenizer.after_doctype_system_identifier_state-  s    {{$$&##  S[##D$6$67DJ  S[-.,1Dy)##D$6$67DJ  9:11DJr   c                 j   U R                   R                  5       nUS:X  a7  U R                  R                  U R                  5        U R
                  U l        gU[        L aR  U R                   R                  U5        U R                  R                  U R                  5        U R
                  U l        g g)Nr   T)	r%   rS   r2   r<   r)   r'   r(   r   rX   r   s     r   ri  !HTMLTokenizer.bogus_doctype_state>  s    {{$$&3;##D$6$67DJ  S[KKd###D$6$67DJ  r   c                 l   / n UR                  U R                  R                  S5      5        UR                  U R                  R                  S5      5        U R                  R                  5       nU[        L a  O3US:X  d   eUS   SS  S:X  a  US   S S US'   OUR                  U5        M  SR                  U5      nUR                  S5      =nS	:  a5  [        U5       H  nU R                  S
5        M     UR                  SS5      nU(       a  U R                  U5        U R                  U l        g)NT]r   rd   z]]rH   r   r   r   rK   )r<   r%   r   rS   r   rU   countr   r?   r'  rC   r'   r(   )r*   r1   char
null_countr  s        r   r=  !HTMLTokenizer.cdata_section_stateL  s   KK//45KK//45;;((*Ds{s{"{8BC=D(#Bx}DHKK%  wwt}**X..J!3:&  !45 '<<(3DOOD!__
r   )r)   r&   r(   r%   r   r2   r$   )NF)Q__name__
__module____qualname____firstlineno____doc__r,   r8   r?   rC   r^   ro   rr   r}   r'   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r   r   r   r6  rD  rE  rL  rI  rQ  r8  rW  rZ  r]  rg  rn  rs  rt  rx  r~  rh  r  r  r  r  ri  r=  __static_attributes__ r   r   r!   r!   &   s   "1('K3jEKNB%86
8
	!F0(		$L		$L	$L $(	$L $(,	 6/b:<""0$-^(( "4*.4+Z$4**40$4**"r   r!   N)bisectr   collectionsr   html.entitiesr   r   	constantsr   r   r	   r
   r   r   r   r   r   inputstreamr   tuplesortedr   r   r   r!   r  r   r   <module>r     sG      +
 
 
 )F8$%- r   