U
    muf                     @   sF   d Z ddlmZ ddlmZmZ G dd deZddd	Zd
d ZdS )at  
    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.
   )DirectivePlugin   )normalize_toc_itemrender_toc_ulc                   @   s6   e Zd ZdddZdd Zdd Zd	d
 Zdd ZdS )TableOfContentsr      c                 C   s   || _ || _d S )N)	min_level	max_level)selfr   r	    r   :/tmp/pip-unpacked-wheel-8p1ovdot/mistune/directives/toc.py__init__   s    zTableOfContents.__init__c                 C   s   dt |d  S )NZtoc_r   )str)r
   tokenindexr   r   r   generate_heading_id   s    z#TableOfContents.generate_heading_idc                 C   s   |  |}| |}|rt|}d|k}t|d| j}t|d| j}	|| jk r^td| j |	| jkrxtd| j ||	krtdnd}| j}| j}	||	|d}
d	|pd
|
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)Zparse_titleZparse_optionsdict_normalize_levelr   r	   
ValueError)r
   blockmstatetitleoptionsZ	d_optionsr   r   r	   r   r   r   r   parse   s*    




zTableOfContents.parsec           
         s   g }g }|j D ]2}|d dkr*|| q|d dkr|| q|rg }t|D ],\}}| |||d d< |t|| qR|D ]<}|d d |d d   fdd	|D }	|	|d d< qd S )
Nr   r   headingr   idr   r	   c                    s,   g | ]$}|d    kr  krn q|qS )    r   ).0itemZ_maxZ_minr   r   
<listcomp>J   s
        z,TableOfContents.toc_hook.<locals>.<listcomp>)tokensappend	enumerater   r   )
r
   mdr   sectionsZheadingstokZ	toc_itemsisecr   r   r&   r   toc_hook6   s"    
zTableOfContents.toc_hookc                 C   s@   |j r<|j jdkr<|d| j |j| j |j dt d S )Nhtmlr   )rendererNAMEregisterr    Zbefore_render_hooksr)   r0   render_html_toc)r
   	directiver+   r   r   r   __call__M   s    zTableOfContents.__call__N)r   r   )__name__
__module____qualname__r   r   r    r0   r7   r   r   r   r   r      s
   
r   Fc                 K   sH   |sd}|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   )r2   r   r   r   r   contentr1   r   r   r   r5   U   s    r5   c              	   C   sJ   |  |}|s|S z
t|W S  ttfk
rD   td| dY nX d S )N"z" option MUST be integer)getintr   	TypeError)r   namedefaultlevelr   r   r   r   b   s    

r   N)F)	__doc___baser   r   r   r   r   r5   r   r   r   r   r   <module>   s
   A
