
    ~TiW                    \   U d Z ddlmZ ddlZddlmZ ddlZddlZddlm	Z	m
Z
 ddlmZ ddlmZmZ ddlmZ dd	lmZmZmZ er.dd
lm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" ddl#m$Z$m%Z% ejL                  e	jN                  ejP                  ejL                  ejP                  ejP                  ejL                  e	jR                  dZ* G d de      Z+ G d de+      Z, G d de      Z- G d de      Z. G d de      Z/ G d de      Z0d3dZ1 G d de      Z2 G d  d!e2      Z3 G d" d#e      Z4 G d$ d%e      Z5 G d& d'e      Z6 G d( d)e      Z7	 	 d4	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d5d*Z8ejr                  jt                  jv                  jx                  ejr                  jt                  jv                  jz                  d+e8_>         e+ej~                  ,       e,d-.       e-        e.        e/        e0        e2        e3        e4        e4        e5        e6        e7       d/Z@d0eAd1<   d6d2ZBy)7z#Handlers for additional ReST roles.    )annotationsN)TYPE_CHECKING)nodesutils)addnodes)___)ws_re)ReferenceRole
SphinxRole_normalize_options)Sequence)AnyFinal)ElementNodeTextElementsystem_message)Sphinx)BuildEnvironment)ExtensionMetadataRoleFunction)commanddfn
mailheadermakevarmimetype	newsgroupprogramregexpc                       e Zd ZU dZej
                  Zded<   ej                  Z
ded<   	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 d fdZddZddZdd	Zdd
Z	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 ddZ xZS )XRefRolea<  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()`.
    ztype[Element]	nodeclassztype[TextElement]innernodeclassc                p    || _         || _        || _        ||| _        ||| _        t
        |           y N)
fix_parens	lowercasewarn_danglingr#   r$   super__init__)selfr'   r(   r#   r$   r)   	__class__s         ?/home/agent/.local/lib/python3.12/site-packages/sphinx/roles.pyr+   zXRefRole.__init__E   sA     %"* &DN%"0D    c                    | j                   s>| j                  j                  r|j                  d      s|dz  }n|j	                  d      }|j	                  d      }||fS )Nz())has_explicit_titleconfigadd_function_parenthesesendswithremovesuffix)r,   titletargets      r.   update_title_and_targetz XRefRole.update_title_and_targetW   sY    &&{{33~~d+TME **40$$T*f}r/   c                |   d| j                   vr-d| j                   c| _        | _        d| j                  g| _        nV| j                   j	                  d      \  | _        }| _        d| j                  | j                   d| j                   g| _        | j
                  r| j                         S | j                         S )N: xref-)name	refdomainreftypeclasses	partitiondisabledcreate_non_xref_nodecreate_xref_node)r,   r   s     r.   runzXRefRole.rund   s    dii+-tyy(DNDL"DLL1DL.2ii.A.A#.F+DNAt|"DNNt~~6Fa~4VWDL==,,..((**r/   c                L   t        j                  | j                  dd        }| j                  rd| _        | j                  |d      \  }}| j                  | j                  || j                        }| j                  | j                  j                  | j                  |d      S )N   Fr;   rA   is_ref)r   unescapetextr'   r1   r8   r$   rawtextrA   result_nodesinlinerdocumentenv)r,   rM   _targetnodes       r.   rD   zXRefRole.create_non_xref_nodeq   s    ~~diim,??&+D# 88rBMD'""4<<t||"L  !6!6$u UUr/   c                   | j                   }| j                  }| j                  r|j                         }| j                  r| j                  ||      \  }}| j                  j                  j                  | j                  | j                  | j                  | j                  d} | j                  | j                  fi |}| j                  |       | j!                  | j                  || j                  ||      \  }}||d<   || j#                  | j                  || j$                        z  }| j'                  | j(                  j*                  | j                  |d      S )N)refdocr?   r@   refexplicitrefwarn	reftargetrI   TrJ   )r7   r6   r(   lowerr'   r8   rR   current_documentdocnamer?   r@   r1   r)   r#   rN   set_source_infoprocess_linkr$   rA   rO   rP   rQ   )r,   r7   r6   optionsrefnodes        r.   rE   zXRefRole.create_xref_nodez   s,   

>>\\^F?? 88GME6 hh//77||22))
 !$..99W% ))HHgt66v
v  &4&&t||UDLL&QQ  !6!6'RV WWr/   c                2    |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,   rR   r`   r1   r6   r7   s         r.   r^   zXRefRole.process_link   s     eiiV,,,r/   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,   rQ   rR   rT   rK   s        r.   rO   zXRefRole.result_nodes   s     vrzr/   )FFNNF)r'   boolr(   rf   r#   ztype[Element] | Noner$   ztype[TextElement] | Noner)   rf   returnNone)r6   strr7   ri   rg   tuple[str, str]rg   'tuple[list[Node], list[system_message]]rR   r   r`   r   r1   rf   r6   ri   r7   ri   rg   rj   )
rQ   znodes.documentrR   r   rT   r   rK   rf   rg   rl   )__name__
__module____qualname____doc__r   pending_xrefr#   __annotations__r   literalr$   r+   r8   rF   rD   rE   r^   rO   __classcell__r-   s   @r.   r"   r"   +   s   ,  (44I}4(-N%5 !*.37#  (	
 1  
$+VX<-- - !	-
 - - 
-   	
  
1r/   r"   c                  8     e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 d fdZ xZS )AnyXRefRolec                x    t         |   |||||      }|j                  j                  |j                         |S r&   )r*   r^   
attributesupdateref_context)r,   rR   r`   r1   r6   r7   resultr-   s          r.   r^   zAnyXRefRole.process_link   s:     %c74FvV!!#//2r/   rm   )rn   ro   rp   r^   ru   rv   s   @r.   rx   rx      sG      !	
   
 r/   rx   c                  ,    e Zd ZU dZded<   ddZddZy)	CVEz%https://www.cve.org/CVERecord?id=CVE-r   	_BASE_URLc                f   d| j                   j                  d       }dt        d      | j                  z  |dd fg}t	        j
                  |      }t        j                  dd|g      }| j                  j                  j                  |       	 | j                         }t        j                  ddd|d	g
      }| j                  r.|t        j                  | j                  | j                        z  }n(d| j                   }|t        j                  ||      z  }|||gg fS # t        $ r | j                  j                   j#                  t%        d      | j                  z  | j&                        }| j                  j)                  | j*                  | j*                  |      }	|	g|gfcY S w xY w)Nindex-indexsinglez,Common Vulnerabilities and Exposures; CVE %sr;   entriesidsFcveinternalrefurirA   zCVE zinvalid CVE number %slinerR   new_serialnor   r7   r   r   r   rP   rQ   note_explicit_target	build_uri	referencer1   strongr6   
ValueErrorreportererrorr	   linenoproblematicrN   
r,   	target_idr   r   r7   r   r   r6   msgprbs
             r.   rF   zCVE.run   s   TXX227;<=	 @ADKKO
 w/b"9+6226:	 ^^%FBvwI &&U\\$**djjAA	tzzl+U\\%77	 vy)2--  	 ,,''--*+dkk9 . C ,,**4<<sKC53%<	    BD& &BF0/F0c                    | j                   j                  d      }|d   rt        j                   |d    d|d    S t        j                   |d    S N#rH   r      )r7   rB   r   r   r,   rets     r.   r   zCVE.build_uri   sU    kk##C(q6mm_SVHAc!fX66--Q))r/   Nrk   rg   ri   rn   ro   rp   r   rs   rF   r   re   r/   r.   r   r      s    >Iu>!.F*r/   r   c                  ,    e Zd ZU dZded<   ddZddZy)	CWEz'https://cwe.mitre.org/data/definitions/r   r   c                f   d| j                   j                  d       }dt        d      | j                  z  |dd fg}t	        j
                  |      }t        j                  dd|g      }| j                  j                  j                  |       	 | j                         }t        j                  ddd|d	g
      }| j                  r.|t        j                  | j                  | j                        z  }n(d| j                   }|t        j                  ||      z  }|||gg fS # t        $ r | j                  j                   j#                  t%        d      | j                  z  | j&                        }| j                  j)                  | j*                  | j*                  |      }	|	g|gfcY S w xY w)Nr   r   r   z#Common Weakness Enumeration; CWE %sr;   r   r   Fcwer   zCWE zinvalid CWE number %sr   r   r   s
             r.   rF   zCWE.run   s   TXX227;<=	 784;;F
 w/b"9+6226:	 ^^%FBvwI &&U\\$**djjAA	tzzl+U\\%77	 vy)2--  	 ,,''--*+dkk9 . C ,,**4<<sKC53%<	 r   c                    | j                   j                  d      }|d   r&t        j                   t	        |d          d|d    S t        j                   t	        |d          dS )Nr   rH   r   z.html#r   z.html)r7   rB   r   r   intr   s     r.   r   zCWE.build_uri  s_    kk##C(q6mm_SQ[MAx@@--SVU33r/   Nrk   r   r   re   r/   r.   r   r      s    @Iu@!.F4r/   r   c                      e Zd ZddZddZy)PEPc                f   d| j                   j                  d      z  }dt        d      | j                  z  |dd fg}t	        j
                  |      }t        j                  dd|g      }| j                  j                  j                  |       	 | j                         }t        j                  ddd|d	g
      }| j                  r.|t        j                  | j                  | j                        z  }n(d| j                  z   }|t        j                  ||      z  }|||gg fS # t        $ r | j                  j                   j#                  t%        d      | j                  z  | j&                        }| j                  j)                  | j*                  | j*                  |      }	|	g|gfcY S w xY w)Nindex-%sr   r   z$Python Enhancement Proposals; PEP %sr;   r   r   Fpepr   zPEP zinvalid PEP number %sr   r   r   s
             r.   rF   zPEP.run   s   !6!6w!??	 89DKKG
 w/b"9+6226:	 ^^%FBvwI &&U\\$**djjAA	+U\\%77	 vy)2--  	 ,,''--*+dkk9 . C ,,**4<<sKC53%<	 r   c                    | j                   j                  j                  j                  }| j                  j                  d      }|d   r|dt        |d         |d   fz  z   S |dt        |d         z  z   S )Nr   rH   zpep-%04d/#%sr   r   z	pep-%04d/)rP   rQ   settingspep_base_urlr7   rB   r   r,   base_urlr   s      r.   r   zPEP.build_uriC  sq    <<((11>>kk##C(q6nCFSV/DDDDkCAK777r/   Nrk   r   rn   ro   rp   rF   r   re   r/   r.   r   r     s    !.F8r/   r   c                      e Zd ZddZddZy)RFCc                P   d| j                   j                  d      z  }t        | j                        }dd| |dd fg}t	        j
                  |      }t        j                  dd|g      }| j                  j                  j                  |       	 | j                         }t        j                  ddd|d	g
      }| j                  r.|t        j                  | j                  | j                        z  }n|}|t        j                  ||      z  }|||gg fS # t        $ r | j                  j                   j#                  t%        d      | j                  z  | j&                        }	| j                  j)                  | j*                  | j*                  |	      }
|
g|	gfcY S w xY w)Nr   r   r   zRFC; r;   r   r   Frfcr   zinvalid RFC number %sr   )rR   r   _format_rfc_targetr7   r   r   r   rP   rQ   r   r   r   r1   r   r6   r   r   r   r	   r   r   rN   )r,   r   formatted_targetr   r   r7   r   r   r6   r   r   s              r.   rF   zRFC.runM  sz   !6!6w!??	-dkk:&6%78)RNOw/b"9+6226:	 ^^%FBvwI &&U\\$**djjAA	(U\\%77	 vy)2--  	 ,,''--*+dkk9 . C ,,**4<<sKC53%<	 s   B D BF%$F%c                H   | j                   j                  j                  j                  }| j                  j                  d      }|d   r1|| j                   j                  t        |d         z  z   dz   |d   z   S || j                   j                  t        |d         z  z   S r   )rP   rQ   r   rfc_base_urlr7   rB   rfc_urlr   r   s      r.   r   zRFC.build_urii  s    <<((11>>kk##C(q6dll22SQ[@@3FQOOdll22SQ[@@@r/   Nrk   r   r   re   r/   r.   r   r   L  s    .8Ar/   r   c                   | j                  d      \  }}}|rJ|j                  d      \  }}}|dv r1|rd| d|j                          d| S d| d|j                          S d|  S )zTakes an RFC number with an optional anchor (like ``123#section-2.5.3``)
    and attempts to produce a human-friendly title for it.

    We have a set of known anchors that we format nicely,
    everything else we leave alone.
    r   r=   >   pagesectionappendixzRFC rb   )rB   r6   )r7   numberr   anchorfirst	remainings         r.   r   r   r  s     ((-FAv$..s3q)33fXQu{{}oQykBB&5;;=/22&?r/   c                  8    e Zd Z ej                  d      ZddZy)GUILabelz(?<!&)&(?![&\s])c                   t        j                  | j                  | j                  g      }| j                  j                  | j                        }|t        j                  |j                  d            z  }|D ]f  }|j                  dd      }t        j                  |d         }t        j                  dd|dg      }||z  }|t        j                  |dd        z  }h |gg fS )	N)rN   rA   r   z&&&r;   acceleratorrI   rH   )
r   inlinerN   r>   amp_resplitrM   Textpopreplace)r,   rT   spansspanletterr   s         r.   rF   zGUILabel.run  s    ||DLL499+F!!$)),

599Q<(( 	)D<<c*DZZQ(F,,r2vOKKDEJJtABx((D	) vrzr/   Nrk   )rn   ro   rp   recompiler   rF   re   r/   r.   r   r     s    RZZ+,Fr/   r   c                  $     e Zd ZdZd fdZ xZS )MenuSelectionu   ‣c                v    | j                   j                  d| j                        | _         t        |          S )Nz-->)rM   r   BULLET_CHARACTERr*   rF   )r,   r-   s    r.   rF   zMenuSelection.run  s-    II%%eT-B-BC	w{}r/   rk   )rn   ro   rp   r   rF   ru   rv   s   @r.   r   r     s    . r/   r   c                  @    e Zd Z ej                  d      ZddZddZy)EmphasizedLiteralz(\\\\|\\{|\\}|{|})c                    | j                  | j                        }t        j                  | j                  dg|| j
                  j                         | j
                  gd}|gg fS )Nr;   )rolerA   )parserM   r   rt   rN   r>   rZ   )r,   childrenrT   s      r.   rF   zEmphasizedLiteral.run  s\    ::dii(}}LL"
'
.2iioo.?$))
 vrzr/   c                <   g }dg}| j                   j                  |      D ]1  }|dk(  r|dxx   dz  cc<   |dk(  r6t        |      dk\  r|d   dk(  r|dxx   dz  cc<   @|j                  d       R|d	k(  rt        |      d
k(  rt|d   dk(  rlt        |d         dkD  r[|d   r'|j	                  t        j                  |d                |j	                  t        j                  |d   |d                dg}|j	                  d	       dj                  |      g}|dk(  r|dxx   dz  cc<   |dk(  r|dxx   d	z  cc<   %|dxx   |z  cc<   4 dj                  |      r5dj                  |      }|j	                  t        j                  |             |S )Nr;   z\\\{r   )r   r;   }   rH   r   z\{z\})		parens_rer   lenextendappendr   r   emphasisjoin)r,   rM   r}   stackparts        r.   r   zEmphasizedLiteral.parse  su   NN((. 	"Dv~b	T!	u:?uRyC'7"I$I LL+u:?uQx33uQx=1;LQxejjq&:;MM%..q58"DEDE LL%WWU^,Eb	S 	b	S 	b	T!	3	"6 775>775>DMM%**T*+r/   Nrk   )rM   ri   rg   z
list[Node])rn   ro   rp   r   r   r   rF   r   re   r/   r.   r   r     s    

01I$r/   r   c                  N    e Zd Z ej                  dej
                        ZddZy)Abbreviationz	\((.*)\)$c                d   | j                   j                         }| j                  j                  | j                        }|r@| j                  d |j                          j                         }|j                  d      |d<   n| j                  }t        j                  | j                  |fi |gg fS )NrH   explanation)r_   copyabbr_researchrM   startstripgroupr   abbreviationrN   )r,   r_   matchedrM   s       r.   rF   zAbbreviation.run  s    ,,##%,,%%dii099.w}}/557D%,]]1%5GM"99D""4<<AABBFFr/   Nrk   )rn   ro   rp   r   r   DOTALLr   rF   re   r/   r.   r   r     s    bjjryy1G	Gr/   r   c                  Z    e Zd ZU dZ ej
                  d      Zded<   ddZe	d	d       Z
y)
Keyboardz~Implement the :kbd: role.

    Split words in the text by separator or whitespace,
    but keep multi-word keys together.
    z(?<=.)([\-+^]| +)(?=.)r   _patternc                   dg}d| j                   v r|j                  | j                   d          | j                  j                  | j                        }t        |      dk(  s| j                  |      r/t        j                  | j                  | j                  |      gg fS g }|r| j                  |      rdj                  |d d       }g |d d n|j                  d      }|j                  t        j                  |||             	 |j                  d      }|j                  t        j                  |             |r|g fS # t        $ r Y |g fS w xY w)NkbdrA   rH   rI   r;   r   r   )r_   r   r  r   rM   r   _is_multi_word_keyr   rt   rN   r   r   r   r   
IndexError)r,   rA   partscompoundkeyseps         r.   rF   zKeyboard.run  s1   '$NN4<<	23##DII.u:?d55e<MM$,,		7KLbPP!&&u-ggeBQi(bq	iilOOEMM#sGDE1iil 

30  |   |s   E 	EEc                    t        |       dk  s| d   j                         sy| d   j                         | d   j                         f}|t        h d      v S )Nr   rH   Fr   >   numlocksysrqbackspacecapsr  r   upr   downscrollr  )r   isspacerZ   	frozenset)r  r>   s     r.   r  zKeyboard._is_multi_word_key  sX    u:?%("2"2"4Qx~~q!11y "
   	r/   Nrk   )r  z	list[str]rg   rf   )rn   ro   rp   rq   r   r   r  rs   rF   staticmethodr  re   r/   r.   r   r     s8     !bjj!:;He;6  r/   r   c                  8    e Zd Z ej                  d      ZddZy)Manpagez5^(?P<path>(?P<page>.+)[(.](?P<section>[1-9]\w*)?\)?)$c                b   t        j                  d| j                        }| j                  j	                  |      x}r|j                         }n||dd}| j                  r| j                  dd  n| j                  }| j                  s`| j                  j                  rJ| j                  j                  j                  |      }t        j                  d|| j                  g|      }nt        j                  |      }t        j                   | j"                  d|fd| j                  gi|}|gg fS )Nrb   r;   )pathr   r   rH   )rA   r   rA   )r
   rc   r7   _manpage_rematch	groupdictrC   r6   r2   manpages_url
format_mapr   r   r>   r   r   manpagerN   )r,   r(  minforM   uriinnerrT   s           r.   rF   zManpage.run  s    ))C-  &&w//1/;;=D#WDD "&tzz!"~DJJ}}!9!9++**55d;COOBtyyk#NEJJt$Eb%U$))UPTUvrzr/   Nrk   )rn   ro   rp   r   r   r#  rF   re   r/   r.   r   r     s    "**UVKr/   r   c                   t        |      }|j                  dd      }dg}|r|j                  d       d|v r|j                  |d          |r||vr|j                  |       t	        j
                  ||||      }	|	gg fS )Nlanguager;   code	highlightrA   )rA   r.  )r   getr   r   r   rt   )
r>   rN   rM   r   rP   r_   contentr.  rA   rT   s
             r.   	code_roler3  A  s     !)G{{:r*HhG{#Gwy)*HG+x ==$(KD62:r/   )classr.  )r#   T)r)   )downloadanyr   r   r   r   guilabelmenuselectionfilesampabbrr  r(  zdict[str, RoleFunction]specific_docrolesc                N   ddl m} t        j                         D ]?  \  }}|j	                  ||      }|j                  ||d|gi      }|j                  ||       A t        j                         D ]  \  }}|j                  ||        |j                  dt               ddddS )Nr   )rolesrA   r/  builtinT)versionparallel_read_safeparallel_write_safe)
docutils.parsers.rstr>  generic_docrolesitemsGenericRole
CustomRoleregister_local_roler<  register_canonical_roler3  )appr>  rolenamer#   genericr   funcs          r.   setuprN  v  s    */557 2)##Hi8'Iz3JK!!(D12
 ,113 2$!!(D12
 
!!&)4 "# r/   )r7   ri   rg   ri   )Nre   )r>   ri   rN   ri   rM   ri   r   r   rP   z#docutils.parsers.rst.states.Inlinerr_   zdict[str, Any] | Noner2  zSequence[str]rg   rl   )rJ  r   rg   r   )Crq   
__future__r   r   typingr   docutils.parsers.rst.directivesdocutilsdocutils.parsers.rst.statesr   r   sphinxr   sphinx.localer   r	   sphinx.utilr
   sphinx.util.docutilsr   r   r   collections.abcr   r   r   docutils.nodesr   r   r   r   sphinx.applicationr   sphinx.environmentr   sphinx.util.typingr   r   literal_strongr   literal_emphasisrt   rD  r"   rx   r   r   r   r   r   r   r   r   r   r   r   r3  parsersrst
directivesclass_option	unchangedr_   download_referencer<  rs   rN  re   r/   r.   <module>re     s3   ) " 	   & " !    N N(!II)3B &&>>++&&))**&&mm	 H} HV( **- **Z*4- *4Z*8- *8Z#A- #AL"z $H /
 /dG: G2z 2jm h &*
  	
 1 #  -4 !!,,99  $$//99	  8#>#>?T*5555
"_N:y%. * ,r/   