B
    d                 @   s   d Z ddlmZmZ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eeddddZeeeef dddZdS )z@Add external links to module code in Python object descriptions.    )AnyDictSet)nodes)NodeN)addnodes)Sphinx)SphinxError)_c               @   s   e Zd ZdZdS )LinkcodeErrorzlinkcode errorN)__name__
__module____qualname__category r   r   `/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/sphinx/ext/linkcode.pyr      s   r   )appdoctreereturnc          
   C   s2  | j j}t|jdd }t|jjs*tdddgdgdgddgd}xt|t	j
D ]}|d}t }x|D ]}t|t	jsqpi }	x.||g D ]}
||
}|sd	}||	|
< qW |	sqp|||	}|sqp||ksp|sqp|| tjd	td
dgd}t	jdd}|tjd	d	|d|d7 }||7 }qpW qVW 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)builderenvgetattrconfigcallabler   r   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   sB    




r7   )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   setupD   s    r;   )__doc__typingr   r   r   Zdocutilsr   Zdocutils.nodesr   r:   r   Zsphinx.applicationr   Zsphinx.errorsr	   Zsphinx.localer
   r   r7   strr;   r   r   r   r   <module>   s   1