U
    \Sh                  	   @  s  d Z ddlmZ ddlZddlmZ ddlmZmZmZm	Z	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 ddlm Z m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z'm(Z( ddl)m*Z*m+Z+m,Z, ddl-m.Z. ddl/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5 erNddl6m7Z7 ddl8m9Z9 ddl:m;Z; e+<e=Z>e?dZ@e?dejAZBe' ZCG dd deeD ZEG dd deEZFG dd de(ZGG dd  d e.ZHG d!d" d"eeD ZIG d#d$ d$e.ZJG d%d& d&e(ZKd'd(d)d*d+ZLd,d-d'd'd.d/d0d1d2d3d4ZMG d5d6 d6e.ZNdMd'd'd8d9d:d;ZOG d<d= d=e.ZPG d>d? d?e(ZQG d@dA dAe ZRdBdCdDdEdFdGdHZSdBdIdJdKdLZTdS )NzThe standard domain.    )annotationsN)copy)TYPE_CHECKINGAnyCallableFinalIterableIteratorcast)nodes)ElementNodesystem_message)	Directive
directives)
StringList)addnodes)desc_signaturepending_xref)ObjectDescription)DomainObjTypeTitleGetter)___)EmphasizedLiteralXRefRole)docname_joinloggingws_re)SphinxDirective)clean_astextmake_idmake_refnode)
OptionSpecRoleFunction)Sphinx)Builder)BuildEnvironmentz ((?:/|--|-|\+)?[^\s=]+)(=?\s*.*)z`((~?\w*:)?\w+)`c                   @  sP   e Zd ZU dZdZded< dZded< dddd	d
dZdddddddZdS )GenericObjectzM
    A generic x-ref directive registered with Sphinx.add_object_type().
     strindextemplateNz=Callable[[BuildEnvironment, str, desc_signature], str] | None
parse_noder   sigsignodereturnc                 C  s@   | j r|  | j||}n$|  |t||7 }td|}|S )N )r-   envclearr   	desc_namer   sub)selfr/   r0   name r9   E/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/domains/std.pyhandle_signature/   s    zGenericObject.handle_signatureNone)r8   r/   r0   r1   c           	      C  s   t | j| jj| j|}|d | | jj| | jr| jd}|dkr|| jd | 	 }| j|d d  	 |f }nd}| j|f }| j
d |||dd f tt| jd}|j| j|||d	 d S )
Nids:   singleentriesr*   stdlocation)r"   r3   statedocumentobjtypeappendnote_explicit_targetr,   findstrip	indexnoder
   StandardDomain
get_domainnote_object)	r7   r8   r/   r0   node_idcolon	indextype
indexentryrC   r9   r9   r:   add_target_and_index9   s    z"GenericObject.add_target_and_index)	__name__
__module____qualname____doc__r,   __annotations__r-   r;   rU   r9   r9   r9   r:   r)   (   s
   

r)   c                   @  s   e Zd ZedZdS )EnvVarenvironment variable; %sN)rV   rW   rX   r   r,   r9   r9   r9   r:   r[   L   s   r[   c                   @  s&   e Zd ZdZdddddddd	Zd
S )EnvVarXRefRolezQ
    Cross-referencing role for environment variables (adds an index entry).
    nodes.documentr(   r   boolz'tuple[list[Node], list[system_message]])rG   r3   nodeis_refr1   c           	      C  s~   |s|gg fS |d }d| d }t }d||dd fdtd| |dd fg|d< tjdd|gd}|| |||gg fS )	N	reftargetzindex-%sindexrA   r*   r\   rB   r=   )Znew_serialnor   rc   r   r   targetrJ   )	r7   rG   r3   r`   ra   varnameZtgtidrM   Z
targetnoder9   r9   r:   result_nodesU   s    

zEnvVarXRefRole.result_nodesN)rV   rW   rX   rY   rg   r9   r9   r9   r:   r]   P   s   r]   c                   @  s@   e Zd ZU dZdZdZdZdZdZi Z	de
d< d	d
ddZdS )Targetz@
    Generic target for user-defined cross-reference types.
    r*   Fr@   r   Tr$   option_spec
list[Node]r1   c                 C  s  t d| jd  }t| j| jj| j|}t	j
dd|gd}| | | jj| |g}| jr| j|f }d}|d}|dkr|d |  }||d d   }tj|||dd fgd	}|d| | j}	d| jkr| jdd\}
}	tt| jd
}|j|	|||d |S )Nr2   r   r*   rd   rA   r>   r?   r@   )rB   rC   rD   )r   r6   	argumentsrL   r"   r3   rF   rG   r8   r   re   set_source_inforJ   r,   rK   r   rc   insertsplitr
   rN   rO   rP   )r7   fullnamerQ   r`   retrT   rS   rR   inoder8   r   rC   r9   r9   r:   runq   s*    


z
Target.runN)rV   rW   rX   rY   r,   has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespaceri   rZ   rs   r9   r9   r9   r:   rh   e   s   
rh   c                   @  s6   e Zd ZdZddddddZdddddd	d
ZdS )	Cmdoptionz;
    Description of a command-line option (.. option).
    r+   r   r.   c                 C  s
  d}d}| dD ]}| }t|}|sDtjtd||d q| \}}|d dkr||d dkr||d	d }d| }|r| jj	j
r|td
d
7 }|t 7 }n|tdd7 }|t||7 }| jj	j
rd}	|r|d dkr|d dkrd}	|tdd7 }|dd }nN|d dkr@|t 7 }| }n*|d dkrj|tdd7 }|dd	 }t|D ]0}
t|
tjr|t|
 7 }n||
7 }qt|	r|tdd7 }n|t||7 }|s|}|g|d< n|d | |d7 }q|st|S )z/Transform an option description into RST nodes.r   r*   z, znMalformed option description %r, should look like "opt", "-opt args", "--opt args", "/opt args" or "+opt args"rD   r?   []N,FTr@   r2   =allnames)ro   rL   option_desc_rematchloggerwarningr   groupsr3   configZoption_emphasise_placeholdersr   Zdesc_sig_punctuationZdesc_sig_spaceZdesc_addnamer5   	samp_roleparse
isinstancer   TextastextrI   
ValueError)r7   r/   r0   count	firstnameZpotential_optionmoptnameargsZadd_end_bracketpartr9   r9   r:   r;      sb    




zCmdoption.handle_signaturer<   )r   r/   r0   r1   c                 C  s"  | j jd}|dg D ]X}dg}|r2|| |dsF|d d|}t| j | jj||}|d | q| jj	| t
t| j d}	|dg D ] }|	||| j j|d d	  q|rtd
| }
ntd}
|dg D ]4}d|
|g}| jd d||d d	 dd f qd S )Nstd:programr}   	cmdoption)-/argr   r=   rC   r   z%s command line optionzcommand line optionz; rB   pairr*   )r3   ref_contextgetrI   
startswithjoinr"   rF   rG   rJ   r
   rN   rO   add_program_optiondocnamer   rM   )r7   r   r/   r0   Zcurrprogramr   prefixesprefixrQ   domaindescroptionentryr9   r9   r:   rU      s.    



 
zCmdoption.add_target_and_indexN)rV   rW   rX   rY   r;   rU   r9   r9   r9   r:   rx      s   :rx   c                   @  s<   e Zd ZU dZdZdZdZdZi Zde	d< dd	d
dZ
dS )ProgramzI
    Directive to name the program for which options are documented.
    Fr@   r   Tr$   ri   rj   rk   c                 C  s@   t d| jd  }|dkr0| jjdd  n|| jjd< g S )Nr   r   r<   r   )r   r6   rl   rL   r3   r   pop)r7   programr9   r9   r:   rs      s
    zProgram.runNrV   rW   rX   rY   rt   ru   rv   rw   ri   rZ   rs   r9   r9   r9   r:   r      s   
r   c                   @  s$   e Zd ZdddddddddZd	S )
OptionXRefRoler(   r   r_   r+   tuple[str, str]r3   refnodehas_explicit_titletitlere   r1   c                 C  s   |j d|d< ||fS )Nr   )r   r   )r7   r3   r   r   r   re   r9   r9   r:   process_link   s    zOptionXRefRole.process_linkNrV   rW   rX   r   r9   r9   r9   r:   r      s   r   r+   zlist[str | None])liner1   c                 C  s   t d| d g }|S )Nz +: +)rero   )r   partsr9   r9   r:   split_term_classifiers  s    r   r(   zIterable[Node]int
str | Noner^   z
nodes.term)r3   	textnodes	index_keysourcelinenorQ   rG   r1   c                 C  s   t jd	| }||_||_| }|r6|d | n&t| |d|}|d | || tt	| 
d}	|	j|||d t }
d||d|fg|
d< |j|j |
_|
_||
 |S )
Nr*   r=   termrC   rD   rA   mainrB   )r*   r*   )r   r   r   r   r   rI   r"   rJ   r
   rN   rO   
_note_termr   rc   )r3   r   r   r   r   rQ   rG   r   ZtermtextrC   rM   r9   r9   r:   make_glossary_term	  s     

r   c                   @  sB   e Zd ZU dZdZdZdZdZdej	iZ
ded< dd	d
dZdS )Glossaryz[
    Directive to create a glossary with cross-reference targets for :term:
    roles.
    Tr   Fsortedr$   ri   rj   rk   c                 C  s  t  }| jj|_d| jk|d< g }d}d}d}g }t| j| jjD ]r\}\}}	|sz|rt|rt|d d d||	 d}qD|rJ|d 	 sJ|
drd}qDd}|r|s|| jjjtd	||	d
 ||||	fgt f d}nb|r
|| jjjtd||	d
 |r*|d d |||	f n|| jjjtd||	d
 nj|rRnb|spd}t|t|  }
|r|d d ||
d  ||	 n|| jjjtd||	d
 d}qDg }|D ]\}}g }g }|D ]d\}}}	t|}| j|d |	\}}t| j||d ||	d | jjd}||_|| || q|| t }|rn| j||jd d | || |tjd|  qtjd| }|d d ||7 }||g S )Nr   TFr?   r@   r*   r   z.. z,glossary term must be preceded by empty line)r   r   z3glossary terms must not be separated by empty linesz4glossary seems to be misformatted, check indentation)rQ   rG   classesglossary)r*   )r*   )r   r   rF   rG   optionszipcontentitemsrI   isspacer   reporterr   r   r   lenlstripr   Zinline_textr   r3   Z	rawsourceextendr   
definitionZnested_parsedefinition_list_itemdefinition_list)r7   r`   rB   Zin_definitionZ
in_commentZ	was_emptymessagesr   r   r   Z
indent_lenr   termsr   Z	termnodesZsystem_messagesr   r   Zsysmsgr   ZdefnodeZdlistr9   r9   r:   rs   5  s    

   
   


zGlossary.runN)rV   rW   rX   rY   rt   ru   rv   rw   r   flagri   rZ   rs   r9   r9   r9   r:   r   '  s   
 r   r*   rj   )textproductionGroupr1   c                 C  s(  t |dkr|d7 }g }d}t| D ]}| |krV| ||  }|t| |d}d|kr|d dkr|d\}}|dd  }	q|d dkr|dd  }|}	q|}|}	n|}|| }	t	|dd|	d}
|
tj
||dgd	7 }
||
 | }q&|t | k r$|t| |d   |S )
Nr   r>   r@   ~tokenrC   )reftypeZ	refdomainrb   Zxrefr   )r   token_refinditerstartrI   r   r   groupro   r   literalend)r   r   Zretnodesposr   txtr   r   r   re   r   r9   r9   r:   token_xrefs  s:    


r   c                   @  s<   e Zd ZU dZdZdZdZdZi Zde	d< dd	d
dZ
dS )ProductionListz0
    Directive to list grammar productions.
    Fr@   r   Tr$   ri   rj   rk   c              	   C  sV  t t| jd}t }| | td}|	d| j
d d}d}d}|D ]}|sld|krl| }qRd}z|dd	\}}	W n tk
r   Y  qPY nX t|}
| }||
d
< |
d
 r4d| }t| j| jj||}|
d | | jj|
|
 t|dkr| d| }n|}|jd|||d |
t|	| ||
 qR|gS )NrC   z\\\nr*   r   
Fr>   Tr@   Z	tokennamezgrammar-token-%sr=   r   rD   )r
   rN   r3   rO   r   productionlistrm   r   compiler6   rl   ro   rL   r   
productionr"   rF   rG   rI   Znote_implicit_targetr   rP   r   r   )r7   r   r`   Znl_escape_relinesr   Zfirst_rule_seenruler8   tokenssubnoder   rQ   ZobjNamer9   r9   r:   rs     s>    



zProductionList.runNr   r9   r9   r9   r:   r     s   
r   c                   @  s$   e Zd ZdddddddddZd	S )
TokenXRefRoler(   r   r_   r+   r   r   c                 C  sH   | d}| js@|d dkr@d|kr4|d\}}n|dd  }||fS )Nr   r   r>   r@   )r   r   ro   )r7   r3   r   r   r   re   r   r9   r9   r:   r     s    
zTokenXRefRole.process_linkNr   r9   r9   r9   r:   r     s   r   c                      s$  e Zd ZU dZdZdZeeddddeedd	ddeed
ddddeeddeeddeedddddZde	d< e
eeeeedZde	d< edde e eejddedejddedddeddedejddZd e	d!< i i d"d#ed$fd%d#ed&fd'd#ed(fd)d*d+d,d)d-Zd.e	d/< d"ed$fd%ed&fd'ed(fd)Zd0e	d1< d2d3d4d5d6d7Zejd8ejd9ejd:iZd;e	d<< d=d>d? fd@dAZddBdBdBdBd>dCdDdEZe dFdGdHdIZ!ddBdBdBdKd>dLdMdNZ"e d0dGdOdPZ#ddBdBdKd>dQdRdSZ$e dFdGdTdUZ%e dVdGdWdXZ&e d0dGdYdZZ'dBd>d[d\d]Z(d^d_d>d`dadbZ)d=dBdcd>dddedfZ*dBdBdBdBd>dgdhdiZ+dBdjdBdBdBdBdKdkdldmdnZ,d=dBdjdBdBdodkdpdqdrdsZ-d=dBdjdBdBdodkdpdqdtduZ.d=dBdjdBdBdodkdpdqdvdwZ/d=dBdjdBdBdodkdpdqdxdyZ0d=dBdjdBdBdodkdpdqdzd{Z1d=dBdjdBdBdodkdpdqd|d}Z2d=dBdjdBdBdodkdpdqd~dZ3d=dBdjdBdBdodkdpdqddZ4d=dBdjdBdodkddddZ5ddGddZ6ddddBdddZ7dddddZ8dddddZ9dddddZ:d=djdBdBdkddddZ;dkddddZ<  Z=S )rN   zs
    Domain for all objects that don't fit into another domain or are added
    via the application interface.
    rC   ZDefaultzglossary termr   r?   )
searchpriozgrammar tokenr   zreference labelrefkeywordzenvironment variableenvvarzprogram optionr   rG   doc)r   r   labelr   r   r   zdict[str, ObjType]object_types)r   r   r   r   r   r   zdict[str, type[Directive]]r   T)warn_dangling)innernodeclassr   )	lowercaser   r   )r   r   )r   r   )r   r   r   r   r   numrefr   r   z"dict[str, RoleFunction | XRefRole]rolesgenindexr*   Indexpy-modindexzModule IndexsearchzSearch Page)r   Zmodindexr   )r   r*   )r   r*   )r   r*   )progoptionsobjectslabels
anonlabelsr   initial_datazdict[str, tuple[str, str]]_virtual_doc_namesz term not in glossary: %(target)rzundefined label: %(target)rzunknown keyword: %(target)rzunknown document: %(target)rzunknown option: %(target)r)r   r   r   r   r   )figureN)tableN)
code-blockNz0dict[type[Node], tuple[str, TitleGetter | None]]enumerable_nodesr(   r<   )r3   r1   c                   s>   t  | t| j| _|jjj D ]\}}|| j|< q&d S N)super__init__r   r  appregistryr   )r7   r3   r`   settings	__class__r9   r:   r  I  s    zStandardDomain.__init__r+   )r8   r   rQ   r   r1   c                 C  sf   || j kr@| j | ||fkr@ttd|| j| j | d  ||f| j |< |rb|||f| j|< dS )aU  Add a hyperlink target for cross reference.

        .. warning::

           This is only for internal use.  Please don't use this from your extension.
           ``document.note_explicit_target()`` or ``note_implicit_target()`` are recommended to
           add a hyperlink target to the document.

           This only adds a hyperlink target to the StandardDomain.  And this does not add a
           node_id to node.  Therefore, it is very fragile to calling this without
           understanding hyperlink target framework in both docutils and Sphinx.

        .. versionadded:: 3.0
        (duplicate label %s, other instance in %sr   N)r   r   r   r   r3   doc2pathr   )r7   r8   r   rQ   r   r9   r9   r:   note_hyperlink_targetQ  s    
 z$StandardDomain.note_hyperlink_targetz&dict[tuple[str, str], tuple[str, str]]rk   c                 C  s   | j di S )Nr   data
setdefaultr7   r9   r9   r:   r   i  s    zStandardDomain.objectsNr   )rH   r8   labelidrE   r1   c                 C  sR   ||f| j kr8| j ||f d }tjtd||||d | jj|f| j ||f< dS )zRNote a generic object for cross reference.

        .. versionadded:: 3.0
        r   z4duplicate %s description of %s, other instance in %srD   N)r   r   r   r   r3   r   )r7   rH   r8   r  rE   r   r9   r9   r:   rP   m  s    
   zStandardDomain.note_objectc                 C  s   | j di S )z2.. note:: Will be removed soon. internal use only.r   r  r  r9   r9   r:   _termsy  s    zStandardDomain._terms)r   r  rE   r1   c                 C  s*   |  d||| | jj|f| j| < dS )zeNote a term for cross reference.

        .. note:: Will be removed soon. internal use only.
        r   N)rP   r3   r   r  lower)r7   r   r  rE   r9   r9   r:   r   ~  s    zStandardDomain._note_termc                 C  s   | j di S )Nr   r  r  r9   r9   r:   r     s    zStandardDomain.progoptionszdict[str, tuple[str, str, str]]c                 C  s   | j di S )Nr   r  r  r9   r9   r:   r     s    zStandardDomain.labelsc                 C  s   | j di S )Nr   r  r  r9   r9   r:   r     s    zStandardDomain.anonlabels)r   r1   c                 C  s   d }t | j D ]\}\}}||kr| j|= qt | j D ]\}\}}||kr>| j|= q>t | j D ]\}\}}||krj| j|= qjt | j D ]\}\}}}||kr| j|= qt | j D ]\}\}}||kr| j|= qd S r  )listr   r   r   r  r   r   )r7   r   keyfnZ_lr9   r9   r:   	clear_doc  s     



zStandardDomain.clear_docz	list[str]dict[str, Any])docnames	otherdatar1   c                 C  s   |d   D ]\}}|d |kr|| j|< q|d   D ]\}}|d |kr8|| j|< q8|d   D ]\}}|d |krd|| j|< qd|d   D ]\}}|d |kr|| j|< q|d   D ]\}}|d |kr|| j|< qd S )Nr   r   r   r   r   r   )r   r   r   r  r   r   )r7   r  r  r  r  r9   r9   r:   merge_domaindata  s    zStandardDomain.merge_domaindatar^   )r3   r   rG   r1   c                 C  s  |j  D ]\}}|sq
|j| }|d kr.q
|j| }t|tjrhd|krh|j|d }|d d }|jdks
d|ks
|j	drq
|| j
krtjtd||| j
| d |d ||f| j|< |jd	krttj|d }t|}	n|jd
krt|}	n| |r| |}	|	sq
nt|tjtjfrL|jrLttj|jd }t|tjtjfrrttj|jd }t|tjtjfrt|}	n.t|tj d }
|
r
|
dr
|
d}	nq
|||	f| j
|< q
d S )Nrefidnamesr   ZfootnoterefuriZdesc_r
  rD   sectionZrubriccaption)!Z	nametypesr   Znameidsr=   r   r   re   r   tagnamer   r   r   r   r   r  r   r
   r   r!   is_enumerable_nodeget_numfig_titler   
field_listchildrenr   fieldr   r   
field_namenextfindallr   toctree)r7   r3   r   rG   r8   explicitr  r`   r   sectnamer*  r9   r9   r:   process_doc  s^    





 





zStandardDomain.process_doc)r   r8   r   r  r1   c                 C  s$   ||f| j kr ||f| j ||f< d S r  )r   )r7   r   r8   r   r  r9   r9   r:   r     s    z!StandardDomain.add_program_optionr'   r   )fromdocnamebuilderr   r  r,  rolenamer   r1   c                 K  s   | dtj}|dddi|}	t||}
|
dd k	rZ|
d d |
d d|  ||krl||	d< n@td}||d	< ||d
< ||||	d< |r|	d  d| 7  < |	|
 |	S )N	nodeclassr*   ZinternalTr   rC   zstd-r  Z
refdocnameZrefsectnamer  #)r*   r*   )r   r   	referenceinliner   rI   r   Zget_relative_uri)r7   r.  r/  r   r  r,  r0  r   r1  Znewnode	innernodecontnoder9   r9   r:   build_reference_node  s&    
 
z#StandardDomain.build_reference_noder   zElement | None)r3   r.  r/  typre   r`   r6  r1   c           	      C  sz   |dkr| j }nV|dkr | j}nF|dkr0| j}n6|dkr@| j}n&|dkrP| j}n|dkr`| j}n| j}||||||||S )Nr   r   r   r   r   r   )_resolve_ref_xref_resolve_numref_xref_resolve_keyword_xref_resolve_doc_xref_resolve_option_xref_resolve_term_xref_resolve_obj_xref)	r7   r3   r.  r/  r8  re   r`   r6  resolverr9   r9   r:   resolve_xref	  s    zStandardDomain.resolve_xrefc                 C  sT   |d r$| j |d\}}	| }
n| j|d\}}	}
|s@d S | ||||	|
dS )Nrefexplicitr*   r*   r*   r*   r*   r   )r   r   r   r   r7  )r7   r3   r.  r/  r8  re   r`   r6  r   r  r,  r9   r9   r:   r9    s    
   z StandardDomain._resolve_ref_xrefc              
   C  s  || j kr | j |d\}}	}
n| j|d\}}	d }
|s>d S ||j|	}| |}|d krfd S |dkr|jjdkrtj	t
d|d |S z$| |||||}|d kr|W S W n, tk
r   tj	t
d|	|d | Y S X z|d r| }n|jj|d	}|
d kr4d
|kr4tj	t
d||d |W S dtt|}d
|ksXd|kr||
rn|j|
|d}n|j|d}n|| }W nn tk
r } z"tj	t
d|||d | W Y S d }~X Y n. tk
r   tj	t
d||d | Y S X | j||||	|dtj|dS )NrD  rC  r  Fz(numfig is disabled. :numref: is ignored.rD   zBFailed to create a cross reference. Any number is not assigned: %srB  r*   z{name}zthe link has no caption: %s.number)r8   rF  )rF  zinvalid numfig_format: %s (%r)zinvalid numfig_format: %sr   )r1  r   )r   r   r   Zget_doctreer=   get_enumerable_node_typer   Znumfigr   r   r   get_fignumberr   r   Znumfig_formatr   mapr+   formatKeyError	TypeErrorr7  r   Znumber_reference)r7   r3   r.  r/  r8  re   r`   r6  r   r  Zfignametarget_nodefigtypeZ	fignumberr   ZfignumZnewtitleexcr9   r9   r:   r:  /  sd    



 


   z#StandardDomain._resolve_numref_xrefc                 C  s,   | j |d\}}	}
|sd S t||||	|S )NrD  )r   r   r#   )r7   r3   r.  r/  r8  re   r`   r6  r   r  r   r9   r9   r:   r;  n  s     z$StandardDomain._resolve_keyword_xrefc                 C  sn   | d|}t||d }	|	|jkr(d S |d r:| }
nt|j|	 }
tj|
|
dgd}t|||	d |S d S )Nrefdocrb   rB  r   r   )	r   r   all_docsr   r!   titlesr   r4  r#   )r7   r3   r.  r/  r8  re   r`   r6  rP  r   r   r5  r9   r9   r:   r<  x  s    

z StandardDomain._resolve_doc_xrefc                 C  s   | d}| }| j ||fd\}	}
|	sldD ]:}||kr0||\}}}| j ||fd\}	}
|	r0 qlq0|	sg }t|rt|d\}}|| d|}| j ||fd\}	}
|	rtqqtd S t	|||	|
|S )Nr   rC  >   r|   [=r2   r@   r   )
r   rL   r   	partitionr   r   ro   rI   r   r#   )r7   r3   r.  r/  r8  re   r`   r6  prognamer   r  needlestemr   commands
subcommandr9   r9   r:   r=    s0    



 z#StandardDomain._resolve_option_xrefc              	   C  sV   |  |||||||}|r|S | | jkrN| j|  \}	}
t|||	|
|S d S d S r  )r?  r  r  r#   )r7   r3   r.  r/  r8  re   r`   r6  resultr   r  r9   r9   r:   r>    s      z!StandardDomain._resolve_term_xrefc                 C  s\   |  |pg }|D ](}	|	|f| jkr| j|	|f \}
} qDqd\}
}|
sLd S t|||
||S )NrC  )Zobjtypes_for_roler   r#   )r7   r3   r.  r/  r8  re   r`   r6  ZobjtypesrH   r   r  r9   r9   r:   r?    s     z StandardDomain._resolve_obj_xrefzlist[tuple[str, Element]])r3   r.  r/  re   r`   r6  r1   c              
   C  s   g }|  }dD ]<}	| ||||	|	dkr,|n|||}
|
r|d|	 |
f q| jD ]X}||f}|dkrp||f}|| jkrT| j| \}}|d| | t|||||f qT|S )N)r   r   r   zstd:r   )r  rA  rI   r   r   Zrole_for_objtyper#   )r7   r3   r.  r/  re   r`   r6  resultsZltargetZroleresrH   r  r   r  r9   r9   r:   resolve_any_xref  s.     

 zStandardDomain.resolve_any_xrefz-Iterator[tuple[str, str, str, str, str, int]]c                 c  s:  | j jD ]"}|t| j j| d|ddfV  q| j D ]T\\}}}|rpd||g}||d|d |d dfV  q6||d|d |d dfV  q6| j D ]2\\}}}||||d |d | j| j	d fV  q| j
 D ] \}\}}	}
||
d	||	dfV  qt| j
}| j D ]*\}\}}	||kr
||d	||	dfV  q
d S )
Nr   r*   r?   rE  r   r   r@   r   r   )r3   rQ  r!   rR  r   r   r   r   r   attrsr   setr   )r7   r   progr   inforp   typer8   r   r  ZsectionnameZnon_anon_labelsr9   r9   r:   get_objects  s"     

zStandardDomain.get_objectsFr   r_   )rb  primaryr1   c                 C  s   |j S r  )lname)r7   rb  rd  r9   r9   r:   get_type_name  s    zStandardDomain.get_type_namer   )r`   r1   c                 C  s   |j | jkS r  )r	  r  )r7   r`   r9   r9   r:   r"    s    z!StandardDomain.is_enumerable_noder   c                 C  s`   |  |r\tt|}| j|jd\}}|r4||S |D ]"}t|tjtj	fr8t
|  S q8dS )z?Get the title of enumerable nodes to refer them using its titleNNN)r"  r
   r   r  r   r	  r   r   r   r   r!   )r7   r`   elemr   Ztitle_getterr   r9   r9   r:   r#    s    

zStandardDomain.get_numfig_titlec                 C  sb   dddddd}t |tjr"dS t |tjrFd|krF||tjrFd	S | j|jd
\}}|S dS )zGet type of enumerable nodes.r   rb  r_   )r`   clsr1   c                   s   t  fdd| D S )Nc                 3  s   | ]}t | V  qd S r  )r   ).0childri  r9   r:   	<genexpr>  s     zMStandardDomain.get_enumerable_node_type.<locals>.has_child.<locals>.<genexpr>)any)r`   ri  r9   rl  r:   	has_child  s    z:StandardDomain.get_enumerable_node_type.<locals>.has_childr  literal_blockr   rg  N)r   r   r  	containerrp  r  r   r	  )r7   r`   ro  rN  r   r9   r9   r:   rG  	  s    
z'StandardDomain.get_enumerable_node_typeztuple[int, ...] | None)r3   r/  rN  r   rM  r1   c           	   
   C  s   |dkrf|j dkrdS ||jkr&tqd|d d  }||j| krT|j| dS |j| |S nNz |d d }|j| | | W S  ttfk
r } z
t|W 5 d }~X Y nX d S )Nr  latexr9   r2  r=   r   r*   )r8   Ztoc_secnumbersr   r   Ztoc_fignumbersrK  
IndexError)	r7   r3   r/  rN  r   rM  Z
anchornameZ	figure_idrO  r9   r9   r:   rH    s    

zStandardDomain.get_fignumberc                 C  sf   | ddkr^| d}t| d}|r8|d| | }|rXdd||gS d S nd S d S )Nr   r   r   rb   r   rE  r   )r   r   ro   rn   r   r   )r7   r`   rU  commandr   r9   r9   r:   get_full_qualified_name6  s    
z&StandardDomain.get_full_qualified_name)r*   )N)N)F)>rV   rW   rX   rY   r8   r   r   r   r   rZ   r   rx   r[   r   r   r   r   r]   r   r   r   r4  r   r   r   Zdangling_warningsr   r   rq  r  r  r  propertyr   rP   r  r   r   r   r   r  r  r-  r   r7  rA  r9  r:  r;  r<  r=  r>  r?  r]  rc  rf  r"  r#  rG  rH  ru  __classcell__r9   r9   r  r:   rN     s   
	



   	 	4?
!rN   r&   r   r   zbool | None)r  r   r`   r1   c                 C  sd   |r|j dks|d dkrd S |d }||jkr:td}ntd}tj|| |d|d d dS d S )	NrC   r   r   rb   zundefined label: %rzDFailed to create a cross reference. A title or caption not found: %r)rE   rb  subtypeT)r8   r   r   r   r   )r  r   r`   re   msgr9   r9   r:   warn_missing_referenceE  s    

rz  r  )r  r1   c                 C  s$   |  t | dt dddddS )Nzwarn-missing-referencebuiltin   T)versionZenv_versionZparallel_read_safeZparallel_write_safe)Z
add_domainrN   connectrz  )r  r9   r9   r:   setupT  s    
r  )r*   )UrY   
__future__r   r   r   typingr   r   r   r   r   r	   r
   Zdocutilsr   Zdocutils.nodesr   r   r   Zdocutils.parsers.rstr   r   Zdocutils.statemachiner   Zsphinxr   Zsphinx.addnodesr   r   Zsphinx.directivesr   Zsphinx.domainsr   r   r   Zsphinx.localer   r   Zsphinx.rolesr   r   Zsphinx.utilr   r   r   Zsphinx.util.docutilsr    Zsphinx.util.nodesr!   r"   r#   Zsphinx.util.typingr$   r%   Zsphinx.applicationr&   Zsphinx.buildersr'   Zsphinx.environmentr(   	getLoggerrV   r   r   r~   Ur   r   r+   r)   r[   r]   rh   rx   r   r   r   r   r   r   r   r   rN   rz  r  r9   r9   r9   r:   <module>   s\   $

$'\q!1    S