U
    \Sh=                     @  s   d Z ddlmZ ddlmZ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 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dZee Z!G dd deZ"ddddddZ#dddddZ$dS )z)Toctree collector for sphinx.environment.    )annotations)AnySequenceTypeVarcast)nodes)ElementNode)addnodes)Sphinx)BuildEnvironment)TocTree)EnvironmentCollector)__)SphinxContentsFilter)loggingurl_reNc                   @  sz   e Zd ZdddddddZdddddd	d
dZddddddZddddddZdddddZdddddZdS )TocTreeCollectorr   r   strNone)appenvdocnamereturnc                 C  s   |j |d  |j|d  |j|d  |j|d  |j|d  |j| |j| t	|j
 D ]\}}|| |sl|j
|= qld 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+   X/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/environment/collectors/toctree.py	clear_doc   s    
zTocTreeCollector.clear_doczset[str])r   r   docnamesotherr   c                 C  s   |D ]j}|j | |j |< |j| |j|< ||jkrB|j| |j|< ||jkrX|j| ||jkr|j| q|j D ]&\}}|j|t	 
|t	|@  qzd S r   )r   r    r!   r"   addr$   r&   r'   
setdefaultsetupdate)r(   r   r   r.   r/   r   r)   r*   r+   r+   r,   merge_other'   s    


zTocTreeCollector.merge_otherznodes.document)r   doctreer   c                   sn    j jdgddddd fdd}|rH| 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      zElement | Sequence[Element]intznodes.bullet_list | None)nodedepthr   c                   s  g }i }| D ]h}t |tjr|d }t}|| | }t|d }tjd|d|d}	t	dd|	}
t
d|
}||d }|r||7 }|| qt |tjrtj|d d}||}|r||j7 }|| qt |tjr| D ]x}t |tjr qt |tjrH| }|| t j|  qt |tj r|D ]}t |tjsrqZ|d	dsqZ|jd
rqZ|d }|sqZt|}tjddtd|d	 d|d}	tj	dd|	dd}
t
d|
}|d ^ }}t|}|||d < |rd||krd|| }t |d tjrN|d | n|td| qZ|| qZ qq|rtjd| S d S )Nr   ids T)ZinternalZrefuri
anchornamer6   expr)r=   Z	_toc_nameZnocontentsentry)skip_section_numberZ
_toc_parts)r;   r;   )r;   )
isinstancer   sectionr   Z	walkaboutZget_entry_text_make_anchor_name	referencer
   compact_paragraph	list_itemappendonlychildrenr   findalltoctreecopyr   r   ZnotedescZdesc_signaturegetparentliteraltuplebullet_list)r8   r9   entriesZmemo_parentsZsectionnodetitlevisitorZnodetextr<   rC   paraitemZsub_itemZonlynodeZblisttoctreenodeZsig_noder:   entryparents_Z
root_entryr   	build_tocr   r5   Z
numentriesr+   r,   r\   ;   s    

    




    
z/TocTreeCollector.process_doc.<locals>.build_tocr;   N)r6   )r   r   r   r   rQ   r    )r(   r   r5   tocr+   r[   r,   process_doc6   s      _zTocTreeCollector.process_doc	list[str])r   r   r   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_docs)r   r   c                   s   g t  ji _ddddddd fdd	 d
ddd fddjD ]J}| |}|tjD ]$}|dd}|r~dg|| q~qZS )zAAssign a section number to each heading under a numbered toctree.Nr   dictr7   znodes.title | Noner   )r8   secnumsr9   	titlenoder   c                   s$  | j D ]}t|tjrBd  |||d |   d }qt|tjrb |||| d }qt|tjr |||| d }qt|tj	rd|krqd  d7  < t
tj|d }|dkrt}t||d < nd }d ||d < ||d< |r||d< d }qt|tjr|| qd S )Nr   r6   r>   r?   r<   Z	secnumber)rH   r@   r   rQ   rF   r   rE   r
   rG   rD   r   rC   r%   rP   rJ   )r8   rd   r9   re   subnoderC   number)	_walk_toc_walk_toctreenumstackr+   r,   rh      s8    
z:TocTreeCollector.assign_section_numbers.<locals>._walk_toczaddnodes.toctree)rW   r9   r   c                   s   |dkrd S | d D ]\}}t |s|dkr0q|krRtjtd|| ddd q|jkri }|j|< |  j| ||j	| |	|kr
| qd S )Nr   rR   r(   zA%s is already assigned section numbers (nested numbered toctree?)r]   secnum)locationtypesubtype)r   matchloggerwarningr   r   r   r0   titlesrM   rF   )rW   r9   _titlerefrd   )rh   assignedr   old_secnumbersrewrite_neededr+   r,   ri      s&    
  


z>TocTreeCollector.assign_section_numbers.<locals>._walk_toctreeZnumberedr   )N)	r2   r   r$   r0   get_doctreerI   r
   rJ   rM   )r(   r   r   r5   rW   r9   r+   )rh   ri   ru   r   rj   rv   rw   r,   r`      s       &


z'TocTreeCollector.assign_section_numbersc                   s  t jd jg }t j}i _i dddfddddd	d
fdddd	d	dfdddd	ddddfdd	ddd	dd 	fdddd	ddfdd jjr jjd j D ] \}}||	|kr|
| q|S )z?Assign a figure number to each figure under a numbered toctree.stdr	   z
str | None)r8   r   c                   s@    j  D ]0}|| }|jdkr.|| s.q
|r
|  S q
d S )Nry   )domainsvaluesZget_enumerable_node_typenameZget_numfig_title)r8   domainfigtyper   r+   r,   get_figtype   s    


z;TocTreeCollector.assign_figure_numbers.<locals>.get_figtyper   znodes.sectionztuple[int, ...])r   rA   r   c                   sD   d|d d  } j | i }||kr2||}n
|d}|pBdS )N#r:   r   r;   r+   )r   rM   )r   rA   r<   Z
secnumbersrk   r   r+   r,   get_section_number
  s    
zBTocTreeCollector.assign_figure_numbers.<locals>.get_section_number)r~   rk   r   c                   s>    | i }|d  jj }||dd ||< ||| f S )Nr   r6   )r1   configZnumfig_secnum_depthrM   )r~   rk   counter)r   fignum_counterr+   r,   get_next_fignumber  s    zBTocTreeCollector.assign_figure_numbers.<locals>.get_next_fignumberr   r   )r   rk   r~   fignoder   c                   s>    j | i   j |  |i }|d d }||||< d S )Nr:   r   )r   r1   )r   rk   r~   r   Z
fignumbersZ	figure_id)r   r   r+   r,   register_fignumber  s    zBTocTreeCollector.assign_figure_numbers.<locals>.register_fignumber)r   r5   rk   r   c                   s   |j D ]}t|tjr@| |}|r2| || q| || qt|tjr|d D ]0\}}t|sT|dkrpqT|krzqT || qTqt|tjr|}|r|d r| ||| | || qd S )NrR   r(   r:   )	rH   r@   r   rA   r
   rJ   r   ro   r   )r   r5   rk   rf   Znext_secnumrs   Z
subdocnamer~   )	_walk_doc_walk_doctreegenerated_docnamesr   r   r   r+   r,   r   #  s$    

z=TocTreeCollector.assign_figure_numbers.<locals>._walk_doctree)r   rk   r   c                   s,   | kr( |  | } | || d S r   )r0   rx   )r   rk   r5   )r   ru   r   r+   r,   r   =  s    

z9TocTreeCollector.assign_figure_numbers.<locals>._walk_docr+   )	frozensetrz   Z_virtual_doc_namesr2   r   r   ZnumfigZroot_docr'   rM   rF   )r(   r   rw   Zold_fignumbersr   Zfignumsr+   )
r   r   ru   r   r   r   r   r   r   r   r,   ra      s$    
"
z&TocTreeCollector.assign_figure_numbersN)	__name__
__module____qualname__r-   r4   r^   rb   r`   ra   r+   r+   r+   r,   r      s   kNr   r_   z	list[int]r   )r:   num_entriesr   c                 C  s.   |d sd}nd| d  }|d  d7  < |S )Nr   r;   r   r6   r+   )r:   r   r<   r+   r+   r,   rB   L  s
    rB   r   zdict[str, Any])r   r   c                 C  s   |  t ddddS )NbuiltinT)versionZparallel_read_safeZparallel_write_safe)Zadd_env_collectorr   )r   r+   r+   r,   setupW  s
    
r   N)%__doc__
__future__r   typingr   r   r   r   Zdocutilsr   Zdocutils.nodesr   r	   Zsphinxr
   Zsphinx.applicationr   Zsphinx.environmentr   Z#sphinx.environment.adapters.toctreer   Zsphinx.environment.collectorsr   Zsphinx.localer   Zsphinx.transformsr   Zsphinx.utilr   r   r   	getLoggerr   rp   r   rB   r   r+   r+   r+   r,   <module>   s&   
  6