
    /VhIM                    
   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c mZ ddlmZmZmZ erddl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y)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                       e Zd ZdZd fdZ fdZ fdZddZddZ fdZ	 fdZ
d	 Z fd
Z fdZd fdZd fdZ xZS )HTMLExtractorExtraz
    Override `HTMLExtractor` and create `etree` `Elements` for any elements which should have content parsed as
    Markdown.
    c                   t        |j                  j                               | _        t        g d      | _        t        g d      | _        t        |   |g|i | t        | j                        | j                  | j
                  z  | j                  z  z
  | _	        | j                  | j                  z  | _
        y )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       N/home/dcms/DCMS/lib/python3.12/site-packages/markdown/extensions/md_in_html.pyr1   zHTMLExtractorExtra.__init__+   s     #B$;$;$@$@$B Cs
 ^_-d-f- d3348VY]YhYh8hi$(OOdnn$D!    c                ~    g | _         t        j                         | _        g | _        g | _        t        |           y)z1Reset this instance.  Loses all unprocessed data.N)mdstacketreeTreeBuildertreebuildermdstate	mdstartedr0   resetr5   r9   s    r:   rC   zHTMLExtractorExtra.reset;   s2    "$ ,,.DF%'r;   c                x    t         |           | j                  r| j                  | j                  d          yy)zHandle any buffered data.r   N)r0   closer=   handle_endtagrD   s    r:   rF   zHTMLExtractorExtra.closeC   s.    <<t||A/ r;   c                l    | j                   j                         }t        j                         | _         |S )zJ Return element from `treebuilder` and reset `treebuilder` for later use. )r@   rF   r>   r?   )r5   elements     r:   get_elementzHTMLExtractorExtra.get_elementK   s,    ""((* ,,.r;   c                L   |j                  dd      }|dk(  rd}| j                  r| j                  d   nd}|dk(  s
|dk(  r|dk7  r|}|dk(  r|| j                  v s|dk(  r|| j                  v ry|dk(  r|| j                  v s|dk(  r|| j                  v ry|| j
                  v ryy)	zS Return state from tag and `markdown` attribute. One of 'block', 'span', or 'off'. markdown01Noffspanblock)getrA   r3   r4   r.   r-   )r5   tagattrsmd_attrparent_states        r:   	get_statezHTMLExtractorExtra.get_stateQ   s    ))J,j G+/<<t||B'T5 \V%;3"G^t 6G#t/H/H(H#~#"7& SD,E,E%ED)))r;   c                v   || j                   v r| j                         s| j                  r|D ci c]  \  }}|||n| }}}d|v r@|j                  d       t	        j
                  ||      }t	        j                  |dd      }n| j                         }| j                  |d       y || j                  v rC| j                         s)| j                  s| j                  r| j                  d   r
|D ci c]  \  }}|||n| }}}| j                  ||      }| j                  s|dv r/| j                  s#|j                  dd        t        	| =  ||       y d| j                  v r|| j                  v r| j!                  d       | j"                  j%                  |       | j                  j%                  |       | j                  j%                  d       ||d<   | j&                  j)                  ||       y | j                  rt        	| =  ||       y | j                         }| j"                  rG| j"                  d   d	k(  r5| j+                  | j,                  j.                  j1                  |             n| j+                  |       || j2                  v r| j5                          y y c c}}w c c}}w )
NrL   unicodehtmlencodingmethodTrO   )NrP   r   rP   )r2   at_line_startintailpopr>   Elementtostringget_starttag_texthandle_empty_tagr-   rB   rX   inrawr=   r0   handle_starttagrG   rA   appendr@   starthandle_datar6   	htmlStashstoreCDATA_CONTENT_ELEMENTSclear_cdata_mode)
r5   rT   rU   keyvaluerI   datastatetextr9   s
            r:   rg   z"HTMLExtractorExtra.handle_starttagf   sM   $//!t'9'9';t{{PUV*#uS5#4%#=VEVU"		*%--U3~~g	&Q--/!!$- 4(((!T[[DNNt~~VXGY QVV*#uS5#4%#=VEVNN3.Ezze}4T\\		*d+'U3$,,&3$2G2G+G&&s+##E*##C(%%d+$)j!  &&sE2 zz'U3--/<<DLL$4$=$$TWW%6%6%<%<T%BC$$T*$555))+ 6U W  Ws   J/9J5c           	     N	   || j                   v r| j                  rt        |   |       y || j                  v r\| j                  r|| j                  j                         }| j                  j                          | j                  j                          | j                  j                  |       ||k(  rn| j                  r|| j                  s>| j                         }| j                  r| j                  d   nd}|j                  d      s,|j                  d      r| j                  j                  d       |}g }|t        |      D ]r  }|j                  |       |j                   |j                   nd}|j"                  |j"                  nd}d |_        |j$                  j'                  dd      }	|dk7  rd|j)                  d      z   }|j                  d      s|j)                  d      dz   }|	dv rB| | j*                  j,                  j/                  |       | |_        |j                  |       |j$                  j                  d       |j1                         D 
cg c]  }
|
j$                  j                  dd         c}
 | | j*                  j,                  j/                  |       | |_        u |r|j                  d      nd }|| j                  j                  | j*                  j,                  j/                  |             | j                  j                  d       g | _        t5        j6                  | j8                  | j:                  | j<                  z   t?        | jA                  |            z   d        s~d	| _!        y | jA                  |      }| j                  rG| j                  d   dk(  r5| jE                  | j*                  j,                  j/                  |             y | jE                  |       y y y | j                  rt        |   |       y | jA                  |      }| j                  rG| j                  d   dk(  r5| jE                  | j*                  j,                  j/                  |             y | jE                  |       y c c}
w )
NrO    


rL   rP   )rQ   rR   r   T)#r-   rf   r0   rG   r=   ra   rA   rB   r@   endrJ   cleandocendswithrh   listremovers   tailattribrS   rstripr6   rk   rl   iterrr   r   matchrawdataline_offsetoffsetlenget_endtag_textr`   rj   )r5   rT   itemrI   currentlastchildrs   r}   rr   cr9   s              r:   rG   z HTMLExtractorExtra.handle_endtag   s   $'''zz%c*$ll<<++-DLL$$&NN&&($$((.s{ ll ||"..0G 154==,2D==0T]]45H,,T2 &GD!-%)'] _E#NN513:<<3K7<<QSD161G5::RD)-EJ$)LL$4$4Z$GE  $t|'+dkk$.?'? $(==#8'+{{4'86'A  %(99268I8I8O8OPU8V7WX\W]/^ $E 2 !& 0 0 <IN VAj$!? V268I8I8O8OPU8V7WX\W]/^5_8 26$((1+4; "-> MM(():):)@)@)IJMM((0!#DJ(.. LL)9)9DKK)G#dNbNbcfNgJh)h)ijl '+ ++C0<<DLL$4$=$$TWW%6%6%<%<T%BC$$T*li $B zz%c*++C0<<DLL$4$=$$TWW%6%6%<%<T%BC$$T*; !Ws   *#R"c                   || j                   v rn|D ci c]  \  }}|||n| }}}d|v r@|j                  d       t        j                  ||      }t        j                  |dd      }n!| j                         }n| j                         }| j                  || j                  j                  |             y c c}}w )NrL   rZ   r[   r\   )is_block)	r2   ra   r>   rb   rc   rd   re   r6   is_block_level)r5   rT   rU   ro   rp   rI   rq   s          r:   handle_startendtagz%HTMLExtractorExtra.handle_startendtag   s    $//!PUV*#uS5#4%#=VEVU"		*%--U3~~g	&Q--/))+DdTWW-C-CC-HI Ws   B:c                    | j                   rd|v rd| _         | j                  s| j                  st        |   |       y d| j
                  d<   | j                  j                  |       y )Nrw   FrO   )r`   rf   r=   r0   rj   rB   r@   rq   )r5   rq   r9   s     r:   rj   zHTMLExtractorExtra.handle_data   sS    ;;44<DK::T\\G%!&DNN2!!$'r;   c                   | j                   s| j                  st        |   ||       y | j	                         r=|r;| j                  d| j                  j                  j                  |      z   dz          y | j                  rG| j                  d   dk(  r5| j                  | j                  j                  j                  |             y | j                  |       y )Nrw   rv   rO   rP   )
rf   r=   r0   re   r_   rj   r6   rk   rl   rA   )r5   rq   r   r9   s      r:   re   z#HTMLExtractorExtra.handle_empty_tag  s    ::T\\G$T84!!#  (9(9(?(?(E!E!NO$,,r"2e";  !2!2!8!8!>?  &r;   c                    | j                         s| j                  s| j                  rt        t        |   |      S | j                  d       |dz   S )Nz<?r   )r_   r`   r=   r0   r   parse_pirj   )r5   ir9   s     r:   r   zHTMLExtractorExtra.parse_pi  sH    4;;$,, 6q99 	1ur;   c                v   | j                         s| j                  s| j                  r{| j                  ||dz    dk(  rS| j                  ||dz    dk(  s>| j	                  |      }|dk(  r&| j                  | j                  ||dz           |dz   S |S t        t        | #  |      S | j                  d       |dz   S )	N   z<![	   z	<![CDATA[rO   r   z<!r   )	r_   r`   r=   r   parse_bogus_commentrj   r0   r   parse_html_declaration)r5   r   resultr9   s      r:   r   z)HTMLExtractorExtra.parse_html_declaration  s    4;;$,,||Aac"e+DLL1Q34G;4V 11!4R<$$T\\!AE%:;q5L DQGG 	1ur;   )r6   r   )returnetree.Element)rU   zMapping[str, str]r   z%Literal['block', 'span', 'off', None])r   intr   r   )__name__
__module____qualname____doc__r1   rC   rF   rJ   rX   rg   rG   r   rj   re   r   r   __classcell__)r9   s   @r:   r   r   %   sN    
E 0*/,bU+nJ(	' r;   r   c                      e Zd ZdZddZy)HtmlBlockPreprocessorzDRemove html blocks from the text and store them for later retrieval.c                    dj                  |      }t        | j                        }|j                  |       |j	                          dj                  |j
                        j                  d      S )Nrw   ru   )joinr   r6   feedrF   ry   split)r5   linessourceparsers       r:   runzHtmlBlockPreprocessor.run/  sQ    5!#DGG,Fwwv'--d33r;   N)r   	list[str]r   r   )r   r   r   r   r    r;   r:   r   r   ,  s
    N4r;   r   c                  (    e Zd ZdZddZddZddZy)	MarkdownInHtmlProcessorzNProcess Markdown Inside HTML Blocks which have been stored in the `HtmlStash`.c                     y)NTr   )r5   parentrR   s      r:   testzMarkdownInHtmlProcessor.test:  s    r;   c                    |j                   j                  dd      }|dk(  r[|j                  rN|j                  j                  d      }d|_        | j                  j                  ||j                  d             yy|dk(  r|j                  |j                  nd}d|_        d}d	}t        j                  j                  |      D ]  }t        |j                  d
            }| j                  j                  j                  j                  |   }|j                         }	t!        |t"        j$                        r||xj                  |||	 z  c_        n|xj&                  |||	 z  c_        |j)                  |       | j+                  |       |}|j&                  d|_        | j                  j                  j                  j                  j                  |       | j                  j                  j                  j                  j-                  |d       n3||xj                  |||	 z  c_        n|xj&                  |||	 z  c_        |	} ||xj                  ||d z  c_        y|xj&                  ||d z  c_        y|j                  d|_        t        j.                  |j                        |_        t1        |      D ]D  }| j+                  |       |j&                  s!t        j.                  |j&                        |_        F y)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`.
        rL   rP   rR   rw   ru   rv   rQ   Nr   r   )r~   ra   rs   r   r   parseBlocksr   r
   HTML_PLACEHOLDER_REfinditerr   groupr6   rk   rawHtmlBlocksri   
isinstancer>   rb   r}   rh   parse_element_contentinsertAtomicStringr{   )
r5   rI   rV   rR   r   ri   mindexelrx   s
             r:   r   z-MarkdownInHtmlProcessor.parse_element_content>  st    ..$$Z7g||++D1!''V1DE 
 
 %,LL$<GLL"EGLEE --66u= AGGAJ[[^^--;;EBggib%--0 }eC(88

eE#&66
NN2&..r2Ezz)%'
KKNN,,::>>uEKKNN,,::AA%L }eC(88

eE#&66
5: }ef-

eEFm+
 ||#!,,W\\:GLg ?**51::!%!2!25::!>EJ?r;   c                   t         j                  j                  |d         }|r0t        |j	                  d            }| j
                  j                  j                  j                  |   }t        |t        j                        r|j                  d      }|j                  |       | j                  |       | j
                  j                  j                  j                  j                  |       | j
                  j                  j                  j                  j                  |d       ||j!                  d      d  }|r|j                  d|       yy)Nr   r   ru   TF)r
   r   r   r   r   r   r6   rk   r   r   r>   rb   ra   rh   r   r   rx   )r5   r   blocksr   r   rI   rR   contents           r:   r   zMarkdownInHtmlProcessor.run  s    $$**6!95
OEkknn..<<UCG'5==1

1g&**73((66::5A((66==eRHa	*MM!W-r;   N)r   r   rR   strr   bool)rI   r   r   None)r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r;   r:   r   r   7  s    XG?Rr;   r   c                      e Zd ZddZy)MarkdownInHTMLPostprocessorc                    t        |t        j                        r| j                  j	                  |      S t        |      S )zE Override default to handle any `etree` elements still in the stash. )r   r>   rb   r6   
serializerr   )r5   rs   s     r:   stash_to_stringz+MarkdownInHTMLPostprocessor.stash_to_string  s/    dEMM*77%%d++t9r;   N)rs   zstr | etree.Elementr   r   )r   r   r   r   r   r;   r:   r   r     s    r;   r   c                      e Zd ZdZd Zy)MarkdownInHtmlExtensionz/Add Markdown parsing in HTML to Markdown class.c                   |j                   j                  t        |      dd       |j                  j                  j                  t        |j                        dd       |j                  j                  t        |      dd       y)z Register extension instances. 
html_block   markdown_blocki   raw_html   N)preprocessorsregisterr   r   blockprocessorsr   postprocessorsr   )r5   r6   s     r:   extendMarkdownz&MarkdownInHtmlExtension.extendMarkdown  sl     	!!"7";\2N
		!!**#BII.0@#	
 	""#>r#BJPRSr;   N)r   r   r   r   r   r   r;   r:   r   r     s    9
Tr;   r   c                     t        di | S )Nr   )r   )r8   s    r:   makeExtensionr     s    ",V,,r;   )r   
__future__r   ru   r   r   r   r   r   r   r	   r
   
htmlparserr   r   xml.etree.ElementTreer>   ElementTreetypingr   r   r   rL   r   r   r   r   r   r   r   r   r;   r:   <module>r      s}    #  , ( 1  5 % % 2 2!D DN4L 4dn dN"6 Ti T -r;   