B
    \	                 @   s`   d 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 G dd deZ	d	d
 Z
dd ZdS )z
    sphinx.ext.linkcode
    ~~~~~~~~~~~~~~~~~~~

    Add external links to module code in Python object descriptions.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    )nodesN)addnodes)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   c          
   C   s:  | j j}t|jdd }t|jjs*tdtddgdgdgddgd}x|t	j
D ]}|d}t }x|D ]}t|t	jsqni }	x.||g D ]}
||
}|sd	}||	|
< qW |	sqn|||	}|sqn||ksn|sqn|| t	jd
d}|tjd	d	d|d7 }|d  tjd	tddgd7  < ||7 }qnW qTW d S )Nlinkcode_resolvez3Function `linkcode_resolve` is not given in conf.pymodulefullnamenamesobject)pycZcppZjsdomain Zhtml)exprF)ZinternalZrefurir   z[source]zviewcode-link)classes)ZbuilderenvgetattrZconfigcallabler   r   dictZtraverser   Zdescgetset
isinstanceZdesc_signatureaddZonlyr   Z	referenceZinliner   )appZdoctreer   Zresolve_targetZdomain_keysZobjnoder   ZurisZsignodeinfokeyvalueZuriZonlynoder   r   r   doctree_read   sF    




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   setupP   s    r'   )__doc__Zdocutilsr   r&   r   Zsphinx.errorsr   Zsphinx.localer   r   r$   r'   r   r   r   r   <module>
   s   3