o $a>@sdZddlmZmZmZmZmZmZddlm Z ddl m Z m Z ddl mZddlmZddlmZmZddlmZdd lmZmZerPdd lmZdd lmZeeZGd d d Z dS)z sphinx.environment.adapters.toctree ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Toctree adapter for sphinx.environment. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. ) TYPE_CHECKINGAnyIterableListOptionalcast)nodes)ElementNode)addnodes)__)loggingurl_re)Matcher) clean_astextprocess_only_nodes)Builder)BuildEnvironmentc@seZdZd#ddZdedejddfd d Z d$dedddejdede dededede e fddZ dede efddZd%de de de deddf ddZdedddefddZdeddded ede e f d!d"ZdS)&TocTreeenvrreturnNcCs ||_dSN)r)selfrrE/usr/lib/python3/dist-packages/sphinx/environment/adapters/toctree.py__init__s zTocTree.__init__docname toctreenodecCsr|dr |jj||dr|jj||d}|D]}|jj|t|q|jj|g |dS)zmNote a TOC tree directive in a document and gather information about file relations from it. globnumbered includefilesN) r glob_toctreesaddgetnumbered_toctreesfiles_to_rebuild setdefaultsettoctree_includesextend)rrrr includefilerrrnote"s z TocTree.noteTrFbuilderrtoctreeprunemaxdepth titles_onlycollapse includehiddenc  s|ddr s dS tjjjdtdtddffdd  dd tj d t t d t d t dt tf  f d d |pK|dd} sV|ddrVd s`|ddr`d|gdd} | skdSt dd} |jd} | rtj| dgt| gR} |j| _|j| _|d| _t|dr|j| _|`| | 7} | | d| d<| d| dr|ndt| dtjrt| ddkrdS| tjD]} t| ds| d| d| d<q| S)aResolve 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. hiddenFNnodedepthrcs|jD]_}t|tjtjfr|dd|d||qt|tjr-||dqt|tjrb|dkrb|dsM|}|rM|dd|j }|sA|j j drWdS|rbd |d<|j }|sYqdS) z7Add 'toctree-l%d' and 'current' classes to the toctree.classesz toctree-l%drefuri anchornamecurrent iscurrentNT) children isinstancer compact_paragraphr list_itemappend bullet_list referenceparentr#)r4r5subnode branchnode)_toctree_add_classesrrrrFWs0     z-TocTree.resolve.._toctree_add_classesrparentsseparatesubtreec stdd|dD}g}|D]\}}zd}t|rG|dur |}tjddgt|gRd|dd} tdd| } td| } td| } n|dkr|d }|sYt j j |}tjddgt|gRd |dd} tdd| } td| } td| } nm||vrt j td |d ||d ddWq |}j j|} j j|dd} |vsr| dkr| d| t| j|r| jrt| jdkr| jd}|tjD]}|d|kr|dst|g|_q| jst j td||dWn%ty j |drtd}ntd}t j |||dYq wrStttj| }|D]$}t|dkrQt|tj }|rL||ddd<q.|!dq.t| tj D]4}|ddrgr|j"#|d}||g|d dD]}|j"$|||d7}qy|j"%|q[|r|&| q tttj| }|'|q |s|st}||7}|gS|S)z&Return TOC entries for a toctree node.cSsg|] }|d|dfqS)rr7r).0errr yszBTocTree.resolve.._entries_from_toctree..entriesNF)internalr8r9rrCTz8circular toctree references detected, ignoring: %s <- %sz <- toccircular)locationtypesubtypetocdepthrr7r8r9z^toctree contains reference to document %r that doesn't have a title: no link will be generated)rRz2toctree contains reference to excluded document %rz5toctree contains reference to nonexisting document %rr3)rI)(rmatchrrBTextr r>r?rArrtitlesloggerwarningr jointocsdeepcopymetadatar#_toctree_prunertagsr<lentraverseKeyErrordoc2pathrrr listr-poprCindexinsertremover@r))rrGrHrIrefsrMtitlerefrefdocrBparaitemrPr/childrefnodemessager<toplevelsubtrees subtocnodeientryret) _entries_from_toctreer,r1excludedr2r.rr0toctree_ancestorsrrrzus                       z.TocTree.resolve.._entries_from_toctreer/ titlesonlyTr2)rHrNcaption rawcaptionuidr-r7rr8r9)FF) r#get_toctree_ancestorsrrconfigexclude_patternsr intr r-rstrboolr> attributesrrlrXlinesource rawsourcehasattrrr)r`r=rbrcrBrrWget_relative_uri)rrr,r-r.r/r0r1r2 tocentriesnewnoder caption_noderrr) rzrFr,r1rr{r2r.rr0r|rresolve1s^ j       zTocTree.resolvecCsji}|jjD] \}}|D]}|||<qqg}|}||vr3||vr3||||}||vr3||vs"|Sr)rr(itemsr@)rrrCpr<rq ancestorsdrrrr s  zTocTree.get_toctree_ancestorsr4r5cCs|jddD]F}t|tjtjfr|||||qt|tjrM|dkr1||kr1|j |gq|rC|dkrCd|jvrC|j |q|||d||qdS)z(Utility: Cut a TOC at a specified depth.Nrr7r;) r<r=r r>rr?r`rArCreplacerj)rr4r5r/r1rDrrrr`s   zTocTree._toctree_prunecCs|jj|dd}z|jj|}||d|Wn ty(tYSwt ||j | tj D] }|dps