o
    >Di#R                     @  sd  d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
 ddlmZmZmZ ddlmZ ddlmZmZmZ er>dd	lmZ d
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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!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S )'z
Block level elements
    )annotationsN)TYPE_CHECKINGAnyMatch
NamedTupleSequencecast   )inlineinline_parserpatterns)Element)	find_nextnormalize_labelpartition_by_spaces)Source)Document	CodeBlockHeadingListListItem	BlankLineQuote
FencedCodeThematicBreak	HTMLBlock
LinkRefDefSetextHeading	Paragraphc                   @  s`   e Zd ZU dZg Zded< dZdZdZded< dZ	dZ
edddZedddZdddZdS )BlockElementz+Any block element should inherit this classzSequence[Element]children   F strinline_bodysourcer   returnr   c                 C     t  )zTest if the source matches the element at current position.
        The source should not be consumed in the method unless you have to.

        :param source: the ``Source`` object of the content to be parsed
        NotImplementedErrorclsr%    r,   D/var/www/Datamplify/venv/lib/python3.10/site-packages/marko/block.pymatch2   s   zBlockElement.matchc                 C  r'   )aa  Parses the source. This is a proper place to consume the source body and
        return an element or information to build one. The information tuple will be
        passed to ``__init__`` method afterwards. Inline parsing, if any, should also
        be performed here.

        :param source: the ``Source`` object of the content to be parsed
        r(   r*   r,   r,   r-   parse;   s   	zBlockElement.parseoboolc                 C  s   | j |j k S N)priority)selfr0   r,   r,   r-   __lt__F   s   zBlockElement.__lt__N)r%   r   r&   r   )r0   r   r&   r1   )__name__
__module____qualname____doc__r    __annotations__r3   virtualr$   override_prefixclassmethodr.   r/   r5   r,   r,   r,   r-   r   "   s   
 
r   c                   @  s"   e Zd ZdZdZdZd	ddZdS )
r   zDocument node element.r"   Tr&   Nonec                 C  s   g | _ i | _d S r2   )r    link_ref_defs)r4   r,   r,   r-   __init__P   s   
zDocument.__init__N)r&   r?   )r6   r7   r8   r9   r=   r;   rA   r,   r,   r,   r-   r   J   s
    r   c                   @  :   e Zd ZdZdZdddZedddZedddZdS )r   zBlank linesr!   startintr&   r?   c                 C  
   || _ d S r2   )_anchor)r4   rC   r,   r,   r-   rA   Z      
zBlankLine.__init__r%   r   r1   c                 C  s   |  }|d uo|  S r2   )	next_linestrip)r+   r%   liner,   r,   r-   r.   ]   s   zBlankLine.matchc                 C  s2   |j }|js| |r|  |js| |s|S r2   )pos	exhaustedr.   consume)r+   r%   rC   r,   r,   r-   r/   b   s
   zBlankLine.parseN)rC   rD   r&   r?   r%   r   r&   r1   )r%   r   r&   rD   	r6   r7   r8   r9   r3   rA   r>   r.   r/   r,   r,   r,   r-   r   U   s    
r   c                   @  sJ   e Zd ZdZdZejdejdZdd	d
Z	e
dddZe
dddZdS )r   zHeading element: (### Hello
)   zG {0,3}(#{1,6})((?=\s)[^\n]*?|[^\n\S]*)(?:(?<=\s)(?<!\\)#+)?[^\n\S]*$\n?flagsr.   
Match[str]r&   r?   c                 C  s$   t |d| _|d | _d S )Nr	      )lengrouplevelrI   r$   r4   r.   r,   r,   r-   rA   s   s   zHeading.__init__r%   r   Match[str] | Nonec                 C  s   | | jS r2   	expect_repatternr*   r,   r,   r-   r.   w   s   zHeading.matchc                 C  s   |j }|  |S r2   )r.   rM   r+   r%   mr,   r,   r-   r/   {   s   zHeading.parseN)r.   rS   r&   r?   r%   r   r&   rY   )r6   r7   r8   r9   r3   recompileMr\   rA   r>   r.   r/   r,   r,   r,   r-   r   j   s    
r   c                   @  s   e Zd ZdZdZd
ddZd	S )r   zQSetext heading: (Hello
===
)

    It can only be created by Paragraph.parse.
    Tlines	list[str]r&   r?   c                 C  s<   |   d dkrdnd| _ddd |D  | _d S )Nr   =r	   rT   r"   c                 s      | ]}|  V  qd S r2   lstrip.0rJ   r,   r,   r-   	<genexpr>       z)SetextHeading.__init__.<locals>.<genexpr>)poprI   rW   joinr$   r4   rc   r,   r,   r-   rA      s   zSetextHeading.__init__Nrc   rd   r&   r?   )r6   r7   r8   r9   r;   rA   r,   r,   r,   r-   r      s    r   c                   @  sH   e Zd ZdZdZdddZedddZedddZe	dddZ
dS )r   z0Indented code block: (    this is a code block
)   rc   r#   r&   r?   c                 C  s    t |dg| _d| _d| _d S )NFr"   )r
   RawTextr    langextraro   r,   r,   r-   rA      s   
zCodeBlock.__init__r%   r   c                 C  sJ   | d}|jd }t|jtr|jd d d }| ||}||j_|S )NF {4})rH   prefix
isinstancestater   strip_prefixcontext	code_line)r+   r%   rJ   rw   r,   r,   r-   r.      s   

zCodeBlock.matchc                 C  s   |j d }|jjg}|  |  |jsV| }|d ur9| s9|  | ||}|r3|	| n |	d n| 
|rN|	|jj |  |  n|  n|jrd|dd S )Nru   
r"   )rw   r{   r|   rM   anchorrL   rH   rI   rz   appendr.   resetrn   rstrip)r+   r%   rw   rc   rJ   stripped_liner,   r,   r-   r/      s(   



zCodeBlock.parserJ   rw   c                 C  s   t || d}|sdS | }tt| D ]8}| d |d  d}t||k r+qt|| }|dkr?| |d d    S || d  | |d d     S dS )Nrq   r"   r	   r   )r`   r.   
expandtabsendrangerU   )rJ   rw   r.   r   iexpandeddr,   r,   r-   rz      s   "zCodeBlock.strip_prefixNrc   r#   r&   r?   r%   r   r&   r#   )rJ   r#   rw   r#   r&   r#   )r6   r7   r8   r9   r3   rA   r>   r.   r/   staticmethodrz   r,   r,   r,   r-   r      s    

r   c                   @  sX   e Zd ZdZdZedejZG dd de	Z
dd
dZedddZedddZdS )r   z)Fenced code block: (```python
hello
```
)   z"( {,3})(`{3,}|~{3,})[^\n\S]*(.*?)$c                   @  s.   e Zd ZU ded< ded< ded< ded< dS )zFencedCode.ParseInfor#   rw   leadingrs   rt   Nr6   r7   r8   r:   r,   r,   r,   r-   	ParseInfo   
   
 r   r.   tuple[str, str, str]r&   r?   c                 C  s4   t j|d | _|d | _t |d dg| _d S )Nr   r	   rT   F)r
   Literalstrip_backslashrs   rt   rr   r    rX   r,   r,   r-   rA      s   
zFencedCode.__init__r%   r   rY   c           	      C  s`   | | j}|s
d S | \}}}|d dkrd|v rd S t|\}}}| |||||j_|S )Nr   `)r[   r\   groupsr   r   r{   	code_info)	r+   r%   r^   rw   r   infors   _rt   r,   r,   r-   r.      s   zFencedCode.matchc                 C  s   |   |  g }|jj}|jsP|  }|d u rn6|  tjd|tjd}|r2|j|	dv r2n|
|j|}|dkrD||d  }n| }|| |jr|j|jd|fS )Nz {,3}(~+|`+)[^\n\S]*$rQ   r	   r   r"   )rH   rM   r{   r   rL   r`   r.   rb   r   rV   match_prefixrw   rh   r   rs   rt   rn   )r+   r%   rc   
parse_inforJ   r^   
prefix_lenr,   r,   r-   r/      s&   
zFencedCode.parseN)r.   r   r&   r?   r_   )r%   r   r&   r   )r6   r7   r8   r9   r3   r`   ra   rb   r\   r   r   rA   r>   r.   r/   r,   r,   r,   r-   r      s    
r   c                   @  s@   e Zd ZdZdZejdejdZe	dd	d
Z
e	dddZdS )r   zHorizontal rules: (----
)   z {,3}([-_*][^\n\S]*){3,}$\n?rQ   r%   r   r&   r1   c                 C  s2   | | j}|s
dS tttdd| dkS )NFz\s+r"   r	   )r[   r\   rU   setr`   subrV   r]   r,   r,   r-   r.     s   zThematicBreak.matchc                 C  s   |   |  S r2   )rM   r*   r,   r,   r-   r/     s   zThematicBreak.parseNrN   )r%   r   r&   r   )r6   r7   r8   r9   r3   r`   ra   rb   r\   r>   r.   r/   r,   r,   r,   r-   r     s    r   c                   @  rB   )r   zHTML blocks, parsed as it isr!   rc   r#   r&   r?   c                 C  rE   r2   )bodyro   r,   r,   r-   rA     rG   zHTMLBlock.__init__r%   r   
int | boolc                 C  s  d |j _|dr|jsJ td|jd d|j _dS |dr-td|j _dS |dr;td	|j _d
S |drItd|j _dS |drWtd|j _dS ddt	j
}|d| rmd |j _dS |dt	jt	jd rd |j _dS dS )Nz*(?i) {,3}<(script|pre|style|textarea)[>\s]z(?i)</r	   >z	 {,3}<!--z-->rT   z {,3}<\?z\?>   z {,3}<!rq   z {,3}<!\[CDATA\[z\]\]>r!   z(?:{})|z(?im) {,3}</?%s(?: +|/?>|$)rP   zG(?m) {,3}(<%(tag)s(?:%(attr)s)*[^\n\S]*/?>|</%(tag)s[^\n\S]*>)[^\n\S]*$)tagattrr   F)r{   html_endr[   r.   r`   ra   rV   formatrn   r   tagstag_nameattribute_no_lf)r+   r%   	block_tagr,   r,   r-   r.     s:   





zHTMLBlock.matchc                 C  sz   g }|j s8| }|d u rn*|| |jjd ur&|jj|r%|  nn| dkr1|  n|  |j rd	|S )Nr"   )
rL   rH   r   r{   r   searchrM   rI   rm   rn   )r+   r%   rc   rJ   r,   r,   r-   r/   =  s"   

zHTMLBlock.parseNr   )r%   r   r&   r   r   rO   r,   r,   r,   r-   r     s    
r   c                   @  sh   e Zd ZdZdZejdejdZdd	d
Z	e
dddZedddZe
dd ddZe
d!ddZdS )"r   zA paragraph elementr	   z
[^\n]+$\n?rQ   rc   rd   r&   r?   c                 C  s*   d dd |D d}|| _d| _d S )Nr"   c                 s  rf   r2   rg   ri   r,   r,   r-   rk   W  rl   z%Paragraph.__init__.<locals>.<genexpr>r}   F)rn   r   r$   _tight)r4   rc   	str_linesr,   r,   r-   rA   V  s   
zParagraph.__init__r%   r   r1   c                 C  s   | | jd uS r2   rZ   r*   r,   r,   r-   r.   [     zParagraph.matchrJ   r#   c                 C  s   t d| d uS )Nz {,3}(=+|-+)[^\n\S]*$)r`   r.   )rJ   r,   r,   r-   is_setext_heading_  r   zParagraph.is_setext_headingFlazyc                 C  sd  |j }|j}z|jd |s'|jd |s'|jd |s'|jd |r-W ||_dS |rCt|jtrC|jd |rCW ||_dS |jd |rwtd|jd | 	 d	}|sq|d
 d d dksm|d
 dv rw|d rwW ||_dS |jd |}|r|dkrW ||_dS |jd |r|s| 
| rW ||_dS W ||_dS W ||_dS ||_w )Nr   r   r   r   Tr   r   type[ListItem]r   r	   rv   1z*-+r   r   r   r   F)parserr.   block_elementsrx   ry   r   r   parse_leadingrH   r   r   )r+   r%   r   r   
prev_matchresult	html_typer,   r,   r-   break_paragraphc  sT   



,




zParagraph.break_paragraphlist[str] | SetextHeadingc                 C  s   t t| g}|  d}|jsu|su| |r	 |S | }|r;|| |  | |r:t d|jj	d |S n5|j
d d  }t|j
dkrm|  | }|rf| |dr\d}n	|| |  nt|j
dksI||_
|jsu|r|S )NFztype[SetextHeading]r   r	   T)r   r#   rH   rM   rL   r   r   r   r   r   _statesrU   	pop_state)r+   r%   rc   	end_parserJ   statesrH   r,   r,   r-   r/     sB   






zParagraph.parseNrp   rN   )rJ   r#   r&   r1   )F)r%   r   r   r1   r&   r1   )r%   r   r&   r   )r6   r7   r8   r9   r3   r`   ra   rb   r\   rA   r>   r.   r   r   r   r/   r,   r,   r,   r-   r   P  s    
"r   c                   @  s4   e Zd ZdZdZdZeddd	Zedd
dZdS )r   z$block quote element: (> hello world)rP   z {,3}>[^\n\S]?r%   r   r&   rY   c                 C  s
   | dS )Nz {,3}>)r[   r*   r,   r,   r-   r.     s   
zQuote.matchc                 C  sD   |  }| | |j||_W d    |S 1 sw   Y  |S r2   )under_stater   parse_sourcer    )r+   r%   ry   r,   r,   r-   r/     s   
zQuote.parseNr_   )r%   r   r&   r   )	r6   r7   r8   r9   r3   r=   r>   r.   r/   r,   r,   r,   r-   r     s    r   c                   @  sX   e Zd ZdZdZdZedZG dd de	Z
dddZedddZedddZdS )r   zList block elementrP   r"   $ {,3}(\d{1,9}[.)]|[*\-+])[ \t\n\r\f]c                   @  s&   e Zd ZU ded< ded< ded< dS )List.ParseInfor#   bulletr1   orderedrD   rC   Nr   r,   r,   r,   r-   r        
 r   r   r   r&   r?   c                 C  s   |\| _ | _| _d| _d S )NT)r   r   rC   tight)r4   r   r,   r,   r-   rA     s   
zList.__init__r%   r   r1   c                 C  sh   | | j}|s
dS |ddd}}}|d d  r'd}t|d d }| ||||j_|d uS )NFr	   rv   T)r[   r\   rV   isdigitrD   r   r{   	list_info)r+   r%   r^   r   r   rC   r,   r,   r-   r.     s   z
List.matchc           
      C  s*  | |j j}g }d}d}|j}||M |jsZ|jd |rE|jd |}t|t	s7t
d|jd |}|| |  |rDd}nt|rRt| d}n|  n|jrW d    n1 sdw   Y  |ottdd |D  }|r|D ]}||_|jD ]
}	t|	tr||	_qqy||_||_|S )NTFr   r   c                 s  s&    | ]}|j D ]}t|tV  qqd S r2   )r    rx   r   )rj   itemer,   r,   r-   rk     s    
zList.parse.<locals>.<genexpr>)r{   r   r   r   rL   r   r.   r/   rx   r   r   r   r~   r   r   anyr   r    r   r   )
r+   r%   ry   r    r   has_blank_liner   elr   childr,   r,   r-   r/     sP   






z
List.parseN)r   r   r&   r?   rN   )r%   r   r&   r   )r6   r7   r8   r9   r3   r=   r`   ra   r\   r   r   rA   r>   r.   r/   r,   r,   r,   r-   r     s    

r   c                   @  sf   e Zd ZdZdZdZedZG dd de	Z
dddZedddZedddZedddZdS ) r   z7List item element. It can only be created by List.parseTFr   c                   @  s&   e Zd ZU ded< ded< ded< dS )ListItem.ParseInforD   indentr#   r   midNr   r,   r,   r,   r-   r     r   r   r   r   r&   r?   c                 C  sD   |\}}}d| t | d|  | _dt|| |pd  | _d S )N r	   )r`   escaper=   rU   _second_prefix)r4   r   r   r   r   r,   r,   r-   rA     s   
zListItem.__init__rJ   r#   
prefix_posrD   tuple[int, str, int, str]c           	      C  sX   ||d   d }t|| t| }t|\}}}t|}|dkr&d}||||fS )Nrq   r	   )r   rh   rU   r   )	r+   rJ   r   r   r   r   spacestailr   r,   r,   r-   r     s   zListItem.parse_leadingr%   r   r1   c           
      C  s   |j jd |rdS || jsdS tt|dd}d}t	|j
|}|d ur/| }| | |\}}}}|j}	t|	tsEJ |	jrP|d d  rY|d |	jd kr[dS |	jse||	jkredS | ||||j_dS )Nr   Frq   r   rv   T)r   r   r.   r[   r\   r   r#   rH   r   r`   rw   r   r   r   ry   rx   r   r   r   r   r   r{   list_item_info)
r+   r%   rH   r   r^   r   r   r   r   parentr,   r,   r-   r.     s,   zListItem.matchc                 C  s   | |j j}g |_||, |  s,|  | r#|  s,|W  d    S |j||_W d    n1 s=w   Y  t	|jd t
rYtt
|j }|jrY|j|_|S )Nrv   )r{   r   r    r   rH   rI   rM   r   r   rx   r   r   rm   rF   rK   )r+   r%   ry   	blankliner,   r,   r-   r/   4  s   zListItem.parseN)r   r   r&   r?   )rJ   r#   r   rD   r&   r   rN   )r%   r   r&   r   )r6   r7   r8   r9   r;   r   r`   ra   r\   r   r   rA   r>   r   r.   r/   r,   r,   r,   r-   r      s    

	r   c                   @  sX   e Zd ZdZejdejdZG dd deZ	ddddZ
edddZedddZdS )r   z@Link reference definition:
    [label]: destination "title"
    z {,3}(\[[\s\S]*?)(?=\n\n|\Z)rQ   c                   @  s.   e Zd ZU ded< ded< ded< ded< dS )zLinkRefDef.ParseInfozinline_parser.Group
link_label	link_dest
link_titlerD   r   Nr   r,   r,   r,   r-   r   M  r   r   Nlabelr#   texttitle
str | Noner&   r?   c                 C  s   || _ || _|| _d S r2   )r   destr   )r4   r   r   r   r,   r,   r-   rA   S  s   
zLinkRefDef.__init__r%   r   r1   c           	      C  s&  | | j}|s
dS |j}t||d}|sdS |jt|ks(||j dkr*dS t||jd }z
t	||\}}W n tj
yH   Y dS w t|j|j}t|d|}|dkr_|d7 }nt|}|||  r|jrd||j|j v rtj}t|d|jd }ndS | |||||j_dS )NFr	   :r}   r   T)r[   r\   _bufferr   _parse_link_labelrC   r   rU   _parse_link_separator_parse_link_dest_title
ParseErrormaxr   rI   r   _EMPTY_GROUPr   r{   linkref_info)	r+   r%   r^   r   r   r   r   r   r   r,   r,   r-   r.   X  s:   
zLinkRefDef.matchc                 C  sX   |j j\}}}}t|jdd }|jj}||vr!|j|jf||< ||_| ||j|jS )Nr	   rv   )r{   r   r   r   rootr@   rK   )r+   r%   r   r   r   rK   normalized_labelr@   r,   r,   r-   r/   {  s   zLinkRefDef.parser2   )r   r#   r   r#   r   r   r&   r?   rN   )r%   r   r&   r   )r6   r7   r8   r9   r`   ra   rb   r\   r   r   rA   r>   r.   r/   r,   r,   r,   r-   r   F  s    "r   )&r9   
__future__r   r`   typingr   r   r   r   r   r   r"   r
   r   r   elementr   helpersr   r   r   r%   r   __all__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r,   r,   r-   <module>   s0     (>5;[CF