U
    Sh                      @  sp   d dl mZ d dlmZmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ er\d dlmZ G d	d
 d
eZdS )    )annotations)TYPE_CHECKINGLiteral   )
isStrSpace)	StateBase)Token)EnvType)
MarkdownItc                   @  s   e Zd ZddddddddZdd	d
dZdddddddZdddddZdddddZdddddZddddddZ	ddddd d!Z
dddd"d#d$Zddddd%d&d'Zddddd(d)d*Zdddddd+d,d-Zdddd.d/Zd0S )1
StateBlockstrr
   r	   zlist[Token]None)srcmdenvtokensreturnc                 C  s  || _ || _|| _|| _g | _g | _g | _g | _g | _d| _	d| _
d| _d| _d| _d| _d| _d| _d| _d}d } } }}	t| j }
t| j D ]\}}|st|r|d7 }|dkr|	d|	d  7 }	q|	d7 }	qnd	}|d
ks||
d kr|d
kr |d7 }| j| | j| | j| | j|	 | jd d}d}d}	|d }q| j|
 | j|
 | jd | jd | jd t| jd | _d| jd j k| _d S )Nr   Froot    	   T
codeblock)r   r   r   r   bMarkseMarkstShiftsCountbsCount	blkIndentlinelineMaxZtightZddIndentZ
listIndentZ
parentTypelevelresultlen	enumerater   appendrulerZget_active_rules_code_enabled)selfr   r   r   r   Zindent_foundstartposindentoffsetlength	character r2   V/root/rtd-docs/venv/lib/python3.8/site-packages/markdown_it/rules_block/state_block.py__init__   sb    


zStateBlock.__init__)r   c                 C  s*   | j j d| j d| j dt| j dS )Nz(line=z,level=z,tokens=))	__class____name__r"   r$   r&   r   )r+   r2   r2   r3   __repr__q   s    (zStateBlock.__repr__zLiteral[(-1, 0, 1)]r   )ttypetagnestingr   c                 C  sV   t |||}d|_|dk r(|  jd8  _| j|_|dkrF|  jd7  _| j| |S )zPush new token to "stream".Tr   r   )r   r   r$   r   r(   )r+   r9   r:   r;   tokenr2   r2   r3   pushw   s    zStateBlock.pushintbool)r"   r   c                 C  s   | j | | j|  | j| kS ).)r   r   r   r+   r"   r2   r2   r3   isEmpty   s    zStateBlock.isEmpty)from_posr   c                 C  sT   || j k rPz&| j| | j|  | j| k r.W qPW n tk
rD   Y nX |d7 }q |S )r@   r   )r#   r   r   r   
IndexError)r+   rC   r2   r2   r3   skipEmptyLines   s    

zStateBlock.skipEmptyLines)r-   r   c                 C  s@   z| j | }W n tk
r&   Y q<Y nX t|s2q<|d7 }q |S )z Skip spaces from given position.r   )r   rD   r   )r+   r-   currentr2   r2   r3   
skipSpaces   s    

zStateBlock.skipSpaces)r-   minimumr   c                 C  s8   ||kr|S ||kr4|d8 }t | j| s|d S q|S )z+Skip spaces from given position in reverse.r   )r   r   )r+   r-   rH   r2   r2   r3   skipSpacesBack   s    
zStateBlock.skipSpacesBack)r-   r   r   c                 C  s@   z| j | }W n tk
r&   Y q<Y nX ||kr2q<|d7 }q |S )z(Skip character code from given position.r   )srcCharCoderD   )r+   r-   r   rF   r2   r2   r3   	skipChars   s    

zStateBlock.skipChars)r-   chr   c                 C  s@   z| j | }W n tk
r&   Y q<Y nX ||kr2q<|d7 }q |S )z*Skip character string from given position.r   )r   rD   )r+   r-   rL   rF   r2   r2   r3   skipCharsStr   s    

zStateBlock.skipCharsStr)r-   r   rH   r   c                 C  s8   ||kr|S ||kr4|d8 }|| j | kr|d S q|S )z4Skip character code reverse from given position - 1.r   )rJ   )r+   r-   r   rH   r2   r2   r3   skipCharsBack   s    
zStateBlock.skipCharsBack)r-   rL   rH   r   c                 C  s8   ||kr|S ||kr4|d8 }|| j | kr|d S q|S )z6Skip character string reverse from given position - 1.r   )r   )r+   r-   rL   rH   r2   r2   r3   skipCharsStrBack   s    
zStateBlock.skipCharsStrBack)beginendr.   
keepLastLFr   c                 C  s>  |}||krdS dg||  }d}||k r4d}| j |  }	}
|d |k sN|r\| j| d n| j| }|
|k r||k r| j|
 }t|r|dkr|d|| j|  d  7 }q|d7 }n|
|	 | j| k r|d7 }nq|
d7 }
qf||krd||  | j|
|  ||d < n| j|
| ||d < |d7 }|d7 }q"d|S )zCut lines range from source.r   r   r   r   r    )r   r   r   r   r    r   join)r+   rP   rQ   r.   rR   r"   queueiZ
lineIndentZ	lineStartfirstlastrL   r2   r2   r3   getLines   s<    






$
zStateBlock.getLinesc                 C  s   | j o| j| | j dkS )zCheck if line is a code block,
        i.e. the code block rule is enabled and text is indented by more than 3 spaces.
        r   )r*   r   r!   rA   r2   r2   r3   is_code_block  s    zStateBlock.is_code_blockN)r7   
__module____qualname__r4   r8   r=   rB   rE   rG   rI   rK   rM   rN   rO   rY   rZ   r2   r2   r2   r3   r      s   b


+r   N)
__future__r   typingr   r   Zcommon.utilsr   r)   r   r<   r   utilsr	   Zmarkdown_it.mainr
   r   r2   r2   r2   r3   <module>   s   