o
    ©i e75  ã                   @  s¦   d Z ddlmZ ddlZddlZddlZej d¡Z	ej 
e	¡Ze	j e¡ eejd< e d¡e_e d¡e_eje_e dej¡e_e d	¡ZG d
d„ dejƒZdS )a  
This module imports a copy of [`html.parser.HTMLParser`][] and modifies it heavily through monkey-patches.
A copy is imported rather than the module being directly imported as this ensures that the user can import
and  use the unmodified library for their own needs.
é    )ÚannotationsNzhtml.parserÚ
htmlparserz\?>z&([a-zA-Z][-.a-zA-Z0-9]*);a”  
  <[a-zA-Z][^`\t\n\r\f />\x00]*       # tag name <= added backtick here
  (?:[\s/]*                           # optional whitespace before attribute name
    (?:(?<=['"\s/])[^`\s/>][^\s/=>]*  # attribute name <= added backtick here
      (?:\s*=+\s*                     # value indicator
        (?:'[^']*'                    # LITA-enclosed value
          |"[^"]*"                    # LIT-enclosed value
          |(?!['"])[^`>\s]*           # bare value <= added backtick here
         )
         (?:\s*,)*                    # possibly followed by a comma
       )?(?:\s|/(?!>))*
     )*
   )?
  \s*                                 # trailing whitespace
z^([ ]*\n){2}c                      sü   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡ fdd„Zed8d
d„ƒZd9dd„Z	d:dd„Z
d;dd„Zd<dd„Zd=dd„Zd>dd„Zd;dd „Zd?d"d#„Zd?d$d%„Zd=d&d'„Zd=d(d)„Zd=d*d+„Zd=d,d-„Zd@‡ fd/d0„Zd@‡ fd1d2„Zd3ZdAd4d5„Zd@d6d7„Z‡  ZS )BÚHTMLExtractorzû
    Extract raw HTML from text.

    The raw HTML is stored in the [`htmlStash`][markdown.util.HtmlStash] of the
    [`Markdown`][markdown.Markdown] instance passed to `md` and the remaining text
    is stored in `cleandoc` as a list of strings.
    c                   s8   d|vrd|d< t dgƒ| _tƒ j|i |¤Ž || _d S )NÚconvert_charrefsFÚhr)ÚsetÚ
empty_tagsÚsuperÚ__init__Úmd)Úselfr   ÚargsÚkwargs©Ú	__class__© úB/var/www/myenv/lib/python3.10/site-packages/markdown/htmlparser.pyr
   O   s
   
zHTMLExtractor.__init__c                   s,   d| _ d| _g | _g | _g | _tƒ  ¡  dS )z1Reset this instance.  Loses all unprocessed data.FN)ÚinrawÚintailÚstackÚ_cacheÚcleandocr	   Úreset©r   r   r   r   r   Z   s   zHTMLExtractor.resetc                   sv   t ƒ  ¡  t| jƒr | jr| js|  t | j¡¡ n|  | j¡ t| j	ƒr9| j
 | jj d | j	¡¡¡ g | _	dS dS )zHandle any buffered data.Ú N)r	   ÚcloseÚlenÚrawdatar   Ú
cdata_elemÚhandle_datar   Úunescaper   r   Úappendr   Ú	htmlStashÚstoreÚjoinr   r   r   r   r   c   s   



þzHTMLExtractor.closeÚreturnÚintc                 C  sJ   | j dkr#d| jv r#t d | j d ¡| j¡}|r| ¡ S | j d¡S dS )zHReturns char index in `self.rawdata` for the start of the current line. é   Ú
z([^\n]*\n){{{}}}r   )Úlinenor   ÚreÚmatchÚformatÚendÚrfind)r   Úmr   r   r   Úline_offsetr   s   zHTMLExtractor.line_offsetÚboolc                 C  s<   | j dkrdS | j dkrdS | j| j| j| j  …  ¡ dkS )z†
        Returns True if current position is at start of line.

        Allows for up to three blank spaces at start of line.
        r   Té   Fr   )Úoffsetr   r0   Ústripr   r   r   r   Úat_line_start   s
   

 zHTMLExtractor.at_line_startÚtagÚstrc                 C  s<   | j | j }tj | j|¡}|r| j|| ¡ … S d |¡S )z™
        Returns the text of the end tag.

        If it fails to extract the actual text from the raw data, it builds a closing tag with `tag`.
        z</{}>)r0   r3   r   Ú	endendtagÚsearchr   r-   r,   )r   r6   Ústartr/   r   r   r   Úget_endtag_textŒ   s
   
zHTMLExtractor.get_endtag_textÚattrsúdict[str, str]c                 C  sœ   || j v r|  ||¡ d S | j |¡r&| js|  ¡ r&| js&d| _| j d¡ |  	¡ }| jr;| j
 |¡ | j |¡ d S | j |¡ || jv rL|  ¡  d S d S )NTr(   )r   Úhandle_startendtagr   Úis_block_levelr   r5   r   r   r!   Úget_starttag_textr   r   ÚCDATA_CONTENT_ELEMENTSÚclear_cdata_mode)r   r6   r<   Útextr   r   r   Úhandle_starttag›   s   
 
þzHTMLExtractor.handle_starttagc                 C  sÖ   |   |¡}| jrc| j |¡ || jv r!| jr!| j ¡ |krn| jst| jƒdkrat | j	| j
| j t|ƒ d … ¡rA| j d¡ nd| _d| _| j | jj d | j¡¡¡ | j d¡ g | _d S d S | j |¡ d S )Nr   r(   TFr   ú

)r;   r   r   r!   r   Úpopr   Úblank_line_rer+   r   r0   r3   r   r   r   r"   r#   r$   )r   r6   rC   r   r   r   Úhandle_endtag°   s$   

þ$
ózHTMLExtractor.handle_endtagÚdatac                 C  s:   | j r
d|v r
d| _ | jr| j |¡ d S | j |¡ d S )Nr(   F)r   r   r   r!   r   ©r   rI   r   r   r   r   Ë   s
   zHTMLExtractor.handle_dataÚis_blockc                 C  sÆ   | j s| jr| j |¡ dS |  ¡ r[|r[t | j| j| j	 t
|ƒ d… ¡r+|d7 }nd| _| jr6| jd nd}| d¡sH| d¡rH| j d¡ | j | jj |¡¡ | j d¡ dS | j |¡ dS )z Handle empty tags (`<data>`). Nr(   Téÿÿÿÿr   rE   )r   r   r   r!   r5   rG   r+   r   r0   r3   r   r   Úendswithr   r"   r#   )r   rI   rK   Úitemr   r   r   Úhandle_empty_tagÓ   s   $
zHTMLExtractor.handle_empty_tagc                 C  s   | j |  ¡ | j |¡d d S )N©rK   )rO   r@   r   r?   )r   r6   r<   r   r   r   r>   ê   s   z HTMLExtractor.handle_startendtagÚnamec                 C  ó   | j d |¡dd d S )Nz&#{};FrP   ©rO   r,   ©r   rQ   r   r   r   Úhandle_charrefí   ó   zHTMLExtractor.handle_charrefc                 C  rR   )Nz&{};FrP   rS   rT   r   r   r   Úhandle_entityrefð   rV   zHTMLExtractor.handle_entityrefc                 C  rR   )Nz	<!--{}-->TrP   rS   rJ   r   r   r   Úhandle_commentó   rV   zHTMLExtractor.handle_commentc                 C  rR   )Nz<!{}>TrP   rS   rJ   r   r   r   Úhandle_declö   rV   zHTMLExtractor.handle_declc                 C  rR   )Nz<?{}?>TrP   rS   rJ   r   r   r   Ú	handle_più   rV   zHTMLExtractor.handle_pic                 C  s,   |  d¡rdnd}| jd ||¡dd d S )NzCDATA[z]]>z]>z<![{}{}TrP   )Ú
startswithrO   r,   )r   rI   r-   r   r   r   Úunknown_declü   s   zHTMLExtractor.unknown_declÚic                   ó,   |   ¡ s| jrtƒ  |¡S |  d¡ |d S )Nz<?é   )r5   r   r	   Úparse_pir   ©r   r]   r   r   r   r`      ó   
zHTMLExtractor.parse_pic                   r^   )Nz<!r_   )r5   r   r	   Úparse_html_declarationr   ra   r   r   r   rc     rb   z$HTMLExtractor.parse_html_declarationNc                 C  s   | j S )z)Return full source of start tag: `<...>`.)Ú_HTMLExtractor__starttag_textr   r   r   r   r@     s   zHTMLExtractor.get_starttag_textc                 C  sê  d | _ |  |¡}|dk r|S | j}|||… | _ g }tj ||d ¡}|s)J dƒ‚| ¡ }| d¡ ¡  | _	}||k r™tj
 ||¡}|sEnT| ddd¡\}	}
}|
sTd }n-|d d… d  krf|dd … ks{n |d d… d  kry|dd … krn n|dd… }|rˆt |¡}| |	 ¡ |f¡ | ¡ }||k s;|||…  ¡ }|d	vrÖ|  ¡ \}}d
| j v rÄ|| j  d
¡ }t| j ƒ| j  d
¡ }n|t| j ƒ }|  |||… ¡ |S | d¡rã|  ||¡ |S || jv rí|  |¡ |  ||¡ |S )Nr   r'   z#unexpected call to parse_starttag()r_   r2   ú'rL   ú")ú>ú/>r(   rh   )rd   Úcheck_for_whole_start_tagr   r   Útagfind_tolerantr+   r-   ÚgroupÚlowerÚlasttagÚattrfind_tolerantr    r!   r4   ÚgetposÚcountr   r.   r   rM   r>   rA   Úset_cdata_moderD   )r   r]   Úendposr   r<   r+   Úkr6   r/   ÚattrnameÚrestÚ	attrvaluer-   r)   r3   r   r   r   Úparse_starttag  sX   
&(
ó

ÿ

ý
zHTMLExtractor.parse_starttag)r%   r&   )r%   r1   )r6   r7   r%   r7   )r6   r7   r<   r=   )r6   r7   )rI   r7   )rI   r7   rK   r1   )rQ   r7   )r]   r&   r%   r&   )r%   r7   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r   Úpropertyr0   r5   r;   rD   rH   r   rO   r>   rU   rW   rX   rY   rZ   r\   r`   rc   rd   r@   rw   Ú__classcell__r   r   r   r   r   F   s2    	













r   )r{   Ú
__future__r   r*   Úimportlib.utilÚ	importlibÚsysÚutilÚ	find_specÚspecÚmodule_from_specr   ÚloaderÚexec_moduleÚmodulesÚcompileÚpicloseÚ	entityrefÚ
incompleteÚVERBOSEÚlocatestarttagend_tolerantrG   Ú
HTMLParserr   r   r   r   r   Ú<module>   s"   
ò
