B
    `                 @   s   d Z ddlmZ ddlZddlZddlmZmZ ddlm	Z	m
Z
 ddlmZ ddlmZ eeZdd	d	d
ZdZedZdd ZG dd deZdd Zdd Zdd ZdS )z]
toc
===================================

This plugin generates tocs for pages and articles.
    )unicode_literalsN)BeautifulSoupComment)contentssignals)read_settings)slugifyz^h[1-6]true)TOC_HEADERSTOC_RUNTOC_INCLUDE_TITLEZTOCz^(.*)_([0-9]+)$c             C   s\   xL| |ks| sLt | }|r>d|dt|dd f } qd| df } qW ||  | S )z@ Ensure id is unique in set of ids. Append '_1', '_2'... if not z%s_%d      )
IDCOUNT_REmatchgroupintadd)ididsm r   >/var/www/html/pharmacie-a-vendre.fr/plugins/pelican-toc/toc.pyunique#   s    
"
r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )HtmlTreeNodec             C   s(   g | _ || _|| _|| _|| _|| _d S )N)childrenparentheaderlevelr   include_title)selfr   r   r   r   r   r   r   r   __init__1   s    zHtmlTreeNode.__init__c       	      C   s   |j }|j}|jd}|s8|jdd dd}d|}|sTt }|d }t||}t||}||jd< | j	|k rt
| |||| j}|  j|g7  _||fS | j	|krt
| j|||| j}| j j|g7  _||fS | j	|kr| j||S d S )Nr   c             S   s   t | t S )N)
isinstancer   )tr   r   r   <lambda>@       z"HtmlTreeNode.add.<locals>.<lambda>T)text	recursive SLUG_REGEX_SUBSTITUTIONS)namestringattrsgetfind_alljoinr   r   r   r   r   r   r   r   r   )	r    
new_headerr   Z	new_levelZ
new_stringZnew_idsettingssubsnew_noder   r   r   r   9   s4    







zHtmlTreeNode.addc             C   s   d}| j s| jr d| j| j}| jrF|ddt| j j| j 7 }| j sR| jr\d|}| j s~| jrtd|}n
d|}|S )Nr(   z3<a class='toc-href' href='#{0}' title='{1}'>{1}</a>z<ul>{}</ul>z{}z<li>{}</li>z<div id='toc'><ul>{}</ul></div>z<div id='toc'>{}</div>)r   r   formatr   r   r   len)r    retr   r   r   __str__X   s    


zHtmlTreeNode.__str__N)__name__
__module____qualname__r!   r   r7   r   r   r   r   r   /   s   r   c             C   s0   ddl m} dd }||}| r,|| j| _d S )Nr   )DEFAULT_CONFIGc             S   s*   t  }t| kr|| t  || t< | S )N)TOC_DEFAULTcopyTOC_KEYupdate)r1   tempr   r   r   update_settingss   s
    z,init_default_config.<locals>.update_settings)pelican.settingsr;   r1   )pelicanr;   rA   r   r   r   init_default_configp   s
    rD   c          
   C   sV  t | tjrd S | jd| jt d }|dks4d S | jd| jt d dk}t }| jdd}td |dd	| }}t	| j
d
}d}y"t| jd| jt d }	W n> tjk
r }
 ztd| jt d  |
W d d }
~
X Y nX x0||	D ]"}d}|||\}}|| qW |rDd|}t	|d
}|jdd| _|jdd| _
d S )NZtoc_runr   r	   Ztoc_include_titler   titleTitleZh0r(   zhtml.parserFZtoc_headersr
   z%TOC_HEADERS '%s' is not a valid re
%sTz{}html)	formatter)r"   r   Staticmetadatar-   r1   r>   setr   r   _contentrecompileerrorloggerZfindAllr   replaceWithr4   decodetoc)contentZ_toc_runZ_toc_include_titleZall_idsrE   treenodeZsoupZsettocZ	header_reer   r0   Ztree_stringZ	tree_soupr   r   r   generate_toc   s>    


rX   c               C   s   t jt t jt d S )N)r   initializedconnectrD   content_object_initrX   r   r   r   r   register   s    r\   )__doc__
__future__r   loggingrM   Zbs4r   r   rC   r   r   rB   r   pelican.utilsr   	getLoggerr8   rP   r<   r>   rN   r   r   objectr   rD   rX   r\   r   r   r   r   <module>   s$   

A(