
    }cJ>                        U d Z ddlZddlmZmZmZmZmZmZ ddl	Z
ddlZ
ddlZ
ddl
mZmZ ddlmZmZmZmZ ddlmZ ddlmZmZ ddlmZ dd	lmZmZ dd
lmZ erddl m!Z! ddl"m#Z# ej$        ej%        ej&        ej'        ej$        ej(        ej'        ej'        ej$        ej&        d
Z) G d de          Z* G d de*          Z+ G d de          Z, G d de          Z- ej.        d          Z/ G d de          Z0 G d de0          Z1 ej.        d          Z2 ej.        d          Z3 G d de          Z4 ej.        dej5                  Z6 G d  d!e          Z7i g fd"e8d#e8d$e8d%e9d&e
j:        j;        j<        j=        d'ed(ee8         d)eee         ee         f         fd*Z>e
j:        j;        j?        j@        e
j:        j;        j?        jA        d+e>_B         e*ejC        ,           e+d-.           e,             e-             e0             e1             e4             e4             e7            d/	ZDee8ef         eEd0<   d1d2d)ee8ef         fd3ZFdS )4z#Handlers for additional ReST roles.    N)TYPE_CHECKINGAnyDictListTupleType)nodesutils)ElementNodeTextElementsystem_message)addnodes)___)ws_re)ReferenceRole
SphinxRole)RoleFunction)Sphinx)BuildEnvironment)
commanddfnkbd
mailheadermakevarmanpagemimetype	newsgroupprogramregexpc                       e Zd ZU dZej        Zee         e	d<   e
j        Zee         e	d<   	 	 	 ddededee         dee         ded	df fd
Zdeded	eeef         fdZd	eee         ee         f         fdZd	eee         ee         f         fdZd	eee         ee         f         fdZdddedededed	eeef         fdZde
j        dddeded	eee         ee         f         f
dZ xZS )XRefRoleaA  
    A generic cross-referencing role.  To create a callable that can be used as
    a role function, create an instance of this class.

    The general features of this role are:

    * Automatic creation of a reference and a content node.
    * Optional separation of title and target with `title <target>`.
    * The implementation is a class rather than a function to make
      customization easier.

    Customization can be done in two ways:

    * Supplying constructor parameters:
      * `fix_parens` to normalize parentheses (strip from target, and add to
        title if configured)
      * `lowercase` to lowercase the target
      * `nodeclass` and `innernodeclass` select the node classes for
        the reference and the content node

    * Subclassing and overwriting `process_link()` and/or `result_nodes()`.
    	nodeclassinnernodeclassFN
fix_parens	lowercasewarn_danglingreturnc                     || _         || _        || _        ||| _        ||| _        t                                                       d S N)r&   r'   r(   r$   r%   super__init__)selfr&   r'   r$   r%   r(   	__class__s         ,lib/python3.11/site-packages/sphinx/roles.pyr-   zXRefRole.__init__B   sV     %"* 	'&DN 	1"0D    titletargetc                     | j         s0|                    d          r
|d d         }| j        j        r|dz  }|                    d          r
|d d         }||fS )Nz())has_explicit_titleendswithconfigadd_function_parentheses)r.   r2   r3   s      r0   update_title_and_targetz XRefRole.update_title_and_targetO   so    & 	~~d## #crc
{3 ??4   	!CRC[Ff}r1   c                 D   d| j         vr#d| j         c| _        | _        d| j        g| _        nF| j                             dd          \  | _        | _        d| j        | j        d| j        g| _        | j        r|                                 S |                                 S )N: xref   -)name	refdomainreftypeclassessplitdisabledcreate_non_xref_nodecreate_xref_node)r.   s    r0   runzXRefRole.run\   s    di 	^+-ty(DNDL"DL1DLL+/9??3+B+B(DNDL"DNt~~~t||4\]DL= 	+,,...((***r1   c                 &   t          j        | j        dd                    }| j        r d| _        |                     |d          \  }}|                     | j        || j                  }| 	                    | j
        j        | j        |d          S )Nr?   Fr=   rD   is_ref)r
   unescapetextr&   r6   r:   r%   rawtextrD   result_nodesinlinerdocumentenv)r.   rO   r3   nodes       r0   rG   zXRefRole.create_non_xref_nodei   s    ~dim,,? 	B&+D#77bAALD&""4<t|"LL  !6$u UUUr1   c                     | j         }| j        }| j        r|                                }| j        r|                     ||          \  }}| j        j        | j        | j	        | j
        | j        d} | j        | j        fi |}|                     |           |                     | j        || j
        ||          \  }}||d<   ||                     | j        || j                  z  }|                     | j        j        | j        |d          S )N)refdocrB   rC   refexplicitrefwarn	reftargetrK   TrL   )r3   r2   r'   lowerr&   r:   rT   docnamerB   rC   r6   r(   r$   rP   set_source_infoprocess_linkr%   rD   rQ   rR   rS   )r.   r3   r2   optionsrefnodes        r0   rH   zXRefRole.create_xref_noder   s%   
> 	$\\^^F? 	H 88GGME6 "X- $"l"&"9"0	2 2
 !$.9999W%%% ))$(GT=T*/9 9v%4&&t|UDL&QQQ  !6'RV WWWr1   rT   r   r`   r6   c                 0    |t          j        d|          fS )zCalled after parsing title and target text, and creating the
        reference node (given in *refnode*).  This method can alter the
        reference node and must return a new (or the same) ``(title, target)``
        tuple.
         )r   sub)r.   rT   r`   r6   r2   r3   s         r0   r^   zXRefRole.process_link   s     eiV,,,,r1   rS   rU   rM   c                     |gg fS )a(  Called before returning the finished nodes.  *node* is the reference
        node if one was created (*is_ref* is then true), else the content node.
        This method can add other nodes and must return a ``(nodes, messages)``
        tuple (the usual return value of a role function).
         )r.   rS   rT   rU   rM   s        r0   rQ   zXRefRole.result_nodes   s     vrzr1   )FFNNF)__name__
__module____qualname____doc__r   pending_xrefr$   r   r   __annotations__r	   literalr%   r   boolr-   strr   r:   r   r   r   rI   rG   rH   r^   rS   rQ   __classcell__r/   s   @r0   r#   r#   '   s         .  (4ItG}444(-ND%555CHVZ', 4 D  MBF{BS $15     S # %S/    +U4:tN';;< + + + +VeDJ^8L,L&M V V V VX%T
D4H(H"I X X X X6- 2 -W -Z^ --),-16sCx- - - -U^ :L T[ !&+DJ^8L,L&M       r1   r#   c                   H     e Zd Zdddededededeeef         f fdZ xZS )	AnyXRefRolerT   r   r`   r6   r2   r3   r)   c                     t                                          |||||          }|j                            |j                   |S r+   )r,   r^   
attributesupdateref_context)r.   rT   r`   r6   r2   r3   resultr/   s          r0   r^   zAnyXRefRole.process_link   sA    %%c74FvVV!!#/222r1   )	rf   rg   rh   r   rm   rn   r   r^   ro   rp   s   @r0   rr   rr      st         2 W Z^ ),16sCx         r1   rr   c                   N    e Zd Zdeee         ee         f         fdZdefdZ	dS )PEPr)   c                    d| j                             d          z  }dt          d          | j        z  |dd fg}t	          j        |          }t          j        dd|g          }| j        j        	                    |           	 | 
                                }t          j        ddd|d	g
          }| j        r#|t          j        | j        | j                  z  }n"d| j        z   }|t          j        ||          z  }nw# t          $ rj | j        j                            t%          d          | j        z  | j                  }| j                            | j        | j        |          }	|	g|gfcY S w xY w|||gg fS )Nindex-%sindexsinglez$Python Enhancement Proposals; PEP %sr=   entriesidsFpepinternalrefurirD   zPEP zinvalid PEP number %sline)rT   new_serialnor   r3   r   r|   r	   rR   rS   note_explicit_target	build_uri	referencer6   strongr2   
ValueErrorreportererrorr   linenoproblematicrP   
r.   	target_idr   r|   r3   r   r   r2   msgprbs
             r0   rI   zPEP.run   s   !6!6w!?!??	a FGG$+Ur4) * w///b"9+666226:::	 ^^%%FBvX]W^___I& 8U\$*djAAA		+U\%777	 	  	  	 ,'--b1H.I.IDK.W37; . @ @C,**4<sKKC53%<		  vy)2--s   A:D A1E76E7c                    | j         j        j        j        }| j                            dd          }t          |          dk    r#|dt          |d                   |d         fz  z   S |dt          |d                   z  z   S )N#r?      zpep-%04d/#%sr   z	pep-%04d/)rR   rS   settingspep_base_urlr3   rE   lenintr.   base_urlrets      r0   r   zPEP.build_uri   sx    <(1>kQ''s88q= 	8nCFSV/DDDDkCAKK777r1   N
rf   rg   rh   r   r   r   r   rI   rn   r   re   r1   r0   ry   ry      s]        .U4:tN';;< . . . .283 8 8 8 8 8 8r1   ry   c                   N    e Zd Zdeee         ee         f         fdZdefdZ	dS )RFCr)   c                    d| j                             d          z  }dd| j        z  |dd fg}t          j        |          }t          j        dd|g          }| j        j                            |           	 | 	                                }t          j
        ddd|d	g
          }| j        r#|t          j        | j        | j                  z  }n"d| j        z   }|t          j        ||          z  }nw# t          $ rj | j        j                            t#          d          | j        z  | j                  }| j                            | j        | j        |          }	|	g|gfcY S w xY w|||gg fS )Nr{   r|   r}   zRFC; RFC %sr=   r~   r   Frfcr   zRFC zinvalid RFC number %sr   )rT   r   r3   r   r|   r	   rR   rS   r   r   r   r6   r   r2   r   r   r   r   r   r   rP   r   s
             r0   rI   zRFC.run   s   !6!6w!?!??	mdk99b$OPw///b"9+666226:::	 ^^%%FBvX]W^___I& 8U\$*djAAA		+U\%777	 	  	  	 ,'--b1H.I.IDK.W37; . @ @C,**4<sKKC53%<		  vy)2--s   ;A:C6 6A1E*)E*c                 6   | j         j        j        j        }| j                            dd          }t          |          dk    r1|| j         j        t          |d                   z  z   dz   |d         z   S || j         j        t          |d                   z  z   S )Nr   r?   r   r   )	rR   rS   r   rfc_base_urlr3   rE   r   rfc_urlr   r   s      r0   r   zRFC.build_uri   s    <(1>kQ''s88q= 	Adl2SQ[[@@3FQOOdl2SQ[[@@@r1   Nr   re   r1   r0   r   r      sd        .U4:tN';;< . . . .0A3 A A A A A Ar1   r   (?<!&)&(?![&\s])c                   b    e Zd Z ej        d          Zdeee         ee	         f         fdZ
dS )GUILabelr   r)   c                    t          j        | j        | j        g          }| j                            | j                  }|t          j        |                    d                    z  }|D ]o}|	                    dd          }t          j        |d                   }t          j        dd|dg          }||z  }|t          j        |dd                    z  }p|gg fS )	N)rP   rD   r   z&&&r=   acceleratorrK   r?   )
r	   inlinerP   rA   amp_rerE   rO   Textpopreplace)r.   rU   spansspanletterr   s         r0   rI   zGUILabel.run   s    |DL49+FFF!!$),,
599Q<<((( 	) 	)D<<c**DZQ((F,r2vOOOKKDEJtABBx(((DDvrzr1   N)rf   rg   rh   recompiler   r   r   r   r   rI   re   r1   r0   r   r      sT        RZ+,,FU4:tN';;<      r1   r   c                   P     e Zd ZdZdeee         ee         f         f fdZ xZ	S )MenuSelectionu   ‣r)   c                     | j                             d| j                  | _         t                                                      S )Nz-->)rO   r   BULLET_CHARACTERr,   rI   )r.   r/   s    r0   rI   zMenuSelection.run  s1    I%%eT-BCC	ww{{}}r1   )
rf   rg   rh   r   r   r   r   r   rI   ro   rp   s   @r0   r   r     s]        .U4:tN';;<          r1   r   z	{([^}]+)}z(\\*{|\\*})c                   ~    e Zd Z ej        d          Zdeee         ee	         f         fdZ
dedee         fdZdS )EmphasizedLiteralz(\\\\|\\{|\\}|{|})r)   c                     |                      | j                  }t          j        | j        dg|R | j                                        | j        gd}|gg fS )Nr=   )rolerD   )parserO   r	   rl   rP   rA   r[   )r.   childrenrU   s      r0   rI   zEmphasizedLiteral.run  sk    ::di((}T\2 J J J"&)//"3"3di[J J J vrzr1   rO   c                    g }dg}| j                             |          D ]}|dk    r|dxx         dz  cc<   |dk    r[t          |          dk    r|d         dk    r|dxx         dz  cc<   P|                    d           |                    d           {|dk    rt          |          d	k    r|d
         dk    rt          |d                   dk    rn|d         r-|                    t	          j        |d                              |                    t	          j        |d         |d                              dg}'|                    d           d                    |          g}T|dk    r|dxx         dz  cc<   l|dk    r|dxx         dz  cc<   |dxx         |z  cc<   d                    |          r<d                    |          }|                    t	          j        |                     |S )Nr=   z\\\{r   r5   }   r?   r   z\{z\})	parens_rerE   r   appendr	   r   emphasisjoin)r.   rO   rw   stackparts        r0   r   zEmphasizedLiteral.parse  s(   N((.. 	" 	"Dv~ "b			T!				 "u::? %uRyC'7 %"III$IIII LL%%%LL$$$$ "u::? 	-uQx3 	-3uQx==1;L 	-Qx <ejq&:&:;;;MM%.q58"D"DEEEDEE LL%%%WWU^^,EE "b			S 				 "b			S 				b			T!				775>> 	,775>>DMM%*T**+++r1   N)rf   rg   rh   r   r   r   r   r   r   r   rI   rn   r   re   r1   r0   r   r     sz        
011IU4:tN';;<    %# %$t* % % % % % %r1   r   	\((.*)\)$c                   n    e Zd Z ej        dej                  Zdeee	         ee
         f         fdZdS )Abbreviationr   r)   c                 R   | j                                         }| j                            | j                  }|rL| j        d |                                                                         }|                    d          |d<   n| j        }t          j	        | j
        |fi |gg fS )Nr?   explanation)r_   copyabbr_researchrO   startstripgroupr	   abbreviationrP   )r.   r_   matchedrO   s       r0   rI   zAbbreviation.runG  s    ,##%%,%%di00 	9-gmmoo-.4466D%,]]1%5%5GM""9D"4<AAAABBFFr1   N)rf   rg   rh   r   r   Sr   r   r   r   r   rI   re   r1   r0   r   r   D  s^        bjrt,,G	GU4:tN';;< 	G 	G 	G 	G 	G 	Gr1   r   rA   rP   rO   r   rR   r_   contentr)   c                    |                                 }t          j        j        j                            |           |                    dd          }dg}|r|                    d           d|v r|                    |d                    |r||vr|                    |           t          j
        ||||          }	|	gg fS )Nlanguager=   code	highlightrD   )rD   r   )r   docutilsparsersrstrolesset_classesgetr   extendr	   rl   )
rA   rP   rO   r   rR   r_   r   r   rD   rU   s
             r0   	code_roler   k  s     llnnG**7333{{:r**HhG ${###G +wy)*** !HG+ !x   =$(KKKD62:r1   )classr   )r$   T)r(   )	downloadanyr   r   guilabelmenuselectionfilesampabbrspecific_docrolesappr   c                    ddl m} t                                          D ]K\  }}|                    ||          }|                    ||d|gi          }|                    ||           Lt                                          D ]\  }}|                    ||           |                    dt                     ddddS )Nr   )r   rD   r   builtinT)versionparallel_read_safeparallel_write_safe)
docutils.parsers.rstr   generic_docrolesitemsGenericRole
CustomRoleregister_local_roler   register_canonical_roler   )r   r   rolenamer$   genericr   funcs          r0   setupr    s    ******/5577 2 2)##Hi88'Iz3JKK!!(D1111+1133 2 2$!!(D1111 
!!&)444 "#  r1   )Gri   r   typingr   r   r   r   r   r   docutils.parsers.rst.directivesr   docutils.parsers.rst.rolesdocutils.parsers.rst.statesr	   r
   docutils.nodesr   r   r   r   sphinxr   sphinx.localer   r   sphinx.utilr   sphinx.util.docutilsr   r   sphinx.util.typingr   sphinx.applicationr   sphinx.environmentr   literal_strongr   rl   literal_emphasisr   r   r#   rr   ry   r   r   _amp_rer   r   
_litvar_rer   r   r   _abbr_rer   rn   r   r   r   statesInlinerr   
directivesclass_option	unchangedr_   download_referencer   rk   r  re   r1   r0   <module>r     s   ) ) ) 				 > > > > > > > > > > > > > > > > & & & & ! ! ! ! " " " " ! ! ! ! ! ! ! ! E E E E E E E E E E E E                     : : : : : : : : + + + + + + 4))))))333333 &>=+&)*&m   v v v v v} v v vr    (    8  8  8  8  8-  8  8  8FA A A A A- A A AD "*(
)
)    z   $    H    RZ$$
BJ~&&	/ / / / /
 / / /d 2:lBD))G G G G G: G G GR !r C # S # '+2:+/9 dT.%99:   , !,9 $/9 	  8#>???;T***355355

"]__LNN. . 4\)*    x DcN      r1   