o
    7÷d>  ã                   @   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 )ÚHTMLExtractorExtrazƒ
    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ÚdtÚh1Úh2Zh3Zh4Zh5Zh6Z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__© úuC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\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*   r0   0   s   
zHTMLExtractorExtra.resetc                    s(   t ƒ  ¡  | jr|  | jd ¡ dS dS )zHandle any buffered data.r
   N)r   Úcloser+   Úhandle_endtagr1   r'   r)   r*   r2   7   s   
þzHTMLExtractorExtra.closec                 C   s   | j  ¡ }t ¡ | _ |S )zJ Return element from `treebuilder` and reset `treebuilder` for later use. )r.   r2   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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/   r!   r"   r   r   )r#   ÚtagÚattrsÚmd_attrZparent_stater)   r)   r*   Ú	get_stateE   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‘|  ¡ sC| jr‘dd„ |D ƒ}|  
||¡}| jsZ|d	v ri| jsi| dd ¡ tƒ  ||¡ d S d
| jv rx|| j	v rx|  d
¡ | j |¡ | j |¡ ||d< | j ||¡ d S | jrtƒ  ||¡ 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 ©Nr)   ©Ú.0ÚkeyÚvaluer)   r)   r*   Ú
<dictcomp>]   ó   " z6HTMLExtractorExtra.handle_starttag.<locals>.<dictcomp>r6   ÚunicodeÚhtml©ÚencodingÚmethodTc                 S   rB   rC   r)   rD   r)   r)   r*   rH   j   rI   )Nr:   r   r9   r:   )r    Úat_line_startÚintailÚpopr,   ÚElementÚtostringÚget_starttag_textÚhandle_empty_tagr   rA   Úinrawr+   r   Úhandle_starttagr3   r/   Úappendr.   ÚstartÚhandle_datar$   Ú	htmlStashÚstoreÚCDATA_CONTENT_ELEMENTSÚclear_cdata_mode)r#   r>   r?   r4   ÚdataÚstateÚtextr'   r)   r*   rW   Z   s<   



þz"HTMLExtractorExtra.handle_starttagc                    s¤  || j v r¥| jrtƒ  |¡ d S || jv rƒ| jr0| j ¡ }| j ¡  | j |¡ ||kr-n| js| js|  	¡ }| j
r?| j
d nd}| d¡sQ| d¡rQ| j
 d¡ | j
 | jj |¡¡ | j
 d¡ g | _t | j| j| j t|  |¡ƒ d … ¡sd| _d S d S d S |  |¡}| jrž| jd dkrž|  | jj |¡¡ d S |  |¡ d S | jr°tƒ  |¡ d S |  |¡}| jrË| jd dkrË|  | jj |¡¡ d S |  |¡ d S )Nr9   Ú ú

Ú
Tr:   )r   rV   r   r3   r+   rQ   r/   r.   Úendr5   ÚcleandocÚendswithrX   r$   r[   r\   r`   r	   ÚmatchÚrawdataÚline_offsetÚoffsetÚlenZget_endtag_textrP   rZ   )r#   r>   Úitemr4   ra   r'   r)   r*   r3   †   sF   



û"ÿ
ð

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   rB   rC   r)   rD   r)   r)   r*   rH   ·   rI   z9HTMLExtractorExtra.handle_startendtag.<locals>.<dictcomp>r6   rJ   rK   rL   )Úis_block)	r    rQ   r,   rR   rS   rT   rU   r$   Zis_block_level)r#   r>   r?   r4   r_   r)   r)   r*   Úhandle_startendtagµ   s   


z%HTMLExtractorExtra.handle_startendtagc                    s@   | j r
d|v r
d| _ | js| jstƒ  |¡ d S | j |¡ d S )Nrd   F)rP   rV   r+   r   rZ   r.   r_   )r#   r_   r'   r)   r*   rZ   Â   s
   zHTMLExtractorExtra.handle_datac                    sb   | j s| jstƒ  ||¡ d S |  ¡ r%|r%|  d| jj |¡ d ¡ d S |  | jj |¡¡ d S )Nrd   rc   )	rV   r+   r   rU   rO   rZ   r$   r[   r\   )r#   r_   rn   r'   r)   r*   rU   Ê   s
    z#HTMLExtractorExtra.handle_empty_tagc                    ó6   |   ¡ s
| js
| jrtt| ƒ |¡S |  d¡ |d S )Nz<?r   )rO   rP   r+   r   r   Úparse_pirZ   ©r#   Úir'   r)   r*   rq   Ó   ó   
zHTMLExtractorExtra.parse_pic                    rp   )Nz<!r   )rO   rP   r+   r   r   Úparse_html_declarationrZ   rr   r'   r)   r*   ru   Ý   rt   z)HTMLExtractorExtra.parse_html_declaration)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r0   r2   r5   rA   rW   r3   ro   rZ   rU   rq   ru   Ú__classcell__r)   r)   r'   r*   r      s    ,/	
r   c                   @   ó   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 )Nrd   rb   )Újoinr   r$   Úfeedr2   rf   Úsplit)r#   ÚlinesÚsourceÚparserr)   r)   r*   Úrunë   s
   


zHtmlBlockPreprocessor.runN)rv   rw   rx   ry   rƒ   r)   r)   r)   r*   r|   è   ó    r|   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚMarkdownInHtmlProcessorzNProcess 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 ]0\}}|jrM|j d¡}d|_t d¡}| j	 
|| d¡¡ t|ƒ}| ¡  | |d |f¡ q| ¡  |D ]\}}	|	D ]}
| ||
¡ qZqT|jr’|j d¡}d|_t d¡}| j	 
|| d¡¡ t|ƒ}| ¡  |D ]
}| d	|¡ q‰dS dS |d
kr¨t|ƒD ]}|  |¡ qž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`.
        r6   r:   r<   rd   rb   Údivrc   r   r
   r;   N)ÚattribrQ   ÚlistÚparse_element_contentÚ	enumerateÚtailÚrstripr,   rR   r‚   ZparseBlocksr   ÚreverserX   Úinsertra   r   ZAtomicString)r#   r4   r@   ÚchildZtailsÚposr<   ÚdummyÚchildrenr   rm   r)   r)   r*   r‹   ú   sX   	
€ÿ
÷ÿ

€ýz-MarkdownInHtmlProcessor.parse_element_contentc                 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   rb   TF)r   ZHTML_PLACEHOLDER_RErh   ÚintÚgroupr‚   r$   r[   ZrawHtmlBlocksÚ
isinstancer,   rR   rQ   r‹   rX   r   )r#   r†   ÚblocksÚmÚindexr4   r)   r)   r*   rƒ   @  s   


zMarkdownInHtmlProcessor.runN)rv   rw   rx   ry   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 )zE Override default to handle any `etree` elements still in the stash. )r—   r,   rR   r$   Ú
serializerÚstr)r#   ra   r)   r)   r*   Ústash_to_stringT  s   z+MarkdownInHTMLPostprocessor.stash_to_stringN)rv   rw   rx   rž   r)   r)   r)   r*   r›   S  s    r›   c                   @   r{   )Ú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Úregisterr|   r‚   Úblockprocessorsr…   Úpostprocessorsr›   )r#   r$   r)   r)   r*   ÚextendMarkdown_  s
   ÿz&MarkdownInHtmlExtension.extendMarkdownN)rv   rw   rx   ry   r§   r)   r)   r)   r*   rŸ   \  r„   rŸ   c                  K   s   t di | ¤ŽS )Nr)   )rŸ   )r&   r)   r)   r*   ÚmakeExtensionl  s   r¨   )ry   rb   r   r¥   r   r£   r   r¦   r   r   Z
htmlparserr   r	   Úxml.etree.ElementTreer,   ÚElementTreer   r|   r…   r›   rŸ   r¨   r)   r)   r)   r*   Ú<module>   s     O`	