o
    >DiMG                     @  s  d Z ddlmZ ddlZddlmZmZmZmZ ddl	m
Z
 ddlmZmZmZ ddlmZ erBdd	lmZ eee d
f Zee ZG dd deZedddZdZddd eddD ed ZG dd deZd`d d!Z dad$d%Z!			dbdcd+d,Z"G d-d. d.Z#ddd2d3Z$ded9d:Z%dfd<d=Z&dgd>d?Z'dhdAdBZ(	CdidjdGdHZ)dkdJdKZ*dldLdMZ+dmdPdQZ,dndTdUZ-dodWdXZ.dpd[d\Z/G d]d^ d^Z0G d_d
 d
Z1dS )qz
Parse inline elements
    )annotationsN)TYPE_CHECKINGMatch
NamedTupleUnion   )patterns)	find_next	is_pairednormalize_label)InlineElement)SourceMatchObjc                   @  s&   e Zd ZU ded< ded< ded< dS )Groupintstartendz
str | NonetextN)__name__
__module____qualname____annotations__ r   r   L/var/www/Datamplify/venv/lib/python3.10/site-packages/marko/inline_parser.pyr      s   
 r   z 
	 c                 c  s    | ]}t |V  qd S N)chr).0ir   r   r   	<genexpr>   s    r           c                   @  s   e Zd ZdZdS )
ParseErrorzRaised when parsing fails.N)r   r   r   __doc__r   r   r   r   r#   !   s    r#   r   strelementslist[ElementType]fallbackElementTypesourcer   returnlist[InlineElement]c           	   	     s   G  fdddt }g }t|  jjD ]}|t||| | q|D ]}|j|  dD ]}|t||| | q+q"|  t|}t	|| |dS )zParse given text and produce a list of inline elements.

    :param text: the text to be parsed.
    :param elements: the element types to be included in parsing
    :param fallback: fallback class when no other element type is matched.
    c                      s   e Zd ZdZd	 fddZdS )
zparse.<locals>.LinkOrEmphTmatch_Matchr+   r   c                   s    t |tsJ  jj|j |S r   )
isinstancer   parserinline_elementsetype)clsr-   r*   r   r   __new__2   s   z!parse.<locals>.LinkOrEmph.__new__N)r-   r.   r+   r   )r   r   r   parse_childrenr5   r   r4   r   r   
LinkOrEmph/   s    r7   r4   )r(   )
r   find_links_or_emphsrootlink_ref_defsappendTokenfindsort_resolve_overlapmake_elements)	r   r&   r(   r*   r7   tokensmr2   r-   r   r4   r   parse%   s   
rC   rA   list[Token]c                 C  s   | s| S g }| d }| dd  D ].}| |}|tjkr$|| |}q|tjkr/|| q|tjkr>|jj|jjk r>|}q|| |S Nr   r   )	relationr<   PRECEDEr;   CONTAINappend_child	INTERSECTr2   priority)rA   resultprevcurrr   r   r   r?   C   s    




r?   r   r   r   
int | NoneElementType | Nonec                 C  sv   g }|pt |}|}| D ]}||jk r|||||j  ||  |j}q||k r9|||||  |S )a  Make elements from a list of parsed tokens.
    It will turn all unmatched holes into fallback elements.

    :param tokens: a list of parsed tokens.
    :param text: the original tet.
    :param start: the offset of where parsing starts. Defaults to the start of text.
    :param end: the offset of where parsing ends. Defauls to the end of text.
    :param fallback: fallback element type.
    :returns: a list of inline elements.
    )lenr   r;   
as_elementr   )rA   r   r   r   r(   rL   prev_endtokenr   r   r   r@   U   s   
r@   c                   @  s\   e Zd ZdZdZdZdZdZd"ddZd#ddZ	d$ddZ
d%ddZd&ddZd'dd Zd!S )(r<   zoAn intermediate class to wrap the match object.
    It can be converted to element by :meth:`as_element()`
    r   r         r2   r)   r-   r.   r   r%   r(   r+   Nonec                 C  sR   || _ || _| | _| | _||j| _||j| _|| _|| _g | _	d S r   )
r2   r-   r   r   parse_groupinner_start	inner_endr   r(   children)selfr2   r-   r   r(   r   r   r   __init__}   s   


zToken.__init__otherr   c                 C  sd   | j |jkr	tjS | j |j kr/| jjr"|j| jkr"|j | jkr"tjS | jjr/| j|jkr/tj	S tj
S r   )r   r   r<   rG   r2   r6   rZ   r[   rH   SHADErJ   r]   r_   r   r   r   rF      s   zToken.relationchildc                 C  s   | j jsd S | j| d S r   )r2   r6   r\   r;   )r]   rb   r   r   r   rI      s   zToken.append_childr   c                 C  s>   |  | j}|jrt| j| _t| j| j| j| j| j	|_|S r   )
r2   r-   r6   r?   r\   r@   r   rZ   r[   r(   )r]   er   r   r   rS      s   zToken.as_elementc                 C  s   d | jj| jj| j| jS )Nz<{}: {} start={} end={}>)format	__class__r   r2   r   r   r]   r   r   r   __repr__   s   zToken.__repr__oboolc                 C  s   | j |j k S r   )r   )r]   rh   r   r   r   __lt__      zToken.__lt__N)
r2   r)   r-   r.   r   r%   r(   r)   r+   rX   )r_   r<   r+   r   )rb   r<   r+   rX   )r+   r   r+   r%   )rh   r<   r+   ri   )r   r   r   r$   rG   rJ   rH   r`   r^   rF   rI   rS   rg   rj   r   r   r   r   r<   s   s    




r<   r:   dict[str, tuple[str, str]]list[MatchObj]c           
      C  s  t d}d}g }d}g }t d}|t| k r{|r!d}|d7 }nT| | dkr.d}|d7 }nG|| |r=|| | }n8| | dkr\t| ||||}|rW| }|| n|d7 }n|| |}	|	rq|t|	|  |	 }n|d7 }|t| k st| |d	| |S )
zFink links/images or emphasis from text.

    :param text: the original text.
    :param link_ref_defs: a mapping of link ref definitions.
    :returns: an iterable of match object.
    z(?:!?\[|\*+|_+)r   Fz&(?<!`)(`+)(?!`)([\s\S]+?)(?<!`)\1(?!`)r   \T]N)	recompilerR   r-   r   look_for_image_or_linkr;   	Delimiterprocess_emphasis)
r   r:   delimiters_rer   
delimitersescapematchescode_patternnoderB   r   r   r   r8      s:   
	




r8   rw   list[Delimiter]closery   MatchObj | Nonec              
   C  s"  t t|d d d D ]~\}}|jdvrq|js nrt| |j| s% ngt|j|| |j| }|jd us8J |jdkr?dnd}t| |d pQt	| |d |j|}	|	sV n6t
|| |j|	d ||	d |	d }
t| ||| |dkr|d | D ]
}|jd	krd
|_qx||= |
  S d S ||= d S )Nr   )[![r   ImageLinkr   rV   r   r   F)list	enumeratecontentactive_is_legal_link_textr   r   r   _expect_inline_link_expect_reference_linkr   r   ru   )r   rw   r}   r:   ry   r   d	link_textr2   r-   rvr   r   r   rs      s6   
"
rs   ri   c                 C  s   t | ddS )Nr   rp   )r
   )r   r   r   r   r     rk   r   c                 C  sZ   |}d}|t | k r+| | dkr|r	 |S d}n	| | tvr!	 |S |d7 }|t | k s
|S )NF
Tr   )rR   
WHITESPACE)r   r   r   has_newliner   r   r   _parse_link_separator	  s   r   Group | Nonec                 C  s|   | ||d  dkrd S t | d|d dd}|dk rd S | |d | }| r.t|dkr0d S t||d | ||d  S )Nr   r   rp   
disallowedr   i  )r	   striprR   r   )r   r   r   labelr   r   r   _parse_link_label  s   r   Fr   	is_inlinetuple[Group, Group]c                 C  s  |t | kr	t | | dkr/t| d|d dd}|dk r t |d }t||| || }ntd}d}|}|t | k r| | }|rDd}n>|dkrKd	}n7|tv rPnB|tv rXtd
|dkra|d7 }n!|dkr|dkrn|d8 }n|r~t||| || }|tfS td|d7 }|t | k s;|rtdt||| || }|jstd|}	t| |}|t | ks| | dks| | dkr|r|tfS | | dkrt| d|d }
n/| | dkrt| d|d }
n | | dkrt| d|d dd}
nd| |	| v r|tfS t d|  k rt | k rn n| |d  tvrt |
dk r$t d| ||
 v r0t t||
d | ||
d  }||fS )N<>r   z<
r   r   Fro   Tz%Invalid character in link destination()zunmatched parenthesiszNo right parenthesis is foundzEmpty link destinationr   "'z

)	rR   r#   r	   r   r   ASCII_CONTROL_EMPTY_GROUPr   r   )r   r   r   right_bracketr   	link_destescapedpairscrM   r   
link_titler   r   r   _parse_link_dest_title#  st   


(2
r   tuple[Group, Group, int] | Nonec                 C  s   |t | d ks| | dkrdS t| |d }zt| |dd\}}W n
 ty,   Y dS w t|j|j}t| |}|t | ksE| | dkrGdS |||d fS )z(link_dest "link_title")r   r   NT)r   r   )rR   r   r   r#   maxr   )r   r   r   r   r   r   r   r   r   r   e  s   
r   c           	      C  s   t | |}|}|d ur|jd usJ |jdd p|}n| ||d  dkr.t||d d}t||}|s7d S t|||d }t|||d }|||rO|jfS |fS )Nr   r   rV   z[]r   )r   r   r   _get_reference_linkr   )	r   r   r   r:   
link_labelr   rL   r   r   r   r   r   r   v  s   

r   r   tuple[str, str] | Nonec                 C  s   t | }||S r   )r   get)r   r:   normalized_labelr   r   r   r     s   
r   stack_bottomrX   c                 C  s  | }}t ||}|d ur|| }|jd dkr|n|}t|||}	|	d ur||	 }
t|
jdkr:t|jdkr:dnd}t|dkrCdnd| |
j| |j| t|
j|j| |
j|j }|| ||	d |= |||	 d 8 }|
	|r~|	|
 |d8 }|	|dr|	| |dkr|d nd }n|dkr|d nd }|jd dkr|}n|}|j
s|	| t ||}|d us|d ur|d nd}||d = d S )Nr   *rV   r   StrongEmphasisEmphasisT)_next_closerr   _nearest_openerrR   r   r   r   r   r;   removecan_open)r   rw   r   ry   star_bottomunderscore_bottomrN   d_closerbottomopenerd_openernr-   lowerr   r   r   ru     sJ   
$
	




"ru   boundc                 C  sP   |d ur|d nd}|t | k r&| | }t|ddr|S |d7 }|t | k sd S )Nr   r   	can_closeF)rR   getattr)rw   r   r   r   r   r   r   r     s   r   higherr   c                 C  sZ   |d }|d ur
|nd}||kr+| | }t |ddr#|| | r#|S |d8 }||ksd S )Nr   r   r   F)r   	closed_by)rw   r   r   r   r   r   r   r   r     s   r   c                   @  s   e Zd ZejdejdZd$d	d
Zd%ddZd%ddZ	d%ddZ
d%ddZd%ddZd%ddZd&ddZd'd(dd Zd)d!d"Zd#S )*rt   z\s)flagsr-   r.   r   r%   r+   rX   c                 C  sT   |  | _ | | _| | _|| _d| _| jd dv r(|  | _|  | _	d S d S )NTr   )r   _)
r   r   groupr   r   r   	_can_openr   
_can_closer   )r]   r-   r   r   r   r   r^     s   



zDelimiter.__init__ri   c                 C  0   | j d dkr|  S |  o|   p|  S Nr   r   )r   is_left_flankingis_right_flankingpreceded_by_puncrf   r   r   r   r     
   zDelimiter._can_openc                 C  r   r   )r   r   r   followed_by_puncrf   r   r   r   r     r   zDelimiter._can_closec                 C  s\   | j t| jk o| j| j| j d u o-|   p-| jdkp-|  p-| j| j| jd d uS rE   )r   rR   r   whitespace_rer-   r   r   r   rf   r   r   r   r     s   
zDelimiter.is_left_flankingc                 C  s\   | j dko| j| j| j d d u o-|   p-| jt| jkp-|  p-| j| j| jd uS rE   )r   r   r-   r   r   r   rR   r   rf   r   r   r   r     s   

zDelimiter.is_right_flankingc                 C  s"   | j t| jk ot| j| j  S r   )r   rR   r   r   is_punctuationrf   r   r   r   r     s   
zDelimiter.followed_by_puncc                 C  s    | j dkot| j| j d  S rE   )r   r   r   r   rf   r   r   r   r   
  s    zDelimiter.preceded_by_puncr_   c                 C  s^   | j d |j d kp-| jr| js|jo-|jo-t| j |j  d dko-tdd | |fD   S )Nr   rW   c                 s  s"    | ]}t |jd  dkV  qdS )rW   r   N)rR   r   )r   r   r   r   r   r      s     z&Delimiter.closed_by.<locals>.<genexpr>)r   r   r   rR   allra   r   r   r   r     s   zDelimiter.closed_byFr   r   leftc                 C  sH   t | j|kr	dS |r|  j|7  _n|  j|8  _| j|d  | _dS )NTF)rR   r   r   r   )r]   r   r   r   r   r   r     s   zDelimiter.removec                 C  s   d | j| j| jS )Nz <Delimiter {!r} start={} end={}>)rd   r   r   r   rf   r   r   r   rg     s   zDelimiter.__repr__N)r-   r.   r   r%   r+   rX   )r+   ri   )r_   rt   r+   ri   )F)r   r   r   ri   r+   ri   rl   )r   r   r   rq   rr   UNICODEr   r^   r   r   r   r   r   r   r   r   rg   r   r   r   r   rt     s    









rt   c                   @  sJ   e Zd ZdZdddZddddZddddZddddZddddZdS )r   z/A fake match object that memes re.match methodsr2   r%   r   r   r   r   groupsr   r+   rX   c                 G  s"   || _ || _|| _|| _|| _d S r   )_text_start_end_groupsr2   )r]   r2   r   r   r   r   r   r   r   r^   (  s
   
zMatchObj.__init__r   r   c                 C  s,   |dkr| j | j| j S | j|d  d S )Nr   r   rV   )r   r   r   r   r]   r   r   r   r   r   1  s   zMatchObj.groupc                 C  s    |dkr| j S | j|d  d S rE   )r   r   r   r   r   r   r   6     zMatchObj.startc                 C  s    |dkr| j S | j|d  d S rE   )r   r   r   r   r   r   r   ;  r   zMatchObj.endtuple[int, int]c                 C  s   |  || |fS r   )r   r   r   r   r   r   span@  s   zMatchObj.spanN)r2   r%   r   r%   r   r   r   r   r   r   r+   rX   )r   )r   r   r+   r%   )r   r   r+   r   )r   r   r+   r   )	r   r   r   r$   r^   r   r   r   r   r   r   r   r   r   %  s    
	)
r   r%   r&   r'   r(   r)   r*   r   r+   r,   )rA   rD   r+   rD   )r   NN)rA   rD   r   r%   r   r   r   rP   r(   rQ   r+   r,   )r   r%   r:   rm   r+   rn   )r   r%   rw   r|   r}   r   r:   rm   ry   rn   r+   r~   )r   r%   r+   ri   )r   r%   r   r   r+   r   )r   r%   r   r   r+   r   )r   F)r   r%   r   r   r   ri   r+   r   )r   r%   r   r   r+   r   )
r   r%   r   r   r   r%   r:   rm   r+   r   )r   r%   r:   rm   r+   r   )
r   r%   rw   r|   r   rP   ry   rn   r+   rX   )rw   r|   r   rP   r+   rP   )rw   r|   r   r   r   rP   r+   rP   )2r$   
__future__r   rq   typingr   r   r   r   r   r   helpersr	   r
   r   inliner   r*   r   r%   r.   typer)   r   r   r   joinranger   r   
ValueErrorr#   rC   r?   r@   r<   r8   rs   r   r   r   r   r   r   r   ru   r   r   rt   r   r   r   r   r   <module>   sL    "


@
+
'


B



.

Q