o
    Ni6K                     @  s  d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
mZ ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZmZ er^ddlmZmZ ddlmZ ddlmZ ddlm Z  e!e"Z#d]ddZ$d^ddZ%				d_d`d)d*Z&dddddd+dad.d/Z'	dbdcd9d:Z(ddd>d?Z)dedAdBZ*dfdEdFZ+dedGdHZ,dgdKdLZ-dhdPdQZ.edRe
dSZ/didTdUZ0djdXdYZ1G dZd[ d[Z2d\S )kz'Toctree adapter for sphinx.environment.    )annotations)TYPE_CHECKINGAnyTypeVar)nodes)ElementNode)addnodes)__)loggingurl_re)Matcher)_only_node_keep_childrenclean_astext)IterableSet)Builder)BuildEnvironment)Tagsenvr   docnamestrtoctreenodeaddnodes.toctreereturnNonec                 C  sj   |d r
| j | |dr| j| |d }|D ]}| j|t | q| j|g | dS )zeNote a TOC tree directive in a document and gather information about
    file relations from it.
    globnumberedincludefilesN)	glob_toctreesaddgetnumbered_toctreesfiles_to_rebuild
setdefaultsettoctree_includesextend)r   r   r   include_filesinclude_file r*   W/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/environment/adapters/toctree.pynote_toctree   s   
r,   tagsr   r   c                 C  sn   | j | dd}zt| j| d|d|}W n ty#   t  Y S w |tjD ]
}|d p1d|d< q*|S )zGet the (local) table of contents for a document.

    Note that this is only the sections within the document.
    For a ToC tree that shows the document's place in the
    ToC structure, use `get_toctree_for`.
    tocdepthr      F
anchorname#refuri)	metadatar!   _toctree_copytocsKeyErrorr   	paragraphfindall	reference)r   r   r-   r.   tocnoder*   r*   r+   document_toc-   s   r<   FTbuilderr   collapseboolincludehiddenmaxdepthinttitles_onlyElement | Nonec                   sh    fddj tjD }dd |D }|sdS |d }	|dd D ]}
|	|
j q)|	S )zxGet the global ToC tree at a given document.

    This gives the global ToC, with all ancestors and their siblings.
    c                 3  s.    | ]}t  |d td	V  qdS )TprunerA   rC   r>   r@   N)_resolve_toctreerB   ).0toctree_noder=   r>   r   r   r@   rA   rC   r*   r+   	<genexpr>N   s    
z)global_toctree_for_doc.<locals>.<genexpr>c                 S  s   g | ]}|d ur|qS Nr*   )rH   toctreer*   r*   r+   
<listcomp>\   s    z*global_toctree_for_doc.<locals>.<listcomp>Nr      )master_doctreer8   r	   rM   r'   children)r   r   r=   r>   r@   rA   rC   resolvedtoctreesresultrM   r*   rJ   r+   global_toctree_for_docA   s   rU   rE   rM   rF   c                C  s  | ddr
|s
dS t| j|}	t| jj}
t| jj}|p#| dd}|s.| ddr.d}|s8| ddr8d}t| |||||j|	|
||g }|sKdS t	
d	d	}|j d
 }rtj|d	gt|gR  }|j|_|j|_|d |_t|dr|j|_|`|| || d|d< t|d| t|d|r|nd||j}t|d tjrt|d dkrdS |tjD ]}t|d du r|||d }||d  |d< q|S )a  Resolve a *toctree* node into individual bullet lists with titles
    as items, returning None (if no containing titles are found) or
    a new node.

    If *prune* is True, the tree is pruned to *maxdepth*, or if that is 0,
    to the value of the *maxdepth* option on the *toctree* node.
    If *titles_only* is True, only toplevel document titles will be in the
    resulting tree.
    If *collapse* is True, all branches not containing docname will
    be collapsed.
    hiddenFNrA   
titlesonlyTr@    caption
rawcaptionuidrM   rO   r   r2   r0   ) r!   _get_toctree_ancestorsr&   r   configinclude_patternsexclude_patterns_entries_from_toctreer-   r	   compact_paragraph
attributesr   titleTextlinesource	rawsourcehasattrr\   appendr'   _toctree_add_classesr4   
isinstancer   lenr8   r9   r   matchget_relative_uri)r   r   r=   rM   rF   rA   rC   r>   r@   toctree_ancestorsincludedexcluded
tocentriesnewnoderZ   caption_noderefnoderel_urir*   r*   r+   rG   f   sf   



rG   rp   Set[str]rq   r   rr   parents	list[str]subtreelist[Element]c                 C  sL  g }|	d D ]\}}zt ||| |||||||	|
\}}W n	 ty%   Y qw |j}|rN|D ] }t|dkrMt|tj }rH||d dd< q-|d q-t|tjD ]:}|	ddra|saqVt
t| ||||||||||g|
dd|j|d dD ]\}}|j|| q~|j| qV|| q|st }||7 }|gS |S )	z&Return TOC entries for a toctree node.entriesrO   NrV   FT)r{   )start)_toctree_entryLookupErrorrQ   rm   listr8   r	   rM   popr!   	enumeratera   parentindexinsertremover'   r   bullet_list)r   rF   rC   r>   r@   r-   rp   rq   rr   r   ry   r{   r}   rd   refr:   refdocrQ   	top_levelsubtreessub_toc_nodeientryretr*   r*   r+   ra      sn   
ra   rd   r   tuple[Element, str]c              	   C  sJ  ddl m} zpd}t|rt| |}nJ|dkr"t| |	d |j}n<||jv r-t| |}n1||
v rGt	j
td|d|
|dd	d
 d}t|t| ||j| dd|j| ||||\}}|jsrt	j
td||	ddd
 W ||fS W ||fS  ty   t||d}||rtd}n||std}ntd}t	j
|||	d  w )Nr   StandardDomainrY   selfr   z8circular toctree references detected, ignoring: %s <- %sz <- r:   circular)locationtypesubtypezcircular referencer.   z^toctree contains reference to document %r that doesn't have a title: no link will be generatedno_titleFz2toctree contains reference to excluded document %rz6toctree contains reference to non-included document %rz5toctree contains reference to nonexisting document %r)r   )sphinx.domains.stdr   r   rn   _toctree_url_entry_toctree_self_entrytitles_virtual_doc_names_toctree_generated_entryloggerwarningr
   joinr   _toctree_standard_entryr3   r!   r5   rQ   r6   r   doc2path)rd   r   r   rF   r>   r-   rp   rq   rr   r   ry   r   r   r:   msgref_pathmessager*   r*   r+   r   $  sj   



r   nodes.bullet_listc                 C  s\   | d u r|} t jddgt | gR d|dd}tdd|}t d|}t d|}|S )NrY   Finternalr2   r0   )r   r9   re   r	   rb   	list_itemr   )rd   r   r9   paraitemr:   r*   r*   r+   r   n  s   
r   r   dict[str, nodes.title]c                 C  s`   | st || } tjddgt| gR d|dd}tdd|}td|}td|}|S )NrY   Tr   )r   r   r9   re   r	   rb   r   r   )rd   r   r   r9   r   r   r:   r*   r*   r+   r   z  s   
r   c           	      C  s`   ddl m} |j| \}}| s|} tjd| d|dd}tdd|}td|}td|}|S )Nr   r   rY   Tr   )	r   r   r   r   r9   r	   rb   r   r   )	rd   r   r   r   sectionnamer9   r   r   r:   r*   r*   r+   r     s   r   r:   tuple[nodes.bullet_list, str]c                 C  s   |}||v r|r|dkr|  }nt|d|||}| rH|jrHt|jdkrH|jd }	|	tjD ]}
|
d |krG|
d sGt| g|
jd d < q0||fS )Nr   r/   rO   r2   r0   )deepcopyr4   rQ   rm   r8   r   r9   re   )rd   r   rA   r:   rp   rF   r>   r-   r   childrv   r*   r*   r+   r     s   


r   r;   r   depthc                 C  s   | j D ]b}t|tjtjB r!|d d|d   t||| qt|tjr0t||d | qt|tj	re|d |kre|d sP|}|rP|d d |j
}|sD|j
j
drZ dS |red	|d< |j
}|s\qdS )
z7Add 'toctree-l%d' and 'current' classes to the toctree.classesz	toctree-lrO   r2   r0   current	iscurrentNT)rQ   rl   r	   rb   r   r   rj   rk   r   r9   r   r!   )r;   r   r   subnode
branchnoder*   r*   r+   rk     s,   
rk   ET)boundc              
   C  sJ  |dkp||ks|dko| pd| v }|   }| jD ]}t|tjtjB r1|t||||| qt|tj	rG|rF|t||d ||| qt|tj
rU||   qt|tjrrt||rq|jD ]}|t||||| qcqt|tjtjB r|  }	dd |jD |	_|	jD ]}|	|_q||	 qd|jjd}
t|
|S )z6Utility: Cut and deep-copy a TOC at a specified depth.rO   r   r   c                 S  s   g | ]}|  qS r*   )r   )rH   r   r*   r*   r+   rN     s    z!_toctree_copy.<locals>.<listcomp>zUnexpected node type !)copyrQ   rl   r	   rb   r   r   rj   r4   r   rM   onlyr   r9   rd   r   	__class____name__
ValueError)r;   r   rA   r>   r-   keep_bullet_list_sub_nodesr   r   r   sub_node_copyr   r*   r*   r+   r4     sF   


	
r4   r&   dict[str, list[str]]c                 C  sn   i }|   D ]\}}|t||O }qg }|}||v r0||vr0|| || }||v r0||vst| S rL   )itemsdictfromkeysrj   keys)r&   r   r   prQ   	ancestorsdr*   r*   r+   r]     s   
r]   c                   @  sT   e Zd Zd(ddZd)ddZ					d*d+ddZd,ddZd-d!d"Zd.d%d&Zd'S )/TocTreer   r   r   r   c                 C  s
   || _ d S rL   )r   )r   r   r*   r*   r+   __init__  s   
zTocTree.__init__r   r   r   r   c                 C  s   t | j|| d S rL   )r,   r   )r   r   r   r*   r*   r+   note     zTocTree.noteTr   Fr=   r   rM   rF   r?   rA   rB   rC   r>   r@   rD   c	           	      C  s   t | j||||||||d	S )NrE   )rG   r   )	r   r   r=   rM   rF   rA   rC   r>   r@   r*   r*   r+   resolve  s   zTocTree.resolverz   c                 C  s   g t | jj|S rL   )r]   r   r&   )r   r   r*   r*   r+   get_toctree_ancestors3  r   zTocTree.get_toctree_ancestorsr   c                 C  s   t | j|| jjjjS rL   )r<   r   appr=   r-   )r   r   r=   r*   r*   r+   get_toc_for6  s   zTocTree.get_toc_forkwargsr   c                 K  s   t | j||fd|i|S )Nr>   )rU   r   )r   r   r=   r>   r   r*   r*   r+   get_toctree_for9  s   zTocTree.get_toctree_forN)r   r   r   r   )r   r   r   r   r   r   )Tr   FFF)r   r   r=   r   rM   r   rF   r?   rA   rB   rC   r?   r>   r?   r@   r?   r   rD   )r   r   r   rz   )r   r   r=   r   r   r   )
r   r   r=   r   r>   r?   r   r   r   rD   )	r   
__module____qualname__r   r   r   r   r   r   r*   r*   r*   r+   r     s    



r   N)r   r   r   r   r   r   r   r   )r   r   r   r   r-   r   r   r   )FTr   F)r   r   r   r   r=   r   r>   r?   r@   r?   rA   rB   rC   r?   r   rD   )r   r   r   r   r=   r   rM   r   rF   r?   rA   rB   rC   r?   r>   r?   r@   r?   r   rD   )F)r   r   rF   r?   rC   r?   r>   r?   r@   r?   r-   r   rp   rx   rq   r   rr   r   r   r   ry   rz   r{   r?   r   r|   )rd   r   r   r   r   r   rF   r?   r>   r?   r-   r   rp   rx   rq   r   rr   r   r   r   ry   rz   r   r   )rd   r   r   r   r   r   )rd   r   r   r   r   r   r   r   )rd   r   r   r   rA   rB   r:   r   rp   rx   rF   r?   r>   r?   r-   r   r   r   )r;   r   r   rB   r   r   r   r   )r;   r   r   rB   rA   rB   r>   r?   r-   r   r   r   )r&   r   r   r   r   rx   )3__doc__
__future__r   typingr   r   r   docutilsr   docutils.nodesr   r   sphinxr	   sphinx.localer
   sphinx.utilr   r   sphinx.util.matchingr   sphinx.util.nodesr   r   collections.abcr   r   sphinx.buildersr   sphinx.environmentr   sphinx.util.tagsr   	getLoggerr   r   r,   r<   rU   rG   ra   r   r   r   r   r   rk   r   r4   r]   r   r*   r*   r*   r+   <module>   sR    


+t
V
J





1