o
    Zh                      @  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d7ddZd8ddZd9d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dAd,d-ZdBd2d3Zd:d4d5Zd6S )C
StateBlocksrcstrmdr
   envr	   tokenslist[Token]returnNonec                 C  s  || _ || _|| _|| _g | _g | _g | _g | _g | _d| _	d| _
d| _d| _d| _d| _d| _d| _d| _d}d } } }}	t| j }
t| j D ]\\}}|slt|rj|d7 }|dkre|	d|	d  7 }	n|	d7 }	qJd	}|d
ksv||
d kr|d
kr~|d7 }| j| | j| | j| | j|	 | jd d}d}d}	|d }qJ| j|
 | j|
 | jd | jd | jd t| jd | _d| jd j v | _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 r3   Z/var/www/html/lang_env/lib/python3.10/site-packages/markdown_it/rules_block/state_block.py__init__   sd   
zStateBlock.__init__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,   r3   r3   r4   __repr__q   s   
zStateBlock.__repr__ttypetagnestingLiteral[-1, 0, 1]r   c                 C  sV   t |||}d|_|dk r|  jd8  _| j|_|dkr#|  jd7  _| j| |S )zPush new token to "stream".Tr   r   )r   r   r%   r   r)   )r,   r:   r;   r<   tokenr3   r3   r4   pushw   s   zStateBlock.pushr#   intboolc                 C  s   | j | | j|  | j| kS ).)r   r   r   r,   r#   r3   r3   r4   isEmpty   s   zStateBlock.isEmptyfrom_posc                 C  s\   || j k r,z| j| | j|  | j| k rW |S W n	 ty"   Y nw |d7 }|| j k s|S )rB   r   )r$   r   r   r   
IndexError)r,   rE   r3   r3   r4   skipEmptyLines   s   

	zStateBlock.skipEmptyLinesr.   c                 C  s>   	 z| j | }W n
 ty   Y |S w t|s	 |S |d7 }q)z Skip spaces from given position.Tr   )r   rF   r   )r,   r.   currentr3   r3   r4   
skipSpaces      zStateBlock.skipSpacesminimumc                 C  s>   ||kr|S ||kr|d8 }t | j| s|d S ||ks
|S )z+Skip spaces from given position in reverse.r   )r   r   )r,   r.   rK   r3   r3   r4   skipSpacesBack      zStateBlock.skipSpacesBackr   c                 C  >   	 z| j | }W n
 ty   Y |S w ||kr	 |S |d7 }q)z(Skip character code from given position.Tr   )srcCharCoderF   )r,   r.   r   rH   r3   r3   r4   	skipChars   rJ   zStateBlock.skipCharschc                 C  rN   )z*Skip character string from given position.Tr   )r   rF   )r,   r.   rQ   rH   r3   r3   r4   skipCharsStr   rJ   zStateBlock.skipCharsStrc                 C  >   ||kr|S ||kr|d8 }|| j | kr|d S ||ks
|S )z4Skip character code reverse from given position - 1.r   )rO   )r,   r.   r   rK   r3   r3   r4   skipCharsBack   rM   zStateBlock.skipCharsBackc                 C  rS   )z6Skip character string reverse from given position - 1.r   )r   )r,   r.   rQ   rK   r3   r3   r4   skipCharsStrBack   rM   zStateBlock.skipCharsStrBackbeginendr/   
keepLastLFc                 C  sN  |}||krdS dg||  }d}||k rd}| j |  }	}
|d |k s&|r-| j| d n| j| }|
|k ru||k ru| j|
 }t|rZ|dkrU|d|| j|  d  7 }n|d7 }n|
|	 | j| k rh|d7 }nn|
d7 }
|
|k ru||k s:||krd||  | j|
|  ||d < n| j|
| ||d < |d7 }|d7 }||k sd|S )zCut lines range from source.r   r   r   r   r    )r   r   r   r   r!   r   join)r,   rV   rW   r/   rX   r#   queueiZ
lineIndent	lineStartfirstlastrQ   r3   r3   r4   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"   rC   r3   r3   r4   is_code_block  s   zStateBlock.is_code_blockN)
r   r   r   r
   r   r	   r   r   r   r   )r   r   )r:   r   r;   r   r<   r=   r   r   )r#   r@   r   rA   )rE   r@   r   r@   )r.   r@   r   r@   )r.   r@   rK   r@   r   r@   )r.   r@   r   r@   r   r@   )r.   r@   rQ   r   r   r@   )r.   r@   r   r@   rK   r@   r   r@   )r.   r@   rQ   r   rK   r@   r   r@   )
rV   r@   rW   r@   r/   r@   rX   rA   r   r   )r8   
__module____qualname__r5   r9   r?   rD   rG   rI   rL   rP   rR   rT   rU   r`   ra   r3   r3   r3   r4   r      s    

b












+r   N)
__future__r   typingr   r   Zcommon.utilsr   r*   r   r>   r   utilsr	   Zmarkdown_it.mainr
   r   r3   r3   r3   r4   <module>   s    