
    O&i}                        d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZ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 erdd	lmZ  ej        e          Z G d
 de          ZddddddddddddddddZ G d d          ZdS )zLSphinx core events.

Gracefully adapted from the TextPress system by Armin.
    )defaultdict)
attrgetter)TYPE_CHECKINGAnyCallableDictList
NamedTupleTupleType)ExtensionErrorSphinxError)__)logging)safe_getattr)Sphinxc                   .    e Zd ZU eed<   eed<   eed<   dS )EventListeneridhandlerpriorityN)__name__
__module____qualname__int__annotations__r        Z/home/geonatureadmin/si_en_reseau/tutos/venv/lib/python3.11/site-packages/sphinx/events.pyr   r      s.         GGGMMMMMr   r    configzenv, added, changed, removedenvzenv, docnamezenv, docnameszdocname, source textz the doctree before being pickledz&env, read docnames, other env instancezenv, node, contnodezdomain, nodezdoctree, docname	exception)zbuilder-initedzconfig-initedzenv-get-outdatedzenv-get-updatedzenv-purge-doczenv-before-read-docszenv-check-consistencyzsource-readzdoctree-readzenv-merge-infozmissing-referencezwarn-missing-referencezdoctree-resolvedzenv-updatedzbuild-finishedc            	           e Zd ZdZddZdeddfdZded	ed
edefdZ	deddfdZ
dddededeee         df         defdZdddededeee         df         defdZdS )EventManagerzEvent manager for Sphinx.appr   returnNc                     || _         t                                          | _        t	          t
                    | _        d| _        d S )Nr   )r&   core_eventscopyeventsr   list	listenersnext_listener_id)selfr&   s     r   __init__zEventManager.__init__3   s9    !&&((9DT9J9J !r   namec                 j    || j         v rt          t          d          |z            d| j         |<   dS )zRegister a custom Sphinx event.zEvent %r already presentr    N)r+   r   r   )r/   r1   s     r   addzEventManager.add9   s=    4; $>!?!?$!FGGGDr   callbackr   c                     || j         vrt          t          d          |z            | j        }| xj        dz  c_        | j        |                             t          |||                     |S )z$Connect a handler to specific event.zUnknown event name: %s   )r+   r   r   r.   r-   appendr   )r/   r1   r4   r   listener_ids        r   connectzEventManager.connect?   st    t{"" $<!=!=!DEEE+"t##M+x$R$RSSSr   r8   c                     | j                                         D ]/}|dd         D ]"}|j        |k    r|                    |           #0dS )zDisconnect a handler.N)r-   valuesr   remove)r/   r8   r-   listeners       r   
disconnectzEventManager.disconnectI   sg    ..00 	/ 	/I%aaaL / /;+--$$X.../	/ 	/r   r   )allowed_exceptionsargsr?   .c                   	 t                               d|t          |          dd                    n# t          $ r Y nw xY wg }t	          | j        |         t          d                    }|D ]}	 |                     |j        | j	        g|R             *# |$ r  t          $ r  t          $ rR}| j	        j        r t          |j        dd          }t          t          d          |j        |fz  ||          |d}~ww xY w|S )	zEmit a Sphinx event.z[app] emitting event: %r%sNd   r   )keyr   z*Handler %r for event %r threw an exception)modname)loggerdebugrepr	Exceptionsortedr-   r   r7   r   r&   r   pdbr   r   r   )	r/   r1   r?   r@   resultsr-   r=   excrD   s	            r   emitzEventManager.emitP   ss   	LL5tT$ZZ=MNNNN 	 	 	 D	
 4>$/Z
5K5KLLL	! 	^ 	^H^/x/@4@@@AAAA%       ^ ^ ^8< &x'7tLL$R(T%U%U&.&6%=&>?BGU U UZ]^^ s(   14 
A A4&BD4ADDc                :     | j         |g|R d|iD ]}||c S 	dS )zEmit a Sphinx event and returns first result.

        This returns the result of the first handler that doesn't return ``None``.
        r?   N)rM   )r/   r1   r?   r@   results        r   emit_firstresultzEventManager.emit_firstresultm   sI      diStSSS@RSS 	 	F! "tr   )r&   r   r'   N)r   r   r   __doc__r0   strr3   r   r   r9   r>   r   r   r   rH   r	   rM   rP   r   r   r   r%   r%   0   sD       ##" " " "     C 8 s s    /c /d / / / / @B   S !&tI';!<FJ   < LN	 	 	S 	 	-24	?C3G-H	RU	 	 	 	 	 	r   r%   N)rQ   collectionsr   operatorr   typingr   r   r   r   r	   r
   r   r   sphinx.errorsr   r   sphinx.localer   sphinx.utilr   sphinx.util.inspectr   sphinx.applicationr   	getLoggerr   rE   r   r)   r%   r   r   r   <module>r\      s   
 $ # # # # #       T T T T T T T T T T T T T T T T T T T T 5 5 5 5 5 5 5 5             , , , , , , *)))))) 
	8	$	$    J    6#+")6>.,*! &F F F F F F F F F Fr   