o
    NiD                     @  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
 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dlmZmZ erfd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" edZ#e$e%Z&G dd deZ'd"ddZ(d#dd Z)d!S )$z)Toctree collector for sphinx.environment.    )annotations)TYPE_CHECKINGTypeVarcast)nodes)addnodes)StandardDomain)note_toctree)EnvironmentCollector)__)SphinxContentsFilter)loggingurl_re)Sequence)ElementNode)Sphinx)BuildEnvironment)ExtensionMetadataNc                   @  sH   e Zd Zdd	d
ZdddZdddZdddZd ddZd ddZdS )!TocTreeCollectorappr   envr   docnamestrreturnNonec                 C  s   |j |d  |j|d  |j|d  |j|d  |j|d  |j| |j| t	|j
 D ]\}}|| |sE|j
|= q6d S N)tocspoptoc_secnumberstoc_fignumberstoc_num_entriestoctree_includesglob_toctreesdiscardnumbered_toctreeslistfiles_to_rebuilditems)selfr   r   r   subfnfnset r-   Y/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/environment/collectors/toctree.py	clear_doc    s   
zTocTreeCollector.clear_docdocnamesset[str]otherc                 C  s   |D ]5}|j | |j |< |j| |j|< ||jv r!|j| |j|< ||jv r,|j| ||jv r7|j| q|j D ]\}}|j|t	 
|t	|@  q=d S r   )r   r"   r#   r$   addr&   r(   r)   
setdefaultsetupdate)r*   r   r   r0   r2   r   r+   r,   r-   r-   r.   merge_other.   s   


 zTocTreeCollector.merge_otherdoctreenodes.documentc                   sh    j jdg	dd fd	d
}|r!| j j< n	td j j< d  j j< dS )z;Build a TOC from the doctree and store it in the inventory.r      nodeElement | Sequence[Element]depthintr   nodes.bullet_list | Nonec                   s  g }| D ]>}t |tjrT|d }t}|| | }t|d }tjddg|R d|d}t	dd|}	t
d|	}
||d }|rN|
|7 }
||
 qt |tjrttj|d d}||}|rs||j7 }|| qt |tjrCi }| D ]}t |tjrqt |tjr| }
||
 t j| qt |tjrBd }|D ]}t |tjsq|d	dsq|jd
rq|d }|sqt|}tjddtd|d	 d|d}tj	dd|dd}	t
d|	}|j}||vr||kr|j}||vr||ks||v r,|| }t |d tjr"|d | q|td| q||ks3J || q|d urB|||< qq|rPtjdg|R  S d S )Nr   ids T)internalrefuri
anchornamer:   expr)rE   	_toc_namezno-contents-entry)skip_section_number)
isinstancer   sectionr   	walkaboutget_entry_text_make_anchor_name	referencer   compact_paragraph	list_itemappendonlychildrenr   findalltoctreecopyr	   r   descdesc_signaturegetparentliteralbullet_list)r;   r=   entriessectionnodetitlevisitornodetextrD   rN   paraitemsub_itemonlynodeblistmemo_parentstoctreenodeentrysig_noder@   rZ   
root_entryr   	build_tocr   r8   
numentriesr-   r.   rm   G   s   








z/TocTreeCollector.process_doc.<locals>.build_tocrA   N)r:   )r;   r<   r=   r>   r   r?   )r   r   r   r   r\   r"   )r*   r   r8   tocr-   rl   r.   process_docB   s   vzTocTreeCollector.process_doc	list[str]c                 C  s   |  || | S r   )assign_section_numbersassign_figure_numbers)r*   r   r   r-   r-   r.   get_updated_docs   s   z!TocTreeCollector.get_updated_docsc                   s   g t  ji _	dd fdd d fddjD ]%}| |}|tjD ]}|dd}|rHdg|| q6q$S )zAAssign a section number to each heading under a numbered toctree.Nr;   r   secnumsdict[str, tuple[int, ...]]r=   r>   	titlenodenodes.title | Noner   r   c                   s  | j D ]}t|tjr d  |||d |   d }qt|tjr0 |||| d }qt|tjr@ |||| d }qt|tj	rd|v rKqd  d7  < t
tj|d }|dkrl }t||d < nd }d||d < ||d< |r||d< d }qt|tjr|| qd S )Nr   r:   rG   rH   rD   r-   	secnumber)rS   rI   r   r\   rQ   r   rP   r   rR   rO   r   rN   rV   tuplerU   )r;   ru   r=   rw   subnoderN   number)	_walk_toc_walk_toctreenumstackr-   r.   r}      s>   


z:TocTreeCollector.assign_section_numbers.<locals>._walk_tocrh   addnodes.toctreec                   s   |dkrd S | d D ]J\}}t |s|dkrq
|v r)tjtd|| ddd q
|jv rTi }|j|< |  j| ||j	| |	|krT
| q
d S )Nr   r]   r*   zA%s is already assigned section numbers (nested numbered toctree?)ro   secnum)locationtypesubtype)r   matchloggerwarningr   r   r    r3   titlesrY   rQ   )rh   r=   _titlerefru   )r}   assignedr   old_secnumbersrewrite_neededr-   r.   r~      s0   




z>TocTreeCollector.assign_section_numbers.<locals>._walk_toctreenumberedr   r   )
r;   r   ru   rv   r=   r>   rw   rx   r   r   )rh   r   r=   r>   r   r   )	r5   r    r&   r3   get_doctreerT   r   rU   rY   )r*   r   r   r8   rh   r=   r-   )r}   r~   r   r   r   r   r   r.   rr      s$   )



z'TocTreeCollector.assign_section_numbersc                   s   t jjjg }t j}i _i dfdddfddd fddd!fdd	d" 	fddd#fdd jjrh jjd j	 D ]\}}||
|krg|| qW|S )$z?Assign a figure number to each figure under a numbered toctree.r;   r   r   
str | Nonec                   s@    j  D ]}|| }t|tr|| sq|r|  S qd S r   )domainssortedget_enumerable_node_typerI   r   get_numfig_title)r;   domainfigtyper   r-   r.   get_figtype*  s   
z;TocTreeCollector.assign_figure_numbers.<locals>.get_figtyper   r   rJ   nodes.sectiontuple[int, ...]c                   sD   d|d d  } j | i }||v r||}n|d}|p!dS )N#r@   r   rA   r-   )r    rY   )r   rJ   rD   
secnumbersr   r   r-   r.   get_section_number8  s   
zBTocTreeCollector.assign_figure_numbers.<locals>.get_section_numberr   r   c                   sB    | i }|d  jj }||dd ||< g ||| R S )Nr   r:   )r4   confignumfig_secnum_depthrY   )r   r   counter)r   fignum_counterr-   r.   get_next_fignumberB  s   zBTocTreeCollector.assign_figure_numbers.<locals>.get_next_fignumberfignoder   r   c                   s>    j | i   j |  |i }|d d }||||< d S )Nr@   r   )r!   r4   )r   r   r   r   
fignumbers	figure_id)r   r   r-   r.   register_fignumberK  s   zBTocTreeCollector.assign_figure_numbers.<locals>.register_fignumberr8   c                   s   |j D ]^}t|tjr | |}|r| || q| || qt|tjrD|d D ]\}}t|s7|dkr8q*|v r=q* || q*qt|tjra|}|r[|d r[| ||| | || qd S )Nr]   r*   r@   )	rS   rI   r   rJ   r   rU   r   r   r   )r   r8   r   r{   next_secnumr   
subdocnamer   )	_walk_doc_walk_doctreegenerated_docnamesr   r   r   r-   r.   r   T  s*   

	z=TocTreeCollector.assign_figure_numbers.<locals>._walk_doctreec                   s0   | vr |  | } | || d S d S r   )r3   r   )r   r   r8   )r   r   r   r-   r.   r   p  s
   

z9TocTreeCollector.assign_figure_numbers.<locals>._walk_docr-   N)r;   r   r   r   )r   r   rJ   r   r   r   )r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )r   r   r8   r   r   r   r   r   )r   r   r   r   r   r   )	frozensetr   standard_domain_virtual_doc_namesr5   r!   r   numfigroot_docr)   rY   rQ   )r*   r   r   old_fignumbersr   fignumsr-   )
r   r   r   r   r   r   r   r   r   r   r.   rs     s&   
		
z&TocTreeCollector.assign_figure_numbersN)r   r   r   r   r   r   r   r   )
r   r   r   r   r0   r1   r2   r   r   r   )r   r   r8   r9   r   r   )r   r   r   r   r   rq   )r   r   r   rq   )	__name__
__module____qualname__r/   r7   rp   rt   rr   rs   r-   r-   r-   r.   r      s    


 

Xr   r@   rq   num_entries	list[int]r   r   c                 C  s.   |d sd}nd| d  }|d  d7  < |S )Nr   rA   r   r:   r-   )r@   r   rD   r-   r-   r.   rM     s
   rM   r   r   r   c                 C  s   |  t ddddS )NbuiltinT)versionparallel_read_safeparallel_write_safe)add_env_collectorr   )r   r-   r-   r.   setup  s
   
r   N)r@   rq   r   r   r   r   )r   r   r   r   )*__doc__
__future__r   typingr   r   r   docutilsr   sphinxr   sphinx.domains.stdr   #sphinx.environment.adapters.toctreer	   sphinx.environment.collectorsr
   sphinx.localer   sphinx.transformsr   sphinx.utilr   r   collections.abcr   docutils.nodesr   r   sphinx.applicationr   sphinx.environmentr   sphinx.util.typingr   r   	getLoggerr   r   r   rM   r   r-   r-   r-   r.   <module>   s0    
  
b