o
    i                     @   sd   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 dZ
G dd deZd	d
 Zdd ZdS )    )path)nodes)EnvironmentCollector)addnodes)relative_uri)r      r   c                       s8   e Zd ZdZ fddZdd Zdd Zdd	 Z  ZS )
SimpleTocTreeCollectora  A TocTree collector that saves toctrees in a simple dict.

    sphinx.environment.collectors.toctree.TocTreeCollector saves
    TocTree as docutils.nodes which are hard to work with...

    Executed once per document/page, at sphinx's "read" phase.

    Saved data example:
    >>> {
    >>>  'sections': [{'title': 'Demo', 'href': '#demo'}],
    >>>  'toctrees': [<toctree: >]
    >>> }
    c                    s(   t  | t|jdsi |j_d S d S )Ntoc_dict)superenablehasattrenvr	   )selfapp	__class__ O/home/ubuntu/.local/lib/python3.10/site-packages/sphinx_press_theme/__init__.pyr      s   zSimpleTocTreeCollector.enablec                 C   s   |j |d  d S N)r	   pop)r   r   r   docnamer   r   r   	clear_doc   s   z SimpleTocTreeCollector.clear_docc                 C   s   |D ]
}|j | |j |< qd S r   )r	   )r   r   r   docnamesotherr   r   r   r   merge_other"   s   z"SimpleTocTreeCollector.merge_otherc                 C   s   |j j}dd |D }t|dkrdd |d D }|r|}g }|D ]}||d  d|d d d q"||tjd	|j j	|< d S )
Nc                 S      g | ]
}t |tjr|qS r   
isinstancer   section.0sr   r   r   
<listcomp>,   s    z6SimpleTocTreeCollector.process_doc.<locals>.<listcomp>   c                 S   r   r   r   r   r   r   r   r"   0   s    

r   z#{}ids)titlehref)sectionstoctrees)
r   r   lenappendastextformattraverser   toctreer	   )r   r   doctreer   section_nodessection2_nodesr'   noder   r   r   process_doc'   s   


z"SimpleTocTreeCollector.process_doc)	__name__
__module____qualname____doc__r   r   r   r3   __classcell__r   r   r   r   r      s    r   c              
   C   s  | j | j jj}g }|tjD ]}t|d dkr=|d d d }t| j j	| d }	|	r=t|	dks9J d|	d }d}
g }|d D ]/\}}|sS| j j
|  }d|v }||k}g }|rid}
| j j	| d	 }||||||d
 qE|d }|d }d}|jj}|d r|d d }|s|d d }| j|ddd }| j|ddd }dt|||}|||||
|d q||d< dS )a>  Create toctree_data, used to build sidebar navigation

    :param pagename: The name of the page
    :type pagename: str
    :param templatename: The name of the templatename
    :type templatename: str
    :param context: The context
    :type context: dict
    :param doctree: A doctree
    :type doctree: docutils.nodes.document

    Add to `toctree_data` to `context` that will be available on templates.
    Although data is "global", it is called once per page because current
    page is "highlighted", and some part of TOC might be collapsed.

    :return: None
    entriesr#   r   r(   z<Press: Not supported more then one toctree on nested toctreeFz://Tr'   )namer%   currentchildrenext_resourceparentcaption r$   names#z{}#{})r   r&   r%   r;   r9   toctree_dataN)r   get_doctreeconfig
master_docr-   r   r.   r)   listr	   titlesr+   r*   r>   builderget_target_urirsplitr,   r   )r   pagenametemplatenamecontextr/   masterrestreeentry_docnamer(   current0r9   r%   r:   r=   current1r<   toc_docname	anchor_idtoc_sectionbaseuritoc_uritoc_hrefr   r   r   add_toctree_dataC   s\   

r[   c                 C   s2   |  t | dt | dttt d S )Nzhtml-page-contextpress)	add_env_collectorr   connectr[   add_html_themer   abspathdirname__file__)r   r   r   r   setup   s   
rc   N)osr   docutilsr   sphinx.environment.collectorsr   sphinxr   sphinx.util.osutilr   __version__r   r[   rc   r   r   r   r   <module>   s    8d