ó
öÀ„\c           @   su  d  Z  d d l Z d d l Z d d l m Z d d l m Z 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 d d	 l m Z m Z m Z d d
 l m Z e r#d d l m Z m Z m Z m Z m Z m Z d d l m Z d d l  m! Z! d d l" m# Z# n  e j$ e% ƒ Z& d „  Z' d „  Z( d „  Z) d „  Z* d „  Z+ d „  Z, d „  Z- d S(   sà   
    sphinx.ext.viewcode
    ~~~~~~~~~~~~~~~~~~~

    Add links to module code in Python object descriptions.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
iÿÿÿÿN(   t   nodes(   t	   iteritemst	   text_type(   t   addnodes(   t   RemovedInSphinx30Warning(   t   _(   t   ModuleAnalyzer(   t   get_full_modnamet   loggingt   status_iterator(   t   make_refnode(   t   Anyt   Dictt   Iterablet   Iteratort   Sett   Tuple(   t   Sphinx(   t   Config(   t   BuildEnvironmentc         C   s|   y t  | | ƒ SWnd t k
 r8 t j d | | ƒ d  St k
 rw } t j t j ƒ  j ƒ  ƒ t j d | | ƒ d  SXd  S(   Ns   Didn't find %s in %ss0   viewcode can't import %s, failed with error "%s"(	   R   t   AttributeErrort   loggert   verboset   Nonet	   Exceptiont	   tracebackt
   format_exct   rstrip(   t   appt   modnamet	   attributet   e(    (    s2   lib/python2.7/site-packages/sphinx/ext/viewcode.pyt   _get_full_modname$   s    c            s;  ˆ  j  j ‰ t ˆ d ƒ s' i  ˆ _ n  ˆ  j  j d k r= d  Sˆ  j  j j d ƒ rc ˆ j j rc d  S‡  ‡ f d †  } x¿| j t	 j
 ƒ D]«} | j d ƒ d k r© qˆ n  t ƒ  } x~| D]v} t | t	 j ƒ s× q¹ n  | j d ƒ } | j d ƒ } | } ˆ j j r@ˆ  j d	 | | ƒ }	 |	 s7t ˆ  | | ƒ }	 n  |	 } n  | sLq¹ n  | j d ƒ } | | | ˆ j | ƒ syq¹ n  | | k r‹q¹ n  | j | ƒ d
 | j d d ƒ }
 t	 j d d ƒ } | t	 j d d d d d d t d |
 d | d ˆ j ƒ7} | d c t j d t d ƒ d d g ƒ7<| | 7} q¹ Wqˆ Wd  S(   Nt   _viewcode_modulest
   singlehtmlt   epubc            s;  ˆ j  j |  d  ƒ } | t k r% d  Sˆ  j d |  ƒ } | d  k rÁ y t j |  ƒ } Wn t k
 rw t ˆ j  |  <d  SXt | j	 t
 ƒ s¢ | j	 j | j ƒ } n	 | j	 } | j ƒ  | j } n | \ } } | d  k sé | d | k r| | i  | f } | ˆ j  |  <n  | \ }	 } }
 }	 | | k r7| |
 | <t Sd  S(   Ns   viewcode-find-sourcei    (   R!   t   getR   t   Falset   emit_firstresultR   t
   for_moduleR   t
   isinstancet   codeR   t   decodet   encodingt	   find_tagst   tagst   True(   R   t   fullnamet   docnamet   refnamet   entryt	   code_tagst   analyzerR)   R-   R   t   used(   R   t   env(    s2   lib/python2.7/site-packages/sphinx/ext/viewcode.pyt   has_tagA   s.    	

t   domaint   pyt   moduleR/   s   viewcode-follow-importeds	   _modules/t   .t   /t   exprt   htmlt    t   reftypet   viewcodet	   refdomaint   stdt   refexplicitt	   reftargett   refidt   refdoci    s   [source]t   classess   viewcode-link(   t   builderR6   t   hasattrR!   t   namet
   startswitht   configt   viewcode_enable_epubt   traverseR   t   descR$   t   setR(   t   desc_signaturet    viewcode_follow_imported_membersR&   R    R0   t   addt   replacet   onlyt   pending_xrefR%   R    t   inlineR   (   R   t   doctreeR7   t   objnodet   namest   signodeR   R/   R1   t   new_modnamet   pagenamet   onlynode(    (   R   R6   s2   lib/python2.7/site-packages/sphinx/ext/viewcode.pyt   doctree_read7   sR    "			c         C   sE   t  | d ƒ s d  St  | d ƒ s. i  | _ n  | j j | j ƒ d  S(   NR!   (   RJ   R!   t   update(   R   R6   t   docnamest   other(    (    s2   lib/python2.7/site-packages/sphinx/ext/viewcode.pyt   env_merge_info…   s
    c         C   s9   | d d k r5 t  |  j | d | d | d | ƒ Sd  S(   NR@   RA   RG   RE   RF   (   R
   RI   (   R   R6   t   nodet   contnode(    (    s2   lib/python2.7/site-packages/sphinx/ext/viewcode.pyt   missing_reference   s    c      	   c   s  |  j  j } t | d ƒ s d  S|  j  j } |  j  j } t | j ƒ } xt t t	 | j ƒ ƒ d d t
 | j ƒ |  j d „  ƒ D]D\ } } | s˜ q€ n  | \ } } }	 }
 d | j d d ƒ } | j j d$ k rá | j j } n d } | j | | d t ƒ} | j ƒ  } | d j d ƒ \ } } | d | g | d d +t
 | ƒ d } xŠ t	 |	 ƒ D]| \ } } | | \ } } } | | | ƒ d |
 d | } d | | t d ƒ f | | | | <| t | | ƒ c d 7<qXWg  } | } xi d | k rO| j d d ƒ d } | | k rç| j i | | d | j d d ƒ ƒ d 6| d 6ƒ qçqçW| j i | | d ƒ d 6t d ƒ d 6ƒ | j ƒ  i | d 6| d 6t d ƒ | d j | ƒ d 6} | | d f Vq€ W| sÒd  Sd g } d g } xÄ t | ƒ D]¶ } | j | d ƒ r+| j | d ƒ | j d ƒ nL | j ƒ  x. | j | d ƒ se| j ƒ  | j d  ƒ q8W| j | d ƒ | j d! | d d | j d d ƒ ƒ | f ƒ qñW| j d  t
 | ƒ d ƒ i t d" ƒ d 6t d# ƒ d j | ƒ d 6} d | d f Vd  S(%   NR!   s   highlighting module code... t   bluec         S   s   |  d S(   Ni    (    (   t   x(    (    s2   lib/python2.7/site-packages/sphinx/ext/viewcode.pyt   <lambda>©   s    s	   _modules/R;   R<   t   python3t   defaultt   nonet   pythont   linenosi    s   <pre>i   t   #sM   <div class="viewcode-block" id="%s"><a class="viewcode-back" href="%s">%s</a>s   [docs]s   </div>t   linkt   titles   _modules/indexs   Module codet   parentss   <h1>Source code for %s</h1>s   
t   bodys	   page.htmlR?   iÿÿÿÿs   <ul>s   </ul>s   <li><a href="%s">%s</a></li>
s   Overview: module codes0   <h1>All modules for which code is available</h1>(   Rk   Rl   Rm   (   RI   R6   RJ   t   highlightert   get_relative_uriRQ   R!   R	   t   sortedR   t   lent	   verbosityRU   RM   t   highlight_languaget   highlight_blockR%   t
   splitlinest   splitR   t   mint   rsplitt   appendt   reverset   joinRL   t   pop(   R   R6   Ru   t   uritot   modnamesR   R2   R)   R-   R5   R1   R^   t   lexert   highlightedt   linest   beforet   aftert   maxindexRK   R0   t   typet   startt   endt   backlinkRs   t   parentt   contextR>   t   stack(    (    s2   lib/python2.7/site-packages/sphinx/ext/viewcode.pyt   collect_pages˜   sŒ    		
		

		c         C   s,   | j  d  k	 r( t j d t d d ƒn  d  S(   Nsb   viewcode_import was renamed to viewcode_follow_imported_members. Please update your configuration.t
   stackleveli   (   t   viewcode_importR   t   warningst   warnR   (   R   RM   (    (    s2   lib/python2.7/site-packages/sphinx/ext/viewcode.pyt   migrate_viewcode_importú   s    	c         C   s¯   |  j  d d  t ƒ |  j  d t t ƒ |  j  d t t ƒ |  j d t ƒ |  j d t ƒ |  j d t ƒ |  j d t ƒ |  j	 d ƒ |  j	 d	 ƒ i t
 j d
 6d d 6t d 6S(   NR•   RN   RS   s   doctree-reads   env-merge-infos   html-collect-pagess   missing-references   viewcode-find-sources   viewcode-follow-importedt   versioni   t   env_versiont   parallel_read_safe(   t   add_config_valueR   R%   R.   t   connectR`   Rd   R“   Rg   t	   add_eventt   sphinxt   __display_version__(   R   (    (    s2   lib/python2.7/site-packages/sphinx/ext/viewcode.pyt   setup  s    
(.   t   __doc__R   R–   t   docutilsR    t   sixR   R   RŸ   R   t   sphinx.deprecationR   t   sphinx.localeR   t   sphinx.pycodeR   t   sphinx.utilR   R   R	   t   sphinx.util.nodesR
   R%   t   typingR   R   R   R   R   R   t   sphinx.applicationR   t   sphinx.configR   t   sphinx.environmentR   t	   getLoggert   __name__R   R    R`   Rd   Rg   R“   R˜   R¡   (    (    (    s2   lib/python2.7/site-packages/sphinx/ext/viewcode.pyt   <module>
   s0   .		N			b	