o
    Þ¤sL|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	   úV/home/esfera/Documents/content_generation/venv/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 )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().)
        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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Ñ|  |¡}|dk rÎn›|}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 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 )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 )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   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 )NéF   )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 )NéD   é    z...iàÿÿÿz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$
ÿ