U
    \Sh                     @  s   d Z ddlm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 dd
lmZ G dd deZddddddZdddddZdS )z@Add external links to module code in Python object descriptions.    )annotations)Any)nodes)NodeN)addnodes)Sphinx)SphinxError)_c                   @  s   e Zd ZdZdS )LinkcodeErrorzlinkcode errorN)__name__
__module____qualname__category r   r   F/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/ext/linkcode.pyr
      s   r
   r   r   None)appdoctreereturnc              
   C  s2  | j j}t|jdd }t|jjs*td|d k	s6tddgdgdgddgd}t|	t
jD ]}|d}t }|D ]}t|t
jsqxi }	||g D ]}
||
}|sd	}||	|
< q|	sqx|||	}|sqx||ksx|sqx|| tjd	td
dgd}t
jdd}|tjd	d	|d|d7 }||7 }qxq`d S )Nlinkcode_resolvez3Function `linkcode_resolve` is not given in conf.pymodulefullnamenamesobject)pyccppjsdomain z[source]zviewcode-link)classeshtml)exprF)ZinternalZrefuri)Zbuilderenvgetattrconfigcallabler   r
   AssertionErrorlistfindallr   descgetset
isinstanceZdesc_signatureaddr   inliner	   only	reference)r   r   r#   Zresolve_targetZdomain_keysZobjnoder   urisZsignodeinfokeyvalueurir/   Zonlynoder   r   r   doctree_read   sH    




r7   zdict[str, Any])r   r   c                 C  s&   |  dt | dd d tjddS )Nzdoctree-readr   r   T)versionZparallel_read_safe)connectr7   Zadd_config_valuesphinxZ__display_version__)r   r   r   r   setupG   s    r;   )__doc__
__future__r   typingr   Zdocutilsr   Zdocutils.nodesr   r:   r   Zsphinx.applicationr   Zsphinx.errorsr   Zsphinx.localer	   r
   r7   r;   r   r   r   r   <module>   s   2