ó
öÀ„\c           @  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	 m
 Z
 m Z d d l m Z d d l m Z d d	 l m Z m Z e rÅ d d
 l m Z m Z m Z m Z m Z n  d e f d „  ƒ  YZ d S(   sÉ   
    sphinx.pycode
    ~~~~~~~~~~~~~

    Utilities parsing and analyzing Python code.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
iÿÿÿÿ(   t   print_functionN(   t   path(   t   ZipFile(   t	   iteritemst   BytesIOt   StringIO(   t   PycodeError(   t   Parser(   t   get_module_sourcet   detect_encoding(   t   Anyt   Dictt   IOt   Listt   Tuplet   ModuleAnalyzerc           B  st   e  Z i  Z e d  d „ ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „ Z	 d „  Z
 d „  Z d „  Z RS(	   s   <string>c         C  sA   t  | t ƒ r% |  t | ƒ | | ƒ S|  t | ƒ | | d t ƒS(   Nt   decoded(   t
   isinstancet   bytesR   R   t   True(   t   clst   stringt   modnamet   srcname(    (    s5   lib/python2.7/site-packages/sphinx/pycode/__init__.pyt
   for_string    s    c         C  sÍ   d | f |  j  k r& |  j  d | f SyA t | d ƒ , } |  | | | ƒ } | |  j  d | f <Wd  QXWn_ t k
 rÈ } d t j | k r² |  j | | ƒ } |  j  d | f <qÉ t d | | ƒ ‚ n X| S(   Nt   filet   rbs   .eggs   error opening %r(   t   cachet   opent	   ExceptionR   t   sept   for_eggR   (   R   t   filenameR   t   ft   objt   err(    (    s5   lib/python2.7/site-packages/sphinx/pycode/__init__.pyt   for_file'   s    &c   	      C  sŸ   t  j t j ƒ } t  j d | | ƒ \ } } yD t | ƒ 2 } | j | ƒ j d ƒ } |  j | | | ƒ SWd  QXWn& t	 k
 rš } t
 d | | ƒ ‚ n Xd  S(   Ns
   (?<=\.egg)s   utf-8s   error opening %r(   t   ret   escapeR   R   t   splitR   t   readt   decodeR   R   R   (	   R   R    R   t   SEPt   eggpatht   relpatht   eggt   codet   exc(    (    s5   lib/python2.7/site-packages/sphinx/pycode/__init__.pyR   7   s    c         C  sÐ   d | f |  j  k rD |  j  d | f } t | t ƒ r@ | ‚ n  | SyI t | ƒ \ } } | d k rz |  j | | ƒ } n |  j | | ƒ } Wn) t k
 r¸ } | |  j  d | f <‚  n X| |  j  d | f <| S(   Nt   moduleR   (   R   R   R   R   R   R$   (   R   R   t   entryt   typet   sourceR"   R#   (    (    s5   lib/python2.7/site-packages/sphinx/pycode/__init__.pyt
   for_moduleC   s    	c         C  s˜   | |  _  | |  _ | j ƒ  } | sa t | j ƒ |  _ | j | ƒ | j ƒ  j |  j ƒ |  _	 n d  |  _ | j ƒ  |  _	 d  |  _ d  |  _ d  |  _ d  S(   N(   R   R   t   tellR	   t   readlinet   encodingt   seekR(   R)   R.   t   Nonet	   attr_docst   tagordert   tags(   t   selfR3   R   R   R   t   pos(    (    s5   lib/python2.7/site-packages/sphinx/pycode/__init__.pyt   __init__X   s    					c         C  sÊ   y— t  |  j |  j ƒ } | j ƒ  i  |  _ xP t | j ƒ D]? \ } } | rj | j ƒ  d g |  j | <q; d g |  j | <q; W| j |  _	 | j
 |  _ Wn, t k
 rÅ } t d |  j | f ƒ ‚ n Xd S(   s   Parse the source code.t    s   parsing %r failed: %rN(   R   R.   R7   t   parseR:   R   t   commentst
   splitlinest   definitionsR<   t	   defordersR;   R   R   R   (   R=   t   parsert   scopet   commentR/   (    (    s5   lib/python2.7/site-packages/sphinx/pycode/__init__.pyRA   l   s    
	c         C  s#   |  j  d k r |  j ƒ  n  |  j  S(   s?   Find class and module-level attributes and their documentation.N(   R:   R9   RA   (   R=   (    (    s5   lib/python2.7/site-packages/sphinx/pycode/__init__.pyt   find_attr_docs   s    c         C  s#   |  j  d k r |  j ƒ  n  |  j  S(   s?   Find class, function and method definitions and their location.N(   R<   R9   RA   (   R=   (    (    s5   lib/python2.7/site-packages/sphinx/pycode/__init__.pyt	   find_tags‡   s    (   t   __name__t
   __module__R   t   classmethodR   R$   R   R4   t   FalseR?   RA   RI   RJ   (    (    (    s5   lib/python2.7/site-packages/sphinx/pycode/__init__.pyR      s   		(   t   __doc__t
   __future__R    R%   t   osR   t   zipfileR   t   sixR   R   R   t   sphinx.errorsR   t   sphinx.pycode.parserR   t   sphinx.utilR   R	   RN   t   typingR
   R   R   R   R   t   objectR   (    (    (    s5   lib/python2.7/site-packages/sphinx/pycode/__init__.pyt   <module>
   s   +