
    -PhB                    4   d Z ddlmZ ddlZddlZddlmZmZ ddlm	Z	 ddl
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 ddlmZmZ ddlmZmZ er6ddlmZ ddlmZ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,  ej-        e.          Z/ G d de	j0        e	j                   Z1 G d de	j2        e	j                   Z3 G d de          Z4 G d de          Z5 G d de          Z6 G d d           Z7d/d&Z8d/d'Z9d0d)Z:d0d*Z;d1d.Z<dS )2zAllow 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.
    )annotationsN)TYPE_CHECKINGcast)nodes)addnodes)SphinxAdmonition)Domain)NoUri)___)logging	texescape)SphinxDirectivenew_document)Set)AnyClassVar)ElementNode)Sphinx)BuildEnvironment)ExtensionMetadata
OptionSpec)HTML5Translator)LaTeXTranslatorc                      e Zd ZdS )	todo_nodeN__name__
__module____qualname__     O/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/ext/todo.pyr   r   (           Dr#   r   c                      e Zd ZdS )todolistNr   r"   r#   r$   r'   r'   ,   r%   r#   r'   c                  (     e Zd ZdZeZd fdZ xZS )TodozEA todo entry, displayed (if configured) in the form of an admonition.return
list[Node]c                   | j                             d          sdg| j         d<   t                                                      \  }t	          |t
                    s|gS |                    dt          j        t          d                               | j
        j        |d<   |                     |           |                     |           | j        j                            |           |gS )Nclasszadmonition-todor   r)   )textdocname)optionsgetsuperrun
isinstancer   insertr   titler   envr/   add_nameset_source_infostatedocumentnote_explicit_target)selftodo	__class__s     r$   r3   zTodo.run5   s    |(( 	8%6$7DL!''++--$	** 	6MAu{&		222333(*YdT"""
00666vr#   r*   r+   )r   r    r!   __doc__r   
node_classr3   __classcell__)r?   s   @r$   r)   r)   0   sH        OOJ         r#   r)   c                  F    e Zd ZdZdZedd            ZddZddZddZ	dS )
TodoDomainr>   r*   dict[str, list[todo_node]]c                8    | j                             di           S Ntodos)data
setdefaultr=   s    r$   rI   zTodoDomain.todosI   s    y##GR000r#   r/   strNonec                <    | j                             |d            d S N)rI   pop)r=   r/   s     r$   	clear_doczTodoDomain.clear_docM   s    
w%%%%%r#   docnamesSet[str]	otherdatadict[str, Any]c                <    |D ]}|d         |         | j         |<   d S rH   )rI   )r=   rS   rU   r/   s       r$   merge_domaindatazTodoDomain.merge_domaindataP   s4     	> 	>G"+G"4W"=DJw	> 	>r#   r7   r   r;   nodes.documentc                r   | j                             |g           }|                    t                    D ]}|j                            d|           |                    |           |j        j        rBt          
                    t          d          |d                                         |           d S )Ntodo-definedzTODO entry found: %s   )location)rI   rK   findallr   eventsemitappendconfigtodo_emit_warningsloggerwarningr   astext)r=   r7   r/   r;   rI   r>   s         r$   process_doczTodoDomain.process_docT   s     
%%gr22$$Y// 	 	DJOOND111LLz, -..Q0@0@4    	 	r#   N)r*   rF   )r/   rM   r*   rN   )rS   rT   rU   rV   r*   rN   )r7   r   r/   rM   r;   rY   r*   rN   )
r   r    r!   namelabelpropertyrI   rR   rX   rg   r"   r#   r$   rE   rE   E   sx        DE1 1 1 X1& & & &> > > >     r#   rE   c                  :    e Zd ZU dZdZdZdZdZi Zde	d<   d
dZ
d	S )TodoListzA list of all todo entries.Fr   zClassVar[OptionSpec]option_specr*   r+   c                "    t          d          gS )N )r'   rL   s    r$   r3   zTodoList.runk   s     ~r#   Nr@   )r   r    r!   rA   has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacerm   __annotations__r3   r"   r#   r$   rl   rl   b   sX         %%K %(*K****     r#   rl   c                  .    e Zd Zdd	Zdd
ZddZddZdS )TodoListProcessorappr   doctreerY   r/   rM   r*   rN   c                    |j         | _         |j        | _        |j        | _        |j        j        d         | _        t          d          | _        |                     ||           d S )Nr>   ro   )builderrb   r7   domainsdomainr   r;   process)r=   rw   rx   r/   s       r$   __init__zTodoListProcessor.__init__r   sV    {j7gof-$R((Wg&&&&&r#   c                   t          j        t          j        | j        j                                        g           }t          |                    t                              D ]}| j
        j        s|j                            |           )|                    d          rt          j                    g}ng }|D ]}|                                }|d                                          |                     ||           |                    |           |                     ||          }|                    |           |                    |           d S )Nids)	functoolsreduceoperatoriaddr|   rI   valueslistr^   r'   rb   todo_include_todosparentremover1   r   targetdeepcopyclearresolve_referencera   create_todo_referencereplace_self)	r=   rx   r/   rI   nodecontentr>   new_todotodo_refs	            r$   r}   zTodoListProcessor.process{   sE   !*!1M4;,3355r"
 "
 2233 	' 	'D;1 ""4(((xx */,..)9 	) 	)==??%%'''&&x999x(((55dGDDx((((g&&&&+	' 	'r#   r>   r   nodes.paragraphc                   | j         j        rt          d          }nt          d          |j        |j        fz  }|d |                    d                   }||                    d          dz   d          }t          j        dg          }|t          j        |          z  }t          j	        t          d          t          d                    }t          j
        d	d	|d
          }	 | j                            ||d                   |d<   |dxx         d|d         d         z   z  cc<   n# t          $ r Y nw xY w||z  }|t          j        |          z  }|S )Nz<<original entry>>z3(The <<original entry>> is located in %s, line %d.)z<<z>>   ztodo-source)classeszoriginal entryro   T)internalr/   refuri#r   r   )rb   todo_link_onlyr   sourcelinefindr   	paragraphTextemphasis	referencerz   get_relative_urir
   )	r=   r>   r/   descriptionprefixsuffixparalinktextr   s	            r$   r   z'TodoListProcessor.create_todo_reference   s   ;% 	011KKQRR	V K
 5{//5556[--d33a799:777
6""" >!$4"5"5q9I7J7JKKOBHtDDD		"&,"?"?i# #Ih h3eQ#77 	 	 	D	 		
6"""s   -AD1 1
D>=D>c                    |                     t          j                  D ]}d|v r||d<   | xj        |z  c_        | j                            | j        || j                   | j                            |           dS )z'Resolve references in the todo content.refdocN)r^   r   pending_xrefr;   r7   resolve_referencesrz   r   )r=   r>   r/   r   s       r$   r   z#TodoListProcessor.resolve_reference   s    LL!677 	) 	)D4!(X 	##DM7DLIIIT"""""r#   N)rw   r   rx   rY   r/   rM   r*   rN   )rx   rY   r/   rM   r*   rN   )r>   r   r/   rM   r*   r   )r>   r   r/   rM   r*   rN   )r   r    r!   r~   r}   r   r   r"   r#   r$   rv   rv   q   se        ' ' ' '' ' ' '6   @	# 	# 	# 	# 	# 	#r#   rv   r=   r   r   r*   rN   c                `    | j         j        r|                     |           d S t          j        rP   )rb   r   visit_admonitionr   SkipNoder=   r   s     r$   visit_todo_noder      s1    {% d#####nr#   c                0    |                      |           d S rP   )depart_admonitionr   s     r$   depart_todo_noder      s    4     r#   r   c                   | j         j        r| j                            d           | j                            |                     |                     t          d|d                   }t          j        |                                | j         j	                  }| j                            d|z             | xj
        dz  c_
        | j        rd| j        _        |                    d           d S t          j        )Nz
\begin{sphinxtodo}{znodes.titler   z%s:}r\   T)rb   r   bodyra   hypertarget_tor   r   escaperf   latex_engineno_latex_floatstablehas_problematicrQ   r   r   )r=   r   
title_noder6   s       r$   latex_visit_todo_noder      s    {% 	1222	,,T22333-a11
 !2!2!4!4dk6NOO	%(((!: 	.)-DJ&nr#   c                Z    | j                             d           | xj        dz  c_        d S )Nz\end{sphinxtodo}
r\   )r   ra   r   r   s     r$   latex_depart_todo_noder      s3    I*+++Ar#   rw   r   r   c           	        |                      d           |                     dddt          t          h                     |                     dddt          t          h                     |                     dddt          t          h                     |                     t
                     |                     t          t          t          ft          t          ft          t          ft          t          ft          t          f           |                     d	t                     |                     d
t                     |                     t                     |                     dt"                     t$          j        dddS )Nr[   r   Fhtml)typesr   rc   )r   latexr.   mantexinfor>   r'   zdoctree-resolvedr   T)versionenv_versionparallel_read_safe)	add_eventadd_config_value	frozensetbooladd_noder'   r   r   r   r   r   add_directiver)   rl   
add_domainrE   connectrv   sphinx__display_version__)rw   s    r$   setupr      sZ   MM.!!!-ufItfDUDUVVV)5&	4&@Q@QRRR-ufItfDUDUVVVLLLL/0$&<=/0./ "23     fd###j(+++NN:KK"$5666-"  r#   )r=   r   r   r   r*   rN   )r=   r   r   r   r*   rN   )rw   r   r*   r   )=rA   
__future__r   r   r   typingr   r   docutilsr   r   r   sphinx.directives.admonitionsr   sphinx.domainsr	   sphinx.errorsr
   sphinx.localer   r   sphinx.utilr   r   sphinx.util.docutilsr   r   collections.abcr   r   r   docutils.nodesr   r   sphinx.applicationr   sphinx.environmentr   sphinx.util.typingr   r   sphinx.writers.html5r   sphinx.writers.latexr   	getLoggerr   rd   
Admonitionr   Generalr'   r)   rE   rl   rv   r   r   r   r   r   r"   r#   r$   <module>r      s6    # " " " " "      & & & & & & & &              : : : : : : ! ! ! ! ! !               * * * * * * * * > > > > > > > > 
5######$$$$$$$$,,,,,,,,))))))333333@@@@@@@@444444444444		8	$	$	 	 	 	 	 %- 	 	 		 	 	 	 	u}em 	 	 	       *       :       N# N# N# N# N# N# N# N#b   ! ! ! !       
     r#   