o
    
js                     @  s|  U d Z ddlmZ ddlmZ ddlZddlZddlmZ ddl	m
Z
 ddlmZ dd	lmZ dd
lmZ ddlmZ erCddlmZ eh dZded< ejd(ddZeeegef Z	 de
jfde
jfde
jfde
jfde
j fde
j!j"fde
j#j"fde
j$fde
j%fde
j&fde
j'fde
j(fgZ)d ed!< eegdf Z*d"e
j+fde
j!j,fde
j#j,fd#e
j-fgZ.d$ed%< G d&d' d'Z/dS ))zTokenizes paragraph content.    )annotations)CallableN)TYPE_CHECKING   )rules_inline)Ruler)StateInline)Token)EnvType)
MarkdownIt>   
*_{}!#$%&+-:<=>@[\]^`~zfrozenset[str]_DEFAULT_TERMINATORSreturnre.Pattern[str]c                   C  s   t dt dt d S )Nr    r   )recompileescapejoinr#    r+   r+   L/home/kuhnn/.local/lib/python3.10/site-packages/markdown_it/parser_inline.py_default_terminator_re8   s   r-   textlinkifynewliner)   	backticksstrikethroughemphasislinkimageautolinkhtml_inlineentityz$list[tuple[str, RuleFuncInlineType]]_rulesbalance_pairsfragments_joinz%list[tuple[str, RuleFuncInline2Type]]_rules2c                   @  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 )ParserInliner$   Nonec                 C  sd   t t  | _tD ]\}}| j|| qt t  | _tD ]\}}| j|| qt | _	t
 | _d S )N)r   RuleFuncInlineTyperulerr9   pushRuleFuncInline2Typeruler2r<   set_extra_terminator_charsr-   terminator_re)selfnamerulerule2r+   r+   r,   __init__c   s   zParserInline.__init__chstrc              	   C  sP   |t vr$|| jvr&| j| tdtdt | jB  d | _dS dS dS )aC  Register a character that stops the ``text`` rule, allowing inline rules to fire.

        This lets plugins declare which characters their inline rules react to,
        mirroring the ``MARKER`` mechanism in the Rust markdown-it implementation.

        :param ch: A single character to add to the terminator set.
        r   r&   r   N)r#   rE   addr'   r(   r)   r*   rF   )rG   rL   r+   r+   r,   add_terminator_charr   s   
z ParserInline.add_terminator_charstater   c                 C  s   d}|j }| jd}|jjd }|j}||v r|| |_ dS |j|k rA|D ]}| jd7  _||d}| jd8  _|r? nq&n|j|_ |sN| j d7  _ |j ||< dS )zwSkip single token by running all rules in validation mode;
        returns `True` if any rule reported success
        Fr&   
maxNestingNr   T)posr@   getRulesmdoptionscachelevelposMax)rG   rP   okrR   rulesrQ   rV   rI   r+   r+   r,   	skipToken   s*   


zParserInline.skipTokenc                 C  s   d}| j d}|j}|jjd }|j|k rI|j|k r)|D ]}||d}|r( nq|r2|j|kr1nq| j|j|j 7  _| jd7  _|j|k s|jrR|	  dS dS )z Generate tokens for input range.Fr&   rQ   r   N)
r@   rS   rX   rT   rU   rR   rW   pendingsrcpushPending)rG   rP   rY   rZ   endrQ   rI   r+   r+   r,   tokenize   s*   




zParserInline.tokenizer]   rT   r   envr
   tokenslist[Token]c                 C  s<   t ||||}| | | jd}|D ]}|| q|jS )z9Process input string and push inline tokens into `tokens`r&   )r   r`   rC   rS   rb   )rG   r]   rT   ra   rb   rP   rules2rI   r+   r+   r,   parse   s   

zParserInline.parseN)r$   r>   )rL   rM   r$   r>   )rP   r   r$   r>   )
r]   rM   rT   r   ra   r
   rb   rc   r$   rc   )__name__
__module____qualname__rK   rO   r[   r`   re   r+   r+   r+   r,   r=   b   s    



* r=   )r$   r%   )0__doc__
__future__r   collections.abcr   	functoolsr'   typingr   r&   r   r@   r   rules_inline.state_inliner   tokenr	   utilsr
   markdown_itr   	frozensetr#   __annotations__rV   r-   boolr?   r.   r/   r0   r)   backtickr2   r`   r3   r4   r5   r6   r7   r8   r9   rB   
link_pairspostProcessr;   r<   r=   r+   r+   r+   r,   <module>   sP     




