
    Ug@                       S r SSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
  SS	KJr  SS
KJrJr  SSKJs  Jr  SSKJrJrJr  \(       a  SSKJr   " S S\5      r " S S\5      r " S S\5      r " S S\
5      r " S S\5      rS rg)z
An implementation of [PHP Markdown Extra](http://michelf.com/projects/php-markdown/extra/)'s
parsing of Markdown syntax in raw HTML.

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                     ^  \ rS rSrSrSU 4S jjrU 4S jrU 4S jrSS jrSS jr	U 4S jr
U 4S	 jrS
 rU 4S jrU 4S jrSU 4S jjrSU 4S jjrSrU =r$ )HTMLExtractorExtra%   zw
Override `HTMLExtractor` and create `etree` `Elements` for any elements which should have content parsed as
Markdown.
c                  > [        UR                  R                  5       5      U l        [        / SQ5      U l        [        / SQ5      U l        [        TU ]  " U/UQ70 UD6  [        U R                  5      U R                  U R
                  -  U R                  -  -
  U l	        U R                  U R                  -  U l
        g )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       @/usr/lib/python3/dist-packages/markdown/extensions/md_in_html.pyr2   HTMLExtractorExtra.__init__+   s     #B$;$;$@$@$B Cs
 ^_-d-f- d3348VY]YhYh8hi$(OOdnn$D!    c                r   > / U l         [        R                  " 5       U l        / U l        [
        TU ]  5         g)z1Reset this instance.  Loses all unprocessed data.N)mdstacketreeTreeBuildertreebuildermdstater1   resetr6   r:   s    r;   rD   HTMLExtractorExtra.reset;   s+    "$ ,,.DFr=   c                   > [         TU ]  5         U R                  (       a  U R                  U R                  S   5        gg)zHandle any buffered data.r   N)r1   closer?   handle_endtagrE   s    r;   rH   HTMLExtractorExtra.closeB   s.    <<t||A/ r=   c                n    U R                   R                  5       n[        R                  " 5       U l         U$ )zIReturn element from `treebuilder` and reset `treebuilder` for later use. )rB   rH   r@   rA   )r6   elements     r;   get_elementHTMLExtractorExtra.get_elementJ   s,    ""((* ,,.r=   c                p   UR                  SS5      nUS:X  a  SnU R                  (       a  U R                  S   OSnUS:X  d  US:X  a  US:w  a  UnUS:X  a  XR                  ;   d  US:X  a  XR                  ;   a  gUS:X  a  XR                  ;   d  US:X  a  XR                  ;   a  gXR
                  ;   a  gg)	zRReturn state from tag and `markdown` attribute. One of 'block', 'span', or 'off'. markdown01Noffspanblock)getrC   r4   r5   r/   r.   )r6   tagattrsmd_attrparent_states        r;   	get_stateHTMLExtractorExtra.get_stateP   s    ))J,j G+/<<t||B'T5 \V%;3"G^ 6G#/H/H(H#~#"7& S,E,E%E)))r=   c                f  > XR                   ;   a  U R                  5       (       d  U R                  (       a  U VVs0 s H  u  p4X4b  UOU_M     nnnSU;   a>  UR                  S5        [        R
                  " X5      n[        R                  " USSS9nOU R                  5       nU R                  US5        g XR                  ;   Ga"  U R                  5       (       d  U R                  (       a  U VVs0 s H  u  p4X4b  UOU_M     nnnU R                  X5      nU R                  (       d  US;   a3  U R                  (       d"  UR                  SS 5        [        T	U ]9  X5        g SU R                  ;   a   XR                  ;   a  U R                  S5        U R                   R#                  U5        U R                  R#                  U5        XrS'   U R$                  R'                  X5        g U R                  (       a  [        T	U ]9  X5        g U R                  5       nU R                   (       aH  U R                   S   S	:X  a5  U R)                  U R*                  R,                  R/                  U5      5        OU R)                  U5        XR0                  ;   a  U R3                  5         g g s  snnf s  snnf )
NrP   unicodehtmlencodingmethodT)NrT   r    rS   rT   )r3   at_line_startintailpopr@   Elementtostringget_starttag_texthandle_empty_tagr.   r\   inrawr?   r1   handle_starttagrI   rC   appendrB   starthandle_datar7   	htmlStashstoreCDATA_CONTENT_ELEMENTSclear_cdata_mode)
r6   rX   rY   keyvaluerL   datastatetextr:   s
            r;   rl   "HTMLExtractorExtra.handle_starttage   s   //!t'9'9';';t{{PUVPU*#S#4%#=PUEVU"		*%--3~~g	&Q--/!!$-'''T-?-?-A-AT[[ QVVPU*#S#4%#=PUEVNN3.Ezze}4T\\		*d+'3$,,&32G2G+G&&s+##E*##C($)j!  &&s2 zz'3--/<<DLL$4$=$$TWW%6%6%<%<T%BC$$T*555))+ 6K W Ws   J'4J-c           	     H  > XR                   ;   Gau  U R                  (       a  [        TU ]  U5        g XR                  ;   Ga  U R                  (       ah  U R                  R                  5       nU R                  R                  5         U R                  R                  U5        X!:X  a  OU R                  (       a  Mh  U R                  (       Gd<  U R                  5       nU R                  (       a  U R                  S   OSnUR                  S5      (       d1  UR                  S5      (       a  U R                  R                  S5        U R                  R                  U R                  R                  R                  U5      5        U R                  R                  S5        / U l        ["        R$                  " U R&                  U R(                  U R*                  -   [-        U R/                  U5      5      -   S  5      (       d  SU l        g g g U R/                  U5      nU R                  (       aH  U R                  S   S:X  a5  U R3                  U R                  R                  R                  U5      5        g U R3                  U5        g U R                  (       a  [        TU ]  U5        g U R/                  U5      nU R                  (       aH  U R                  S   S:X  a5  U R3                  U R                  R                  R                  U5      5        g U R3                  U5        g )NrS    


TrT   )r.   rk   r1   rI   r?   rf   rC   rB   endrM   cleandocendswithrm   r7   rp   rq   rw   r   matchrawdataline_offsetoffsetlenget_endtag_textre   ro   )r6   rX   itemrL   rx   r:   s        r;   rI    HTMLExtractorExtra.handle_endtag   sB   '''zz%c*$ll<<++-DLL$$&$$((.{ lll |||"..0G 154==,2D==00T]]45H5H,,T2MM(():):)@)@)IJMM((0!#DJ(.. LL)9)9DKK)G#dNbNbcfNgJh)h)ijl l '+l $& ++C0<<DLL$4$=$$TWW%6%6%<%<T%BC$$T* zz%c*++C0<<DLL$4$=$$TWW%6%6%<%<T%BC$$T*r=   c                ~   XR                   ;   ap  U VVs0 s H  u  p4X4b  UOU_M     nnnSU;   a>  UR                  S5        [        R                  " X5      n[        R                  " USSS9nO!U R                  5       nOU R                  5       nU R                  X`R                  R                  U5      S9  g s  snnf )NrP   r_   r`   ra   )is_block)	r3   rf   r@   rg   rh   ri   rj   r7   is_block_level)r6   rX   rY   rt   ru   rL   rv   s          r;   handle_startendtag%HTMLExtractorExtra.handle_startendtag   s    //!PUVPU*#S#4%#=PUEVU"		*%--3~~g	&Q--/))+DdWW-C-CC-HI Ws   B9c                   > U R                   (       a  SU;   a  SU l         U R                  (       d  U R                  (       d  [        TU ]  U5        g U R
                  R                  U5        g )Nr}   F)re   rk   r?   r1   ro   rB   rv   )r6   rv   r:   s     r;   ro   HTMLExtractorExtra.handle_data   sE    ;;44<DK::T\\G%!!$'r=   c                  > U R                   (       d  U R                  (       d  [        TU ]  X5        g U R	                  5       (       aB  U(       a;  U R                  SU R                  R                  R                  U5      -   S-   5        g U R                  U R                  R                  R                  U5      5        g )Nr}   r|   )	rk   r?   r1   rj   rd   ro   r7   rp   rq   )r6   rv   r   r:   s      r;   rj   #HTMLExtractorExtra.handle_empty_tag   s~    ::T\\G$T4!!##  (9(9(?(?(E!E!NO  !2!2!8!8!>?r=   c                   > U R                  5       (       d"  U R                  (       d  U R                  (       a  [        [        U ]  U5      $ U R                  S5        US-   $ )Nz<?r   )rd   re   r?   r1   r   parse_piro   r6   ir:   s     r;   r   HTMLExtractorExtra.parse_pi   sK    4;;$,, 6q99 	1ur=   c                   > U R                  5       (       d"  U R                  (       d  U R                  (       a  [        [        U ]  U5      $ U R                  S5        US-   $ )Nz<!r   )rd   re   r?   r1   r   parse_html_declarationro   r   s     r;   r   )HTMLExtractorExtra.parse_html_declaration   sK    4;;$,, DQGG 	1ur=   )
r.   r4   re   r?   rC   r0   r5   r/   rw   rB   )r7   r   )returnetree.Element)rY   zMapping[str, str]r   z%Literal['block', 'span', 'off', None])r   intr   r   )__name__
__module____qualname____firstlineno____doc__r2   rD   rH   rM   r\   rl   rI   r   ro   rj   r   r   __static_attributes____classcell__)r:   s   @r;   r   r   %   sN    
E 0**,X-+^J(@ r=   r   c                  "    \ rS rSrSrSS jrSrg)HtmlBlockPreprocessor   zDRemove html blocks from the text and store them for later retrieval.c                    SR                  U5      n[        U R                  5      nUR                  U5        UR	                  5         SR                  UR
                  5      R                  S5      $ )Nr}   r{   )joinr   r7   feedrH   r   split)r6   linessourceparsers       r;   run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=   r;   r   r      s
    N4r=   r   c                  6    \ rS rSrSrSS jrS	S jrS
S jrSrg)MarkdownInHtmlProcessor   zNProcess Markdown Inside HTML Blocks which have been stored in the `HtmlStash`.c                    g)NTr   )r6   parentrV   s      r;   testMarkdownInHtmlProcessor.test  s    r=   c                D   UR                   R                  SS5      nUS:X  Ga  [        U5       H  nU R                  U5        M     / n[	        U5       H  u  pSUR
                  (       d  M  UR
                  R                  S5      nSUl        [        R                  " S5      nU R                  R                  XvR                  S5      5        [        U5      nUR                  5         UR                  US-   U45        M     UR                  5         U H  u  pYU	 H  n
UR                  XZ5        M     M!     UR                  (       a  UR                  R                  S5      nSUl        [        R                  " S5      nU R                  R                  XvR                  S5      5        [        U5      nUR                  5         U H  nUR                  S	U5        M     ggUS
:X  a$  [        U5       H  nU R                  U5        M     gUR                  c  SUl        [         R"                  " UR                  5      Ul        [        U5       HL  nU R                  U5        UR
                  (       d  M'  [         R"                  " UR
                  5      Ul        MN     g)av  
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`.
rP   rT   rV   r}   r{   divr|   r   r   rU   N)attribrf   listparse_element_content	enumeratetailrstripr@   rg   r   parseBlocksr   reverserm   insertrx   r
   AtomicString)r6   rL   rZ   childtailsposrV   dummychildrenr   r   s              r;   r   -MarkdownInHtmlProcessor.parse_element_content  s    ..$$Z7g g**51 '
 E'0
:::!JJ--d3E!#EJ!MM%0EKK++E;;v3FG#E{H$$&LL#'8!45 1 MMO"	 DNN3- ! #
 ||++D1!e,''{{6/BC;  "%ENN1e, &   g**51 '
 ||#!,,W\\:GLg**51:::!%!2!25::!>EJ 'r=   c                r   [         R                  R                  US   5      nU(       Ga  [        UR	                  S5      5      nU R
                  R                  R                  R                  U   n[        U[        R                  5      (       a  UR                  S5        U R                  U5        UR                  U5        U R
                  R                  R                  R                  R                  U5        U R
                  R                  R                  R                  R                  US5        gg)Nr   r   r{   TF)r
   HTML_PLACEHOLDER_REr   r   groupr   r7   rp   rawHtmlBlocks
isinstancer@   rg   rf   r   rm   r   )r6   r   blocksmindexrL   s         r;   r   MarkdownInHtmlProcessor.runK  s    $$**6!95
OEkknn..<<UCG'5==11

1**73g&((66::5A((66==eRHr=   r   N)r   r   rV   strr   bool)rL   r   r   None)r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   r   r=   r;   r   r      s    XD?Lr=   r   c                      \ rS rSrSS jrSrg)MarkdownInHTMLPostprocessori^  c                    [        U[        R                  5      (       a  U R                  R	                  U5      $ [        U5      $ )zDOverride default to handle any `etree` elements still in the stash. )r   r@   rg   r7   
serializerr   )r6   rx   s     r;   stash_to_string+MarkdownInHTMLPostprocessor.stash_to_string_  s2    dEMM**77%%d++t9r=   r   N)rx   zstr | etree.Elementr   r   )r   r   r   r   r   r   r   r=   r;   r   r   ^  s    r=   r   c                      \ rS rSrSrS rSrg)MarkdownInHtmlExtensionig  z/Add Markdown parsing in HTML to Markdown class.c                   UR                   R                  [        U5      SS5        UR                  R                  R                  [        UR                  5      SS5        UR                  R                  [        U5      SS5        g)zRegister extension instances. 
html_block   markdown_blocki   raw_html   N)preprocessorsregisterr   r   blockprocessorsr   postprocessorsr   )r6   r7   s     r;   extendMarkdown&MarkdownInHtmlExtension.extendMarkdownj  sl     	!!"7";\2N
		!!**#BII.0@#	
 	""#>r#BJPRSr=   r   N)r   r   r   r   r   r   r   r   r=   r;   r   r   g  s    9
Tr=   r   c                     [        S0 U D6$ )Nr   )r   )r9   s    r;   makeExtensionr   w  s    ",V,,r=   )r   
__future__r   r{   r   r   r   r   r   r   r	   r
   
htmlparserr   r   xml.etree.ElementTreer@   ElementTreetypingr   r   r   rP   r   r   r   r   r   r   r   r   r=   r;   <module>r      s}    #  , ( 1  5 % % 2 2!K K\4L 4]n ]@"6 Ti T -r=   