o $a @sdZddlmZmZmZmZmZddlmZddl m Z m Z ddl m Z ddlmZddlZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZmZddlmZmZddl m!Z!m"Z"ddl#m$Z$ddl%m&Z&ddl'm(Z(e)e*Z+Gdddej,ej Z-Gdddej.ej Z/Gdddee!Z0GdddeZ1Gddde!Z2GdddZ3de&d e-d!dfd"d#Z4de&d e-d!dfd$d%Z5de(d e-d!dfd&d'Z6de(d e-d!dfd(d)Z7d*ed!ee8effd+d,Z9dS)-a sphinx.ext.todo ~~~~~~~~~~~~~~~ Allow todos to be inserted into your documentation. Inclusion of todos can be switched of by a configuration variable. The todolist directive collects all todos of your project and lists them along with a backlink to the original location. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. )AnyDictListTuplecast)nodes)ElementNode) directives)BaseAdmonitionN)addnodes)Sphinx)Domain)BuildEnvironment)NoUri)___)logging texescape)SphinxDirective new_document) OptionSpec)HTMLTranslator)LaTeXTranslatorc@ eZdZdS) todo_nodeN__name__ __module__ __qualname__r r 1/usr/lib/python3/dist-packages/sphinx/ext/todo.pyr%rc@r)todolistNrr r r r!r#)r"r#csVeZdZUdZeZdZdZdZdZ e j e j dZ eed<deeffdd ZZS) TodozO A todo entry, displayed (if configured) in the form of an admonition. TrF)classname option_specreturncs|jds dg|jd<t\}t|tjr|gSt|trF|dtj t dd|j j |d<| ||||jj||gSt)Nr%zadmonition-todorr$)textdocname)optionsgetsuperrun isinstancersystem_messagerinserttitlerenvr*add_nameset_source_infostatedocumentnote_explicit_target RuntimeError)selftodo __class__r r!r.<s        zTodo.run)rrr__doc__r node_class has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer class_option unchangedr'r__annotations__rr r. __classcell__r r r<r!r$-s r$c@szeZdZdZdZedeeee ffddZ deddfddZ d eed eddfd d Z d e dedejddfddZdS) TodoDomainr;r(cCs|jdiSNtodos)data setdefaultr:r r r!rJRszTodoDomain.todosr*NcCs|j|ddSN)rJpop)r:r*r r r! clear_docVszTodoDomain.clear_docdocnames otherdatacCs |D] }|d||j|<qdSrI)rJ)r:rQrRr*r r r!merge_domaindataYszTodoDomain.merge_domaindatar3r7cCs^|j|g}|tD] }|jd||||jjr,t j t d|d |dq dS)N todo-definedzTODO entry found: %s)location) rJrLtraverserappemitappendconfigtodo_emit_warningsloggerwarningrastext)r:r3r*r7rJr;r r r! process_doc]s zTodoDomain.process_doc)rrrr&labelpropertyrstrrrrJrPrSrrr7r`r r r r!rHNs rHc@s@eZdZUdZdZdZdZdZiZe e d<de e fddZ dS) TodoListz% A list of all todo entries. Frr'r(cCs tdgS)N)r#rMr r r!r.ts z TodoList.runN)rrrr>r@rArBrCr'rrFrr r.r r r r!rdis  rdc@sneZdZdedejdeddfddZdejdeddfdd Zd e dedej fd d Z d e deddfd dZ dS)TodoListProcessorrXdoctreer*r(NcCsF|j|_|j|_|j|_tt|jd|_td|_| ||dS)Nr;re) builderr[r3rrH get_domaindomainrr7process)r:rXrgr*r r r!__init__{s  zTodoListProcessor.__init__c Cst|jjg}t|tD]D}|jjs|j |q| dr(t g}ng}|D]"}|}|d||||||||}||q,||qdS)Nids)sumrjrJvalueslistrWr#r[todo_include_todosparentremover,rtargetdeepcopyclearresolve_referencerZcreate_todo_reference replace_self) r:rgr*rJnodecontentr;new_todotodo_refr r r!rks"         zTodoListProcessor.processr;c Cs|jjr td}n td|j|jf}|d|d}||ddd}tjdgd}|t||7}t tdtd}tj d d |d d }z|j ||d |d <|d d|dd7<Wn t ymYnw||7}|t||7}|S)Nz<>z3(The <> is located in %s, line %d.)z<>z todo-source)classeszoriginal entryreT)internalr*refuri#rmr)r[todo_link_onlyrsourcelinefindr paragraphTextemphasis referencerhget_relative_urir) r:r;r* descriptionprefixsuffixparalinktextrr r r!rxs(    z'TodoListProcessor.create_todo_referencecCsT|tjD] }d|vr||d<q|j|7_|j|j||j|j|dS)z'Resolve references in the todo content.refdocN)rWr pending_xrefr7r3resolve_referencesrhrs)r:r;r*rzr r r!rwsz#TodoListProcessor.resolve_reference) rrrr rr7rcrlrkrrrxrwr r r r!rfzs  rfr:rzr(cCs|jjr ||dStjrN)r[rqvisit_admonitionrSkipNoder:rzr r r!visit_todo_nodesrcCs||dSrN)depart_admonitionrr r r!depart_todo_nodesrcCsn|jjr4|jd|j||ttj|d}t | |jj }|jd|| ddStj )Nz \begin{sphinxadmonition}{note}{rz%s:})r[rqbodyrZhypertarget_torrr2rescaper_ latex_enginerOr)r:rz title_noder2r r r!latex_visit_todo_nodes rcCs|jddS)Nz\end{sphinxadmonition} )rrZrr r r!latex_depart_todo_nodesrrXcCs|d|ddd|ddd|ddd|t|jtttfttfttfttfttfd| dt | d t | t |d ttjd d d S)NrTrqFhtmlrr\)rlatexr)mantexinfor;r#zdoctree-resolvedr~T)version env_versionparallel_read_safe) add_eventadd_config_valueadd_noder#rrrrr add_directiver$rd add_domainrHconnectrfsphinx__display_version__)rXr r r!setups(      r):r>typingrrrrrdocutilsrdocutils.nodesrr docutils.parsers.rstr +docutils.parsers.rst.directives.admonitionsr rr sphinx.applicationr sphinx.domainsrsphinx.environmentr sphinx.errorsr sphinx.localerr sphinx.utilrrsphinx.util.docutilsrrsphinx.util.typingrsphinx.writers.htmlrsphinx.writers.latexr getLoggerrr] AdmonitionrGeneralr#r$rHrdrfrrrrrcrr r r r!s<            !K