B
    .Kc                 @   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   2lib/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cZcppZjsdomain z[source]zviewcode-link)classesZhtml)exprF)ZinternalZrefuri)ZbuilderenvgetattrZconfigcallabler   r   listfindallr   Zdescgetset
isinstanceZdesc_signatureaddr   inliner
   ZonlyZ	reference)r   r   r    Zresolve_targetZdomain_keysZobjnoder   ZurisZsignodeinfokeyvalueZurir)   Zonlynoder   r   r   doctree_read   sB    




r-   )r   r   c             C   s&   |  dt | dd d tjddS )Nzdoctree-readr   r   T)versionZparallel_read_safe)Zconnectr-   Zadd_config_valuesphinxZ__display_version__)r   r   r   r   setupD   s    r0   )__doc__typingr   r   r   Zdocutilsr   Zdocutils.nodesr   r/   r   Zsphinx.applicationr   Zsphinx.errorsr	   Zsphinx.localer
   r   r-   strr0   r   r   r   r   <module>   s   1