o $a3@sdZddlmZmZmZmZmZmZmZm Z ddl m Z ddl m Z mZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZmZed Z e!e"Z#GdddeZ$dedee%effddZ&dS)z sphinx.environment.collectors.toctree ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Toctree collector for sphinx.environment. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. )AnyDictListSetTupleTypeTypeVarcast)nodes)ElementNode)addnodes)Sphinx)BuildEnvironment)TocTree)EnvironmentCollector)__)SphinxContentsFilter)loggingurl_reNc @seZdZdedededdfddZdededeed eddf d d Zded e j ddfd dZ dedede efddZ dede efddZdede efddZdS)TocTreeCollectorappenvdocnamereturnNcCs|j|d|j|d|j|d|j|d|j|d|j||j|t |j D]\}}|||sE|j |=q6dSN) tocspoptoc_secnumberstoc_fignumberstoc_num_entriestoctree_includes glob_toctreesdiscardnumbered_toctreeslistfiles_to_rebuilditems)selfrrrsubfnfnsetr,G/usr/lib/python3/dist-packages/sphinx/environment/collectors/toctree.py clear_docs   zTocTreeCollector.clear_docdocnamesothercCs|D]5}|j||j|<|j||j|<||jvr!|j||j|<||jvr,|j|||jvr7|j|q|jD]\}}|j|t  |t |@q=dSr) rr!r"r#addr%r'r( setdefaultsetupdate)r)rrr/r0rr*r+r,r,r- merge_other-s      zTocTreeCollector.merge_otherdoctreecsjjdgdtdttdttffdd d dtdtdtjffd d }|r9|jj <n td jj <djj <d S)z;Build a TOC from the doctree and store it in the inventory.rnodeclsrcsRg}t||r |||jD]}t|tjrqt|tjr&|||q|S)z2Like traverse(), but stay within the same section.) isinstanceappendchildrenr sectionr extend)r7r8resultchild)traverse_in_sectionr,r-r@As     z9TocTreeCollector.process_doc..traverse_in_sectiondepthcsdg}|D]}t|tjrc|d}t}|||}ds$d}nd|dd}dd7<tjddg|Rd|d}tdd|} t d| } ||d} | r]| | 7} | | qt|tj rtj |dd } ||} | r| | j 7} | | qt|tj r|tjD]}|} | | tj|qq|rtjdg|RSdS) Nr#idsrAT)internalrefuri anchornameexpr)rI)r9r r<r walkaboutget_entry_text referencer compact_paragraph list_itemr:onlyr;r toctreecopyrrnote bullet_list)r7rBentries sectionnodetitlevisitornodetextrHrLparaitemsub_itemonlynodeblist toctreenoder build_tocrr6 numentriesr@r,r-r`MsV          z/TocTreeCollector.process_doc..build_tocrCN)rA) rrr rrrintr rSrr!)r)rr6tocr,r_r- process_doc<s"( /zTocTreeCollector.process_doccCs||||Sr)assign_section_numbersassign_figure_numbers)r)rrr,r,r-get_updated_docssz!TocTreeCollector.get_updated_docsc sgtji_ddtdtdtdtjddf fdd d tjdtddffd d j D]%} | |}| tjD]}| d d }|rYd g||qGq5S)zAAssign a section number to each heading under a numbered toctree.Nr7secnumsrB titlenodercs|jD]}t|tjr d|||d|d}qt|tjr0||||d}qt|tjr@||||d}qt|tj r|dd7<t tj |d}|dkrgt }t ||d<nd}d||d<||d<|r{||d<d}qt|tjr||qdS)NrrArH secnumber)r;r9r rSr:rrNr rOrMr rLr&tuplerP)r7rhrBrisubnoderLnumber) _walk_toc _walk_toctreenumstackr,r-ros:         z:TocTreeCollector.assign_section_numbers.._walk_tocr^cs|dkrdS|dD]J\}}t|s|dkrq |vr)tjtd||dddq |jvrTi}|j|<|j|||j || |krT |q dS)NrrTr)zA%s is already assigned section numbers (nested numbered toctree?)rcsecnum)locationtypesubtype) rmatchloggerwarningrrrr1titlesgetr:)r^rBrVrefrh)roassignedrold_secnumbersrewrite_neededr,r-rps&     z>TocTreeCollector.assign_section_numbers.._walk_toctreenumberedrr)r3rr rrbr rVr rPr%r1 get_doctreetraverserz)r)rrr6r^rBr,)rorpr|rrqr}r~r-res"*$"     z'TocTreeCollector.assign_section_numbersc sHg}tj}i_idtdtffdd dtdtjdttdfffdd d td ttdfdttdfffd d dtd ttdfd tdtddf fdd dtdtd ttdfddffdd dtd ttdfddffdd j j rj j t j D]\}}|||kr||q|S)z?Assign a figure number to each figure under a numbered toctree.r7rcs@jD]}||}|jdkr||sq|r|SqdS)Nstd)domainsvaluesget_enumerable_node_typenameget_numfig_title)r7domainfigtyperr,r- get_figtypes z;TocTreeCollector.assign_figure_numbers..get_figtyperr<.csFd|dd}j|i}||vr||}n|d}|p"tS)NrDrErrC)rrzrl)rr<rH secnumbersrrrr,r-get_section_numbers    zBTocTreeCollector.assign_figure_numbers..get_section_numberrrrcs>|i}|djj}||dd||<|||fS)NrrA)r2confignumfig_secnum_depthrz)rrrcounter)rfignum_counterr,r-get_next_fignumbers zBTocTreeCollector.assign_figure_numbers..get_next_fignumberfignodeNcs>j|ij||i}|dd}||||<dS)NrEr)r r2)rrrrr fignumbers figure_id)rrr,r-register_fignumbers zBTocTreeCollector.assign_figure_numbers..register_fignumberr6cs|jD]Y}t|tjr ||}|r|||q|||qt|tjr?|dD]\}}t|s7|dkr8q*||q*qt|tjr\|}|rV|drV|||||||qdS)NrTr)rE) r;r9r r<r rPrrvr )rr6rrrm next_secnumrV subdocnamer) _walk_doc _walk_doctreerrrr,r-rs&        z=TocTreeCollector.assign_figure_numbers.._walk_doctreecs0|vr||}|||dSdSr)r1r)rrrr6)rr|rr,r-rs   z9TocTreeCollector.assign_figure_numbers.._walk_doc)r3r r strr r<rrbr rnumfigroot_docrlr(rzr:)r)rr~old_fignumbersrfignumsr,) rrr|rrrrrrr-rfs0$ , .& z&TocTreeCollector.assign_figure_numbers)__name__ __module__ __qualname__rrrr.rr5r documentrdrrgrerfr,r,r,r-rs GJrrrcCs|tddddS)NbuiltinT)versionparallel_read_safeparallel_write_safe)add_env_collectorr)rr,r,r-setup$s rN)'__doc__typingrrrrrrrr docutilsr docutils.nodesr r sphinxr sphinx.applicationrsphinx.environmentr#sphinx.environment.adapters.toctreersphinx.environment.collectorsr sphinx.localersphinx.transformsr sphinx.utilrrr getLoggerrrwrrrr,r,r,r-s$(