o
    ^i                     @   s   d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZ ejdkr6d dlmZ nd dlmZ e dZG dd dZG dd	 d	Zed
eeZG dd dee ZG dd deZdS )    N)AnyCallableClassVarDictGenericIterableListMatchMutableMappingOptionalPatternTypeTypeVarUnioncast)      )Selfz\n|$c                   @   s.  e Zd ZU dZeed< eeeef  ed< e	ed< e	ed< e
ed< eed< eeef ed< d$dee d
d	fddZded
d fddZded
d	fddZd
e	fddZde	d
efddZd
efddZdeeef d
d	fddZdeeef d
d	fddZded
d	fddZd
ee	 fd d!Zd
e	fd"d#Zd	S )%
BlockStatez3The state to save block parser's cursor and tokens.srctokenscursor
cursor_max
list_tightparentenvNreturnc                 C   sB   d| _ g | _d| _d| _d| _|| _|r|j| _d S di i| _d S )N r   T	ref_links)r   r   r   r   r   r   r   )selfr    r    G/home/ubuntu/hpml_nyu/venv/lib/python3.10/site-packages/mistune/core.py__init__(   s   zBlockState.__init__c                 C   s   |  | }|| |S N)	__class__process)r   r   childr    r    r!   child_state:   s   

zBlockState.child_statec                 C   s   || _ t|| _d S r#   )r   lenr   )r   r   r    r    r!   r%   ?   s   zBlockState.processc                 C   s$   t | j| j}|d usJ | S r#   )	_LINE_ENDsearchr   r   end)r   mr    r    r!   find_line_endC   s   zBlockState.find_line_endend_posc                 C   s   | j | j| S r#   )r   r   )r   r.   r    r    r!   get_textH   s   zBlockState.get_textc                 C   s   | j r| j d S d S )N)r   r   r    r    r!   
last_tokenK   s   
zBlockState.last_tokentokenc                 C      | j t| j d | dS z#Insert token before the last token.   Nr   insertr(   r   r3   r    r    r!   prepend_tokenO      zBlockState.prepend_tokenc                 C      | j | dS z#Add token to the end of token list.Nr   appendr9   r    r    r!   append_tokenS      zBlockState.append_tokentextc                 C   sB   |   }|r|d dkr|d  |7  < d S | jd|d d S )Ntype	paragraphrB   )rC   rB   )r2   r   r?   )r   rB   r2   r    r    r!   add_paragraphW   s   zBlockState.add_paragraphc                 C   s>   |   }|r|d dkr|  }|d  | |7  < |S d S )NrC   rD   rB   )r2   r-   r/   )r   r2   posr    r    r!   append_paragraph^   s   zBlockState.append_paragraphc                 C   s$   d}| j }|r|d7 }|j }|s|S )Nr   r6   )r   )r   dr   r    r    r!   depthf   s   zBlockState.depthr#   )__name__
__module____qualname____doc__str__annotations__r   r   r   intboolr
   r   r"   r'   r%   r-   r/   r2   r:   r@   rE   rG   rI   r    r    r    r!   r      s(   
 r   c                   @   sd   e Zd ZdZdeeef fddZdeeef ddfdd	Z	deeef ddfd
dZ
dddZdS )InlineStatez)The state to save inline parser's tokens.r   c                 C   s.   || _ d| _g | _d| _d| _d| _d| _d S )Nr   F)r   r   r   in_imagein_linkin_emphasis	in_strong)r   r   r    r    r!   r"   r   s   
zInlineState.__init__r3   r   Nc                 C   r4   r5   r7   r9   r    r    r!   r:   {   r;   zInlineState.prepend_tokenc                 C   r<   r=   r>   r9   r    r    r!   r@      rA   zInlineState.append_tokenc                 C   s0   |  | j}| j|_| j|_| j|_| j|_|S )zCreate a copy of current state.)r$   r   rS   rT   rU   rV   )r   stater    r    r!   copy   s   zInlineState.copy)r   rR   )rJ   rK   rL   rM   r
   rN   r   r"   r   r:   r@   rX   r    r    r    r!   rR   o   s    	rR   STc                   @   s"  e Zd ZU ejZded< ee ed< i Z	e
eeef  ed< g Ze
ee  ed< ddd	Zdd
eee  dee fddZ	ddedeedf deeee egee f dee ddf
ddZdedededdfddZedd
ee dedee ddfddZdee dedee fddZdS )Parserzre._FlagsTypesc_flag	state_clsSPECIFICATIONDEFAULT_RULESr   Nc                 C   s(   | j  | _t| j| _i | _i | _d S r#   )r]   rX   specificationlistr^   rules_methods_Parser__scr1   r    r    r!   r"      s
   
zParser.__init__ra   c                    sf   |d u r
d} j }nd|} j|}|r|S d fdd|D }t| j}| j|< |S )N$|c                 3   s"    | ]}d | j | f V  qdS )z
(?P<%s>%s)N)r_   ).0kr1   r    r!   	<genexpr>   s     z$Parser.compile_sc.<locals>.<genexpr>)ra   joinrc   getrecompiler[   )r   ra   keyscregexr    r1   r!   
compile_sc   s   

zParser.compile_scnamepatternfuncbeforec                    sF    fddj |< |r|j|< |jvr!jj||d dS dS )a3  Register a new rule to parse the token. This method is usually used to
        create a new plugin.

        :param name: name of the new grammar
        :param pattern: regex pattern in string
        :param func: the parsing function
        :param before: insert this rule before a built-in rule
        c                    s    | |S r#   r    )r,   rW   rs   r   r    r!   <lambda>   s    z!Parser.register.<locals>.<lambda>)rt   N)rb   r_   ra   insert_rule)r   rq   rr   rs   rt   r    ru   r!   register   s   

zParser.registerc                 C   s   t d)Nz.This plugin is not compatible with mistune v3.)DeprecationWarning)r   rq   rr   rs   r    r    r!   register_rule   s   zParser.register_rulec                 C   sN   |r z|  |}| || W d S  ty   | | Y d S w | | d S r#   )indexr8   
ValueErrorr?   )ra   rq   rt   r{   r    r    r!   rw      s   
zParser.insert_ruler,   rW   c                 C   s"   |j }|sJ | j| }|||S r#   )	lastgrouprb   )r   r,   rW   r}   rs   r    r    r!   parse_method   s   

zParser.parse_methodr   Nr#   )rJ   rK   rL   rk   Mr[   rO   r   rY   r]   r   r   rN   r^   r   r"   r   r   r   rp   r   r   r   r	   rP   rx   r   rz   staticmethodrw   r~   r    r    r    r!   rZ      s.   
 
 


&"
rZ   c                   @   s   e Zd ZU dZee ed< dddZdeded	ef ddfd
dZ	deded	ef fddZ
deeef dedefddZdeeeef  dedee fddZdeeeef  dedefddZdeeeef  dedefddZdS )BaseRendererbaseNAMEr   Nc                 C   s
   i | _ d S r#   _BaseRenderer__methodsr1   r    r    r!   r"      s   
zBaseRenderer.__init__rq   method.c                    s    fddj |< dS )zRegister a render method for the named token. For example::

        def render_wiki(renderer, key, title):
            return f'<a href="/wiki/{key}">{title}</a>'

        renderer.register('wiki', render_wiki)
        c                     s    g| R i |S r#   r    )argkwargsr   r   r    r!   rv      s    z'BaseRenderer.register.<locals>.<lambda>Nr   r   rq   r   r    r   r!   rx      s   	zBaseRenderer.registerc                 C   sR   zt tdtf t| |W S  ty(   | j|}|s$td|| Y S w )N.zNo renderer "{!r}")	r   r   rN   object__getattribute__AttributeErrorr   rj   formatr   r    r    r!   _get_method   s   zBaseRenderer._get_methodr3   rW   c                 C   s   |  |d }|||S )NrC   )r   )r   r3   rW   rs   r    r    r!   render_token   s   
zBaseRenderer.render_tokenr   c                 c   s    |D ]	}|  ||V  qd S r#   )r   )r   r   rW   tokr    r    r!   iter_tokens   s   zBaseRenderer.iter_tokensc                 C   s   d | ||S )Nr   )ri   r   r   r   rW   r    r    r!   render_tokens   s   zBaseRenderer.render_tokensc                 C   s   |  ||S r#   )r   r   r    r    r!   __call__   s   zBaseRenderer.__call__r   )rJ   rK   rL   r   r   rN   rO   r"   r   rx   r   r   r   r   r   r   r   r   r   r    r    r    r!   r      s   
 
	&"&r   )rk   systypingr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   version_infor   typing_extensionsrl   r)   r   rR   rY   rZ   r   r   r    r    r    r!   <module>   s    D

RK