
    $g@                    *   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dS )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                       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.
    mdr   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)selfr   argskwargs	__class__s       ^/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/markdown/extensions/md_in_html.pyr2   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mdstater1   resetr6   r9   s    r:   rB   zHTMLExtractorExtra.reset;   s7    "$ ,..DFr;   c                    t                                                       | j        r"|                     | j        d                    dS dS )zHandle any buffered data.r   N)r1   closer=   handle_endtagrC   s    r:   rE   zHTMLExtractorExtra.closeB   sH    < 	0t|A/////	0 	0r;   returnetree.Elementc                h    | j                                         }t          j                    | _         |S )zJ Return element from `treebuilder` and reset `treebuilder` for later use. )r@   rE   r>   r?   )r6   elements     r:   get_elementzHTMLExtractorExtra.get_elementJ   s,    "((** ,..r;   attrsMapping[str, str]%Literal['block', 'span', 'off', None]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 )	zS Return state from tag and `markdown` attribute. One of 'block', 'span', or 'off'. markdown01Noffspanblock)getrA   r4   r5   r/   r.   )r6   tagrL   md_attrparent_states        r:   	get_statezHTMLExtractorExtra.get_stateP   s    ))J,,j  G+/<At|B''T5  \V%;%;3"G^^t 6 6G##t/H(H(H7#~~#"7"7&  SD,E%E%E6D)))54r;   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      r:   
<dictcomp>z6HTMLExtractorExtra.handle_starttag.<locals>.<dictcomp>h   '    VVV*#uS5#4%%#VVVr;   rP   unicodehtmlencodingmethodTc                "    i | ]\  }}|||n|S r^   r_   r`   s      r:   rd   z6HTMLExtractorExtra.handle_starttag.<locals>.<dictcomp>u   re   r;   )NrT   r    rS   rT   )r3   at_line_startintailpopr>   Elementtostringget_starttag_texthandle_empty_tagr.   r[   inrawr=   r1   handle_starttagrF   rA   appendr@   starthandle_datar   	htmlStashstoreCDATA_CONTENT_ELEMENTSclear_cdata_mode)r6   rX   rL   rJ   datastatetextr9   s          r:   rt   z"HTMLExtractorExtra.handle_starttage   s   $/!!t'9'9';';!t{!VVPUVVVEU""		*%%%-U33~g	&QQQ--//!!$---F$'''T-?-?-A-A'T[' WVPUVVVENN3..Ez 3e}44T\4		*d+++''U33333$,&&3$2G+G+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5))+++++ 65r;   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 )NrS    


TrT   )r.   rs   r1   rF   r=   rn   rA   r@   endrK   cleandocendswithru   r   rx   ry   r}   r   matchrawdataline_offsetoffsetlenget_endtag_textrm   rw   )r6   rX   itemrJ   r~   r9   s        r:   rF   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*****r;   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 r^   r_   r`   s      r:   rd   z9HTMLExtractorExtra.handle_startendtag.<locals>.<dictcomp>   re   r;   rP   rf   rg   rh   )is_block)	r3   rn   r>   ro   rp   rq   rr   r   is_block_level)r6   rX   rL   rJ   r|   s        r:   handle_startendtagz%HTMLExtractorExtra.handle_startendtag   s    $/!!VVPUVVVEU""		*%%%-U33~g	&QQQ--//))++DdTW-C-CC-H-HIIIIIr;   c                    | j         rd|v rd| _         | j        s| j        s#t                                          |           d S | j                            |           d S )Nr   F)rm   rs   r=   r1   rw   r@   r|   )r6   r|   r9   s     r:   rw   zHTMLExtractorExtra.handle_data   sj    ; 	 44<<DK: 	(T\ 	(GG%%%%%!!$'''''r;   c                p   | j         s| j        s$t                                          ||           d S |                                 r<|r:|                     d| j        j                            |          z   dz              d S |                     | j        j                            |                     d S )Nr   r   )	rs   r=   r1   rr   rl   rw   r   rx   ry   )r6   r|   r   r9   s      r:   rr   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!>!>?????r;   iintc                    |                                  s| j        s| j        r(t          t          |                               |          S |                     d           |dz   S )Nz<?r   )rl   rm   r=   r1   r   parse_pirw   r6   r   r9   s     r:   r   zHTMLExtractorExtra.parse_pi   sh     	:4; 	:$, 	: --66q999 	1ur;   c                    |                                  s| j        s| j        r(t          t          |                               |          S |                     d           |dz   S )Nz<!r   )rl   rm   r=   r1   r   parse_html_declarationrw   r   s     r:   r   z)HTMLExtractorExtra.parse_html_declaration   sk     	H4; 	H$, 	H --DDQGGG 	1ur;   )r   r   )rG   rH   )rL   rM   rG   rN   )r   r   rG   r   )__name__
__module____qualname____doc__r2   rB   rE   rK   r[   rt   rF   r   rw   rr   r   r   __classcell__)r9   s   @r:   r   r   %   s`        
E E E E E E     0 0 0 0 0      **, *, *, *, *,X-+ -+ -+ -+ -+^J J J( ( ( ( (@ @ @ @ @              r;   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.lines	list[str]rG   c                    d                     |          }t          | j                  }|                    |           |                                 d                     |j                                      d          S )Nr   r   )joinr   r   feedrE   r   split)r6   r   sourceparsers       r:   runzHtmlBlockPreprocessor.run   sc    5!!#DG,,Fwwv''--d333r;   N)r   r   rG   r   )r   r   r   r   r   r_   r;   r:   r   r      s.        NN4 4 4 4 4 4r;   r   c                  *    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`.parentrH   rV   strrG   boolc                    dS )NTr_   )r6   r   rV   s      r:   testzMarkdownInHtmlProcessor.test  s    tr;   rJ   Nonec                (   |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 children are wrapped in an `AtomicString`.
        rP   rT   rV   r   r   divr   r   r   rU   N)attribrn   listparse_element_content	enumeratetailrstripr>   ro   r   parseBlocksr   reverseru   insertr~   r
   AtomicString)r6   rJ   rY   childtailsposrV   dummychildrenr   r   s              r:   r   z-MarkdownInHtmlProcessor.parse_element_content  s    .$$Z77g 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? ?r;   blocksr   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   r   TF)r
   HTML_PLACEHOLDER_REr   r   groupr   r   rx   rawHtmlBlocks
isinstancer>   ro   rn   r   ru   r   )r6   r   r   mindexrJ   s         r:   r   zMarkdownInHtmlProcessor.runK  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ur;   N)r   rH   rV   r   rG   r   )rJ   rH   rG   r   )r   rH   r   r   rG   r   )r   r   r   r   r   r   r   r_   r;   r:   r   r      s[        XX   D? D? D? D?L     r;   r   c                      e Zd ZddZdS )MarkdownInHTMLPostprocessorr~   str | etree.ElementrG   r   c                    t          |t          j                  r| j                            |          S t          |          S )zE Override default to handle any `etree` elements still in the stash. )r   r>   ro   r   
serializerr   )r6   r~   s     r:   stash_to_stringz+MarkdownInHTMLPostprocessor.stash_to_string_  s8    dEM** 	7%%d+++t99r;   N)r~   r   rG   r   )r   r   r   r   r_   r;   r:   r   r   ^  s(             r;   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   )r6   r   s     r:   extendMarkdownz&MarkdownInHtmlExtension.extendMarkdownj  s     	!!"7";";\2NNN
	!**#BI..0@#	
 	
 	
 	""#>r#B#BJPRSSSSSr;   N)r   r   r   r   r   r_   r;   r:   r   r   g  s.        99
T 
T 
T 
T 
Tr;   r   c                     t          di | S )Nr_   )r   )r8   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 1 1 1 1 1       5 5 5 5 5 5 5 5 % % % % % % % % % 2 2 2 2 2 2 2 2 2 2 "!!!!!!K K K K K K K K\4 4 4 4 4L 4 4 4] ] ] ] ]n ] ] ]@    "6   T T T T Ti T T T - - - - -r;   