o
    ^iZ                     @   s   d Z ddlmZmZmZmZ ddlmZmZ ddl	m
Z
mZ er4ddlmZ ddlmZmZ dd	lmZ G d
d deZddddedededef
ddZdeeef dededefddZdS )aP  
TOC directive
~~~~~~~~~~~~~

The TOC directive syntax looks like::

    .. toc:: Title
       :min-level: 1
       :max-level: 3

"Title", "min-level", and "max-level" option can be empty. "min-level"
and "max-level" are integers >= 1 and <= 6, which define the allowed
heading levels writers want to include in the table of contents.
    )TYPE_CHECKINGAnyDictMatch   )normalize_toc_itemrender_toc_ul   )BaseDirectiveDirectivePlugin)BlockParser)BaseRenderer
BlockState)Markdownc                
   @   s   e Zd ZddededdfddZd	eeef d
edefddZddde	e dddeeef fddZ
dddZdeddddfddZdS )TableOfContentsr	      	min_level	max_levelreturnNc                 C   s   || _ || _d S )N)r   r   )selfr   r    r   Q/home/ubuntu/hpml_nyu/venv/lib/python3.10/site-packages/mistune/directives/toc.py__init__   s   
zTableOfContents.__init__tokenindexc                 C   s   dt |d  S )Ntoc_r	   )str)r   r   r   r   r   r   generate_heading_id    s   z#TableOfContents.generate_heading_idblockr   mstater   c                 C   s   |  |}| |}|rEt|}d|v }t|d| j}t|d| j}	|| jk r/td| j |	| jkr<td| j ||	krDtdnd}| j}| j}	||	|d}
d	|pWd
|
dS )Ncollapsez	min-levelz	max-levelz"min-level" option MUST be >= z"max-level" option MUST be <= z7"min-level" option MUST be less than "max-level" optionF)r   r   r!   toc )typetextattrs)parse_titleparse_optionsdict_normalize_levelr   r   
ValueError)r   r   r   r    titleoptions	d_optionsr!   r   r   r&   r   r   r   parse#   s,   



zTableOfContents.parsemdr   c           
         s   g }g }|j D ]}|d dkr|| q|d dkr || q|rcg }t|D ]\}}| |||d d< |t|||d q)|D ] }|d d |d d   fd	d
|D }	|	|d d< qDd S d S )Nr$   r"   headingr&   id)parentr   r   c                    s,   g | ]}|d    kr krn n|qS )r   r   ).0item_max_minr   r   
<listcomp>Q   s   , z,TableOfContents.toc_hook.<locals>.<listcomp>)tokensappend	enumerater   r   )
r   r0   r    sectionsheadingstok	toc_itemsisecr"   r   r6   r   toc_hook=   s(   

zTableOfContents.toc_hook	directivec                 C   sH   |j r |j jdkr"|d| j |j| j |j dt d S d S d S )Nhtmlr"   )rendererNAMEregisterr/   before_render_hooksr;   rC   render_html_toc)r   rD   r0   r   r   r   __call__T   s
   zTableOfContents.__call__)r	   r   )r0   r   r    r   r   N)__name__
__module____qualname__intr   r   r   r   r   r   r/   rC   r
   rK   r   r   r   r   r      s    &
r   FrF   r   r,   r!   r&   r   c                 K   s@   |sd}t |d }d}|s|d7 }|d| d 7 }|| d S )NzTable of Contentsr"   z<details class="toc"z openz>
<summary>z</summary>
z</details>
)r   )rF   r,   r!   r&   contentrE   r   r   r   rJ   \   s   rJ   r-   namedefaultc              	   C   s@   |  |}|s	|S zt|W S  ttfy   td| dw )N"z" option MUST be integer)getrO   r+   	TypeError)r-   rQ   rR   levelr   r   r   r*   h   s   

r*   N)F)__doc__typingr   r   r   r   r"   r   r   _baser
   r   block_parserr   corer   r   markdownr   r   r   boolrJ   r*   r   r   r   r   <module>   s     A&