o
    Zh                     @  s   d dl mZ d dlmZ d dl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 ddlmZ dd	lmZ dd
lmZ erFd dlmZ edi eG dd dZedg dZG dd deZdS )    )annotations)
namedtuple)	dataclass)TYPE_CHECKINGAnyLiteral   )DATACLASS_KWARGS)isMdAsciiPunctisPunctCharisWhiteSpace)	StateBase)Token)EnvType)
MarkdownItc                   @  sJ   e Zd ZU ded< ded< ded< ded< ded< ded< d	Zd
ed< d	S )	DelimiterintmarkerlengthtokenendboolopencloseNzbool | Nonelevel)__name__
__module____qualname____annotations__r    r   r   \/var/www/html/lang_env/lib/python3.10/site-packages/markdown_it/rules_inline/state_inline.pyr      s   
 r   Scanned)can_open	can_closer   c                   @  s>   e Zd Zd ddZd!ddZd"ddZd#ddZd$ddZdS )%StateInlinesrcstrmdr   envr   	outTokenslist[Token]returnNonec                 C  st   || _ || _|| _|| _d gt| | _d| _t| j | _d| _d| _	d| _
i | _g | _g | _i | _d| _d| _d S )Nr    F)r%   r(   r'   tokenslentokens_metaposposMaxr   pendingpendingLevelcache
delimiters_prev_delimitersZ	backticksZbackticksScannedZ	linkLevel)selfr%   r'   r(   r)   r   r   r    __init__,   s    
zStateInline.__init__c                 C  s*   | j j d| j d| j dt| j dS )Nz(pos=[z of z	], token=))	__class__r   r1   r2   r/   r.   )r8   r   r   r    __repr__M   s   
zStateInline.__repr__r   c                 C  s2   t ddd}| j|_| j|_| j| d| _|S )Ntextr-   r   )r   r3   contentr4   r   r.   append)r8   r   r   r   r    pushPendingS   s   zStateInline.pushPendingttypetagnestingLiteral[-1, 0, 1]c                 C  s   | j r|   t|||}d}|dk r |  jd8  _| j | _| j|_|dkr>|  jd7  _| j| j g | _d| ji}| j| _| j	| | j
| |S )z\Push new token to "stream".
        If pending text exists - flush it as text token
        Nr      r6   )r3   r@   r   r   r7   popr6   r?   r4   r.   r0   )r8   rA   rB   rC   r   Z
token_metar   r   r    push[   s"   
zStateInline.pushstartr   canSplitWordr   r!   c                 C  s  |}| j }| j| }|dkr| j|d  nd}||k r1| j| |kr1|d7 }||k r1| j| |ks"|| }||k r>| j| nd}tt|pIt|}	tt|pSt|}
tt|}tt|}|ph|
oh|pg|	  }|pr|	or|pq|
  }|s|o|| p||	}|o| p|
}n|}|}t|||S )a8  
        Scan a sequence of emphasis-like markers, and determine whether
        it can start an emphasis sequence or end an emphasis sequence.

         - start - position to scan from (it should point at a valid marker);
         - canSplitWord - determine if these markers can be found inside a word

        r   rE    )r2   r%   r
   ordr   r   r!   )r8   rH   rI   r1   maximumr   ZlastCharcountZnextCharZisLastPunctCharZisNextPunctCharZisLastWhiteSpaceZisNextWhiteSpaceZleft_flankingZright_flankingr"   r#   r   r   r    
scanDelimsx   s2   	
zStateInline.scanDelimsN)
r%   r&   r'   r   r(   r   r)   r*   r+   r,   )r+   r&   )r+   r   )rA   r&   rB   r&   rC   rD   r+   r   )rH   r   rI   r   r+   r!   )r   r   r   r9   r<   r@   rG   rN   r   r   r   r    r$   +   s    

!

r$   Nr   )
__future__r   collectionsr   dataclassesr   typingr   r   r   _compatr	   Zcommon.utilsr
   r   r   Zrulerr   r   r   utilsr   Zmarkdown_itr   r   r!   r$   r   r   r   r    <module>   s    