U
    muf-  ã                   @   s*   d dl mZ d
dd„Zdd„ Zdd	„ ZdS )é   )Ú	striptagsé   Nc                    s0   ˆ dkrdd„ ‰ ‡ ‡‡fdd„}| j  |¡ dS )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
    Nc                 S   s   dt |d ƒ S )NZtoc_r   )Ústr)ÚtokenÚindex© r   ú//tmp/pip-unpacked-wheel-8p1ovdot/mistune/toc.pyÚ
heading_id   s    z add_toc_hook.<locals>.heading_idc                    s   g }|j D ]>}|d dkr
|d d }ˆ|  kr:ˆkr
n q
| |¡ q
g }t|ƒD ]*\}}ˆ ||ƒ|d d< | t| |ƒ¡ qV||jd< d S )NÚtypeÚheadingÚattrsÚlevelÚidÚ	toc_items)ÚtokensÚappendÚ	enumerateÚnormalize_toc_itemÚenv)ÚmdÚstateZheadingsÚtokr   r   Úi©r	   Ú	max_levelÚ	min_levelr   r   Útoc_hook   s    
zadd_toc_hook.<locals>.toc_hook)Zbefore_render_hooksr   )r   r   r   r	   r   r   r   r   Úadd_toc_hook   s    r   c                 C   sB   |d }|   |i ¡}|  |i ¡}t|ƒ}|d }|d |d |fS )NÚtextr   r   r   )ÚinlineZrendererr   )r   r   r   r   Úhtmlr   r   r   r   r   /   s    r   c                 C   s2  | sdS d}g }| D ]ò\}}}d  ||¡}|sF|d| 7 }| |¡ q||d kr`|d| 7 }q||d kr„|d| 7 }| |¡ q| ¡  |rð| ¡ }||krº|d| 7 }| |¡ qqŒ||kræ|d| 7 }| |¡ | |¡ qqŒ|d	7 }qŒ| |¡ |d| 7 }qt|ƒd
kr*|d	7 }| ¡  q|d	 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<ul>
z<a href="#{}">{}</a>z<li>éÿÿÿÿz
</li>
<li>z

<ul>
<li>z</li>
</ul>
</li>
<li>z</li>
</ul>
r   )Úformatr   ÚpopÚlen)ZtocÚsÚlevelsr   Úkr   ÚitemZ
last_levelr   r   r   Úrender_toc_ul8   sB    




r*   )r   r   N)Úutilr   r   r   r*   r   r   r   r   Ú<module>   s   
+	