
    FeT>                       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 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rddlmZ ddlmZmZ ddlmZ ddlmZ  ed      Z  ejB                  e"      Z# G d de      Z$ddZ%ddZ&y)z)Toctree collector for sphinx.environment.    )annotations)TYPE_CHECKINGAnyTypeVarcast)nodes)addnodes)note_toctree)EnvironmentCollector)__)SphinxContentsFilter)loggingurl_re)Sequence)ElementNode)Sphinx)BuildEnvironmentNc                  D    e Zd ZddZ	 	 	 	 d	dZd
dZddZddZddZy)TocTreeCollectorc                    |j                   j                  |d        |j                  j                  |d        |j                  j                  |d        |j                  j                  |d        |j
                  j                  |d        |j                  j                  |       |j                  j                  |       t        |j                  j                               D ]&  \  }}|j                  |       |r|j                  |= ( y N)tocspoptoc_secnumberstoc_fignumberstoc_num_entriestoctree_includesglob_toctreesdiscardnumbered_toctreeslistfiles_to_rebuilditems)selfappenvdocnamesubfnfnsets         G/usr/lib/python3/dist-packages/sphinx/environment/collectors/toctree.py	clear_doczTocTreeCollector.clear_doc   s    Wd#w-w-.  $/!!'*%%g. !5!5!;!;!=> 	0LE5MM'"((/	0    c                >   |D ]  }|j                   |   |j                   |<   |j                  |   |j                  |<   ||j                  v r|j                  |   |j                  |<   ||j                  v r|j                  j	                  |       ||j
                  v s|j
                  j	                  |        |j                  j                         D ]D  \  }}|j                  j                  |t                     j                  |t        |      z         F y r   )r   r   r   r    addr"   r$   r%   
setdefaultsetupdate)r&   r'   r(   docnamesotherr)   r*   r+   s           r,   merge_otherzTocTreeCollector.merge_other,   s    	3G %

7 3CHHW+0+@+@+IC(%000050F0Fw0O$$W-%---!!%%g.%111%%))'2	3 "2288: 	XLE5  ++E359@@XAVW	Xr.   c                :   j                   j                  dg	 d	 	 	 	 	 dfd       }|r|j                   j                  <   n,t        j                  d      j                   j                  <   d   j                   j
                  <   y)z;Build a TOC from the doctree and store it in the inventory.r   c                   g }i }| D ]A  }t        |t        j                        r|d   }t              }|j	                  |       |j                         }t        |d         }t        j                  ddg|d|d}	t        j                  dd|	      }
t        j                  d|
      } ||dz         }|r||z  }|j                  |       t        |t        j                        rHt        j                  |d         } ||      }|s||j                  z  }|j                  |       .t        |t        j                        sJ|j                         D ]  }t        |t        j                        rt        |t        j                         r9|j#                         }|j                  |       t%        j&                  |       rt        |t        j(                        s|D ]R  }t        |t        j*                        s|j-                  d	d      s2|j.                  j-                  d
      rN|d   }|sVt        |      }t        j                  ddt        j0                  d|d	         d|      }	t        j                  dd|	d      }
t        j                  d|
      }|d   ^ }}t3        |      }|||d   <   |rb||v r^||   }t        |d   t        j4                        r|d   j                  |       n%|j                  t        j4                  d|             B|j                  |       U  D |rt        j4                  dg| S y )Nr   ids T)internalrefuri
anchorname   expr)r?   	_toc_namezno-contents-entry)skip_section_number
_toc_parts)
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tuplebullet_list)nodedepthentriesmemo_parentssectionnodetitlevisitornodetextr=   rI   paraitemsub_itemonlynodeblisttoctreenodesig_noder9   entryparents_
root_entryr'   	build_tocr)   doctree
numentriess                         r,   rl   z/TocTreeCollector.process_doc.<locals>.build_toc@   s#   
 &(GCEL# Q6 k5==9'NE 37;GOOG,&557H!2;u3Ez!RJ !&B!:08!:)-g#-!:I $55b"iHD$)OOB$=D(eai@H(NN4(  X]];'}}+f2EFH%k59E ENN2x0U]];'2':':'< /6%k5==A$%k83C3CD#.#3#3#5D#NN40(';G'X]]C,7 %6'1(H<S<S'T$,'/||K'D$,#+??#6#67J#K$,&.uo'*$,->sJ-O
,1OO$&EMM"h{>S,T-1'j-Z	 (0'A'A"b)VZ(\(-D(A.6|.D!*/. HMXl-C D $+w,/F1=g1FJ'1*R.%BSBS'T(22(=(=e(D(2(9(9%:K:KBPU:V(W$, 'u 5K%6/6EQ6f ((6g66r.   r:   N)r>   )rY   zElement | Sequence[Element]rZ   intreturnznodes.bullet_list | None)r(   r)   r   r   rX   r   )r&   r'   rm   tocrl   r)   rn   s    `` @@@r,   process_doczTocTreeCollector.process_doc;   s    ''//S
 ]	-]	]	 &]	 ]	~  $'CGGLL!$)$5$5b$9CGGLL!+5a=(r.   c                H    | j                  |      | j                  |      z   S r   )assign_section_numbersassign_figure_numbers)r&   r'   r(   s      r,   get_updated_docsz!TocTreeCollector.get_updated_docs   s#    **3/$2L2LS2QQQr.   c                |  	
 g t               j                  
i _        	 d	 	 	 	 	 	 	 	 	 d	fdd
fdj                  D ]i  }j                  |       j	                  |      }|j                  t        j                        D ]#  }|j                  dd      }|sdg	 ||       % k S )zAAssign a section number to each heading under a numbered toctree.c                   | j                   D ]K  }t        |t        j                        r2	j	                  d        |||dz
  |       	j                          d }Pt        |t        j                        r ||||       d }xt        |t        j                        r ||||       d }t        |t        j                        rmd|v r	dxx   dz  cc<   t        t        j                  |d         }|dkD  rt        	      }t        	      ||d   <   n
d }d ||d   <   ||d<   |s||d<   d }'t        |t        j                        sC ||       N y )Nr   r>   rA   rC   r=   	secnumber)rN   rD   r   rX   rL   r   rK   r	   rM   rJ   r   rI   r#   rW   rP   )
rY   secnumsrZ   	titlenodesubnoderI   number	_walk_toc_walk_toctreenumstacks
          r,   r~   z:TocTreeCollector.assign_section_numbers.<locals>._walk_toc   sB   
  == 2gu'8'89OOA&gw	9ELLN $I9gwyA $I7 gwyA $I)C)CD,7 RLA%L $U__gaj AIqy!%h;@?	, 78!%;?	, 78-3Ik* 17	+.$(	)9)9:!'51?2r.   c           	        |dk(  ry | d   D ]  \  }}t        j                  |      s|dk(  r!|v r$t        j                  t	        d      || dd       I|j
                  v sXi }|j                  |<   j                  |        j
                  |   ||j                  j                  |             |j                  |      k7  s	j                  |        y )Nr   r[   r&   zA%s is already assigned section numbers (nested numbered toctree?)rq   secnum)locationtypesubtype)r   matchloggerwarningr   r   r   r0   titlesrT   rL   )
rf   rZ   _titlerefrz   r~   assignedr(   old_secnumbersrewrite_neededs
        r,   r   z>TocTreeCollector.assign_section_numbers.<locals>._walk_toctree   s    z!,Y!7 3<<$v(?NN2 'C $DEH,7eX # W CHH_:<G.5C&&s+LL%chhsmWeSZZ^^C=PQ."4"4S"99&--c23r.   numberedr   r   )
rY   r   rz   dictrZ   ro   r{   znodes.title | Nonerp   None)rf   zaddnodes.toctreerZ   ro   rp   r   )	r2   r   r"   r0   get_doctreerO   r	   rP   rT   )r&   r(   r)   rm   rf   rZ   r~   r   r   r   r   r   s    `    @@@@@@r,   rt   z'TocTreeCollector.assign_section_numbers   s      U++ W[$	2$	2$($	214$	2AS$	2$	2L	3 	3& ,, 	6GLL!oog.G&x/?/?@ 6#
A6 !sH!+u56	6 r.   c                  	
 t        j                  d   j                        
g }t               j                  }i _        i 	d	fdd
fdd	fd	 	 	 	 	 	 dfdd
fddfdj
                  j                  re j
                  j                  d       j                  j                         D ]+  \  }}||j                  |      k7  s|j                  |       - |S )z?Assign a figure number to each figure under a numbered toctree.stdc                    j                   j                         D ]:  }|j                  |       }|j                  dk(  r|j	                  |       s5|s8|c S  y )Nr   )domainsvaluesget_enumerable_node_typenameget_numfig_title)rY   domainfigtyper(   s      r,   get_figtypez;TocTreeCollector.assign_figure_numbers.<locals>.get_figtype  sY    ++,,. # 99$?KK5( & 7 7 ="N# r.   c                    d|d   d   z   }j                   j                  | i       }||v r|j                  |      }n|j                  d      }|xs dS )N#r9   r   r:    )r   rT   )r)   rE   r=   
secnumbersr   r(   s        r,   get_section_numberzBTocTreeCollector.assign_figure_numbers.<locals>.get_section_number  s\    wu~a00J++//<JZ'#
3#+<Rr.   c                    j                  | i       }|d j                  j                   }|j                  |d      dz   ||<   |||   fz   S )Nr   r>   )r1   confignumfig_secnum_depthrT   )r   r   counterr(   fignum_counters      r,   get_next_fignumberzBTocTreeCollector.assign_figure_numbers.<locals>.get_next_fignumber  sW    $//<G;SZZ;;<F%kk&!4q8GFOWV_...r.   c                    j                   j                  | i        j                   |    j                  |i       }|d   d   } ||      ||<   y )Nr9   r   )r   r1   )r)   r   r   fignode
fignumbers	figure_idr(   r   s         r,   register_fignumberzBTocTreeCollector.assign_figure_numbers.<locals>.register_fignumber   sU    ))'26++G4??LJq)I$6w$GJy!r.   c                   |j                   D ]  }t        |t        j                        r! | |      }|r 	| ||       3 	| ||       >t        |t        j
                        r7|d   D ].  \  }}t        j                  |      s|dk(  r!|
v r& ||       0 t        |t        j                        s |      }|r|d   r | |||        	| ||        y )Nr[   r&   r9   )	rN   rD   r   rE   r	   rP   r   r   r   )r)   rm   r   r|   next_secnumr   
subdocnamer   	_walk_doc_walk_doctreegenerated_docnamesr   r   r   s           r,   r   z=TocTreeCollector.assign_figure_numbers.<locals>._walk_doctree(  s    "++ <gu}}5"4Wg"FK"%gwD%gw?)9)9:.5i.@ 6*
!<<
3zV7K$%);;$!*f56  7)'2G75>*7FGWM!'7F;-<r.   c                h    | vr-j                  |        j                  |       } | ||       y y r   )r0   r   )r)   r   rm   r   r   r(   s      r,   r   z9TocTreeCollector.assign_figure_numbers.<locals>._walk_docB  s6    h&W%//'2gw7 'r.   r   )rY   r   rp   z
str | None)r)   strrE   znodes.sectionrp   tuple[int, ...])r   r   r   r   rp   r   )
r)   r   r   r   r   r   r   r   rp   r   )r)   r   rm   r   r   r   rp   r   )r)   r   r   r   rp   r   )	frozensetr   _virtual_doc_namesr2   r   r   numfigroot_docr%   rT   rL   )r&   r(   r   old_fignumbersr)   fignumsr   r   r   r   r   r   r   r   r   s    `    @@@@@@@@@r,   ru   z&TocTreeCollector.assign_figure_numbers   s    &s{{5'9'L'LM U++@B		 	/	H(+	H6=	HBF	H	< 	<4	8 ::cjj))2.$'$6$6$<$<$> 3 n0099"))'23 r.   N)r'   r   r(   r   r)   r   rp   r   )
r'   r   r(   r   r4   zset[str]r5   r   rp   r   )r'   r   rm   znodes.documentrp   r   )r'   r   r(   r   rp   	list[str])r(   r   rp   r   )	__name__
__module____qualname__r-   r6   rr   rv   rt   ru   r   r.   r,   r   r      s9    0X+X04Xi9VRL\Wr.   r   c                @    |d   sd}nd| d   z   }|dxx   dz  cc<   |S )Nr   r:   r   r>   r   )r9   num_entriesr=   s      r,   rH   rH   Q  s1    q> 
3q6\
NaNr.   c                8    | j                  t               ddddS )NbuiltinT)versionparallel_read_safeparallel_write_safe)add_env_collectorr   )r'   s    r,   setupr   \  s&    *+ "# r.   N)r9   r   r   z	list[int]rp   r   )r'   r   rp   zdict[str, Any])'__doc__
__future__r   typingr   r   r   r   docutilsr   sphinxr	   #sphinx.environment.adapters.toctreer
   sphinx.environment.collectorsr   sphinx.localer   sphinx.transformsr   sphinx.utilr   r   collections.abcr   docutils.nodesr   r   sphinx.applicationr   sphinx.environmentr   r   	getLoggerr   r   r   rH   r   r   r.   r,   <module>r      sj    / " 4 4   < >  2 '(,)3CL			8	$q+ qh	r.   