
    iKjX                     h   d dl Z d dlmZ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mZ erddlmZ  e j$                  de j&                        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ede	e   fdZdede	e   de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)    N)	TYPE_CHECKINGAnyCallableDictIterableListOptionalSetTuple   )
BlockState)	striptagsescape)Markdownz"\bid\s*=\s*(?:"([^"]*)"|'([^']*)')mdr   	min_level	max_level
heading_idreturnc                     &ddt         t        t        f   dt        dt        fdn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
    NTtokenindexr   c                 $    dt        |dz         z   S )Ntoc_r   str)r   r   s     \/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/mistune/toc.pyr   z add_toc_hook.<locals>.heading_id(   s    C	N**    Fc                    g }t        |j                        }|j                  D ]3  }|d   dk(  s|d   d   }|cxk  rk  s n #|j                  |       5 g }t	        |      D ]R  \  }} 
||      }	rt        ||      }|j                  |       ||d   d<   |j                  t        | ||             T ||j                  d<   y )Ntypeheadingattrslevelid)parent	toc_items)	_find_html_idssrctokensappend	enumerate
_unique_idaddnormalize_toc_itemenv)r   stateheadingsused_idstokr#   r&   i_idauto_heading_idr   r   r   s            r   toc_hookzadd_toc_hook.<locals>.toc_hook.   s    !%)),<<C6{i'GW-22OOC(	   	)FAsS!$C h/LL!$CL/CFG * "+		+r   )r   r   r0   r   r   N)r   r   r   intbefore_render_hooksr*   )r   r   r   r   r7   r6   s    ``` @r   add_toc_hookr:      sY    0 	+d38n 	+S 	+S 	+  + +, !!(+r   r(   c                     t         j                  |       D ch c]&  }|j                  d      xs |j                  d      ( c}S c c}w )Nr      )_HTML_ID_REfinditergroup)r(   ms     r   r'   r'   G   s?    .9.B.B3.GH.GAGGAJ$!''!*$.GHHHs   +Avaluer2   c                 N    | |vr| S d}	 | dz   t        |      z   }||vr|S |dz  })Nr   _r   )rA   r2   r4   	new_values       r   r,   r,   K   sE    H	A
CK#a&(	H$	Q	 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%   rF   r)   htmlr"   s          r   r.   r.   W   sl    =DYYt6VZZr:F;;""";;vz|,DT?D'NE>5;,,r   tocc                    | syd}g }| D ]  \  }}}dj                  t        |      |      }|s|d|z   z  }|j                  |       ?||d   k(  r	|d|z   z  }P||d   kD  r|d|z   z  }|j                  |       r|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   r*   poplen)rJ   slevelsr#   krF   item
last_levels           r   render_toc_ulrV   a   s|   " 
AFq$%,,VAY=$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)retypingr   r   r   r   r   r   r	   r
   r   corer   utilr   r   markdownr   compileIr=   r8   r   r:   r'   r,   r.   rV    r   r   <module>r`      s'   	 [ [ [  #"bjjBBDDI
 AE	7,7,7, 7, 4S>3"7"<=>	7,
 
7,tI IC I	c 	SX 	# 	-: -d38n -hsm -_dehjmorer_s -9+xc3m 45 9+# 9+r   