
    7 fZ                    (   U d Z ddlm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 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 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% ddl&m'Z'm(Z( ddl)m*Z*  e*j+        e,          Z- ej.        d          Z/er4ddlm0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ dejA        dfiZBd ZC eD            ZEdeFd <   ed_d#            ZGd`d'ZHdad+ZId`d,ZJdbd/ZKdcd0ZLddd3ZMded4ZNded5ZOed_d6            ZPed_d7            ZQedfd:            ZRed_d;            ZSedgdfd<            ZT G d= d>          ZU G d? d@eV          ZW G dA dBeU          ZX G dC dD          ZY G dE dFe           ZZ G dG dHe           Z[edhdM            Z\ G dN dOe          Z] G dP dQe          Z^ G dR dS          Z_ G dT dUe_          Z` G dV dWeja                  ZbdXeFdY<   dgdid^ZcdS )jzUtility functions for docutils.    )annotationsN)Sequence)contextmanager)copy)path)IOTYPE_CHECKINGAnyCallablecast)nodes)
FileOutput)	Directive
directivesroles)Inliner)StateStateMachine
StringList)Reporterunescape)HTMLTranslator)SphinxError)___)loggingz>^(.+?:(?:\d+)?): \((DEBUG|INFO|WARNING|ERROR|SEVERE)/(\d+)?\) )	Generator)
ModuleType)Values)ElementNodesystem_message)Builder)Config)BuildEnvironment)RoleFunction__version_info__zdocutils.__version_info__c                    | t           vrdt          d| }t          |          ddlm} t           |          \  }} |t          | |d           |S )Nzmodule z has no attribute r   )_deprecation_warning)   r   )remove)_DEPRECATED_OBJECTS__name__AttributeErrorsphinx.deprecationr)   )namemsgr)   deprecated_objectcanonical_names        J/var/www/equiseq/venv/lib/python3.11/site-packages/sphinx/util/docutils.py__getattr__r5   /   ss    &&&>>>d>>S!!!777777(;D(A%~4GGGG    zset[type[Element]]additional_nodesreturnGenerator[None, None, None]c               #    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listr7   unregister_nodediscard)r;   r<   nodes      r4   docutils_namespacerA   >   s      +:122el##!,
)** 	+ 	+DD!!!$$T****	+ 	+ "-
)** 	+ 	+DD!!!$$T****	+s   6B AC.r0   strboolc                    | t           j        v S )z1Check the *name* directive is already registered.)r   r;   r0   s    r4   is_directive_registeredrF   O   s    :)))r6   	directivetype[Directive]Nonec                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)r0   rG   s     r4   rK   rK   T   s     !$	22222r6   c                    | t           j        v S )z,Check the *name* role is already registered.)r   r<   rE   s    r4   is_role_registeredrM   ]   s    5<r6   roler&   c                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)r0   rN   s     r4   register_rolerQ   b   s     
dD)))))r6   c                F    t           j                            | d           dS )z Unregister a role from docutils.N)r   r<   poprE   s    r4   unregister_rolerT   k   s     	LT4     r6   r@   type[Element]c                F    t          t          j        d| j        z             S )z'Check the *node* is already registered.visit_)hasattrr   GenericNodeVisitorr-   r@   s    r4   is_node_registeredr[   p   s    5+X-EFFFr6   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.
    rW   N)rX   r   rY   r-   _add_node_class_namesr7   addrZ   s    r4   register_noder_   u   sY     5+X-EFF ##T]O444T"""""# #r6   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()``.
    rW   depart_N)rX   r   rY   r-   delattrSparseNodeVisitorrZ   s    r4   r>   r>      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r6   c               #     K   ddl m dd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_coderB   reporterReporter | Noner8   r
   c                     |           S N rg   rh   rf   s     r4   patched_get_languagez2patched_get_language.<locals>.patched_get_language       |M***r6   rk   rg   rB   rh   ri   r8   r
   )docutils.languagesrf   docutils	languagesrn   rf   s    @r4   rn   rn      s       0/////+ + + + + + +7*>' +7''','6666s	   : Ac               #     K   ddl m dd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   re   Nrg   rB   rh   ri   r8   r
   c                     |           S rk   rl   rm   s     r4   rn   z6patched_rst_get_language.<locals>.patched_get_language   ro   r6   rk   rp   )docutils.parsers.rst.languagesrf   rr   parsersrstrs   rt   s    @r4   patched_rst_get_languagerz      s       <;;;;;+ + + + + + +C6J&3 7C&333l&3BBBBs   A A+confdir
str | Nonec              #    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abspathrS   )r{   docutilsconfigs     r4   using_user_docutils_confr      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)classesrN   )	settingsfootnote_references
isinstanceprevious_siblingtypebodyappendstarttagtagname)selfr@   label_styles      r4   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 	5r6   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   r@   s     r4   depart_footnotez'du19_footnotes.<locals>.depart_footnote   sk    	&&&$...FFt**& & 	+I\*****	+ 	+r6      )r      )r   r   r   rr   r'   )r   r   old_visit_footnoteold_depart_footnotes       r4   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)rn   rz   r   r   )r{   s    r4   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                  J    e Zd ZdZddZddZd dZddZddZd!dZ	d"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.
    r8   rI   c                &    d | _         d | _        d S )Nc                 
    d g fS rk   rl   argss    r4   <lambda>z/CustomReSTDispatcher.__init__.<locals>.<lambda>   s
    tRj r6   c                 
    d g fS rk   rl   r   s    r4   r   z/CustomReSTDispatcher.__init__.<locals>.<lambda>   s
    4* r6   )directive_func
roles_funcr   s    r4   __init__zCustomReSTDispatcher.__init__   s    (@(@$<$<r6   c                .    |                                   d S rk   )enabler   s    r4   	__enter__zCustomReSTDispatcher.__enter__   s    r6   exc_typetype[Exception]	exc_value	Exception	tracebackr
   c                .    |                                   d S rk   )disable)r   r   r   r   s       r4   __exit__zCustomReSTDispatcher.__exit__  s     	r6   c                    t           j        | _        t          j        | _        | j        t           _        | j        t          _        d S rk   )r   rG   r   r   rN   	role_funcr   s    r4   r   zCustomReSTDispatcher.enable  s-    (2#~
Y


r6   c                J    | j         t          _        | j        t          _        d S rk   )r   r   rG   r   r   rN   r   s    r4   r   zCustomReSTDispatcher.disable  s    #2
^


r6   directive_namerB   language_moduler   documentnodes.document3tuple[type[Directive] | None, list[system_message]]c                0    |                      |||          S rk   )r   )r   r   r   r   s       r4   rG   zCustomReSTDispatcher.directive  s     "">?HMMMr6   	role_namelinenointrh   r   )tuple[RoleFunction, list[system_message]]c                2    |                      ||||          S rk   )r   )r   r   r   r   rh   s        r4   rN   zCustomReSTDispatcher.role  s#     ~~i$h0 0 	0r6   Nr8   rI   )r   r   r   r   r   r
   r8   rI   r   rB   r   r   r   r   r8   r   
r   rB   r   r   r   r   rh   r   r8   r   )r-   
__module____qualname____doc__r   r   r   r   r   rG   rN   rl   r6   r4   r   r      s         = = = =      
   $ $ $ $N N N N
0 0 0 0 0 0r6   r   c                      e Zd ZdS )ElementLookupErrorN)r-   r   r   rl   r6   r4   r   r     s        Dr6   r   c                  D     e Zd ZdZd fdZddZd fdZd fdZ xZS )sphinx_domainszcMonkey-patch directive and role dispatch, so that domain-specific
    markup takes precedence.
    envr%   r8   rI   c                V    || _         t                                                       d S rk   )r   superr   )r   r   	__class__s     r4   r   zsphinx_domains.__init__%  s&    r6   r   rB   r0   r
   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_datar   r   )r   r   r0   domain_namedomainelement
def_domains          r4   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;  r6   r   r   r   r   r   r   c                    	 |                      d|          S # t          $ r& t                                          |||          cY S w xY w)NrG   )r   r   r   rG   )r   r   r   r   r   s       r4   rG   zsphinx_domains.directiveG  s`    	P--k>JJJ! 	P 	P 	P77$$^_hOOOOO	Ps    -A	A	r   r   r   rh   r   r   c                    	 |                      d|          S # t          $ r' t                                          ||||          cY S w xY w)NrN   )r   r   r   rN   )r   r   r   r   rh   r   s        r4   rN   zsphinx_domains.roleO  s`    	N--fi@@@! 	N 	N 	N77<<	?FHMMMMM	Ns    .A
	A
)r   r%   r8   rI   )r   rB   r0   rB   r8   r
   r   r   )	r-   r   r   r   r   r   rG   rN   __classcell__r   s   @r4   r   r   !  s              ! ! ! !<P P P P P PN N N N N N N N N Nr6   r   c                      e Zd ZddZdS )WarningStreamtextrB   r8   rI   c                `   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          r4   writezWarningStream.writeY  s    ""4(( 	9NN4;;v../////$+NN$4$4!HdEmmB--4466GJJtWxJ88888r6   N)r   rB   r8   rI   )r-   r   r   r   rl   r6   r4   r   r   X  s(        9 9 9 9 9 9r6   r   c                  V     e Zd Zedd            Zej        ej        ddfd fdZ xZ	S )LoggingReporterrh   r   r8   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)clsrh   s     r4   from_reporterzLoggingReporter.from_reporterd  s4     s8?H$98;N&(>@ @ 	@r6   Fbackslashreplacer  rB   r  r   r  debugrC   r  rI   c                    t          t          t                                }t                                          ||||||           d S )N)r  )r   r   r   r   r   )r   r  r  r  r	  r  streamr   s          r4   r   zLoggingReporter.__init__j  sU     b-//**zm 	 	E 	E 	E 	E 	Er6   )rh   r   r8   r   )r  rB   r  r   r  r   r	  rC   r  rB   r8   rI   )
r-   r   r   classmethodr  r   WARNING_LEVELSEVERE_LEVELr   r   r   s   @r4   r   r   c  s        @ @ @ [@
 9A8N#+#8&8E E E E E E E E E E Er6   r   c                  $     e Zd ZdZd fdZ xZS )NullReporterz A dummy reporter; write nothing.r8   rI   c                N    t                                          ddd           d S )Nr   i     )r   r   )r   r   s    r4   r   zNullReporter.__init__u  s%    S!$$$$$r6   r   )r-   r   r   r   r   r   r   s   @r4   r  r  r  sC        **% % % % % % % % % %r6   r  stater   contentr   c              #     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)memorh   get_source_and_liner   input_lines)r  r  gsalstate_machines       r4   switch_source_inputr  y  sx      7z"6 %R..$+!2?2S
/ 37
///$
/6666s   AA A,c                  0     e Zd ZdZd
 fdZd fd	Z xZS )SphinxFileOutputz#Better FileOutput class for Sphinx.kwargsr
   r8   rI   c                    |                     dd          | _        |                    dd            t                      j        di | d S )Noverwrite_if_changedFencodingzutf-8rl   )rS   r   
setdefaultr   r   )r   r  r   s     r4   r   zSphinxFileOutput.__init__  sS    $*JJ/Eu$M$M!*g...""6"""""r6   datarB   c                ~   | 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   r   r   existsopenr!  readr   r   )r   r#  fr   s      r4   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)r  r
   r8   rI   )r#  rB   r8   rB   )r-   r   r   r   r   r   r   r   s   @r4   r  r    sa        --# # # # # #
# # # # # # # # # #r6   r  c                  Z    e Zd ZdZedd            Zedd            ZddZddZd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.
    r8   r%   c                .    | j         j        j        j        S z3Reference to the :class:`.BuildEnvironment` object.)r  r   r   r   r   s    r4   r   zSphinxDirective.env  s     z"+//r6   r$   c                    | j         j        S z)Reference to the :class:`.Config` object.r   configr   s    r4   r4  zSphinxDirective.config       xr6   tuple[str, int]c                @    | j                             | j                  S )zGet source and line number.)r  r  r   r   s    r4   get_source_infozSphinxDirective.get_source_info  s    !55dkBBBr6   r@   r!   rI   c                H    |                                  \  |_        |_        dS )z'Set source and line number to the node.Nr8  r  liner   s     r4   set_source_infozSphinxDirective.set_source_info  s     !%!5!5!7!7TYYYr6   rB   c                d    d                     d |                                 D                       S )&Get current location info for logging.r   c              3  4   K   | ]}t          |          V  d S rk   rB   .0ss     r4   	<genexpr>z/SphinxDirective.get_location.<locals>.<genexpr>  (      ??1A??????r6   r   r8  r   s    r4   get_locationzSphinxDirective.get_location  /    xx??(<(<(>(>??????r6   Nr8   r%   r8   r$   )r8   r6  r@   r!   r8   rI   r8   rB   )
r-   r   r   r   propertyr   r4  r8  r<  rG  rl   r6   r4   r.  r.    s          0 0 0 X0    XC C C C8 8 8 8@ @ @ @ @ @r6   r.  c                      e Zd ZU dZded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   	 d!d"dZd#dZed$d            Zed%d            Z	d&d'dZ
d&d(dZd)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.
    rB   r0   rawtextr   r   r   r   inlinerzdict[str, Any]optionsSequence[str]r  Nrl   dict | Noner8   'tuple[list[Node], list[system_message]]c                   || _         t          |          | _        || _        || _        ||ni | _        || _        |r|                                | _        nZ| j	        j
                            dd          | _        | j        s| j	        j        j        | _        | j        sd}t          |          |                                 S )Ndefault_roler   zcannot determine default role!)rP  r   r   r   rQ  rR  r  r   r0   r   r   r   r4  rW  r   run)	r   r0   rP  r   r   rQ  rR  r  r1   s	            r4   __call__zSphinxRole.__call__  s     TNN	")"5ww2  	'

DII*..~rBBDI9 9 HO8	9 '6!#&&&xxzzr6   c                    t           rk   )NotImplementedErrorr   s    r4   rX  zSphinxRole.run  s    !!r6   r%   c                .    | j         j        j        j        S r0  )rQ  r   r   r   r   s    r4   r   zSphinxRole.env  s     |$-11r6   r$   c                    | j         j        S r2  r3  r   s    r4   r4  zSphinxRole.config  r5  r6   
int | Noner6  c                R    || j         }| j        j                            |          S rk   )r   rQ  rh   r  )r   r   s     r4   r8  zSphinxRole.get_source_info  s'    >[F|$88@@@r6   r@   r!   rI   c                J    |                      |          \  |_        |_        d S rk   r:  )r   r@   r   s      r4   r<  zSphinxRole.set_source_info  s"    !%!5!5f!=!=TYYYr6   c                d    d                     d |                                 D                       S )r>  r   c              3  4   K   | ]}t          |          V  d S rk   r@  rA  s     r4   rD  z*SphinxRole.get_location.<locals>.<genexpr>   rE  r6   rF  r   s    r4   rG  zSphinxRole.get_location  rH  r6   Nrl   r0   rB   rP  rB   r   rB   r   r   rQ  r   rR  rT  r  rS  r8   rU  )r8   rU  rI  rJ  rk   )r   r^  r8   r6  )r@   r!   r   r^  r8   rI   rL  )r-   r   r   r   __annotations__rY  rX  rM  r   r4  r8  r<  rG  rl   r6   r4   rO  rO    s3          IIILLLIIIKKK   Z\    ." " " " 2 2 2 X2    XA A A A A
> > > > >@ @ @ @ @ @r6   rO  c                  ~     e Zd ZU dZded<   ded<   ded<   ded<    ej        dej                  Z	 dd 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``.
    rC   has_explicit_titledisabledrB   titletargetz^(.+?)\s*(?<!\x00)<(.*?)>$Nrl   r0   rP  r   r   r   rQ  r   rR  rT  r  rS  r8   rU  c           	        |i }|                     d          | _        | j                            |          }|rVd| _        t          |                    d                    | _        t          |                    d                    | _        n/d| _        t          |          | _        t          |          | _        t                      
                    |||||||          S )N!Tr   r   F)
startswithri  explicit_title_rematchrh  r   grouprj  rk  r   rY  )
r   r0   rP  r   r   rQ  rR  r  r   r   s
            r4   rY  zReferenceRole.__call__  s     ?G ,,(..t44 	)&*D#!'--"2"233DJ"7==#3#344DKK&+D#!$DJ"4..DKwwgtVWgwWWWr6   rc  rd  )r-   r   r   r   re  recompileDOTALLro  rY  r   r   s   @r4   rg  rg    s           NNNJJJKKK #
#@")LL Z\X X X X X X X X X X Xr6   rg  c                  D     e Zd ZdZd fdZd fdZd fdZd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   r   builderr#   r8   rI   c                    t                                          |           || _        |j        | _        |j        | _        d S rk   )r   r   rw  r4  r   )r   r   rw  r   s      r4   r   zSphinxTranslator.__init__4  s9    """n )r6   r@   r!   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   r-   r   dispatch_visitr   r@   
node_classmethodr   s       r4   r{  zSphinxTranslator.dispatch_visit:  ss     .0 	) 	)JT:1D#EtLLF t GG""4(((((r6   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   rz  r   r-   r   dispatch_departurer|  s       r4   r  z#SphinxTranslator.dispatch_departureK  ss     .0 	- 	-JT;*2E#FMMF t GG&&t,,,,,r6   c                Z    t                               t          d          ||           d S )Nzunknown node type: %rr   )r   r   r   r   s     r4   unknown_visitzSphinxTranslator.unknown_visit\  s)    r122D4HHHHHr6   )r   r   rw  r#   r8   rI   rK  )	r-   r   r   r   r   r{  r  r  r   r   s   @r4   rv  rv  (  s        	 	* * * * * *) ) ) ) ) )"- - - - - -"I I I I I I I Ir6   rv  ztuple[Values, Reporter]__document_cache__source_pathr   r
   r   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  )r  	NameErrorrr   utilsnew_documentr   rh   r   sphinxr  r   note_source)r  r   cached_settingsrh   docr  r   s          r4   r  r  e  s    T$6! T T Tn))+669<s|9SS6_hhhT ((    8K HHHb)))Os   
 <AA)r8   r9   )r0   rB   r8   rC   )r0   rB   rG   rH   r8   rI   )r0   rB   rN   r&   r8   rI   )r0   rB   r8   rI   )r@   rU   r8   rC   )r@   rU   r8   rI   )r{   r|   r8   r9   rk   )r  r   r  r   r8   r9   )r  rB   r   r
   r8   r   )dr   
__future__r   r   rr  collections.abcr   
contextlibr   r   r   typingr   r	   r
   r   r   rr   r   docutils.ior   docutils.parsers.rstr   r   r   docutils.parsers.rst.statesr   docutils.statemachiner   r   r   docutils.utilsr   r   docutils.writers._html_baser   sphinx.errorsr   sphinx.localer   r   sphinx.utilr   	getLoggerr-   r   rs  r   r   typesr   docutils.frontendr   docutils.nodesr    r!   r"   sphinx.buildersr#   sphinx.configr$   sphinx.environmentr%   sphinx.util.typingr&   r'   r,   r5   setr7   re  rA   rF   rK   rM   rQ   rT   r[   r_   r>   rn   rz   r   r   r   r   r   r   r   r   r   r  r  r  r.  rO  rg  NodeVisitorrv  r  rl   r6   r4   <module>r     s_   % % % " " " " " " 				 				 $ $ $ $ $ $ % % % % % %             9 9 9 9 9 9 9 9 9 9 9 9 9 9        " " " " " " = = = = = = = = = = / / / / / / A A A A A A A A A A - - - - - - - - 6 6 6 6 6 6 % % % % % %              		8	$	$BJ[\\	 
0))))))      ((((((<<<<<<<<<<''''''$$$$$$333333////// 24OP 
	 	 	 (+suu  , , , , + + + + * * * *
3 3 3 3       
* * * *! ! ! !
G G G G
# # # #	D 	D 	D 	D 7 7 7 7& C C C C. : : : : A A A A@     '0 '0 '0 '0 '0 '0 '0 '0T	 	 	 	 	 	 	 	4N 4N 4N 4N 4N) 4N 4N 4Nn9 9 9 9 9 9 9 9E E E E Eh E E E% % % % %8 % % % 7 7 7 7"# # # # #z # # #&@ @ @ @ @i @ @ @@B@ B@ B@ B@ B@ B@ B@ B@J"X "X "X "X "XJ "X "X "XJ5I 5I 5I 5I 5Iu( 5I 5I 5It , + + +      r6   