o
    òT·jÐJ  ã                   @   sÄ   d Z ddlZddlZddlZddlm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dS )z;A parser for SGML, using the derived class as a static DTD.é    Né   )ÚStringIOÚ
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]+|[xX][0-9a-fA-F]+);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]*zi\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/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/feedparser_sgmllib/__init__.pyr   -   s    c                	       s  e Zd Ze d¡Zdadeddfdd„Zdb‡ fdd	„Ze	de
fd
d„ƒZejde
ddfdd„ƒZdbdd„Zdbdd„Zdejddfdd„Zde
ddfdd„Zdbdd„Zde
dejfdd„Zdeddfdd„Zd Zd!edefd"d#„Zde
dB fd$d%„Zd!edefd&d'„Zd(eje
 de
fd)d*„Zd!edefd+d,„Zd-e
de
ddfd.d/„Zd-e
d0e e!e
e
f  dej"d1 fd2d3„Z#d-e
ddfd4d5„Z$d-e
d6ej%ejgejf d0e e!e
e
f  ddfd7d8„Z&d-e
d6ej%g ejf ddfd9d:„Z'd-e
ddfd;d<„Z(d=e
de
dB fd>d?„Z)d@ede
fdAdB„Z*d=e
ddfdCdD„Z+dEdFdGdHdIdJœZ,d=e
de
dB fdKdL„Z-d=e
ddfdMdN„Z.de
dejfdOdP„Z/de
dejfdQdR„Z0dSejdejfdTdU„Z1de
dejfdVdW„Z2d-e
d0e e!e
e
f  dejfdXdY„Z3d-e
dejfdZd[„Z4d\e
dejfd]d^„Z5d\e
dejfd_d`„Z6‡  Z7S )cr   z+&(?:([a-zA-Z][-.a-zA-Z0-9]*)|#([0-9]+))(;?)FÚverboseÚreturnNc                 C   s&   || _ d| _tƒ | _d| _|  ¡  dS )z#Initialize and reset this instance.Ú r   N)r   Ú_rawdatar   Ú_pendingÚ	_retry_atÚreset)Úselfr   r   r   r   Ú__init__C   s
   zSGMLParser.__init__c                    s@   d| _ d| _tƒ | _d| _g | _d| _d| _d| _t	ƒ  
¡  dS )z0Reset this instance. Loses all unprocessed data.Nr   r   z???)Ú_SGMLParser__starttag_textr   r   r   r   ÚstackÚlasttagÚ
nomoretagsÚliteralÚsuperr   ©r   ©Ú	__class__r   r   r   ^   s   zSGMLParser.resetc                 C   s   |   ¡  | jS ©N)Ú_flush_pendingr   r   r   r   r   Úrawdataj   s   zSGMLParser.rawdataÚvaluec                 C   s   || _ tƒ | _d S r   )r   r   r   )r   r"   r   r   r   r!   o   s   c                 C   s.   | j  ¡ r|  j| j  ¡ 7  _tƒ | _ dS dS )z9Merge any chunks queued by `feed()` into `self._rawdata`.N)r   Útellr   Úgetvaluer   r   r   r   r   r    t   s   
þzSGMLParser._flush_pendingc                 C   s   d | _ | _dS )zYEnter literal mode (CDATA) till EOF.

        Intended for derived classes only.
        r   N)r   r   r   r   r   r   Úsetnomoretags{   s   zSGMLParser.setnomoretagsÚargsc                 G   s
   d| _ dS )zPEnter literal mode (CDATA).

        Intended for derived classes only.
        r   N)r   )r   r&   r   r   r   Ú
setliteral‚   s   
zSGMLParser.setliteralÚdatac                 C   s@   | j  |¡ t| jƒ| j  ¡  | jk rdS |  ¡  |  d¡ dS )zãFeed 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().)
        NF)r   ÚwriteÚlenr   r#   r   r    Úgoahead©r   r(   r   r   r   Úfeed‰   s
   zSGMLParser.feedc                 C   s   |   ¡  |  d¡ dS )zHandle the remaining data.TN)r    r+   r   r   r   r   Úcloseš   s   zSGMLParser.closeÚmessagec                 C   s   t |ƒ‚r   )r   )r   r/   r   r   r   Úerror    ó   zSGMLParser.errorÚendc           
   
   C   s\  | j }d}t|ƒ}||k �r~| jr|  |||… ¡ |}�n`t ||¡}|r+| ¡ }n|}||k r:|  |||… ¡ |}||krB�n<|| dkrçt ||¡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nèq	| d|¡rª|  |¡}|dk r§n×|}q	| d|¡r¿|  |¡}|dk rºnÄ|| }q	| d|¡ræz|  |¡}W n tyÝ } zt|jƒ‚d }~ww |dk rãn›|}q	nh|| dk�rJ| j	rý|  || ¡ |d }q	t ||¡}|�r#| d¡}	|  |	¡ | d¡}||d  d	k�r"|d }q	t ||¡}|�rI| d¡}	|  |	¡ | d¡}||d  d	k�rH|d }q	n|  d
¡ t ||¡}|�sd|  || ¡ |d }q	| d¡}||k�ron|  |||… ¡ |}||k s|�r‘||k �r‘|  |||… ¡ |}||d … | _ |dk�r©|dk�r©|d | _d S d| _d S )Nr   ú<r   z</z<!--ú<?z<!ú&ú;zneither < nor & ??é   )r!   r*   r   Úhandle_dataÚinterestingÚsearchÚstartÚstarttagopenÚmatchr   Úparse_starttagÚ
startswithÚparse_endtagÚparse_commentÚparse_piÚparse_declarationÚAssertionErrorr   r&   ÚcharrefÚgroupÚhandle_charrefr2   Ú	entityrefÚhandle_entityrefr0   Ú
incompleter   )
r   r2   r!   ÚiÚnr=   ÚjÚkr0   Únamer   r   r   r+   ¦   sÔ   








€ÿõ





ú


™i
zSGMLParser.goaheadú=rK   c                 C   sn   | j }|||d … dkr|  d¡ t ||d ¡}|sdS | d¡}|  ||d |… ¡ | d¡}|| S )Nr7   r4   zunexpected call to parse_pi()éÿÿÿÿr   )r!   r0   Úpicloser:   r;   Ú	handle_pir2   )r   rK   r!   r=   rM   r   r   r   rB   '  s   


zSGMLParser.parse_pic                 C   s   | j S r   )r   r   r   r   r   Úget_starttag_text3  s   zSGMLParser.get_starttag_textc                 C   s  d | _ |}| j}t ||¡rDt ||¡}|sdS | dd¡\}}d|› d�| _ | ¡ }| d¡}|  ||¡ ||| d¡d … | _ |S t	 
||d ¡}|sPdS | d¡}g }	|||d … dkrg|}| j}n!t ||d ¡}|sv|  d¡ | d¡}||d |…  ¡ }|| _||k rët ||¡}|s•nV| ddd	¡\}
}}|s¤|
}n5|d d… d
  kr¶|dd … ksËn |d d… d  krÉ|dd … krÑn n|dd… }| j | j|¡}|	 |
 ¡ |f¡ | d¡}||k sŒ|| dkrõ|d }|||… | _ |  ||	¡ |S )NrQ   r   r7   r3   ú/r   z<>z!unexpected call to parse_starttagé   ú'ú"r   )r   r!   Úshorttagopenr=   ÚshorttagrF   Úlowerr2   Úfinish_shorttagÚ
endbracketr:   r;   r   Útagfindr0   ÚattrfindÚentity_or_charrefÚsubÚ_convert_refÚappendÚfinish_starttag)r   rK   Ú	start_posr!   r=   Útagr(   rN   rM   ÚattrsÚattrnameÚrestÚ	attrvaluer   r   r   r>   7  s^   



&(
ðzSGMLParser.parse_starttagr=   c                 C   sd   |  d¡r|  |  d¡¡pd| ¡ dd …  S |  d¡r+|  |  d¡¡p*d|  d¡ S d|  d¡ S )Nr7   z&#%s%sr   rV   z&%s;z&%s)rF   Úconvert_charrefÚgroupsÚconvert_entityref)r   r=   r   r   r   rb   w  s
   
$
zSGMLParser._convert_refc                 C   sb   | j }t ||d ¡}|sdS | d¡}||d |…  ¡  ¡ }|| dkr*|d }|  |¡ |S )Nr   rQ   r   r7   r   )r!   r]   r:   r;   Ústripr[   Úfinish_endtag)r   rK   r!   r=   rM   rf   r   r   r   r@   €  s   

zSGMLParser.parse_endtagrf   c                 C   s$   |   |g ¡ |  |¡ |  |¡ d S r   )rd   r8   ro   )r   rf   r(   r   r   r   r\   �  s   
zSGMLParser.finish_shorttagrg   )rQ   r   r   c                 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_rQ   r   r   )ÚgetattrÚAttributeErrorÚunknown_starttagÚhandle_starttagr   rc   )r   rf   rg   Úmethodr   r   r   rd   ”  s   þø
zSGMLParser.finish_starttagc                 C   s6  t  |¡ }d ur| d¡}|s#t| jƒd }|dk r"|  |¡ d S nE|| jvrHz	t| d| ƒ W n ty@   |  |¡ Y d S w |  |¡ d S t| jƒ}t	t
| jƒƒD ]\}}||krgt| jƒd | } nqTt| jƒ|kr™| jd }t| d| d ƒ}|d ur‡|  ||¡ n|  |¡ | jd= t| jƒ|ksod S d S )Nr   r   Úend_rQ   )r^   r=   rF   r*   r   Úunknown_endtagrr   rs   Úreport_unbalancedÚ	enumerateÚreversedÚhandle_endtag)r   rf   r=   ÚfoundrK   Ú	stack_tagrv   r   r   r   ro   ¨  s>   

þ
ü

þ

ùzSGMLParser.finish_endtagrv   c                 C   s   ||ƒ d S r   r   )r   rf   rv   rg   r   r   r   ru   È  s   zSGMLParser.handle_starttagc                 C   s
   |ƒ  d S r   r   )r   rf   rv   r   r   r   r|   Î  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   rf   r   r   r   ry   Ò  s   þzSGMLParser.report_unbalancedrO   c                 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   rO   rL   r   r   r   rk   ×  s   ÿÿ
zSGMLParser.convert_charrefÚ	codepointc                 C   s   t |ƒS r   )Úchr)r   r…   r   r   r   r„   á  r1   zSGMLParser.convert_codepointc                 C   ó.   |   |¡}|du r|  |¡ dS |  |¡ dS )z0Handle character reference, no need to override.N)rk   Úunknown_charrefr8   ©r   rO   Úreplacementr   r   r   rG   ä  ó   
zSGMLParser.handle_charrefr3   r   r5   rX   rW   )ÚltÚgtÚampÚquotÚaposc                 C   s   | j }||v r|| S dS )zµConvert 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   rO   Útabler   r   r   rm   ï  s   zSGMLParser.convert_entityrefc                 C   r‡   )z.Handle entity references, no need to override.N)rm   Úunknown_entityrefr8   r‰   r   r   r   rI   û  r‹   zSGMLParser.handle_entityrefc                 C   ó   d S r   r   r,   r   r   r   r8     ó   zSGMLParser.handle_datac                 C   r”   r   r   r,   r   r   r   Úhandle_comment  r•   zSGMLParser.handle_commentÚdeclc                 C   r”   r   r   )r   r—   r   r   r   Úhandle_decl  r•   zSGMLParser.handle_declc                 C   r”   r   r   r,   r   r   r   rS     r•   zSGMLParser.handle_pic                 C   r”   r   r   )r   rf   rg   r   r   r   rt     r•   zSGMLParser.unknown_starttagc                 C   r”   r   r   r€   r   r   r   rx     r•   zSGMLParser.unknown_endtagÚrefc                 C   r”   r   r   ©r   r™   r   r   r   rˆ     r•   zSGMLParser.unknown_charrefc                 C   r”   r   r   rš   r   r   r   r“     r•   zSGMLParser.unknown_entityref)F)r   N)8r   r   r	   ÚreÚcompiler`   Úboolr   r   ÚpropertyÚstrr!   Úsetterr    r%   ÚtÚAnyr'   r-   r.   ÚNoReturnr0   r+   Ú_decl_othercharsr‚   rB   rT   r>   ÚMatchrb   r@   r\   ÚlistÚtupleÚLiteralrd   ro   ÚCallableru   r|   ry   rk   r„   rG   r‘   rm   rI   r8   r–   r˜   rS   rt   rx   rˆ   r“   Ú__classcell__r   r   r   r   r   ?   sn    



~@	ÿÿ
þ ÿÿÿ
þ"
		$)r
   Ú_markupbaser›   Útypingr¡   Ú_compatr   Ú__all__rœ   r9   rJ   rH   rE   r<   rY   rZ   rR   r]   r^   r_   ÚRuntimeErrorr   Ú
ParserBaser   r   r   r   r   Ú<module>   s.    
ÿ







ÿ