o
    ^i|                     @   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	deeef dee 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   F/home/ubuntu/hpml_nyu/venv/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| ||d q+||jd< d S )Ntypeheadingattrslevelid)parent	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   r    c                 C   s\   |d }|  ||r|jni }| jd usJ | |t }t|}|d }|d |d |fS )Ntextr   r   r   )inliner&   rendererr   r   )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)r3   slevelsr   kr/   item
last_levelr   r   r   render_toc_ulE   sL   



r>   )r
   r   N)N)typingr   r   r   r   r   r   r   r	   corer   utilr   markdownr   r,   r   r.   r%   r>   r   r   r   r   <module>   s*   ( 
21$
