U
    Sh2                     @   sJ   d dl mZ d dlmZ d dlmZ d dlmZ deeeddd	d
Z	dS )    )
MarkdownIt)
StateBlock)StateInline)is_code_block{}N)mdstart_delimiterend_delimiterreturnc                    s\   t ttd fdd}tttttd fdd}| jjdd| | jjd	d
| dS )zA plugin to create substitution tokens.

    These, token should be handled by the renderer.

    Example::

        {{ block }}

        a {{ inline }} b

    )statesilentr   c                    s4  z.| j | j ks&| j | jd  kr,W dS W n tk
rD   Y dS X | jd }d}z| j  |}W n tk
r|   Y dS X z| j |d   krd}W qW n tk
r   Y dS X |d }qT|sdS | j | jd |  }|d | _|rdS | ddd}d|_||_|	dd	 |	d
|    |_
dS )N   F   Tsubstitution_inlinespanr   classsubstitutiontext)srcpos
IndexErrorindex
ValueErrorstrippushblockcontentattrSetmarkup)r   r   r   Zfound_closingendr   tokenr
   r	    O/root/rtd-docs/venv/lib/python3.8/site-packages/mdit_py_plugins/substitution.py_substitution_inline   sD    



z1substitution_plugin.<locals>._substitution_inline)r   	startLineendLiner   r   c           	         s  t | |rdS | j| | j|  }| j| }| j||  }zF|d ks||d ks||d  ks||d  ks|t|dk rW dS W n tk
r   Y dS X |dd  } d |krdS |d | _|rdS | 	d	d
d}d|_
||_|dd |d|    |_|| jg|_dS )NFr   r      r   Tsubstitution_blockdivr   r   r   )r   ZbMarksZtShiftZeMarksr   r   lenr   liner   r   r   r   r   map)	r   r&   r'   r   ZstartPosr    ZlineTextr   r!   r"   r#   r$   _substitution_blockB   sB    








z0substitution_plugin.<locals>._substitution_blockZfencer+   escaper   N)r   boolr   intr   Zrulerbeforeinline)r   r	   r
   r%   r0   r#   r"   r$   substitution_plugin   s    ,   ,r6   )r   r   )
Zmarkdown_itr   Zmarkdown_it.rules_blockr   Zmarkdown_it.rules_inliner   Zmdit_py_plugins.utilsr   strr6   r#   r#   r#   r$   <module>   s        