
    c=                         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c mZ  G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z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                        e Zd ZdZ fdZ fdZ fdZd Zd Z fdZ	 fdZ
d	 Z fd
Z fdZ fdZ fdZ xZS )HTMLExtractorExtrazy
    Override HTMLExtractor and create etree Elements for any elements which should have content parsed as Markdown.
    c                 z   t          |j                                                  | _        t          g d          | _        t          g d          | _         t                      j        |g|R i | t          | j                  | j        | j        z  | j        z  z
  | _	        | j	        | j        z  | _
        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)selfmdargskwargs	__class__s       >lib/python3.11/site-packages/markdown/extensions/md_in_html.pyr,   zHTMLExtractorExtra.__init__   s     #B$;$@$@$B$B C Csss
 
 ^^^__-d---f--- d3448VY]Yh8hi$(Odn$D!!!    c                     g | _         t          j                    | _        g | _        t                                                       dS )z1Reset this instance.  Loses all unprocessed data.N)mdstacketreeTreeBuildertreebuildermdstater+   resetr0   r4   s    r5   r=   zHTMLExtractorExtra.reset/   s7     ,..r6   c                     t                                                       | j        r"|                     | j        d                    dS dS )zHandle any buffered data.r   N)r+   closer8   handle_endtagr>   s    r5   r@   zHTMLExtractorExtra.close6   sH    < 	0t|A/////	0 	0r6   c                 h    | j                                         }t          j                    | _         |S )zF Return element from treebuilder and reset treebuilder for later use. )r;   r@   r9   r:   )r0   elements     r5   get_elementzHTMLExtractorExtra.get_element>   s,    "((** ,..r6   c                 ,   |                     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 s|dk    r|| j        v rdS |dk    r	|| j        v s|dk    r|| j        v rdS || j        v rdS dS )	zN Return state from tag and `markdown` attr. One of 'block', 'span', or 'off'. markdown01Noffspanblock)getr<   r.   r/   r)   r(   )r0   tagattrsmd_attrparent_states        r5   	get_statezHTMLExtractorExtra.get_stateD   s    ))J,,j  	G+/<At|B''T5  	#\V%; 	#3 	#"G^ 		t 6 		G#		(+t/H(H		7#~ 	#"7 	& 	%(D,E%E	6D)) 	54r6   c                    || j         v r|                                 s| j        r~d |D             }d|v rB|                    d           t	          j        ||          }t	          j        |dd          }n|                                 }|                     |d           d S || j	        v r|                                 s| j        rd |D             }| 
                    ||          }| j        s|dv rA| j        s:|                    dd            t                                          ||           d S d	| j        v r|| j	        v r|                     d	           | j                            |           | j                            |           ||d<   | j                            ||           d S | j        r$t                                          ||           d S |                                 }| j        rD| j        d
         dk    r3|                     | j        j                            |                     n|                     |           || j        v r|                                  d S d S )Nc                 "    i | ]\  }}|||n|S N .0keyvalues      r5   
<dictcomp>z6HTMLExtractorExtra.handle_starttag.<locals>.<dictcomp>\   '    VVV*#uS5=%%#VVVr6   rF   unicodehtmlencodingmethodTc                 "    i | ]\  }}|||n|S rU   rV   rW   s      r5   r[   z6HTMLExtractorExtra.handle_starttag.<locals>.<dictcomp>i   r\   r6   )NrJ   r   rI   rJ   )r-   at_line_startintailpopr9   Elementtostringget_starttag_texthandle_empty_tagr(   rR   inrawr8   r+   handle_starttagrA   r<   appendr;   starthandle_datar1   	htmlStashstoreCDATA_CONTENT_ELEMENTSclear_cdata_mode)r0   rN   rO   rC   datastatetextr4   s          r5   rk   z"HTMLExtractorExtra.handle_starttagY   s   $/! 		t'9'9';'; 		t{ 		VVPUVVVEU" 0		*%%%-U33~g	&QQQ--//!!$---F$'' 	,T-?-?-A-A 	,T[ 	, WVPUVVVENN3..Ez 3e}4 3T\ 3		*d+++''U33333$,& ,3$2G+G ,&&s+++##E***##C((($)j! &&sE22222 z 
,''U33333--//< +DL$4$= +$$TW%6%<%<T%B%BCCCC$$T***$55 ,))+++++, ,r6   c           	         || j         v r9| j        r#t                                          |           d S || j        v r| j        rZ| j                                        }| j                                         | j                            |           ||k    rn| j        Z| j        s | 	                                }| j
        r| j
        d         nd}|                    d          s/|                    d          r| j
                            d           | j
                            | j        j                            |                     | j
                            d           g | _        t#          j        | j        | j        | j        z   t-          |                     |                    z   d                    sd| _        d S d S d S |                     |          }| j        rE| j        d         dk    r4|                     | j        j                            |                     d S |                     |           d S | j        r#t                                          |           d S |                     |          }| j        rE| j        d         dk    r4|                     | j        j                            |                     d S |                     |           d S )NrI    


TrJ   )r(   rj   r+   rA   r8   re   r<   r;   endrD   cleandocendswithrl   r1   ro   rp   rt   r
   matchrawdataline_offsetoffsetlenget_endtag_textrd   rn   )r0   rN   itemrC   ru   r4   s        r5   rA   z HTMLExtractorExtra.handle_endtag   s   $'' ,	+z !+%%c*****$ +l <++--DL$$&&&$((...s{  l  | +"..00G 15E4=,,2D==00 3T]]45H5H 3,,T222M(():)@)@)I)IJJJM((000!#DJ(. L)9DK)G#dNbNbcfNgNgJhJh)h)i)ijl l + '+!+ ++ + ++C00< +DL$4$= +$$TW%6%<%<T%B%BCCCCC$$T***** z +%%c*****++C00< +DL$4$= +$$TW%6%<%<T%B%BCCCCC$$T*****r6   c                 l   || j         v rgd |D             }d|v rB|                    d           t          j        ||          }t          j        |dd          }n)|                                 }n|                                 }|                     || j                            |                     d S )Nc                 "    i | ]\  }}|||n|S rU   rV   rW   s      r5   r[   z9HTMLExtractorExtra.handle_startendtag.<locals>.<dictcomp>   r\   r6   rF   r]   r^   r_   )is_block)	r-   re   r9   rf   rg   rh   ri   r1   is_block_level)r0   rN   rO   rC   rs   s        r5   handle_startendtagz%HTMLExtractorExtra.handle_startendtag   s    $/! 		,VVPUVVVEU" 0		*%%%-U33~g	&QQQ--//))++DdTW-C-CC-H-HIIIIIr6   c                     | j         rd|v rd| _         | j        s| j        s#t                                          |           d S | j                            |           d S )Nry   F)rd   rj   r8   r+   rn   r;   rs   )r0   rs   r4   s     r5   rn   zHTMLExtractorExtra.handle_data   sm    ; 	 44< 	 DK: 	(T\ 	(GG%%%%%!!$'''''r6   c                 p   | j         s| j        s$t                                          ||           d S |                                 r<|r:|                     d| j        j                            |          z   dz              d S |                     | j        j                            |                     d S )Nry   rx   )	rj   r8   r+   ri   rc   rn   r1   ro   rp   )r0   rs   r   r4   s      r5   ri   z#HTMLExtractorExtra.handle_empty_tag   s    : 	@T\ 	@GG$$T844444!!## @ @  (9(?(?(E(E!E!NOOOOO  !2!8!8!>!>?????r6   c                     |                                  s| j        s| j        r(t          t          |                               |          S |                     d           |dz   S )Nz<?r   )rc   rd   r8   r+   r	   parse_pirn   r0   ir4   s     r5   r   zHTMLExtractorExtra.parse_pi   sh     	:4; 	:$, 	: --66q999 	1ur6   c                     |                                  s| j        s| j        r(t          t          |                               |          S |                     d           |dz   S )Nz<!r   )rc   rd   r8   r+   r	   parse_html_declarationrn   r   s     r5   r   z)HTMLExtractorExtra.parse_html_declaration   sk     	H4; 	H$, 	H --DDQGGG 	1ur6   )__name__
__module____qualname____doc__r,   r=   r@   rD   rR   rk   rA   r   rn   ri   r   r   __classcell__)r4   s   @r5   r   r      sF        E E E E E     0 0 0 0 0    **, *, *, *, *,X-+ -+ -+ -+ -+^J J J( ( ( ( (@ @ @ @ @            r6   r   c                       e Zd ZdZd ZdS )HtmlBlockPreprocessorzDRemove html blocks from the text and store them for later retrieval.c                     d                     |          }t          | j                  }|                    |           |                                 d                     |j                                      d          S )Nry   rw   )joinr   r1   feedr@   r{   split)r0   linessourceparsers       r5   runzHtmlBlockPreprocessor.run   sc    5!!#DG,,Fwwv''--d333r6   N)r   r   r   r   r   rV   r6   r5   r   r      s)        NN4 4 4 4 4r6   r   c                   $    e Zd ZdZd Zd Zd ZdS )MarkdownInHtmlProcessorzLProcess Markdown Inside HTML Blocks which have been stored in the HtmlStash.c                     dS )NTrV   )r0   parentrL   s      r5   testzMarkdownInHtmlProcessor.test   s    tr6   c                 (   |j                             dd          }|dk    rt          |          D ]}|                     |           g }t	          |          D ]\  }}|j        r|j                            d          }d|_        t          j        d          }| j	        
                    ||                    d                     t          |          }|                                 |                    |dz   |f           |                                 |D ] \  }}	|	D ]}
|                    ||
           !|j        r|j                            d          }d|_        t          j        d          }| j	        
                    ||                    d                     t          |          }|                                 |D ]}|                    d	|           dS dS |d
k    r)t          |          D ]}|                     |           dS |j        d|_        t!          j        |j                  |_        t          |          D ]<}|                     |           |j        rt!          j        |j                  |_        =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 chidlren are wrapped in an `AtomicString`.
        rF   rJ   rL   ry   rw   divrx   r   r   rK   N)attribre   listparse_element_content	enumeratetailrstripr9   rf   r   parseBlocksr   reverserl   insertru   r   AtomicString)r0   rC   rP   childtailsposrL   dummychildrenr   r   s              r5   r   z-MarkdownInHtmlProcessor.parse_element_content   s    .$$Z77g 9	? g 2 2**51111 E'00 	6 	6
U: 6!J--d33E!#EJ!M%00EK++E5;;v3F3FGGG#E{{H$$&&&LL#'8!4555 MMOOO" . .	T  . .DNN3----. | 	-++D11!e,,''u{{6/B/BCCC;;  """% - -ENN1e,,,,	- 	-- -  	? g 2 2**511112 2
 | "!,W\::GLg ? ?**5111: ?!%!25:!>!>EJ? ?r6   c                 ,   t           j                            |d                   }|rt          |                    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   rw   TF)r   HTML_PLACEHOLDER_REr}   intgroupr   r1   ro   rawHtmlBlocks
isinstancer9   rf   re   r   rl   r   )r0   r   blocksmindexrC   s         r5   r   zMarkdownInHtmlProcessor.run?  s    $**6!955 	

OOEkn.<UCG'5=11 	

1**7333g&&&(6::5AAA(6==eRHHHtur6   N)r   r   r   r   r   r   r   rV   r6   r5   r   r      sK        VV  D? D? D?L    r6   r   c                       e Zd Zd ZdS )MarkdownInHTMLPostprocessorc                     t          |t          j                  r| j                            |          S t          |          S )zC Override default to handle any etree elements still in the stash. )r   r9   rf   r1   
serializerstr)r0   ru   s     r5   stash_to_stringz+MarkdownInHTMLPostprocessor.stash_to_stringS  s8    dEM** 	7%%d+++t99r6   N)r   r   r   r   rV   r6   r5   r   r   R  s#            r6   r   c                       e Zd ZdZd ZdS )MarkdownInHtmlExtensionz/Add Markdown parsing in HTML to Markdown class.c                    |j                             t          |          dd           |j        j                            t          |j                  dd           |j                            t          |          dd           dS )z Register extension instances. 
html_block   markdown_blocki   raw_html   N)preprocessorsregisterr   r   blockprocessorsr   postprocessorsr   )r0   r1   s     r5   extendMarkdownz&MarkdownInHtmlExtension.extendMarkdown^  s     	!!"7";";\2NNN
	!**#BI..0@#	
 	
 	
 	""#>r#B#BJPRSSSSSr6   N)r   r   r   r   r   rV   r6   r5   r   r   [  s.        99
T 
T 
T 
T 
Tr6   r   c                      t          di | S )NrV   )r   )r3   s    r5   makeExtensionr   k  s    ",,V,,,r6   )r   rw   r   r   r   r   r   r   r   r   
htmlparserr	   r
   xml.etree.ElementTreer9   ElementTreer   r   r   r   r   r   rV   r6   r5   <module>r      s           , , , , , , ( ( ( ( ( ( 1 1 1 1 1 1       5 5 5 5 5 5 5 5 % % % % % % % % %J J J J J J J JZ4 4 4 4 4L 4 4 4] ] ] ] ]n ] ] ]@    "6   T T T T Ti T T T - - - - -r6   