o
    >Di	                     @   sP   d Z ddlZddlmZ ddlmZmZ ddlmZ G dd dZd
dd	Z	dS )a  
TOC extension
~~~~~~~~~~~~~

Renders the TOC(Table Of Content) for a markdown document.
This requires to install `toc` extras::

    pip install marko[toc]

Arguments:
    * opening: the opening tag, defaults to <ul>
    * closing: the closing tag, defaults to </ul>
    * item_format: the toc item format, defaults to '<li><a href="#{slug}">{text}</a></li>'

Usage::

    from marko import Markdown

    markdown = Markdown(extensions=['toc'])

    print(markdown(text))
    print(markdown.renderer.render_toc())

    N)slugify)MarkoExtensionrender_dispatch)HTMLRendererc                       sB   e Zd ZdZdZdZ fddZdddZee	d	d
 Z
  ZS )TocRendererMixinz<ul>z</ul>z%<li><a href="#{slug}">{text}</a></li>c                    s   g | _ t  S )N)headingssuper	__enter__)self	__class__ F/var/www/Datamplify/venv/lib/python3.10/site-packages/marko/ext/toc.pyr	   '   s   
zTocRendererMixin.__enter__   c           	      C   s   | j sdS d }d }g }| j D ]Q\}}}|d ur||| krq|d u r.|}|}|| jd  ||d kr>|| jd  |}||krR|| jd  |d8 }||ksB|| jj||dd  qt||d D ]
}|| jd  qgd|S )N 
   )slugtext)r   appendopeningclosingitem_formatformatrangejoin)	r
   maxdepthfirst_level
last_levelrvlevelr   r   _r   r   r   
render_toc+   s.   
zTocRendererMixin.render_tocc                 C   sD   |  |}ttdd|}| jt|j||f d|j||S )Nz<.+?>r   z<h{0} id="{1}">{2}</h{0}>
)	render_childrenr   resubr   r   intr    r   )r
   elementchildrenr   r   r   r   render_headingG   s   
zTocRendererMixin.render_heading)r   )__name__
__module____qualname__r   r   r   r	   r"   r   r   r)   __classcell__r   r   r   r   r   "   s    
r   c                 C   sB   i }| r| |d< |r||d< |r||d< t dtf|g}t|dS )Nr   r   r   r   )renderer_mixins)typer   r   )r   r   r   optionsr.   r   r   r   make_extensionO   s   
r1   )NNN)
__doc__r$   r   marko.helpersr   r   marko.html_rendererr   r   r1   r   r   r   r   <module>   s    -