o
    ¼>hÆJ  ã                   @  sî   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 dd	lmZ dd
lmZmZ ddlm  mZ ddlmZmZmZ erIddlmZ G dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ de
ƒZG dd„ deƒZdd„ ZdS )zë
Parse Markdown syntax within raw HTML.
Based on the implementation in [PHP Markdown Extra](http://michelf.com/projects/php-markdown/extra/).

See the [documentation](https://Python-Markdown.github.io/extensions/raw_html)
for details.
é    )Úannotationsé   )Ú	Extensioné   )ÚBlockProcessor)ÚPreprocessor)ÚRawHtmlPostprocessor)Úutil)ÚHTMLExtractorÚblank_line_reN)ÚTYPE_CHECKINGÚLiteralÚMapping)ÚMarkdownc                      s¢   e Zd ZdZd#‡ fdd„Z‡ fdd„Z‡ fdd	„Zd$dd„Zd%dd„Z‡ fdd„Z	‡ fdd„Z
dd„ Z‡ fdd„Z‡ fdd„Zd&‡ fdd „Zd&‡ fd!d"„Z‡  ZS )'ÚHTMLExtractorExtrazƒ
    Override `HTMLExtractor` and create `etree` `Elements` for any elements which should have content parsed as
    Markdown.
    Úmdr   c                   sv   t |j ¡ ƒ| _t g d¢ƒ| _t g d¢ƒ| _tƒ j|g|¢R i |¤Ž t | jƒ| j| jB | jB  | _	| j	| jB | _
d S )N)ÚaddressÚddÚdtÚh1Úh2Úh3Úh4Úh5Úh6ÚlegendÚliÚpÚsummaryÚtdÚth)ÚcanvasÚmathÚoptionÚpreÚscriptÚstyleÚtextarea)ÚsetÚblock_level_elementsÚcopyÚblock_level_tagsÚ	span_tagsÚraw_tagsÚsuperÚ__init__Ú
empty_tagsÚ
block_tagsÚspan_and_blocks_tags)Úselfr   ÚargsÚkwargs©Ú	__class__© ú~/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/markdown/extensions/md_in_html.pyr/   +   s   ÿzHTMLExtractorExtra.__init__c                   s*   g | _ t ¡ | _g | _g | _tƒ  ¡  dS )z1Reset this instance.  Loses all unprocessed data.N)ÚmdstackÚetreeÚTreeBuilderÚtreebuilderÚmdstateÚ	mdstartedr.   Úreset©r3   r6   r8   r9   r@   ;   s
   
zHTMLExtractorExtra.resetc                   s(   t ƒ  ¡  | jr|  | jd ¡ dS dS )zHandle any buffered data.r   N)r.   Úcloser:   Úhandle_endtagrA   r6   r8   r9   rB   C   s   
þzHTMLExtractorExtra.closeÚreturnúetree.Elementc                 C  s   | j  ¡ }t ¡ | _ |S )zJ Return element from `treebuilder` and reset `treebuilder` for later use. )r=   rB   r;   r<   )r3   Úelementr8   r8   r9   Úget_elementK   s   

zHTMLExtractorExtra.get_elementÚattrsúMapping[str, str]ú%Literal['block', 'span', 'off', None]c                 C  sª   |  dd¡}|dkrd}| jr| jd nd}|dks"|dkr$|dkr$|}|dkr-|| jv s6|dkr8|| jv r8dS |dkrA|| jv sJ|dkrL|| jv rLdS || jv rSdS dS )	zS Return state from tag and `markdown` attribute. One of 'block', 'span', or 'off'. ÚmarkdownÚ0Ú1éÿÿÿÿNÚoffÚspanÚblock)Úgetr>   r1   r2   r,   r+   )r3   ÚtagrH   Úmd_attrÚparent_stater8   r8   r9   Ú	get_stateQ   s   
zHTMLExtractorExtra.get_statec                   s¬  || j v r7|  ¡ s| jr7dd„ |D ƒ}d|v r+| d¡ t ||¡}tj|ddd}n|  ¡ }|  |d¡ d S || j	v rŸ|  ¡ sK| jsK| j
rŸ| j
d rŸd	d„ |D ƒ}|  ||¡}| jsb|d
v rq| jsq| dd ¡ tƒ  ||¡ d S d| jv r€|| j	v r€|  d¡ | j |¡ | j |¡ | j
 d¡ ||d< | j ||¡ d S | jr«tƒ  ||¡ d S |  ¡ }| jrÄ| jd dkrÄ|  | jj |¡¡ n|  |¡ || jv rÔ|  ¡  d S d S )Nc                 S  ó"   i | ]\}}||d ur|n|“qS ©Nr8   ©Ú.0ÚkeyÚvaluer8   r8   r9   Ú
<dictcomp>i   ó   " z6HTMLExtractorExtra.handle_starttag.<locals>.<dictcomp>rK   ÚunicodeÚhtml©ÚencodingÚmethodTrN   c                 S  rW   rX   r8   rY   r8   r8   r9   r]   y   r^   )NrO   r   rO   )r0   Úat_line_startÚintailÚpopr;   ÚElementÚtostringÚget_starttag_textÚhandle_empty_tagr+   r?   rV   Úinrawr:   r.   Úhandle_starttagrC   r>   Úappendr=   ÚstartÚhandle_datar   Ú	htmlStashÚstoreÚCDATA_CONTENT_ELEMENTSÚclear_cdata_mode)r3   rS   rH   rF   ÚdataÚstateÚtextr6   r8   r9   rl   f   sN   

ÿÿÿÿ


þz"HTMLExtractorExtra.handle_starttagc           
        sÖ  || j v r;| jrtƒ  |¡ d S || jv r| jr7| j ¡ }| j ¡  | j ¡  | j 	|¡ ||kr4n| js| js|  
¡ }| jrG| jd nd}| d¡sY| d¡rY| j d¡ |}g }|d urät|ƒD ]q}| |¡ |jd urt|jnd}|jd ur~|jnd}d |_|j dd¡}	|dkr•d| d¡ }| d¡s¡| d¡d }|	dv r¹|› | jj |¡› |› |_| |¡ qe|j d¡ dd	„ | ¡ D ƒ |› | jj |¡› |› |_qe|rÞ| d
¡nd }|d usa| j | jj |¡¡ | j d¡ g | _t | j| j| j t|   |¡ƒ d … ¡sd| _!d S d S d S |   |¡}| jr4| jd dkr4|  "| jj |¡¡ d S |  "|¡ d S | jrGtƒ  |¡ d S |   |¡}| jrd| jd dkrd|  "| jj |¡¡ d S |  "|¡ d S )NrN   Ú ú

Ú
rK   rO   )rP   rQ   c                 S  s   g | ]	}|j  d d¡‘qS )rK   N)Úattribrf   )rZ   Úcr8   r8   r9   Ú
<listcomp>Ï   s    z4HTMLExtractorExtra.handle_endtag.<locals>.<listcomp>r   T)#r+   rk   r.   rC   r:   rf   r>   r?   r=   ÚendrG   ÚcleandocÚendswithrm   ÚlistÚremoverv   Útailrz   rR   Úrstripr   rp   rq   Úiterru   r   ÚmatchÚrawdataÚline_offsetÚoffsetÚlenÚget_endtag_textre   ro   )
r3   rS   ÚitemrF   ÚcurrentÚlastÚchildrv   r‚   ru   r6   r8   r9   rC   —   sr   


ú

ã"ÿ
É4

z HTMLExtractorExtra.handle_endtagc                 C  st   || j v r)dd„ |D ƒ}d|v r$| d¡ t ||¡}tj|ddd}n	|  ¡ }n|  ¡ }| j|| j |¡d d S )Nc                 S  rW   rX   r8   rY   r8   r8   r9   r]   ð   r^   z9HTMLExtractorExtra.handle_startendtag.<locals>.<dictcomp>rK   r_   r`   ra   )Úis_block)	r0   rf   r;   rg   rh   ri   rj   r   Úis_block_level)r3   rS   rH   rF   rt   r8   r8   r9   Úhandle_startendtagî   s   


z%HTMLExtractorExtra.handle_startendtagc                   sJ   | j r
d|v r
d| _ | js| jstƒ  |¡ d S d| jd< | j |¡ d S )Nry   FrN   )re   rk   r:   r.   ro   r?   r=   rt   )r3   rt   r6   r8   r9   ro   û   s   
zHTMLExtractorExtra.handle_datac                   s„   | j s| jstƒ  ||¡ d S |  ¡ r%|r%|  d| jj |¡ d ¡ d S | j	r;| j	d dkr;|  | jj |¡¡ d S |  |¡ d S )Nry   rx   rN   rO   )
rk   r:   r.   rj   rd   ro   r   rp   rq   r>   )r3   rt   r   r6   r8   r9   rj     s    z#HTMLExtractorExtra.handle_empty_tagÚiÚintc                   ó6   |   ¡ s
| js
| jrtt| ƒ |¡S |  d¡ |d S )Nz<?r   )rd   re   r:   r.   r
   Úparse_piro   ©r3   r’   r6   r8   r9   r•     ó   
zHTMLExtractorExtra.parse_pic                   r”   )Nz<!r   )rd   re   r:   r.   r
   Úparse_html_declarationro   r–   r6   r8   r9   r˜     r—   z)HTMLExtractorExtra.parse_html_declaration)r   r   )rD   rE   )rH   rI   rD   rJ   )r’   r“   rD   r“   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   r@   rB   rG   rV   rl   rC   r‘   ro   rj   r•   r˜   Ú__classcell__r8   r8   r6   r9   r   %   s    

1W	
r   c                   @  s   e Zd ZdZddd„ZdS )	ÚHtmlBlockPreprocessorzDRemove html blocks from the text and store them for later retrieval.Úlinesú	list[str]rD   c                 C  s8   d  |¡}t| jƒ}| |¡ | ¡  d  |j¡ d¡S )Nry   rw   )Újoinr   r   ÚfeedrB   r~   Úsplit)r3   rŸ   ÚsourceÚparserr8   r8   r9   Úrun'  s
   


zHtmlBlockPreprocessor.runN)rŸ   r    rD   r    )r™   rš   r›   rœ   r¦   r8   r8   r8   r9   rž   $  s    rž   c                   @  s.   e Zd ZdZddd	„Zddd„Zddd„ZdS )ÚMarkdownInHtmlProcessorzNProcess Markdown Inside HTML Blocks which have been stored in the `HtmlStash`.ÚparentrE   rQ   ÚstrrD   Úboolc                 C  s   dS )NTr8   )r3   r¨   rQ   r8   r8   r9   Útest2  s   zMarkdownInHtmlProcessor.testrF   ÚNonec           
      C  s  |j  dd¡}|dkr%|jr#|j d¡}d|_| j || d¡¡ dS dS |dkrÚ|jdur1|jnd}d|_d}d	}tj 	|¡D ]{}t
| d
¡ƒ}| jjjj| }| ¡ }	t|tjƒrž|du rk| j|||	… 7  _n| j|||	… 7  _| |¡ |  |¡ |}|jdu rŠd|_| jjjj |¡ | jjjj |d¡ n|du r®| j|||	… 7  _n| j|||	… 7  _|	}q@|du rÍ| j||d… 7  _dS | j||d… 7  _dS |jdu râd|_t |j¡|_t|ƒD ]}|  |¡ |jrþt |j¡|_qídS )až  
        Recursively parse the text content of an `etree` Element as Markdown.

        Any block level elements generated from the Markdown will be inserted as children of the element in place
        of the text content. All `markdown` attributes are removed. For any elements in which Markdown parsing has
        been disabled, the text content of it and its children are wrapped in an `AtomicString`.
        rK   rO   rQ   ry   rw   rx   rP   Nr   r   )rz   rf   rv   rƒ   r¥   ÚparseBlocksr£   r	   ÚHTML_PLACEHOLDER_REÚfinditerr“   Úgroupr   rp   ÚrawHtmlBlocksrn   Ú
isinstancer;   rg   r‚   rm   Úparse_element_contentÚinsertÚAtomicStringr€   )
r3   rF   rT   rQ   rŽ   rn   ÚmÚindexÚelr}   r8   r8   r9   r³   6  sV   	ý




€ýz-MarkdownInHtmlProcessor.parse_element_contentÚblocksr    c                 C  sŠ   t j |d ¡}|rCt| d¡ƒ}| jjjj| }t	|t
jƒrC| d¡ | |¡ |  |¡ | jjjj |¡ | jjjj |d¡ dS dS )Nr   r   rw   TF)r	   r®   r…   r“   r°   r¥   r   rp   r±   r²   r;   rg   rf   rm   r³   r´   )r3   r¨   r¹   r¶   r·   rF   r8   r8   r9   r¦     s   


zMarkdownInHtmlProcessor.runN)r¨   rE   rQ   r©   rD   rª   )rF   rE   rD   r¬   )r¨   rE   r¹   r    rD   rª   )r™   rš   r›   rœ   r«   r³   r¦   r8   r8   r8   r9   r§   /  s
    

Ir§   c                   @  s   e Zd Zddd„ZdS )	ÚMarkdownInHTMLPostprocessorrv   ústr | etree.ElementrD   r©   c                 C  s    t |tjƒr| j |¡S t|ƒS )zE Override default to handle any `etree` elements still in the stash. )r²   r;   rg   r   Ú
serializerr©   )r3   rv   r8   r8   r9   Ústash_to_string“  s   z+MarkdownInHTMLPostprocessor.stash_to_stringN)rv   r»   rD   r©   )r™   rš   r›   r½   r8   r8   r8   r9   rº   ’  s    rº   c                   @  s   e Zd ZdZdd„ ZdS )ÚMarkdownInHtmlExtensionz/Add Markdown parsing in HTML to Markdown class.c                 C  sD   |j  t|ƒdd¡ |jj t|jƒdd¡ |j t|ƒdd¡ dS )z Register extension instances. Ú
html_blocké   Úmarkdown_blockéi   Úraw_htmlé   N)ÚpreprocessorsÚregisterrž   r¥   Úblockprocessorsr§   Úpostprocessorsrº   )r3   r   r8   r8   r9   ÚextendMarkdownž  s
   ÿz&MarkdownInHtmlExtension.extendMarkdownN)r™   rš   r›   rœ   rÉ   r8   r8   r8   r9   r¾   ›  s    r¾   c                  K  s   t di | ¤ŽS )Nr8   )r¾   )r5   r8   r8   r9   ÚmakeExtension«  s   rÊ   )rœ   Ú
__future__r   rw   r   rÇ   r   rÅ   r   rÈ   r   r	   Ú
htmlparserr
   r   Úxml.etree.ElementTreer;   ÚElementTreeÚtypingr   r   r   rK   r   r   rž   r§   rº   r¾   rÊ   r8   r8   r8   r9   Ú<module>   s(     c	