
    bi|                         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Zddddeeef   dee   deeeef   fdZdeeeeef      defdZy)    )TYPE_CHECKINGAnyCallableDictIterableListOptionalTuple   )
BlockState)	striptags)MarkdownNmdr   	min_level	max_level
heading_idreturnc                     #dt         t        t        f   dt        dt        fddfd}| j                  j                  |       y)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                 $    dt        |dz         z   S )Ntoc_r   )str)r   r   s     F/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/mistune/toc.pyr   z add_toc_hook.<locals>.heading_id$   s    C	N**    c                 .   g }|j                   D ]3  }|d   dk(  s|d   d   }	|cxk  rk  s n #|j                  |       5 g }t        |      D ]1  \  }} ||      |d   d<   |j                  t        | ||             3 ||j                  d<   y )Ntypeheadingattrslevelid)parent	toc_items)tokensappend	enumeratenormalize_toc_itemenv)
r   stateheadingstokr    r#   ir   r   r   s
          r   toc_hookzadd_toc_hook.<locals>.toc_hook'   s    << 	)C6{i'GW-22OOC(		) 	) 	HFAs!+C!3CL/CFG	H
 "+		+r   )r   r   r)   r   r   N)r   r   r   intbefore_render_hooksr%   )r   r   r   r   r-   s    ``` r   add_toc_hookr0   
   sH    0 	+d38n 	+S 	+S 	++" !!(+r   r   r"   c                     |d   }| j                  ||r|j                  ni       }| j                  J | j                  |t                     }t	        |      }|d   }|d   |d   |fS )Ntextr   r    r!   )inliner(   rendererr   r   )r   r   r"   r2   r$   htmlr   s          r   r'   r'   ;   sl    =DYYt6VZZr:F;;""";;vz|,DT?D'NE>5;,,r   tocc                    | syd}g }| D ]  \  }}}dj                  ||      }|s|d|z   z  }|j                  |       5||d   k(  r	|d|z   z  }F||d   kD  r|d|z   z  }|j                  |       h|j                          |rg|j                         }||k(  r|d|z   z  }|j                  |       ||kD  r+|d|z   z  }|j                  |       |j                  |       |dz  }|rg|j                  |       |d|z   z  } t        |      d	kD  r$|dz  }|j                          t        |      d	kD  r$|syd
|z   dz   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)r6   slevelsr    kr2   item
last_levels           r   render_toc_ulrB   E   s}   " 
AF *q$%,,Q5$AMM% fRj %%AVBZ$&&AMM% JJL#ZZ\
J&4t;;AMM%(Z'--AMM*-MM%())A  e$]T))7*: f+/	

 f+/ a<***r   )r      N)N)typingr   r   r   r   r   r   r	   r
   corer   utilr   markdownr   r.   r   r0   r'   rB    r   r   <module>rI      s    V V V  "
 AE	.,.,., ., 4S>3"7"<=>	.,
 
.,b-: -d38n -hsm -_dehjmorer_s -9+xc3m 45 9+# 9+r   