U
    Sh                     @  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rd dlmZ ef eG dd dZeddddg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   X/root/rtd-docs/venv/lib/python3.8/site-packages/markdown_it/rules_inline/state_inline.pyr      s   
r   Scannedcan_open	can_closer   c                   @  sd   e Zd ZddddddddZdd	d
dZdd	ddZdddddddZddddddZdS )StateInlinestrr   r   zlist[Token]None)srcmdenv	outTokensreturnc                 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__)r+   c                 C  s*   | j j d| j d| j dt| j dS )Nz(pos=[z of z	], token=))	__class__r   r0   r1   r.   r-   )r7   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   r2   contentr3   r   r-   append)r7   r   r   r   r    pushPendingS   s    zStateInline.pushPendingzLiteral[(-1, 0, 1)])ttypetagnestingr+   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      r5   )r2   r?   r   r   r6   popr5   r>   r3   r-   r/   )r7   r@   rA   rB   r   Z
token_metar   r   r    push[   s"    
zStateInline.pushr   r   r!   )startcanSplitWordr+   c                 C  s
  |}| j }| j| }|dkr*| j|d  nd}||k rN| j| |krN|d7 }q.|| }||k rh| j| nd}tt|p~t|}	tt|pt|}
tt|}tt|}|p|
o|p|	  }|p|	o|p|
  }|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   rC    )r1   r'   r
   ordr   r   r!   )r7   rF   rG   r0   maximumr   ZlastCharcountZnextCharZisLastPunctCharZisNextPunctCharZisLastWhiteSpaceZisNextWhiteSpaceZleft_flankingZright_flankingr"   r#   r   r   r    
scanDelimsx   s0    	

zStateInline.scanDelimsN)r   r   r   r8   r;   r?   rE   rL   r   r   r   r    r$   +   s
   !r$   N)
__future__r   collectionsr   dataclassesr   typingr   r   r   Z_compatr	   Zcommon.utilsr
   r   r   Zrulerr   r   r   utilsr   Zmarkdown_itr   r   r!   r$   r   r   r   r    <module>   s   