o
    Niw
                     @  s   d Z ddlmZ ddlmZ ddlmZ ddlZddlmZ ddl	m
Z
 ddlmZ er>dd	lmZ dd
lmZ ddlmZ G dd de
ZdddZdddZdS )z@Add external links to module code in Python object descriptions.    )annotations)TYPE_CHECKING)nodesN)addnodes)SphinxError)_)Node)Sphinx)ExtensionMetadatac                   @  s   e Zd ZdZdS )LinkcodeErrorzlinkcode errorN)__name__
__module____qualname__category r   r   G/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/ext/linkcode.pyr      s    r   appr	   doctreer   returnNonec              
   C  sD  | j j}t|jdd }t|jjsd}t||d usJ t| j dd}ddgdgdgddgd	}t|t	j
D ]f}|d
}t }	|D ]Y}
t|
t	jsNqEi }||g D ]}|
|}|sad}|||< qV|siqE|||}|sqqE||	v sw|sxqE|	| tjdtddgd}t	j|d}|tjdd|d|d7 }|
|7 }
qEq9d S )Nlinkcode_resolvez3Function `linkcode_resolve` is not given in conf.pysupported_linkcodehtmlmodulefullnamenamesobject)pyccppjsdomain z[source]zviewcode-link)classes)exprF)internalrefuri)builderenvgetattrconfigcallabler   r   listfindallr   descgetset
isinstancedesc_signatureaddr   inliner   only	reference)r   r   r(   resolve_targetmsgnode_only_exprdomain_keysobjnoder!   urissignodeinfokeyvalueurir4   onlynoder   r   r   doctree_read   sL   





rC   r
   c                 C  s&   |  dt | dd d tjddS )Nzdoctree-readr   r"   T)versionparallel_read_safe)connectrC   add_config_valuesphinx__display_version__)r   r   r   r   setupQ   s   rJ   )r   r	   r   r   r   r   )r   r	   r   r
   )__doc__
__future__r   typingr   docutilsr   rH   r   sphinx.errorsr   sphinx.localer   docutils.nodesr   sphinx.applicationr	   sphinx.util.typingr
   r   rC   rJ   r   r   r   r   <module>   s    
8