
    P&iKZ                        U d Z ddlZddl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mZmZmZmZmZmZmZmZmZmZ ddlZddlmZ dd	lmZ dd
lmZmZmZ ddlm Z m!Z!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9  e7j:        e;          Z< ej=        d          Z>erddl?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZF  e0ddejG        ie/ddi            eH            ZIeee                  eJd<   eded         fd             ZKd!eLdeMfd"ZNd!eLd#ee          ddfd$ZOd!eLdeMfd%ZPd!eLd&e9ddfd'ZQd!eLddfd(ZRd)ee         deMfd*ZSd)ee         ddfd+ZTd)ee         ddfd,ZUeded         fd-            ZVeded         fd.            ZWed/eeL         ded         fd0            ZXeded         fd1            ZYedTd/eeL         ded         fd2            ZZ G d3 d4          Z[ G d5 d6e\          Z] G d7 d8e[          Z^ G d9 d:          Z_ G d; d<e*          Z` G d= d>e*          ZadeMfd?Zbed@e&dAe(ded         fdB            Zc G dC dDe          Zd G dE dFe           Ze G dG dH          Zf G dI dJef          Zg G dK dLejh                  ZiejG        dMk    r
dN Zjeje_j        edOe*f         eJdP<   dTdQeLdRedejk        fdSZldS )UzUtility functions for docutils.    N)contextmanager)copy)path)
ModuleType)IOTYPE_CHECKINGAnyCallableDict	GeneratorListOptionalSetTupleTypecast)nodes)
FileOutput)ElementNodesystem_message)	Directive
directivesroles)Inliner)StateStateMachine
StringList)Reporterunescape)HTMLTranslator)RemovedInSphinx70Warningdeprecated_alias)SphinxError)___)logging)RoleFunctionz>^(.+?:(?:\d+)?): \((DEBUG|INFO|WARNING|ERROR|SEVERE)/(\d+)?\) )Values)Builder)Config)BuildEnvironmentzsphinx.util.docutils__version_info__zdocutils.__version_info__additional_nodesreturn)NNNc               #     K   	 t          t          j                  } t          t          j                  }dV  | t          _        |t          _        t          t                    D ]+}t          |           t                              |           ,dS # | t          _        |t          _        t          t                    D ]+}t          |           t                              |           ,w xY w)z"Create namespace for reST parsers.N)	r   r   _directivesr   _roleslistr.   unregister_nodediscard)r1   r2   nodes      a/home/geonatureadmin/si_en_reseau/tutos/venv/lib/python3.11/site-packages/sphinx/util/docutils.pydocutils_namespacer8   2   s      +:122el##!,
)** 	+ 	+DD!!!$$T****	+ 	+ "-
)** 	+ 	+DD!!!$$T****	+s   6B AC.namec                     | t           j        v S )z1Check the *name* directive is already registered.)r   r1   r9   s    r7   is_directive_registeredr<   C   s    :)))    	directivec                 0    t          j        | |           dS )zRegister a directive to docutils.

    This modifies global state of docutils.  So it is better to use this
    inside ``docutils_namespace()`` to prevent side-effects.
    N)r   register_directive)r9   r>   s     r7   r@   r@   H   s     !$	22222r=   c                     | t           j        v S )z,Check the *name* role is already registered.)r   r2   r;   s    r7   is_role_registeredrB   Q   s    5<r=   rolec                 0    t          j        | |           dS )zRegister a role to docutils.

    This modifies global state of docutils.  So it is better to use this
    inside ``docutils_namespace()`` to prevent side-effects.
    N)r   register_local_role)r9   rC   s     r7   register_rolerF   V   s     
dD)))))r=   c                 F    t           j                            | d           dS )z Unregister a role from docutils.N)r   r2   popr;   s    r7   unregister_rolerI   _   s     	LT4     r=   r6   c                 F    t          t          j        d| j        z             S )z'Check the *node* is already registered.visit_)hasattrr   GenericNodeVisitor__name__r6   s    r7   is_node_registeredrP   d   s    5+X-EFFFr=   c                     t          t          j        d| j        z             s6t          j        | j        g           t
                              |            dS dS )zRegister a node to docutils.

    This modifies global state of some visitors.  So it is better to use this
    inside ``docutils_namespace()`` to prevent side-effects.
    rK   N)rL   r   rM   rN   _add_node_class_namesr.   addrO   s    r7   register_noderT   i   sY     5+X-EFF ##T]O444T"""""# #r=   c                 ^   t          t          j        d| j        z             rt	          t          j        d| j        z              t	          t          j        d| j        z              t	          t          j        d| j        z              t	          t          j        d| j        z              dS dS )zaUnregister a node from docutils.

    This is inverse of ``nodes._add_nodes_class_names()``.
    rK   depart_N)rL   r   rM   rN   delattrSparseNodeVisitorrO   s    r7   r4   r4   t   s    
 u'DM)ABB D((T]*BCCC()dm*CDDD'DM)ABBB'T])BCCCCC	D Dr=   c               #      K   ddl m ddt          dt          dt          ffd} 	 | t
          j        _        dV  t
          j        _        dS # t
          j        _        w xY w)	zPatch docutils.languages.get_language() temporarily.

    This ignores the second argument ``reporter`` to suppress warnings.
    refs: https://github.com/sphinx-doc/sphinx/issues/3788
    r   get_languageNlanguage_codereporterr/   c                      |           S N r\   r]   r[   s     r7   patched_get_languagez2patched_get_language.<locals>.patched_get_language       |M***r=   r_   )docutils.languagesr[   strr   r	   docutils	languagesrb   r[   s    @r7   rb   rb      s       0/////+ +C +8 +s + + + + + +7*>' +7''','6666s   A A"c               #     K   ddl m ddt          dt          dt          ffd} 	 | t
          j        j        j        _        dV  t
          j        j        j        _        dS # t
          j        j        j        _        w xY w)	a^  Patch docutils.parsers.rst.languages.get_language().
    Starting from docutils 0.17, get_language() in ``rst.languages``
    also has a reporter, which needs to be disabled temporarily.

    This should also work for old versions of docutils,
    because reporter is none by default.

    refs: https://github.com/sphinx-doc/sphinx/issues/10179
    r   rZ   Nr\   r]   r/   c                      |           S r_   r`   ra   s     r7   rb   z6patched_rst_get_language.<locals>.patched_get_language   rc   r=   r_   )	docutils.parsers.rst.languagesr[   re   r   r	   rf   parsersrstrg   rh   s    @r7   patched_rst_get_languagern      s       <;;;;;+ +C +8 +s + + + + + +C6J&3 7C&333l&3BBBBs   A# #B confdirc              #     K   	 t           j                            dd          }| r4t          j        t          j        |           d          t           j        d<   dV  |"t           j                            dd           dS |t           j        d<   dS # |!t           j                            dd           n|t           j        d<   w xY w)z?Let docutils know the location of ``docutils.conf`` for Sphinx.DOCUTILSCONFIGNzdocutils.conf)osenvirongetr   joinabspathrH   )ro   docutilsconfigs     r7   using_user_docutils_confrx      s      
:(8$?? 	]+/9T\'5J5JO+\+\BJ'(!JNN+T22222+9BJ'((( !JNN+T2222+9BJ'(9999s   AB 4Cc               #   ~  K   d } d }t           j        }t           j        }t          j        d d         dk    r| t           _        |t           _        	 d V  t          j        d d         dk    r|t           _        |t           _        d S d S # t          j        d d         dk    r|t           _        |t           _        w xY w)Nc                 (   | j         j        }t          |                                t	          |                    s| j                            d| d           | j                            |                     |d|j        |gd                     d S )Nz<aside class="footnote-list z">
asidenote)classesrC   )	settingsfootnote_references
isinstanceprevious_siblingtypebodyappendstarttagtagname)selfr6   label_styles      r7   visit_footnotez&du19_footnotes.<locals>.visit_footnote   s    m7$//114::>> 	OIMKMMMNNN	tW04k/J,2 ' 4 4 	5 	5 	5 	5 	5r=   c                     | j                             d           t          |                    dd          t	          |                    s| j                             d           d S d S )Nz	</aside>
FT)descendsiblings)r   r   r   	next_noder   r   r6   s     r7   depart_footnotez'du19_footnotes.<locals>.depart_footnote   sk    	&&&$...FFt**& & 	+I\*****	+ 	+r=      r      )r!   r   r   rf   r-   )r   r   old_visit_footnoteold_depart_footnotes       r7   du19_footnotesr      s      5 5 5+ + + (6(8  !$//(6%)8&A$RaR(G33,>N)-@N*** 438$RaR(G33,>N)-@N*@@@@s   B
 
2B<c           	   #   F  K   t                      5  t                      5  t          |           5  t                      5  dV  ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )zPatch to docutils temporarily.N)rb   rn   rx   r   )ro   s    r7   patch_docutilsr      s      
		  	!	#	# 	!'	*	*  
		  		                                                              sz   BA>A'A	A'AA'AA'A>'A++A>.A+/A>2B>B	BB	BBBc                       e Zd ZdZddZddZdee         dededdfd	Z	dd
Z
ddZdededej        deeee                  ee         f         fdZdededededeeee         f         f
dZdS )CustomReSTDispatcherzCustom reST's mark-up dispatcher.

    This replaces docutils's directives and roles dispatch mechanism for reST parser
    by original one temporarily.
    r/   Nc                 &    d | _         d | _        d S )Nc                  
    d g fS r_   r`   argss    r7   <lambda>z/CustomReSTDispatcher.__init__.<locals>.<lambda>   s
    tRj r=   c                  
    d g fS r_   r`   r   s    r7   r   z/CustomReSTDispatcher.__init__.<locals>.<lambda>   s
    4* r=   )directive_func
roles_funcr   s    r7   __init__zCustomReSTDispatcher.__init__   s    (@(@$<$<r=   c                 .    |                                   d S r_   )enabler   s    r7   	__enter__zCustomReSTDispatcher.__enter__   s    r=   exc_type	exc_value	tracebackc                 .    |                                   d S r_   )disable)r   r   r   r   s       r7   __exit__zCustomReSTDispatcher.__exit__   s    r=   c                     t           j        | _        t          j        | _        | j        t           _        | j        t          _        d S r_   )r   r>   r   r   rC   	role_funcr   s    r7   r   zCustomReSTDispatcher.enable   s-    (2#~
Y


r=   c                 J    | j         t          _        | j        t          _        d S r_   )r   r   r>   r   r   rC   r   s    r7   r   zCustomReSTDispatcher.disable   s    #2
^


r=   directive_namelanguage_moduledocumentc                 0    |                      |||          S r_   )r   )r   r   r   r   s       r7   r>   zCustomReSTDispatcher.directive  s     "">?HMMMr=   	role_namelinenor]   c                 2    |                      ||||          S r_   )r   )r   r   r   r   r]   s        r7   rC   zCustomReSTDispatcher.role  s    ~~i&(KKKr=   r/   N)rN   
__module____qualname____doc__r   r   r   	Exceptionr	   r   r   r   re   r   r   r   r   r   r   r   r   r>   intr   r(   rC   r`   r=   r7   r   r      sM        = = = =   i Y SV [_       $ $ $ $N"%N8BNNSnNXd9o6^8LLMN N N N
Lc LJ L LW_ Ld>&::;L L L L L Lr=   r   c                       e Zd ZdS )ElementLookupErrorN)rN   r   r   r`   r=   r7   r   r     s        Dr=   r   c                        e Zd ZdZd fdZdededefd	Zd
edede	j
        deeee                  ee         f         f fdZdededededeeee         f         f
 fdZ xZS )sphinx_domainszcMonkey-patch directive and role dispatch, so that domain-specific
    markup takes precedence.
    envr,   r/   Nc                 V    || _         t                                                       d S r_   )r   superr   )r   r   	__class__s     r7   r   zsphinx_domains.__init__  s&    r=   r   r9   c                 D   |                                 }d|v r|                    dd          \  }}|| j        j        v r:| j                            |          } t          ||          |          }||g fS njt                              t          d          ||           n@| j        j	        
                    d          }| t          ||          |          }||g fS  t          | j                            d          |          |          }||g fS t          )ztLookup a markup element (directive or role), given its name which can
        be a full name (with domain).
        :   Nz%unknown directive or role name: %s:%sdefault_domainstd)lowersplitr   domains
get_domaingetattrloggerwarningr%   	temp_datart   r   )r   r   r9   domain_namedomainelement
def_domains          r7   lookup_domain_elementz$sphinx_domains.lookup_domain_element  s5    zz||$;; $

3 2 2Kdh...,,[99/'&$//55&"B;& ' q!HII;X\]]]] +//0@AAJ%3'*d33D99&"B;& <'$(--e44d;;DAAB;  r=   r   r   r   c                     	 |                      d|          S # t          $ r& t                                          |||          cY S w xY w)Nr>   )r   r   r   r>   )r   r   r   r   r   s       r7   r>   zsphinx_domains.directive7  s`    	P--k>JJJ! 	P 	P 	P77$$^_hOOOOO	Ps    -A	A	r   r   r]   c                     	 |                      d|          S # t          $ r' t                                          ||||          cY S w xY w)NrC   )r   r   r   rC   )r   r   r   r   r]   r   s        r7   rC   zsphinx_domains.role?  s`    	N--fi@@@! 	N 	N 	N77<<	?FHMMMMM	Ns    .A
	A
)r   r,   r/   N)rN   r   r   r   r   re   r	   r   r   r   r   r   r   r   r   r   r   r>   r   r   r(   rC   __classcell__r   s   @r7   r   r     s3             !# !S !S ! ! ! !<P"%P8BPNSnPXd9o6^8LLMP P P P P PNc NJ N NW_ Nd>&::;N N N N N N N N N Nr=   r   c                       e Zd ZdeddfdZdS )WarningStreamtextr/   Nc                 `   t                               |          }|s/t                              |                    d                     d S |                                \  }}}t                               d|                                          }t                              |||           d S )Nz
 location)	report_researchr   r   rstripgroupssublog)r   r   matchedr   r   levelmessages          r7   writezWarningStream.writeH  s    ""4(( 	9NN4;;v../////$+NN$4$4!HdEmmB--4466GJJtWxJ88888r=   )rN   r   r   re   r   r`   r=   r7   r   r   G  s6        9# 9$ 9 9 9 9 9 9r=   r   c                   v     e Zd Zededd fd            Zej        ej        ddfdede	de	d	e
d
eddf fdZ xZS )LoggingReporterr]   r/   c                 R     | |j         |j        |j        |j        |j                  S )zACreate an instance of LoggingReporter from other reporter object.)sourcereport_level
halt_level
debug_flagerror_handler)clsr]   s     r7   from_reporterzLoggingReporter.from_reporterS  s4     s8?H$98;N&(>@ @ 	@r=   Fbackslashreplacer   r   r   debugr   Nc                     t          t          t                                }t                                          ||||||           d S )N)r   )r   r   r   r   r   )r   r   r   r   r   r   streamr   s          r7   r   zLoggingReporter.__init__Y  sU     b-//**zm 	 	E 	E 	E 	E 	Er=   )rN   r   r   classmethodr   r   WARNING_LEVELSEVERE_LEVELre   r   boolr   r   r   s   @r7   r   r   R  s        @X @2C @ @ @ [@
 9A8N#+#8&8E Es E# E EAEE #E=AE E E E E E E E E Er=   r   c                   $     e Zd ZdZd fdZ xZS )NullReporterz A dummy reporter; write nothing.r/   Nc                 N    t                                          ddd           d S )Nr   i     )r   r   )r   r   s    r7   r   zNullReporter.__init__d  s%    S!$$$$$r=   r   )rN   r   r   r   r   r   r   s   @r7   r   r   a  sC        **% % % % % % % % % %r=   r   c                  :    t          j        dt                     dS )Nz*is_html5_writer_available() is deprecated.T)warningswarnr"   r`   r=   r7   is_html5_writer_availabler  h  s!    M>*, , ,4r=   statecontentc              #      K   	 | j         j        j        }t          g d          }||_        |j        | j         j        _        dV  || j         j        _        dS # || j         j        _        w xY w)z1Switch current source input of state temporarily.N)memor]   get_source_and_liner   input_lines)r  r  r
  state_machines       r7   switch_source_inputr  n  s|      F#j1E %R..$+!2?2S
/ 3F
///2E
/EEEEs   AA A,c                   @     e Zd ZdZdeddf fdZdedef fdZ xZS )SphinxFileOutputz#Better FileOutput class for Sphinx.kwargsr/   Nc                     |                     dd          | _        |                    dd            t                      j        di | d S )Noverwrite_if_changedFencodingzutf-8r`   )rH   r  
setdefaultr   r   )r   r  r   s     r7   r   zSphinxFileOutput.__init__  sS    $*JJ/Eu$M$M!*g...""6"""""r=   datac                 ~   | j         r| j        rd| j        vr| j        r~t          j                            | j                   rZt          | j         | j                  5 }|	                                |k    r|cd d d            S 	 d d d            n# 1 swxY w Y   t                                          |          S )Nb)r  )destination_path	autoclosemoder  rr   r   existsopenr  readr   r   )r   r  fr   s      r7   r   zSphinxFileOutput.write  s   ! 	 dn 	 DI9M9M) :N.0gnnT=R.S.S :Nd+dmDDD  6688t##               #                             
 ww}}T"""s   BBB)	rN   r   r   r   r	   r   re   r   r   r   s   @r7   r  r    s}        --# # # # # # # #
## ## # # # # # # # # # #r=   r  c                   z    e Zd ZdZedd            Zedd            Zdeee	f         fdZ
dedd	fd
ZdefdZd	S )SphinxDirectivezA base class for Sphinx directives.

    This class provides helper methods for Sphinx directives.

    .. note:: The subclasses of this class might not work with docutils.
              This class is strongly coupled with Sphinx.
    r/   r,   c                 .    | j         j        j        j        S z3Reference to the :class:`.BuildEnvironment` object.)r  r   r~   r   r   s    r7   r   zSphinxDirective.env  s     z"+//r=   r+   c                     | j         j        S z)Reference to the :class:`.Config` object.r   configr   s    r7   r&  zSphinxDirective.config       xr=   c                 @    | j                             | j                  S )zGet source and line number.)r  r
  r   r   s    r7   get_source_infozSphinxDirective.get_source_info  s    !55dkBBBr=   r6   Nc                 H    |                                  \  |_        |_        dS )z'Set source and line number to the node.Nr)  r   liner   s     r7   set_source_infozSphinxDirective.set_source_info  s     !%!5!5!7!7TYYYr=   c                 d    d                     d |                                 D                       S )&Get current location info for logging.r   c              3   4   K   | ]}t          |          V  d S r_   re   .0ss     r7   	<genexpr>z/SphinxDirective.get_location.<locals>.<genexpr>  (      ??1A??????r=   ru   r)  r   s    r7   get_locationzSphinxDirective.get_location  /    xx??(<(<(>(>??????r=   r/   r,   r/   r+   )rN   r   r   r   propertyr   r&  r   re   r   r)  r   r-  r8  r`   r=   r7   r   r     s          0 0 0 X0    XCsCx C C C C8D 8T 8 8 8 8@c @ @ @ @ @ @r=   r   c                   p   e Zd ZU dZeed<   eed<   eed<   eed<   eed<   eed<   e	e         ed<   i g fdedededededede	e         d	e
e	e         e	e         f         fd
Zd	e
e	e         e	e         f         fdZedd            Zedd            Zdded	e
eef         fdZddeded	dfdZd	efdZdS )
SphinxRolezA base class for Sphinx roles.

    This class provides helper methods for Sphinx roles.

    .. note:: The subclasses of this class might not work with docutils.
              This class is strongly coupled with Sphinx.
    r9   rawtextr   r   inlineroptionsr  r/   c                    || _         t          |          | _        || _        || _        || _        || _        |r|                                | _        nX| j	        j
                            dd          | _        | j        s| j	        j        j        | _        | j        st          d          |                                 S )Ndefault_roler   zcannot determine default role!)r?  r    r   r   r@  rA  r  r   r9   r   r   rt   r&  rC  r$   run)r   r9   r?  r   r   r@  rA  r  s           r7   __call__zSphinxRole.__call__  s     TNN	  	D

DII*..~rBBDI9 9 HO8	9 D!"BCCCxxzzr=   c                     t           r_   )NotImplementedErrorr   s    r7   rD  zSphinxRole.run  s    !!r=   r,   c                 .    | j         j        j        j        S r"  )r@  r   r~   r   r   s    r7   r   zSphinxRole.env  s     |$-11r=   r+   c                     | j         j        S r$  r%  r   s    r7   r&  zSphinxRole.config  r'  r=   Nc                 R    || j         }| j        j                            |          S r_   )r   r@  r]   r
  )r   r   s     r7   r)  zSphinxRole.get_source_info  s'    >[F|$88@@@r=   r6   c                 J    |                      |          \  |_        |_        d S r_   r+  )r   r6   r   s      r7   r-  zSphinxRole.set_source_info  s"    !%!5!5f!=!=TYYYr=   c                 d    d                     d |                                 D                       S )r/  r   c              3   4   K   | ]}t          |          V  d S r_   r1  r2  s     r7   r5  z*SphinxRole.get_location.<locals>.<genexpr>  r6  r=   r7  r   s    r7   r8  zSphinxRole.get_location  r9  r=   r:  r;  r_   )rN   r   r   r   re   __annotations__r   r   r   r   r   r   r   rE  rD  r<  r   r&  r)  r-  r8  r`   r=   r7   r>  r>    s          IIILLL
IIIKKKMMM#Y 46B S 3 c 3 !,0@DS	DJ^(<<=   ,"U4:tN';;< " " " " 2 2 2 X2    XA Ac AU38_ A A A A
> >D ># > > > > >@c @ @ @ @ @ @r=   r>  c                        e Zd ZU dZeed<   eed<   eed<   eed<    ej        dej	                  Z
i g fdeded	ed
edededee         deee         ee         f         f fdZ xZS )ReferenceRolezA base class for reference roles.

    The reference roles can accept ``link title <target>`` style as a text for
    the role.  The parsed result; link title and target will be stored to
    ``self.title`` and ``self.target``.
    has_explicit_titledisabledtitletargetz^(.+?)\s*(?<!\x00)<(.*?)>$r9   r?  r   r   r@  rA  r  r/   c           	         |                     d          | _        | j                            |          }|rVd| _        t          |                    d                    | _        t          |                    d                    | _        n/d| _        t          |          | _        t          |          | _        t                      
                    |||||||          S )N!Tr   r   F)
startswithrR  explicit_title_rematchrQ  r    grouprS  rT  r   rE  )
r   r9   r?  r   r   r@  rA  r  r   r   s
            r7   rE  zReferenceRole.__call__  s     ,,(..t44 	)&*D#!'--"2"233DJ"7==#3#344DKK&+D#!$DJ"4..DKwwgtVWgwWWWr=   )rN   r   r   r   r   rN  re   recompileDOTALLrX  r   r   r   r   r   r   r   rE  r   r   s   @r7   rP  rP    s           NNNJJJKKK #
#@")LL 46BX XS X3 Xc X3 X!X,0X@DS	XDJ^(<<=X X X X X X X X X Xr=   rP  c                   r     e Zd ZdZdej        ddddf fdZdeddf fd	Zdeddf fd
Z	deddfdZ
 xZS )SphinxTranslatorax  A base class for Sphinx translators.

    This class adds a support for visitor/departure method for super node class
    if visitor/departure method for node class is not found.

    It also provides helper methods for Sphinx translators.

    .. note:: The subclasses of this class might not work with docutils.
              This class is strongly coupled with Sphinx.
    r   builderr*   r/   Nc                     t                                          |           || _        |j        | _        |j        | _        d S r_   )r   r   r`  r&  r~   )r   r   r`  r   s      r7   r   zSphinxTranslator.__init__#  s9    """n )r=   r6   c                     |j         j        D ]+}t          | d|j        z  d          }|r ||            dS ,t	                                          |           dS )z
        Dispatch node to appropriate visitor method.
        The priority of visitor method is:

        1. ``self.visit_{node_class}()``
        2. ``self.visit_{super_node_class}()``
        3. ``self.unknown_visit()``
        zvisit_%sN)r   __mro__r   rN   r   dispatch_visitr   r6   
node_classmethodr   s       r7   rd  zSphinxTranslator.dispatch_visit)  ss     .0 	) 	)JT:1D#EtLLF t GG""4(((((r=   c                     |j         j        D ]+}t          | d|j        z  d          }|r ||            dS ,t	                                          |           dS )z
        Dispatch node to appropriate departure method.
        The priority of departure method is:

        1. ``self.depart_{node_class}()``
        2. ``self.depart_{super_node_class}()``
        3. ``self.unknown_departure()``
        z	depart_%sN)r   rc  r   rN   r   dispatch_departurere  s       r7   ri  z#SphinxTranslator.dispatch_departure:  ss     .0 	- 	-JT;*2E#FMMF t GG&&t,,,,,r=   c                 Z    t                               t          d          ||           d S )Nzunknown node type: %rr   )r   r   r&   r   s     r7   unknown_visitzSphinxTranslator.unknown_visitK  s)    r122D4HHHHHr=   )rN   r   r   r   r   r   r   r   rd  ri  rk  r   r   s   @r7   r_  r_    s        	 	* *) * * * * * * *)4 )D ) ) ) ) ) )"-t - - - - - - -"I$ I4 I I I I I I I Ir=   r_  r   c                 6    t           | j        |i |          S r_   )itertraverse)r   r   r  s      r7   findallro  S  s!    MDM42622333r=   r)   __document_cache__source_pathr~   c                 ,   	 t           \  }}nB# t          $ r5 t          j                            |           }|j        |j        fxa \  }}Y nw xY w|t          |          }ddlm	} |
                    |||           }|                    | d           |S )a&  Return a new empty document object.  This is an alternative of docutils'.

    This is a simple wrapper for ``docutils.utils.new_document()``.  It
    caches the result of docutils' and use it on second call for instantiation.
    This makes an instantiation of document nodes much faster.
    Nr   )addnodes)r   )rp  	NameErrorrf   utilsnew_documentr~   r]   r   sphinxrs  r   note_source)rq  r~   cached_settingsr]   docrs  r   s          r7   rw  rw  ^  s    T$6! T T Tn))+669<s|9SS6_hhhT ((    8K HHHb)))Os   
 <AAr_   )mr   rr   r[  r  
contextlibr   r   r   typesr   typingr   r   r	   r
   r   r   r   r   r   r   r   r   rf   r   docutils.ior   docutils.nodesr   r   r   docutils.parsers.rstr   r   r   docutils.parsers.rst.statesr   docutils.statemachiner   r   r   docutils.utilsr   r    docutils.writers._html_baser!   sphinx.deprecationr"   r#   sphinx.errorsr$   sphinx.localer%   r&   sphinx.utilr'   sphinx.util.typingr(   	getLoggerrN   r   r\  r   docutils.frontendr)   sphinx.buildersr*   sphinx.configr+   sphinx.environmentr,   r-   setr.   rN  r8   re   r   r<   r@   rB   rF   rI   rP   rT   r4   rb   rn   rx   r   r   r   r   r   r   r   r   r   r  r  r  r   r>  rP  NodeVisitorr_  ro  r   rw  r`   r=   r7   <module>r     sB   % % % 				 				  % % % % % %                  ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '        " " " " " " 8 8 8 8 8 8 8 8 8 8 = = = = = = = = = = / / / / / / A A A A A A A A A A - - - - - - - - 6 6 6 6 6 6 I I I I I I I I % % % % % %               + + + + + +		8	$	$BJ[\\	 4((((((''''''$$$$$$333333  '')B *')D   (+suu #d7m$ , , , +I&67 + + + + *# *$ * * * *
3S 3T)_ 3 3 3 3 3 S  T        
* *< *D * * * *!# !$ ! ! ! !
GT'] Gt G G G G
#W #$ # # # #	D$w- 	DD 	D 	D 	D 	D 7i(89 7 7 7 7& C),<"= C C C C. :hsm :	BR8S : : : : A	"23 A A A A@  HSM Y?O5P    #L #L #L #L #L #L #L #LL	 	 	 	 	 	 	 	3N 3N 3N 3N 3N) 3N 3N 3Nl9 9 9 9 9 9 9 9E E E E Eh E E E% % % % %8 % % %4     Fu Fz FiHX>Y F F F F"# # # # #z # # #&@ @ @ @ @i @ @ @@?@ ?@ ?@ ?@ ?@ ?@ ?@ ?@DX X X X XJ X X XD5I 5I 5I 5I 5Iu( 5I 5I 5Iv ''4 4 4 DL
 (H,- - - - c S EN      r=   