o
    i,                     @   st   d Z ddlmZ G dd deZdd Zdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )a  
    TOC directive
    ~~~~~~~~~~~~~

    The TOC directive syntax looks like::

        .. toc:: Title
           :depth: 3

    "Title" and "depth" option can be empty. "depth" is an integer less
    than 6, which defines the max heading level writers want to include
    in TOC.
   )	Directivec                   @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )DirectiveToc   c                 C   s
   || _ d S Ndepth)selfr    r	   Q/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/mistune/directives/toc.py__init__   s   
zDirectiveToc.__init__c              	   C   sl   | d}d }| |}|r.t|d}|r.zt|}W n ttfy-   ddd Y S w dd ||fdS )Nvaluer   block_errorzTOC depth MUST be integer)typerawtoc)r   r   params)groupparse_optionsdictgetint
ValueError	TypeError)r   blockmstatetitler   optionsr	   r	   r
   parse   s   


zDirectiveToc.parsec                 C   s   | j |d< g |d< ||fS )N	toc_depthtoc_headingsr   )r   mdsr   r	   r	   r
   reset_toc_state'   s   
zDirectiveToc.reset_toc_statec                 C   sb   t |j_|j| j |jt |jj	dkr |j
dt d S |jj	dkr/|j
dt d S d S )Nhtmltheadingast)record_toc_headingr   tokenize_headingbefore_parse_hooksappendr#   before_render_hooksmd_toc_hookrendererNAMEregisterrender_html_theadingrender_ast_theadingr   r!   r	   r	   r
   register_plugin,   s   zDirectiveToc.register_pluginc                 C   sV   |  |d | | |jjdkr|jdt d S |jjdkr)|jdt d S d S )Nr   r$   r&   )register_directiver3   r-   r.   r/   render_html_tocrender_ast_tocr2   r	   r	   r
   __call__6   s   
zDirectiveToc.__call__N)r   )__name__
__module____qualname__r   r   r#   r3   r7   r	   r	   r	   r
   r      s    

r   c                 C   s<   dt t|d d  }|d || |f d| ||fdS )Ntoc_r    r   r%   )r   textr   )strlenr*   )r<   levelr   tidr	   r	   r
   r'   @   s   r'   c                    sx   | d}|s	|S | dd}tt| j||}|D ]}|d dkr9|d }|d p+|  fdd	|D }||d
< q|S )Nr    r   r   r   r   r   r   c                    s   g | ]
}|d   kr|qS )   r	   .0dr   r	   r
   
<listcomp>S   s    zmd_toc_hook.<locals>.<listcomp>r   )r   list_cleanup_headings_textinline)r!   tokensr   headingsdefault_depthtokr   itemsr	   r   r
   r,   G   s   
r,   c                 C   s   ddd | D ||dS )Nr   c                 S   s   g | ]}t |qS r	   )rF   rB   r	   r	   r
   rE   [   s    z"render_ast_toc.<locals>.<listcomp>)r   rM   r   r   r	   )rM   r   r   r	   r	   r
   r6   X   s
   r6   c                 C   s   d| ||dS )Nheading)r   childrenr?   idr	   )rO   r?   r@   r	   r	   r
   r1   a   s   r1   c                 C   s(   d}|r|d| d 7 }|t |  d S )Nz<section class="toc">
z<h1>z</h1>
z</section>
)render_toc_ul)rM   r   r   r$   r	   r	   r
   r5   h   s   r5   c                 C   s0   dt | }d| d | d |  d | d S )Nh<z id="z">z</z>
)r=   )r<   r?   r@   tagr	   r	   r
   r0   p   s   $r0   c                 C   sB   |  |i \}}| j|| |d}|sg S tt| j||S )a&  Extract TOC headings into list structure of::

        [
          ('toc_1', 'Introduction', 1),
          ('toc_2', 'Install', 2),
          ('toc_3', 'Upgrade', 2),
          ('toc_4', 'License', 1),
        ]

    :param md: Markdown Instance with TOC plugin.
    :param s: text string.
    r    )before_parser   r   r   rF   rG   rH   )r!   r"   r   rJ   r	   r	   r
   extract_toc_itemsu   s   
rV   c                 C   s6  | 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|d	 S )al  Render a <ul> table of content HTML. The param "toc" should
    be formatted into this structure::

        [
          (toc_id, text, level),
        ]

    For example::

        [
          ('toc-intro', 'Introduction', 1),
          ('toc-install', 'Install', 2),
          ('toc-upgrade', 'Upgrade', 2),
          ('toc-license', 'License', 1),
        ]
     z<ul>
z<a href="#{}">{}</a>z<li>z
</li>
<li>z

<ul>
<li>z</li>
</ul>
</li>
<li>z</li>
</ul>
r   )formatr*   popr>   )r   r"   levelskr<   r?   item
last_levelr	   r	   r
   rQ      sH   



rQ   c                 c   sP    |D ]"}|d }|  ||| j}ddd |D }|d ||d fV  qd S )Nr   rW   c                 s   s    | ]}t |V  qd S r   )_inline_token_text)rC   rL   r	   r	   r
   	<genexpr>   s    z)_cleanup_headings_text.<locals>.<genexpr>    rA   )_scanrulesjoin)rH   rM   r   r]   r<   rI   r	   r	   r
   rG      s   rG   c                 C   s<   | d }|dkr
dS t | dkr| d S |dv r| d S dS )Nra   inline_htmlrW   rA   r   >   linkimage)r>   )tokentok_typer	   r	   r
   r_      s   r_   N)__doc__baser   r   r'   r,   r6   r1   r5   r0   rV   rQ   rG   r_   r	   r	   r	   r
   <module>   s    .	: