
    }c>                         d Z ddlmZmZ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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  ej        e          Z G d d          Z dS )z'Toctree adapter for sphinx.environment.    )TYPE_CHECKINGAnyIterableListOptionalcast)nodes)ElementNode)addnodes)__)loggingurl_re)Matcher)clean_astextprocess_only_nodes)Builder)BuildEnvironmentc                       e Zd ZddZdedej        ddfdZ	 	 ddedddej        dede	dededede
e         fdZdedee         fdZddede	de	deddf
dZdedddefdZdedddedede
e         f
dZdS )TocTreeenvr   returnNc                     || _         d S N)r   )selfr   s     Clib/python3.11/site-packages/sphinx/environment/adapters/toctree.py__init__zTocTree.__init__   s        docnametoctreenodec                    |d         r| j         j                            |           |                    d          r| j         j                            |           |d         }|D ]A}| j         j                            |t                                                    |           B| j         j                            |g           	                    |           dS )zmNote a TOC tree directive in a document and gather information about
        file relations from it.
        globnumberedincludefilesN)
r   glob_toctreesaddgetnumbered_toctreesfiles_to_rebuild
setdefaultsettoctree_includesextend)r   r   r    r$   includefiles        r   notezTocTree.note   s     v 	0H"&&w///??:&& 	4H&**7333">2' 	R 	RK H%00ceeDDHHQQQQ!,,Wb99@@NNNNNr   Tr   Fbuilderr   toctreeprunemaxdepthtitles_onlycollapseincludehiddenc	                 <    |                     dd          rsdS                                t           j        j        j                  dt          dt          ddffd	 ddt          j	        d	t          t                   d
t          dt          dt          t                   f
 f	d|p|                     dd          }s|                     dd          rds|                     dd          rd |g d          }	|	sdS t          j        dd          }
|j                             d          }|rnt          j        |dgt          j        |          gR  }|j        |_        |j        |_        |d         |_        t+          |d          r|j        |_        |`|
|z  }
|
                    |	           d|
d<    |
d                                |
dr|nd           t3          |
d         t          j                  rt5          |
d                   dk    rdS |
                    t          j                  D ]D}t;          j        |d                   s(                    |d                   |d         z   |d<   E|
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.
        hiddenFNnodedepthr   c                 ,   | j         D ]	}t          |t          j        t          j        f          r.|d                             d|dz
  z              ||           Wt          |t          j                  r ||dz              t          |t          j                  rn|d         k    rb|d         s(|}|r$|d                             d           |j	        }|$|j	        j	        
                    d          r dS |rd	|d<   |j	        }|dS )
z7Add 'toctree-l%d' and 'current' classes to the toctree.classesztoctree-l%d   refuri
anchornamecurrent	iscurrentNT)children
isinstancer   compact_paragraphr	   	list_itemappendbullet_list	referenceparentr'   )r9   r:   subnode
branchnode_toctree_add_classesr   s       r   rL   z-TocTree.resolve.<locals>._toctree_add_classesO   sa   = 5 5g(B(-(9 : : 5 I&--muqy.IJJJ((%8888):;; 5((%!)<<<<99 5 x(G3 5&|4 ? 3:J", ? *9 5 < <Y G G G-7->
 #- ? #>044[AA #"FF% 537GK0&-nG & 515 5r   r    parentsseparatesubtreec           	      	  	 d | d         D             }g }|D ]\  }}	 d}t          j        |          rq||}t          j        ddgt          j        |          gR d|dd}	t          j        dd|	          }
t          j        d|
          }t          j        d|          }n|dk    r| d         }|st          j
        j        |                   }t          j        ddgt          j        |          gR d	|dd}	t          j        dd|	          }
t          j        d|
          }t          j        d|          }nI||v rBt                              t          d
          |d                    |          |dd           p|}j
        j        |                                         }j
        j        |                             dd          }| vsr|dk    r                    |d|           t+          |j                   |r||j        rut1          |j                  dk    r]|j        d         }|                    t          j                  D ]0}|d         |k    r"|d         st          j        |          g|_        1|j        s*t                              t          d          ||            rt5          t6          t          j                 |          }|D ]f}t1          |          dk    rQt;          |                    t
          j                            }|r||d         dd<   Q|                    d           gt;          |                    t
          j                            D ]}|                    dd          rrl|j         !                    |          dz   } ||g|z   d	          D ]"}|j         "                    ||           |dz  }#|j         #                    |           |r|$                    |            t5          t6          t          j                 |          }|%                    |           <# tL          $ rd  j
        '                    |d                    rt          d          }nt          d          }t                              |||            Y w xY w|s|st          j                    }||z  }|gS |S )z&Return TOC entries for a toctree node.c                 .    g | ]}|d          |d         fS )r   r=    ).0es     r   
<listcomp>zBTocTree.resolve.<locals>._entries_from_toctree.<locals>.<listcomp>q   s$    AAAQQqT1Q4LAAAr   entriesN F)internalr>   r?   r   rI   Tz8circular toctree references detected, ignoring: %s <- %sz <- toccircular)locationtypesubtypetocdepthr      r=   r>   r?   z^toctree contains reference to document %r that doesn't have a title: no link will be generated)r[   r8   )rO   z2toctree contains reference to excluded document %rz5toctree contains reference to nonexisting document %r)(r   matchr	   rH   Textr   rD   rE   rG   r   r   titlesloggerwarningr   jointocsdeepcopymetadatar'   _toctree_pruner   tagsrB   lenfindallr   r   r
   listr1   poprI   indexinsertremoverF   r-   KeyErrordoc2path)!r    rM   rN   rO   refsrV   titlerefrefdocrH   paraitemrY   r3   childrefnoderB   toplevelsubtrees
subtocnodeientrymessageret_entries_from_toctreer0   r5   excludedr6   r2   r   r4   toctree_ancestorss!                           r   r   z.TocTree.resolve.<locals>._entries_from_toctreem   s    BA+i*@AAAD%'G $ ]1 ]1\1!F|C(( )K  ($'E$)OB %J6;j6G6G5H%J %JU;>2%J %J %J	  (9"b)LL$r488#/D99  K *(3$ G$01E$F$FE$)OB %J 7<j6G6G5H%J %JT;>?A%J %J %J	  (9"b)LL$r488#/D99'> %"NN2 /M ,N ,N+.G0D0D47eZ + Y Y Y %!$"hmC099;;#'8#4S#9#=#=j!#L#L&77 LE LhQRl L //Q(KKK*3===  KS\ Kc#,6G6G16L K$'LOE+0==+I+I K K#*8#4#; !K'.|'<!K8=
58I8I7JG$4< Br +] (^ (^'*[ ' B B B # 4
 $((?#E#E )1 4 4H"8}}q0 4+/0@0@AQ0R0R+S+S#+ !45=HQKNN$,LLOOO&*3;;x7G+H+H&I&I 	A 	A
 *x ? ? A$1A * 1 7 7
 C Ca GA)>)>$.70B,0*2 *2 *2 ' ' !+ 1 8 8E B B B !Q&-44Z@@@ 1s++++#'(?#E#Ex0000W   G G Gx 1 1#t < <== ^"$%Y"Z"Z"$%\"]"]NN7C+NFFFFFGX  8 '))wuNs   E'QD4QA*SSr3   
titlesonlyTr6   )rN   rW   caption
rawcaptionuidr1   r=   r   r>   r?   )FF) r'   get_toctree_ancestorsr   r   configexclude_patternsr
   intr   r1   r   strboolrD   
attributesr	   ru   ra   linesource	rawsourcehasattrr   r-   ri   rC   rk   rl   rH   r   r`   get_relative_uri)r   r   r0   r1   r2   r3   r4   r5   r6   
tocentriesnewnoder   caption_noder{   r   rL   r   r   s   ``` ` ```     @@@@r   resolvezTocTree.resolve)   sK    ;;x'' 	 	4( !66w??48?;<<	5w 	5s 	5t 	5 	5 	5 	5 	5 	5 	5> KPh	 h	x/? h	$s) h	,0h	CGh	'+G}h	 h	 h	 h	 h	 h	 h	 h	 h	 h	 h	 h	 h	 h	T :w{{:r:: 	w{{<?? 	K 	!_e!D!D 	! M
 +*7BGGG
 	4,R44$((33 		$ ;wKej6I6I5JKKKL 'L").L%,\%:L"w&&  #*; K|#Gz"""!	 	Wa(((GQE(@q(KKKgbk5=11 	c'"+6F6F!6K 	4 u77 	H 	HG< 122 H$+$<$<WX.%0 %029,2G%H!r   c                     i }| j         j                                        D ]\  }}|D ]}|||<   g }|}||v r)||vr%|                    |           ||         }||v r||v%|S r   )r   r,   itemsrF   )r   r   rI   prB   rz   	ancestorsds           r   r   zTocTree.get_toctree_ancestors  s    84::<< 	" 	"KAx! " " !u"!	6k 	ay0 	Qq	A 6k 	ay0 	 r   r9   r:   c                    |j         dd         D ]}t          |t          j        t          j        f          r|                     ||||           At          |t          j                  ro|dk    r"||k    r|j        	                    |g            |r*|dk    r$d|j        vr|j        
                    |           |                     ||dz   ||           dS )z(Utility: Cut a TOC at a specified depth.Nr   r=   rA   )rB   rC   r   rD   r	   rE   ri   rG   rI   replacerq   )r   r9   r:   r3   r5   rJ   s         r   ri   zTocTree._toctree_prune  s    }QQQ' 	U 	UG'H$>$)O$5 6 6 U ##GUHhGGGGGU%677 U a< 	UEH$4 	UN**7B7777 ! UUQY U'w~=U--g6666 ++GUQY8TTT#	U 	Ur   c                    | j         j        |                             dd          }	 | j         j        |                                         }|                     |d|           n## t          $ r t          j                    cY S w xY wt          ||j
                   |                    t          j                  D ]}|d         pd|d<   |S )z7Return a TOC nodetree -- for use on the same page only!r^   r   r_   r?   #r>   )r   rh   r'   rf   rg   ri   rr   r	   	paragraphr   rj   rl   rH   )r   r   r0   r^   rY   r9   s         r   get_toc_forzTocTree.get_toc_for$  s    8$W-11*a@@	%(-(1133CQ1111 	% 	% 	% ?$$$$$	% 	3---KK00 	7 	7D!,/63DNN
s   ;A$ $BBkwargsc                    | j                             | j         j        j                  }g }d|vrd|d<   d|vs|d         sd|d<   nt	          |d                   |d<   ||d<   |                    t          j                  D ]+} | j        |||fddi|}|r|	                    |           ,|sdS |d         }	|dd         D ]}|	
                    |j                   |	S )	zReturn the global TOC nodetree.r6   Tr3   r   r5   r2   Nr=   )r   get_doctreer   root_docr   rl   r   r1   r   rF   r-   rB   )
r   r   r0   r5   r   doctreetoctreesr    r1   results
             r   get_toctree_forzTocTree.get_toctree_for3  s)    (&&tx'?@@"$&( 	+&*F?#V# 	96*+= 	9!"F:!$VJ%7!8!8F:%z"??8+;<< 	) 	)K"dl7G[WWWPVWWG )((( 	4!| 	, 	,GMM'*++++r   )r   r   r   N)Tr   FFF)F)__name__
__module____qualname__r   r   r   r1   r/   r   r   r   r
   r   r   r   ri   r   r   r   r   rR   r   r   r   r      s          OC Oh.> O4 O O O O  LQ>CW Ws WY WAQ WW.1WDHWW7;WHPQXHYW W W Wr
S 
T#Y 
 
 
 
U U7 U3 U# UQU U U U U U,3  t    s Y $ "%*27*;     r   r   N)!__doc__typingr   r   r   r   r   r   docutilsr	   docutils.nodesr
   r   sphinxr   sphinx.localer   sphinx.utilr   r   sphinx.util.matchingr   sphinx.util.nodesr   r   sphinx.buildersr   sphinx.environmentr   	getLoggerr   rc   r   rR   r   r   <module>r      sG   - - E E E E E E E E E E E E E E E E       ( ( ( ( ( ( ( (             ' ' ' ' ' ' ' ' ( ( ( ( ( ( > > > > > > > > 4''''''333333 
	8	$	$r r r r r r r r r rr   