o
    .j|E                     @   s   d Z ddlZddlZddgZedZedZedZedZed	Z	ed
Z
edZedZedZedZedZG dd deZG dd dejZG dd deZdddZedkrle  dS dS )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                   @   s   e Zd ZdZdS )r   z&Exception raised for all parse errors.N)__name__
__module____qualname____doc__ r	   r	   </home/thesage/.local/lib/python3.10/site-packages/sgmllib.pyr   &   s    c                   @   s,  e Zd ZedZdKddZdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd ZdZdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1d2d3d4d5Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJS )Lr   z+&(?:([a-zA-Z][-.a-zA-Z0-9]*)|#([0-9]+))(;?)r   c                 C   s   || _ |   dS )z#Initialize and reset this instance.N)verboseresetselfr   r	   r	   r
   __init__<   s   zSGMLParser.__init__c                 C   s4   d| _ d| _g | _d| _d| _d| _tj|  dS )z0Reset this instance. Loses all unprocessed data.N z???r   )	_SGMLParser__starttag_textrawdatastacklasttag
nomoretagsliteral_markupbase
ParserBaser   r   r	   r	   r
   r   A   s   zSGMLParser.resetc                 C   s   d | _ | _dS )zYEnter literal mode (CDATA) till EOF.

        Intended for derived classes only.
           N)r   r   r   r	   r	   r
   setnomoretagsK   s   zSGMLParser.setnomoretagsc                 G   s
   d| _ dS )zPEnter literal mode (CDATA).

        Intended for derived classes only.
        r   N)r   )r   argsr	   r	   r
   
setliteralR   s   
zSGMLParser.setliteralc                 C   s   | j | | _ | d dS )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   datar	   r	   r
   feedY   s   zSGMLParser.feedc                 C   s   |  d dS )zHandle the remaining data.r   N)r   r   r	   r	   r
   closed   s   zSGMLParser.closec                 C   s   t |N)r   )r   messager	   r	   r
   errorh      zSGMLParser.errorc           	      C   s
  | j }d}t|}||k ri| jr| |||  |}nKt||}|r+| }n|}||k r:| |||  |}||krBn'|| dkrt||rk| j	r]| ||  |d }q	| 
|}|dk rhn|}q	|d|r| |}|dk r{n|}d| _	q	| j	r||d kr| d |d }nnq	|d|r| |}|dk rn|}q	|d|r| |}|dk rn|| }q	|d|r| |}|dk rn|}q	nh|| dkr5| j	r| ||  |d }q	t||}|r|d}| | |d}||d  d	kr|d }q	t||}|r4|d}| | |d}||d  d	kr3|d }q	n| d
 t||}|sO| ||  |d }q	|d}||krZn| |||  |}||k s|r|||k r|| |||  |}||d  | _ d S )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_entityrefr%   
incomplete)	r   r;   r   inr1   jknamer	   r	   r
   r   n   s   




















\zSGMLParser.goahead=c                 C   sn   | j }|||d  dkr| d t||d }|sdS |d}| ||d |  |d}|| S )N   r(   zunexpected call to parse_pi()r   )r   r%   picloser.   r/   	handle_pir;   )r   r?   r   r1   rA   r	   r	   r
   r6      s   


zSGMLParser.parse_pic                 C   s   | j S r#   )r   r   r	   r	   r
   get_starttag_text   s   zSGMLParser.get_starttag_textc                 C   s  d | _ |}| j}t||rBt||}|sdS |dd\}}d| | _ | }|d}| || |||dd  | _ |S t	
||d }|sNdS |d}g }	|||d  dkre|}| j}n!t||d }|st| d |d}||d |  }|| _||k rt||}|snV|ddd\}
}}|s|
}n5|d d d	  kr|dd  ksn |d d d
  kr|dd  krn n|dd }| j| j|}|	|
 |f |d}||k s|| dkr|d }||| | _ | ||	 |S )NrF   r   rE   z<%s/r   z<>z!unexpected call to parse_starttag   '"r   )r   r   shorttagopenr1   shorttagr9   lowerr;   finish_shorttag
endbracketr.   r/   r   tagfindr%   attrfindentity_or_charrefsub_convert_refappendfinish_starttag)r   r?   	start_posr   r1   tagr    rB   rA   attrsattrnamerest	attrvaluer	   r	   r
   r2      s`   




&(
zSGMLParser.parse_starttagc                 C   sd   | dr| | dpd| dd   S | dr+| | dp*d| d S d| d S )NrE   z&#%s%sr   rJ   z&%s;z&%s)r9   convert_charrefgroupsconvert_entityref)r   r1   r	   r	   r
   rV   &  s   

zSGMLParser._convert_refc                 C   sb   | j }t||d }|sdS |d}||d |   }|| dkr*|d }| | |S )Nr   rF   r   rE   r   )r   rQ   r.   r/   striprO   finish_endtag)r   r?   r   r1   rA   rZ   r	   r	   r
   r4   1  s   

zSGMLParser.parse_endtagc                 C   s$   |  |g  | | | | d S r#   )rX   r,   rc   )r   rZ   r    r	   r	   r
   rP   >  s   
zSGMLParser.finish_shorttagc                 C   s   z	t | d| }W n, ty5   z	t | d| }W n ty*   | || Y Y dS w | ||| Y dS w | j| | ||| dS )Nstart_do_rF   r   r   )getattrAttributeErrorunknown_starttaghandle_starttagr   rW   )r   rZ   r[   methodr	   r	   r
   rX   E  s   
zSGMLParser.finish_starttagc                 C   s  |st | jd }|dk r| | d S n:|| jvr:z	t| d| }W n ty2   | | Y d S w | | d S t | j}t|D ]}| j| |krN|}qCt | j|kr| jd }z	t| d| }W n tyo   d }Y nw |ry| || n| | | jd= t | j|ksVd S d S )Nr   r   end_rF   )r+   r   unknown_endtagrf   rg   report_unbalancedrangehandle_endtag)r   rZ   foundrj   r?   r	   r	   r
   rc   W  s>   





zSGMLParser.finish_endtagc                 C   s   || d S r#   r	   )r   rZ   rj   r[   r	   r	   r
   ri   v  s   zSGMLParser.handle_starttagc                 C   s
   |  d S r#   r	   )r   rZ   rj   r	   r	   r
   ro   z  s   
zSGMLParser.handle_endtagc                 C   s*   | j rtd| d  td| j d S d S )Nz*** Unbalanced </r   z
*** Stack:)r   printr   r   rZ   r	   r	   r
   rm   ~  s   zSGMLParser.report_unbalancedc                 C   sH   zt |}W n
 ty   Y dS w d|  krdksdS  dS | |S )z/Convert character reference, may be overridden.Nr      )int
ValueErrorconvert_codepoint)r   rC   r@   r	   r	   r
   r_     s   
zSGMLParser.convert_charrefc                 C   s   t |S r#   )chr)r   	codepointr	   r	   r
   rv     r&   zSGMLParser.convert_codepointc                 C   .   |  |}|du r| | dS | | dS )z0Handle character reference, no need to override.N)r_   unknown_charrefr,   r   rC   replacementr	   r	   r
   r:        
zSGMLParser.handle_charrefr'   r   r)   rL   rK   )ltgtampquotaposc                 C   s   | j }||v r|| S dS )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   rC   tabler	   r	   r
   ra     s   zSGMLParser.convert_entityrefc                 C   ry   )z.Handle entity references, no need to override.N)ra   unknown_entityrefr,   r{   r	   r	   r
   r=     r}   zSGMLParser.handle_entityrefc                 C      d S r#   r	   r   r	   r	   r
   r,        zSGMLParser.handle_datac                 C   r   r#   r	   r   r	   r	   r
   handle_comment  r   zSGMLParser.handle_commentc                 C   r   r#   r	   )r   declr	   r	   r
   handle_decl  r   zSGMLParser.handle_declc                 C   r   r#   r	   r   r	   r	   r
   rH     r   zSGMLParser.handle_pic                 C   r   r#   r	   )r   rZ   r[   r	   r	   r
   rh         zSGMLParser.unknown_starttagc                 C   r   r#   r	   rr   r	   r	   r
   rl     r   zSGMLParser.unknown_endtagc                 C   r   r#   r	   r   refr	   r	   r
   rz     r   zSGMLParser.unknown_charrefc                 C   r   r#   r	   r   r	   r	   r
   r     r   zSGMLParser.unknown_entityrefNr   )(r   r   r   recompilerT   r   r   r   r   r!   r"   r%   r   _decl_othercharsr6   rI   r2   rV   r4   rP   rX   rc   ri   ro   rm   r_   rv   r:   r   ra   r=   r,   r   r   rH   rh   rl   rz   r   r	   r	   r	   r
   r   6   sJ    


g>

	c                   @   s^   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd ZdS )TestSGMLParserr   c                 C   s   d| _ t| | d S )Nr   )testdatar   r   r   r	   r	   r
   r     s   zTestSGMLParser.__init__c                 C   s.   | j | | _ tt| j dkr|   d S d S )NF   )r   r+   reprflushr   r	   r	   r
   r,     s   zTestSGMLParser.handle_datac                 C   s&   | j }|rd| _ tdt| d S d S )Nr   zdata:)r   rq   r   r   r	   r	   r
   r     s
   zTestSGMLParser.flushc                 C   sF   |    t|}t|dkr|d d d |dd   }td| d S )ND       z...izcomment:)r   r   r+   rq   )r   r    rr	   r	   r
   r     s
   zTestSGMLParser.handle_commentc                 C   sf   |    |std| d  d S td| dd |D ]\}}t|d d | d dd qtd d S )Nzstart tag: <r    )r;   rD   rL   r   rq   )r   rZ   r[   rC   valuer	   r	   r
   rh     s   zTestSGMLParser.unknown_starttagc                 C      |    td| d  d S )Nzend tag: </r   r   rr   r	   r	   r
   rl        zTestSGMLParser.unknown_endtagc                 C   r   )Nz*** unknown entity ref: &r*   r   r   r	   r	   r
   r     r   z TestSGMLParser.unknown_entityrefc                 C   r   )Nz*** unknown char ref: &#r*   r   r   r	   r	   r
   rz     r   zTestSGMLParser.unknown_charrefc                 C   r   )Nz*** unknown decl: []r   r   r	   r	   r
   unknown_decl  r   zTestSGMLParser.unknown_declc                 C   s   t |  |   d S r#   )r   r"   r   r   r	   r	   r
   r"     s   
zTestSGMLParser.closeNr   )r   r   r   r   r,   r   r   rh   rl   r   rz   r   r"   r	   r	   r	   r
   r     s    

r   c           	   
   C   s   dd l }| d u r|jdd  } | r | d dkr | dd  } t}nt}| r)| d }nd}|dkr3|j}n%zt|d}W n tyW } zt|d| |d W Y d }~nd }~ww |	 }||jure|
  | }|D ]}|| qj|
  d S )Nr   r   z-sz	test.html-r   :)sysargvr   r   stdinopenIOErrorrq   exitreadr"   r!   )	r   r   klassfilefmsgr    xcr	   r	   r
   test  s4   

r   __main__r#   )r   r   r   __all__r   r-   r>   r<   r8   r0   rM   rN   rG   rQ   rR   rS   RuntimeErrorr   r   r   r   r   r   r	   r	   r	   r
   <module>   s6    










   
7$
