
    g|E                     $   d Z ddlZddlZddgZ ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d	      Z	 ej                  d
      Z
 ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z G d de      Z G d dej$                        Z G d de      ZddZedk(  r e        yy)z;A parser for SGML, using the derived class as a static DTD.    N
SGMLParserSGMLParseErrorz[&<]zN&([a-zA-Z][a-zA-Z0-9]*|#[0-9]*)?|<([a-zA-Z][^<>]*|/([a-zA-Z][^<>]*)?|![^<>]*)?z%&([a-zA-Z][-.a-zA-Z0-9]*)[^a-zA-Z0-9]z&#([0-9]+)[^0-9]z
<[>a-zA-Z]z<[a-zA-Z][-.a-zA-Z0-9]*/z"<([a-zA-Z][-.a-zA-Z0-9]*)/([^/]*)/>z[<>]z[a-zA-Z][-_.a-zA-Z0-9]*ze\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)(\s*=\s*(\'[^\']*\'|"[^"]*"|[][\-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~\'"@]*))?c                       e Zd ZdZy)r   z&Exception raised for all parse errors.N)__name__
__module____qualname____doc__     :/var/www/html/venv/lib/python3.12/site-packages/sgmllib.pyr   r   &   s    0r   c                      e Zd Z ej                  d      Zd*dZd Zd Zd Z	d Z
d Zd Zd	 Zd
Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddddddZd Zd  Zd! Z d" Z!d# Z"d$ Z#d% Z$d& Z%d' Z&d( Z'y))+r   z+&(?:([a-zA-Z][-.a-zA-Z0-9]*)|#([0-9]+))(;?)c                 2    || _         | j                          y)z#Initialize and reset this instance.N)verboseresetselfr   s     r   __init__zSGMLParser.__init__<   s    

r   c                     d| _         d| _        g | _        d| _        d| _        d| _        t        j                  j                  |        y)z0Reset this instance. Loses all unprocessed data.N z???r   )	_SGMLParser__starttag_textrawdatastacklasttag
nomoretagsliteral_markupbase
ParserBaser   r   s    r   r   zSGMLParser.resetA   sA    #
$$T*r   c                      dx| _         | _        y)zYEnter literal mode (CDATA) till EOF.

        Intended for derived classes only.
           N)r   r   r   s    r   setnomoretagszSGMLParser.setnomoretagsK   s    
 *+*$,r   c                     d| _         y)zPEnter literal mode (CDATA).

        Intended for derived classes only.
        r!   N)r   )r   argss     r   
setliteralzSGMLParser.setliteralR   s    
 r   c                 N    | j                   |z   | _         | j                  d       y)zFeed some data to the parser.

        Call this as often as you want, with as little or as much text
        as you want (may include '
').  (This just saves the text,
        all the processing is done by goahead().)
        r   N)r   goaheadr   datas     r   feedzSGMLParser.feedY   s     ||d*Qr   c                 &    | j                  d       y)zHandle the remaining data.r!   N)r'   r   s    r   closezSGMLParser.closed   s    Qr   c                     t        |      N)r   )r   messages     r   errorzSGMLParser.errorh   s    W%%r   c                    | j                   }d}t        |      }||k  r$| j                  r| j                  |||        |}n t        j                  ||      }|r|j                         }n|}||k  r| j                  |||        |}||k(  rn||   dk(  rIt        j                  ||      rA| j                  r| j                  ||          |dz   }| j                  |      }|dk  rnV|}|j                  d|      r#| j                  |      }|dk  rn)|}d| _	        | j                  r#||dz   kD  r| j                  d       |dz   }nn;|j                  d|      r| j                  |      }|dk  rn|}i|j                  d|      r| j                  |      }|dk  rn||z   }|j                  d|      r| j                  |      }|dk  rne|}||   dk(  r| j                  r| j                  ||          |dz   }t         j                  ||      }|rE|j#                  d      }| j%                  |       |j'                  d      }||dz
     d	k7  r|dz
  }Ut(        j                  ||      }|rV|j#                  d      }| j+                  |       |j'                  d      }||dz
     d	k7  r|dz
  }| j-                  d
       t.        j                  ||      }|s| j                  ||          |dz   }|j'                  d      }||k(  rn| j                  |||        |}||k  r$|r||k  r| j                  |||        |}||d  | _         y )Nr   <r!   z</z<!--<?z<!&;zneither < nor & ??)r   lenr   handle_datainterestingsearchstartstarttagopenmatchr   parse_starttag
startswithparse_endtagparse_commentparse_piparse_declarationcharrefgrouphandle_charrefend	entityrefhandle_entityrefr0   
incomplete)	r   rF   r   inr<   jknames	            r   r'   zSGMLParser.goaheadn   s   ,,L!e  1.&&w2E%++-a!1u  1.AAvuqzS %%gq1||((4aC ++A.A1ueA%%dA.))!,A1ueA#$DL<<AE{((-aC %%fa0
 **1-A1ueA%%dA.a(A1ue!A%%dA. ..q1A1ueAs"<<$$WQZ0!Agq1 ;;q>D''-		!Aqs|s*!A!3 ;;q>D))$/		!Aqs|s*!A

/0 $$Wa0E  ,aC		!AAvWQq\*Au !ex 1q5WQq\*Aqr{r   =c                    | j                   }|||dz    dk7  r| j                  d       t        j                  ||dz         }|sy|j	                  d      }| j                  ||dz   |        |j                  d      }||z
  S )N   r3   zunexpected call to parse_pi()r   )r   r0   picloser9   r:   	handle_pirF   )r   rJ   r   r<   rL   s        r   rA   zSGMLParser.parse_pi   s}    ,,1QqS>T!JJ67w!,KKNwqsA'IIaLs
r   c                     | j                   S r.   )r   r   s    r   get_starttag_textzSGMLParser.get_starttag_text   s    ###r   c                    d | _         |}| j                  }t        j                  ||      rt        j                  ||      }|sy|j                  dd      \  }}d|z  | _         |j                         }|j                  d      }| j                  ||       |||j                  d      dz    | _         |S t        j                  ||dz         }|sy|j                  d      }g }	|||dz    dk(  r|}| j                  }nZt        j                  ||dz         }|s| j                  d       |j                  d      }||dz   | j                         }|| _        ||k  rt        j                  ||      }|sn|j                  ddd      \  }
}}|s|
}nR|d d d	cxk(  r|dd  k(  sn |d d d
cxk(  r|dd  k(  rn n|dd }| j                   j#                  | j$                  |      }|	j'                  |
j                         |f       |j                  d      }||k  r||   dk(  r|dz   }||| | _         | j)                  ||	       |S )NrR   r!   rQ   z<%s/r   z<>z!unexpected call to parse_starttag   '"r   )r   r   shorttagopenr<   shorttagrD   lowerrF   finish_shorttag
endbracketr9   r:   r   tagfindr0   attrfindentity_or_charrefsub_convert_refappendfinish_starttag)r   rJ   	start_posr   r<   tagr)   rM   rL   attrsattrnamerest	attrvalues                r   r=   zSGMLParser.parse_starttag   sM   #	,,gq)
 NN7A.EAq)IC#)C<D ))+C		!A  d+#*9UYYq\A5E#FD H
 !!'1Q3/KKN1QqS>T!A,,CMM'1Q3/E

>?		!A!A#a.&&(CDL!eNN7A.E%(-Aq!(<%HdI$	bqMS:IbcN:bqMS:IbcN: )!BI 2266%%y2	LL(..*I67		!A !e 1:!A&y3S%(r   c                 J   |j                  d      r8| j                  |j                  d            xs d|j                         dd  z  S |j                  d      r6| j                  |j                  d            xs d|j                  d      z  S d|j                  d      z  S )NrQ   z&#%s%sr!   rX   z&%s;z&%s)rD   convert_charrefgroupsconvert_entityref)r   r<   s     r   rd   zSGMLParser._convert_ref&  s    ;;q>''A7 .5<<>!"--.[[^))%++a.9 (Q'( 5;;q>))r   c                     | j                   }t        j                  ||dz         }|sy|j                  d      }||dz   | j	                         j                         }||   dk(  r|dz   }| j                  |       |S )Nr!   rR   r   rQ   r   )r   r_   r9   r:   stripr]   finish_endtag)r   rJ   r   r<   rL   rh   s         r   r?   zSGMLParser.parse_endtag1  s}    ,,!!'1Q3/KKNac!n""$**,1:!A3r   c                 l    | j                  |g        | j                  |       | j                  |       y r.   )rf   r7   rs   )r   rh   r)   s      r   r^   zSGMLParser.finish_shorttag>  s.    S"%3r   c                 (   	 t        | d|z         }| j                  j                  |       | j                  |||       y# t        $ rH 	 t        | d|z         }| j                  |||       Y y# t        $ r | j                  ||       Y Y yw xY ww xY w)Nstart_r!   do_r   rR   )getattrr   re   handle_starttagAttributeErrorunknown_starttag)r   rh   ri   methods       r   rf   zSGMLParser.finish_starttagE  s    	T8c>2F JJc"  fe4  	 us{3
 $$S&%8 " %%c51	s/   A   	B
A.B.B	BBBc                    |s/t        | j                        dz
  }|dk  r|| j                  |       y || j                  vr"	 t        | d|z         }| j	                  |       y t        | j                        }t        |      D ]  }| j                  |   |k(  s|} t        | j                        |kD  rl| j                  d   }	 t        | d|z         }|r| j                  ||       n| j                  |       | j                  d= t        | j                        |kD  rky y # t
        $ r | j                  |       Y y w xY w# t
        $ r d }Y {w xY w)Nr!   r   end_rR   )r6   r   unknown_endtagrx   report_unbalancedrz   rangehandle_endtag)r   rh   foundr|   rJ   s        r   rs   zSGMLParser.finish_endtagW  sB   

Oa'Eqy##C($**$0$T6C<8F **3/

OE5\ 3::a=C'3$**o%**R.C v|4 ""3/##C(

2 $**o% & -'', 	- " s$   D! E !D>=D>EEc                      ||       y r.   r   )r   rh   r|   ri   s       r   ry   zSGMLParser.handle_starttagv  s	    ur   c                      |        y r.   r   )r   rh   r|   s      r   r   zSGMLParser.handle_endtagz  s    r   c                 l    | j                   r(t        d|z   dz          t        d| j                         y y )Nz*** Unbalanced </r   z
*** Stack:)r   printr   r   rh   s     r   r   zSGMLParser.report_unbalanced~  s/    <<%+c12,

+ r   c                 v    	 t        |      }d|cxk  rdk  sy y| j                  |      S # t        $ r Y yw xY w)z/Convert character reference, may be overridden.Nr      )int
ValueErrorconvert_codepoint)r   rN   rK   s      r   rn   zSGMLParser.convert_charref  sM    	D	A A}} %%a((	  		s   , 	88c                     t        |      S r.   )chr)r   	codepoints     r   r   zSGMLParser.convert_codepoint  s    9~r   c                 p    | j                  |      }|| j                  |       y| j                  |       y)z0Handle character reference, no need to override.N)rn   unknown_charrefr7   r   rN   replacements      r   rE   zSGMLParser.handle_charref  s4    **40  &[)r   r2   r   r4   rZ   rY   )ltgtampquotaposc                 .    | j                   }||v r||   S y)zConvert entity references.

        As an alternative to overriding this method; one can tailor the
        results by setting up the self.entitydefs mapping appropriately.
        N)
entitydefs)r   rN   tables      r   rp   zSGMLParser.convert_entityref  s!     5=;r   c                 p    | j                  |      }|| j                  |       y| j                  |       y)z.Handle entity references, no need to override.N)rp   unknown_entityrefr7   r   s      r   rH   zSGMLParser.handle_entityref  s4    ,,T2""4([)r   c                      y r.   r   r(   s     r   r7   zSGMLParser.handle_data      r   c                      y r.   r   r(   s     r   handle_commentzSGMLParser.handle_comment  r   r   c                      y r.   r   )r   decls     r   handle_declzSGMLParser.handle_decl  r   r   c                      y r.   r   r(   s     r   rT   zSGMLParser.handle_pi  r   r   c                      y r.   r   )r   rh   ri   s      r   r{   zSGMLParser.unknown_starttag      r   c                      y r.   r   r   s     r   r   zSGMLParser.unknown_endtag  r   r   c                      y r.   r   r   refs     r   r   zSGMLParser.unknown_charref  r   r   c                      y r.   r   r   s     r   r   zSGMLParser.unknown_entityref  r   r   Nr   )(r   r   r	   recompilerb   r   r   r"   r%   r*   r,   r0   r'   _decl_othercharsrA   rV   r=   rd   r?   r^   rf   rs   ry   r   r   rn   r   rE   r   rp   rH   r7   r   r   rT   r{   r   r   r   r   r   r   r   r   6   s    "

 $ 
++	&c#N 
$;|*
 $>,
)* c#sDI 
* 1'(*r   c                   J    e Zd ZddZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestSGMLParserc                 >    d| _         t        j                  | |       y )Nr   )testdatar   r   r   s     r   r   zTestSGMLParser.__init__  s    D'*r   c                     | j                   |z   | _         t        t        | j                               dk\  r| j                          y y )NF   )r   r6   reprflushr(   s     r   r7   zTestSGMLParser.handle_data  s6    ,tDMM"#r)JJL *r   c                 Z    | j                   }|rd| _         t        dt        |             y y )Nr   zdata:)r   r   r   r(   s     r   r   zTestSGMLParser.flush  s(    }}DM'4:& r   c                     | j                          t        |      }t        |      dkD  r|d d dz   |dd  z   }t        d|       y )ND       z...izcomment:)r   r   r6   r   )r   r)   rs      r   r   zTestSGMLParser.handle_comment  sC    

Jq6B;#234(Aj!r   c                     | j                          |st        d|z   dz          y t        d|z   d       |D ]  \  }}t        |dz   dz   |z   dz   d         t        d       y )Nzstart tag: <r    )rF   rO   rZ   r   r   )r   rh   ri   rN   values        r   r{   zTestSGMLParser.unknown_starttag  sf    

.3&,-.3&C0$ ?edSj3&.4#>?#Jr   c                 F    | j                          t        d|z   dz          y )Nzend tag: </r   r   r   s     r   r   zTestSGMLParser.unknown_endtag  s    

mc!C'(r   c                 F    | j                          t        d|z   dz          y )Nz*** unknown entity ref: &r5   r   r   s     r   r   z TestSGMLParser.unknown_entityref  s    

)C/#56r   c                 F    | j                          t        d|z   dz          y )Nz*** unknown char ref: &#r5   r   r   s     r   r   zTestSGMLParser.unknown_charref  s    

(3.45r   c                 F    | j                          t        d|z   dz          y )Nz*** unknown decl: []r   r(   s     r   unknown_declzTestSGMLParser.unknown_decl  s    

#d*S01r   c                 N    t         j                  |        | j                          y r.   )r   r,   r   r   s    r   r,   zTestSGMLParser.close  s    

r   Nr   )r   r   r	   r   r7   r   r   r{   r   r   r   r   r,   r   r   r   r   r     s4    +
')762r   r   c                    dd l }| |j                  dd  } | r| d   dk(  r| dd  } t        }nt        }| r| d   }nd}|dk(  r|j                  }n	 t        |d      }j                         }||j                  ur|j                           |       }|D ]  }|j                  |        |j                          y # t        $ r(}t        |d|       |j                  d       Y d }~d }~ww xY w)Nr   r!   z-sz	test.html-r   :)sysargvr   r   stdinopenIOErrorr   exitreadr,   r*   )	r$   r   klassfilefmsgr)   xcs	            r   testr     s    |xx|Q4ABxAws{II	T3A
 668D				A 	q	GGI  	$S!HHQKK	s   B9 9	C*C%%C*__main__r.   )r
   r   r   __all__r   r8   rI   rG   rC   r;   r[   r\   rS   r_   r`   ra   RuntimeErrorr   r   r   r   r   r   r   r   r   <module>r      s'   A  	)
* bjj RZZ * +

 BJJ>?	
"**'
(rzz,'rzz452:::;
"**S/RZZ

"**.
/2::GH
	\ 	 N+'' N+b4Z 4n!H zF r   