o
    i6                     @   s   d dl mZmZmZmZmZmZmZmZ ddl	m
Z
 ddlmZ er(ddlmZ 			ddd	d
ededeeeeef egef  ddf
ddZdd	deeef deeeef fddZdeeeeef  defddZdS )    )TYPE_CHECKINGAnyCallableDictIterableListOptionalTuple   )
BlockState)	striptags)Markdown   Nmdr   	min_level	max_level
heading_idreturnc                    sH    du rdt ttf dtdtfdd d fdd}| j| dS )a%  Add a hook to save toc items into ``state.env``. This is
    usually helpful for doc generator::

        import mistune
        from mistune.toc import add_toc_hook, render_toc_ul

        md = mistune.create_markdown(...)
        add_toc_hook(md)

        html, state = md.parse(text)
        toc_items = state.env['toc_items']
        toc_html = render_toc_ul(toc_items)

    :param md: Markdown instance
    :param min_level: min heading level
    :param max_level: max heading level
    :param heading_id: a function to generate heading_id
    Ntokenindexr   c                 S   s   dt |d  S )Ntoc_r
   )str)r   r    r   P/var/www/html/crm_dreinet/venv_linux/lib/python3.10/site-packages/mistune/toc.pyr   $   s   z add_toc_hook.<locals>.heading_idr   r   stater   c                    s   g }|j D ]}|d dkr$|d d }|  krkr$n q|| qg }t|D ]\}} |||d d< |t| | q+||jd< d S )Ntypeheadingattrslevelid	toc_items)tokensappend	enumeratenormalize_toc_itemenv)r   r   headingstokr   r    ir   r   r   r   r   toc_hook'   s   

zadd_toc_hook.<locals>.toc_hook)r   r   r   r   r   N)r   r   r   intbefore_render_hooksr"   )r   r   r   r   r*   r   r)   r   add_toc_hook
   s   r-   r   c                 C   sR   |d }|  |i }| jd usJ | |t }t|}|d }|d |d |fS )Ntextr   r   r   )inlinerendererr   r   )r   r   r.   r!   htmlr   r   r   r   r$   ;   s   r$   tocc                 C   sB  | sdS d}g }| D ]x\}}}d ||}|s#|d| 7 }|| q
||d kr0|d| 7 }q
||d krB|d| 7 }|| q
|  |rw| }||kr\|d| 7 }|| n&||krq|d| 7 }|| || n|d7 }|sH|| |d| 7 }q
t|d	kr|d7 }|  t|d	ks|sdS d
| d S )ah  Render a <ul> table of content HTML. The param "toc" should
    be formatted into this structure::

        [
          (level, id, text),
        ]

    For example::

        [
          (1, 'toc-intro', 'Introduction'),
          (2, 'toc-install', 'Install'),
          (2, 'toc-upgrade', 'Upgrade'),
          (1, 'toc-license', 'License'),
        ]
     z<a href="#{}">{}</a>z<li>z
</li>
<li>z

<ul>
<li>z</li>
</ul>
</li>
<li>z</li>
</ul>
r
   z<ul>
)formatr"   poplen)r2   slevelsr   kr.   item
last_levelr   r   r   render_toc_ulE   sL   



r=   )r
   r   N)typingr   r   r   r   r   r   r   r	   corer   utilr   markdownr   r+   r   r-   r$   r=   r   r   r   r   <module>   s*   ( 
(1$
