a
    t=icÕ=  ã                   @   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mZ d	d
lm  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 )a‹  
Python-Markdown Markdown in HTML Extension
===============================

An implementation of [PHP Markdown Extra](http://michelf.com/projects/php-markdown/extra/)'s
parsing of Markdown syntax in raw HTML.

See <https://Python-Markdown.github.io/extensions/raw_html>
for documentation.

Copyright The Python Markdown Project

License: [BSD](https://opensource.org/licenses/bsd-license.php)

é   )Ú	Extensioné   )ÚBlockProcessor)ÚPreprocessor)ÚRawHtmlPostprocessor)Úutil)ÚHTMLExtractorÚblank_line_reé    Nc                       s˜   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡ fdd„Zdd	„ Zd
d„ Z‡ fdd„Z	‡ fdd„Z
dd„ Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚHTMLExtractorExtrazy
    Override HTMLExtractor and create etree Elements for any elements which should have content parsed as Markdown.
    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ÚdtZh1Zh2Zh3Zh4Zh5Zh6ÚlegendZliÚpÚsummaryÚtdÚth)ZcanvasÚmathÚoptionÚpreÚscriptÚstyleZtextarea)ÚsetZblock_level_elementsÚcopyÚblock_level_tagsÚ	span_tagsZraw_tagsÚsuperÚ__init__Ú
empty_tagsÚ
block_tagsÚspan_and_blocks_tags)ÚselfÚmdÚargsÚkwargs©Ú	__class__© úo/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/markdown/extensions/md_in_html.pyr      s    ÿzHTMLExtractorExtra.__init__c                    s$   g | _ t ¡ | _g | _tƒ  ¡  dS )z1Reset this instance.  Loses all unprocessed data.N)ÚmdstackÚetreeÚTreeBuilderÚtreebuilderÚmdstater   Úreset©r"   r&   r(   r)   r/   /   s    
zHTMLExtractorExtra.resetc                    s$   t ƒ  ¡  | jr |  | jd ¡ dS )zHandle any buffered data.r
   N)r   Úcloser*   Úhandle_endtagr0   r&   r(   r)   r1   6   s    
zHTMLExtractorExtra.closec                 C   s   | j  ¡ }t ¡ | _ |S )zF Return element from treebuilder and reset treebuilder for later use. )r-   r1   r+   r,   )r"   Úelementr(   r(   r)   Úget_element>   s    

zHTMLExtractorExtra.get_elementc                 C   s®   |  dd¡}|dkrd}| jr(| jd nd}|dksD|dkrH|dkrH|}|dkrZ|| jv sl|dkrp|| jv rpdS |dkr‚|| jv s”|dkr˜|| jv r˜dS || jv r¦dS dS dS )	zN Return state from tag and `markdown` attr. One of 'block', 'span', or 'off'. ÚmarkdownÚ0Ú1éÿÿÿÿNÚoffÚspanÚblock)Úgetr.   r    r!   r   r   )r"   ÚtagÚattrsÚmd_attrZparent_stater(   r(   r)   Ú	get_stateD   s*    ÿÿÿÿ
zHTMLExtractorExtra.get_statec                    s’  || j v rn|  ¡ s| jrndd„ |D ƒ}d|v rV| d¡ t ||¡}tj|ddd}n|  ¡ }|  |d¡ d S || j	v r"|  ¡ sŠ| jr"dd„ |D ƒ}|  
||¡}| js¸|d	v rÔ| jsÔ| dd ¡ tƒ  ||¡ nLd
| jv rò|| j	v rò|  d
¡ | j |¡ | j |¡ ||d< | j ||¡ nl| jr:tƒ  ||¡ nT|  ¡ }| jrp| jd dkrp|  | jj |¡¡ n
|  |¡ || jv rŽ|  ¡  d S )Nc                 S   s"   i | ]\}}||d ur|n|“qS ©Nr(   ©Ú.0ÚkeyÚvaluer(   r(   r)   Ú
<dictcomp>\   ó    z6HTMLExtractorExtra.handle_starttag.<locals>.<dictcomp>r5   ÚunicodeÚhtml©ÚencodingÚmethodTc                 S   s"   i | ]\}}||d ur|n|“qS rA   r(   rB   r(   r(   r)   rF   i   rG   )Nr9   r   r8   r9   )r   Úat_line_startÚintailÚpopr+   ÚElementÚtostringÚget_starttag_textÚhandle_empty_tagr   r@   Úinrawr*   r   Úhandle_starttagr2   r.   Úappendr-   ÚstartÚhandle_datar#   Ú	htmlStashÚstoreÚCDATA_CONTENT_ELEMENTSÚclear_cdata_mode)r"   r=   r>   r3   ÚdataÚstateÚtextr&   r(   r)   rU   Y   s:    


z"HTMLExtractorExtra.handle_starttagc                    sš  || j v r>| jr"tƒ  |¡ q–|| jv rú| jr^| j ¡ }| j ¡  | j |¡ ||kr,q^q,| jsø|  	¡ }| j
r|| j
d nd}| d¡s | d¡r | j
 d¡ | j
 | jj |¡¡ | j
 d¡ g | _t | j| j| j t|  |¡ƒ d … ¡sød| _nB|  |¡}| jr2| jd dkr2|  | jj |¡¡ n
|  |¡ nX| jrTtƒ  |¡ nB|  |¡}| jrŒ| jd dkrŒ|  | jj |¡¡ n
|  |¡ d S )Nr8   Ú ú

Ú
Tr9   )r   rT   r   r2   r*   rO   r.   r-   Úendr4   ÚcleandocÚendswithrV   r#   rY   rZ   r^   r	   ÚmatchÚrawdataÚline_offsetÚoffsetÚlenZget_endtag_textrN   rX   )r"   r=   Úitemr3   r_   r&   r(   r)   r2   …   s@    


"ÿ

z HTMLExtractorExtra.handle_endtagc                 C   st   || j v rRdd„ |D ƒ}d|v rH| d¡ t ||¡}tj|ddd}qZ|  ¡ }n|  ¡ }| j|| j |¡d d S )Nc                 S   s"   i | ]\}}||d ur|n|“qS rA   r(   rB   r(   r(   r)   rF   ¶   rG   z9HTMLExtractorExtra.handle_startendtag.<locals>.<dictcomp>r5   rH   rI   rJ   )Úis_block)	r   rO   r+   rP   rQ   rR   rS   r#   Zis_block_level)r"   r=   r>   r3   r]   r(   r(   r)   Úhandle_startendtag´   s    


z%HTMLExtractorExtra.handle_startendtagc                    s>   | j rd|v rd| _ | js | js.tƒ  |¡ n| j |¡ d S )Nrb   F)rN   rT   r*   r   rX   r-   r]   )r"   r]   r&   r(   r)   rX   Á   s
    zHTMLExtractorExtra.handle_datac                    s^   | j s| jstƒ  ||¡ n>|  ¡ rF|rF|  d| jj |¡ d ¡ n|  | jj |¡¡ d S )Nrb   ra   )	rT   r*   r   rS   rM   rX   r#   rY   rZ   )r"   r]   rl   r&   r(   r)   rS   É   s
    z#HTMLExtractorExtra.handle_empty_tagc                    s6   |   ¡ s| js| jr$tt| ƒ |¡S |  d¡ |d S )Nz<?r   )rM   rN   r*   r   r   Úparse_pirX   ©r"   Úir&   r(   r)   rn   Ò   s    
zHTMLExtractorExtra.parse_pic                    s6   |   ¡ s| js| jr$tt| ƒ |¡S |  d¡ |d S )Nz<!r   )rM   rN   r*   r   r   Úparse_html_declarationrX   ro   r&   r(   r)   rq   Ü   s    
z)HTMLExtractorExtra.parse_html_declaration)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r/   r1   r4   r@   rU   r2   rm   rX   rS   rn   rq   Ú__classcell__r(   r(   r&   r)   r      s   ,/	
r   c                   @   s   e Zd ZdZdd„ ZdS )ÚHtmlBlockPreprocessorzDRemove html blocks from the text and store them for later retrieval.c                 C   s8   d  |¡}t| jƒ}| |¡ | ¡  d  |j¡ d¡S )Nrb   r`   )Újoinr   r#   Úfeedr1   rd   Úsplit)r"   ÚlinesÚsourceÚparserr(   r(   r)   Úrunê   s
    


zHtmlBlockPreprocessor.runN)rr   rs   rt   ru   r~   r(   r(   r(   r)   rw   ç   s   rw   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚMarkdownInHtmlProcessorzLProcess Markdown Inside HTML Blocks which have been stored in the HtmlStash.c                 C   s   dS )NTr(   )r"   Úparentr;   r(   r(   r)   Útestõ   s    zMarkdownInHtmlProcessor.testc                 C   s¦  |j  dd¡}|dkr,t|ƒD ]}|  |¡ q g }t|ƒD ]`\}}|jr<|j d¡}d|_t d¡}| j	 
|| d¡¡ t|ƒ}| ¡  | |d |f¡ q<| ¡  |D ]\}}	|	D ]}
| ||
¡ q¶qª|jr¢|j d¡}d|_t d¡}| j	 
|| d¡¡ t|ƒ}| ¡  |D ]}| d	|¡ qnv|d
krRt|ƒD ]}|  |¡ q>nP|jdu rdd|_t |j¡|_t|ƒD ]&}|  |¡ |jrzt |j¡|_qzd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 chidlren are wrapped in an `AtomicString`.
        r5   r9   r;   rb   r`   Údivra   r   r
   r:   N)ÚattribrO   ÚlistÚparse_element_contentÚ	enumerateÚtailÚrstripr+   rP   r}   ZparseBlocksrz   ÚreverserV   Úinsertr_   r   ZAtomicString)r"   r3   r?   ÚchildÚtailsÚposr;   ÚdummyÚchildrenr‡   rk   r(   r(   r)   r…   ù   sJ    	




z-MarkdownInHtmlProcessor.parse_element_contentc                 C   sŠ   t j |d ¡}|r†t| d¡ƒ}| jjjj| }t	|t
jƒr†| d¡ |  |¡ | |¡ | jjjj |¡ | jjjj |d¡ dS dS )Nr
   r   r`   TF)r   ZHTML_PLACEHOLDER_RErf   ÚintÚgroupr}   r#   rY   ZrawHtmlBlocksÚ
isinstancer+   rP   rO   r…   rV   rŠ   )r"   r€   ÚblocksÚmÚindexr3   r(   r(   r)   r~   ?  s    


zMarkdownInHtmlProcessor.runN)rr   rs   rt   ru   r   r…   r~   r(   r(   r(   r)   r   ò   s   Fr   c                   @   s   e Zd Zdd„ ZdS )ÚMarkdownInHTMLPostprocessorc                 C   s$   t |tjƒr| j |¡S t|ƒS dS )zC Override default to handle any etree elements still in the stash. N)r’   r+   rP   r#   Ú
serializerÚstr)r"   r_   r(   r(   r)   Ústash_to_stringS  s    z+MarkdownInHTMLPostprocessor.stash_to_stringN)rr   rs   rt   r™   r(   r(   r(   r)   r–   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. Z
html_blocké   Zmarkdown_blockéi   Zraw_htmlé   N)ÚpreprocessorsÚregisterrw   r}   Úblockprocessorsr   Úpostprocessorsr–   )r"   r#   r(   r(   r)   ÚextendMarkdown^  s
    ÿz&MarkdownInHtmlExtension.extendMarkdownN)rr   rs   rt   ru   r¢   r(   r(   r(   r)   rš   [  s   rš   c                  K   s   t f i | ¤ŽS rA   )rš   )r%   r(   r(   r)   ÚmakeExtensionk  s    r£   )ru   r`   r   r    r   rž   r   r¡   r   r   Z
htmlparserr   r	   Zxml.etree.ElementTreer+   ZElementTreer   rw   r   r–   rš   r£   r(   r(   r(   r)   Ú<module>   s    N`	