
\c           @  s}  d  Z  d d l m Z d d l 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 d d	 l m Z d d
 l m Z d d l m Z 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! d d l" m# Z# d d l$ m% Z% d d l& m' Z' e( r5d d l) m* Z* m+ Z+ m, Z, m- Z- m. Z. m/ Z/ m0 Z0 m1 Z1 d d l2 m3 Z3 d d l4 m5 Z5 d d l6 m  Z  d d l7 m8 Z8 d d l9 m: Z: d d l; m< Z< d d l= m> Z> d d l m? Z? m@ Z@ d d lA mB ZB d d lC mD ZD d d lE mF ZF mG ZG n  e% jH eI  ZJ i d d 6ZK d  eL f d!     YZM d"   ZN d#   ZO d S($   s   
    sphinx.registry
    ~~~~~~~~~~~~~~~

    Sphinx component registry.

    :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
i(   t   print_functionN(   t   isclass(   t
   MethodType(   t	   Directive(   t   iter_entry_points(   t	   iteritemst
   itervalues(   t   RemovedInSphinx30Warning(   t   ObjType(   t   GenericObjectt   Target(   t   ExtensionErrort   SphinxErrort   VersionRequirementError(   t	   Extension(   t   __(   t   Parser(   t   XRefRole(   t   logging(   t   directive_helper(   t   Anyt   Callablet   Dictt   Iteratort   Listt   Tuplet   Typet   Union(   t   nodes(   t   Input(   t	   Transform(   t   Sphinx(   t   Builder(   t   Config(   t   Domaint   Index(   t   BuildEnvironment(   t
   Documenter(   t   RoleFunctiont   TitleGetters   1.2s   sphinxjp.themecoret   SphinxComponentRegistryc           B  s  e  Z d    Z e d  Z d   Z d   Z e d  Z d   Z d   Z	 d   Z
 d& d& e d  Z e d	  Z e d
  Z d d& d& d g  e d  Z d d& d e d  Z e d  Z d   Z d   Z d   Z d   Z e d  Z d   Z e d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z  d   Z! d   Z" d    Z# d!   Z$ d& e d"  Z% d#   Z& d$   Z' d%   Z( RS('   c         C  s   i  |  _  i  |  _ i  |  _ g  |  _ i  |  _ i  |  _ i  |  _ i  |  _ i  |  _ i  |  _	 i  |  _
 i  |  _ g  |  _ g  |  _ g  |  _ i  |  _ i  |  _ i  |  _ i  |  _ i  |  _ g  |  _ d  S(   N(   t   autodoc_attrgettrst   builderst   documenterst	   css_filest   domainst   domain_directivest   domain_indicest   domain_object_typest   domain_rolest   enumerable_nodest   html_inline_math_rendererst   html_block_math_rendererst   js_filest   latex_packagest   post_transformst   source_parserst   source_inputst   source_suffixt   translatorst   translation_handlerst
   transforms(   t   self(    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   __init__:   s*    																				c         C  s   t  j d |  t | d  s8 t t d  |   n  | j |  j k r | r t t d  | j |  j | j j f   n  | |  j | j <d  S(   Ns   [app] adding builder: %rt   names(   Builder class %s has no "name" attributes(   Builder %r already exists (in module %s)(   t   loggert   debugt   hasattrR   R   R@   R*   t
   __module__(   R>   t   buildert   override(    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_builder   s    #c         C  s   | d  k r d  S| |  j k r~ t d |  } y t |  } Wn' t k
 rg t t d  |   n X|  j | | j  n  d  S(   Ns   sphinx.builderss?   Builder name %s not registered or available through entry point(	   t   NoneR*   R   t   nextt   StopIterationR   R   t   load_extensiont   module_name(   R>   t   appR@   t   entry_pointst   entry_point(    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   preload_builder   s    c         C  s9   | |  j  k r( t t d  |   n  |  j  | |  S(   Ns   Builder name %s not registered(   R*   R   R   (   R>   RM   R@   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   create_builder   s    c         C  sY   t  j d |  | j |  j k rE | rE t t d  | j   n  | |  j | j <d  S(   Ns   [app] adding domain: %rs   domain %s already registered(   RA   RB   R@   R-   R   R   (   R>   t   domainRF   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt
   add_domain   s    c         C  s   | |  j  k S(   N(   R-   (   R>   RR   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt
   has_domain   s    c         c  s   x t  |  j  D] } | |  } | j j |  j j | j i    | j j |  j j | j i    | j	 j
 |  j j | j g    x< t |  j j | j i    D] \ } } | j | |  q W| Vq Wd  S(   N(   R   R-   t
   directivest   updateR.   t   getR@   t   rolesR1   t   indicest   extendR/   R   R0   t   add_object_type(   R>   t   envt   DomainClassRR   R@   t   objtype(    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   create_domains   s    """+c         C  s-   t  j d t d d |  j | d t d  S(   Ns\   registry.override_domain() is deprecated. Use app.add_domain(domain, override=True) instead.t
   stackleveli   RF   (   t   warningst   warnR   RS   t   True(   R>   RR   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   override_domain   s    	c   	      K  s   t  j d | | | | | | f  | |  j k rJ t t d  |   n  |  j j | i   } | | k r | r t t d  | | f   n  t |  s t | t	  r t
 | | | |  | | <n
 | | | <d  S(   Ns$   [app] adding directive to domain: %rs   domain %s not yet registereds3   The %r directive is already registered to domain %s(   RA   RB   R-   R   R   R.   t
   setdefaultR   t
   issubclassR   R   (	   R>   RR   R@   t   objt   has_contentt   argument_specRF   t   option_specRU   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_directive_to_domain   s    	c         C  s   t  j d | | | f  | |  j k rA t t d  |   n  |  j j | i   } | | k r | r t t d  | | f   n  | | | <d  S(   Ns   [app] adding role to domain: %rs   domain %s not yet registereds.   The %r role is already registered to domain %s(   RA   RB   R-   R   R   R1   Re   (   R>   RR   R@   t   roleRF   RX   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_role_to_domain   s    c         C  s   t  j d | | f  | |  j k r> t t d  |   n  |  j j | g   } | | k r | r t t d  | j | f   n  | j |  d  S(   Ns    [app] adding index to domain: %rs   domain %s not yet registereds/   The %r index is already registered to domain %s(	   RA   RB   R-   R   R   R/   Re   R@   t   append(   R>   RR   t   indexRF   RY   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_index_to_domain   s    t    c	      	   C  s   t  j d | | | | | | | f  t | t t f i | d 6t |  d 6| d 6 }	 |  j d | |	  |  j d | t d |   |  j	 j
 d i   }
 | |
 k r | r t t d  |   n  t | p | |  |
 | <d  S(   Ns   [app] adding object type: %rt   indextemplatet
   parse_nodet   doc_field_typest   stdt   innernodeclasss(   The %r object_type is already registered(   RA   RB   t   typeR	   t   objectt   staticmethodRk   Rm   R   R0   Re   R   R   R   (   R>   t   directivenamet   rolenameRr   Rs   t   ref_nodeclasst   objnameRt   RF   t	   directivet   object_types(    (    s.   lib/python2.7/site-packages/sphinx/registry.pyR[      s    		
c   	      C  s   t  j d | | | | | f  t | t t f i | d 6 } |  j d | |  |  j d | t d |   |  j j	 d i   } | | k r | r t
 t d  |   n  t | p | |  | | <d  S(   Ns   [app] adding crossref type: %rRr   Ru   Rv   s*   The %r crossref_type is already registered(   RA   RB   Rw   R
   Rx   Rk   Rm   R   R0   Re   R   R   R   (	   R>   Rz   R{   Rr   R|   R}   RF   R~   R   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_crossref_type   s    		c         C  sS   t  j d | |  | |  j k rB | rB t t d  |   n | |  j | <d  S(   Ns"   [app] adding source_suffix: %r, %rs&   source_suffix %r is already registered(   RA   RB   R:   R   R   (   R>   t   suffixt   filetypeRF   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_source_suffix  s    c         O  s&  t  j d |  t |  d k r5 d  } | d } n* t j d t d d | d } | d } | r~ |  j | | d t n  t | j	  d k r t j d | j
 t d d n  xV | j	 D]K } | |  j k r | j d  r t t d	  |   q | |  j | <q W| r"| |  j | <n  d  S(
   Ns%   [app] adding search source_parser: %ri   i    s^   app.add_source_parser() does not support suffix argument. Use app.add_source_suffix() instead.R`   i   RF   sO   Old source_parser has been detected. Please fill Parser.supported attribute: %ss*   source_parser for %r is already registered(   RA   RB   t   lenRH   Ra   Rb   R   R   Rc   t	   supportedt   __name__R8   RW   R   R   (   R>   t   argst   kwargsR   t   parserR   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_source_parser  s*    	

	c         C  s=   y |  j  | SWn' t k
 r8 t t d  |   n Xd  S(   Ns#   Source parser for %s not registered(   R8   t   KeyErrorR   R   (   R>   R   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   get_source_parser@  s    c         C  s   |  j  S(   N(   R8   (   R>   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   get_source_parsersG  s    c         C  s;   |  j  |  } |   } t | t  r7 | j |  n  | S(   N(   R   t
   isinstancet   SphinxParsert   set_application(   R>   RM   t   filenamet   parser_classR   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   create_source_parserK  s
    	c         C  sT   xM | j  D]B } | |  j k r? | r? t t d  |   n  | |  j | <q
 Wd  S(   Ns)   source_input for %r is already registered(   R   R9   R   R   (   R>   t   input_classRF   R   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_source_inputS  s
    c         C  s`   y |  j  | SWnJ t k
 r[ y |  j  d SWq\ t k
 rW t t d  |   q\ Xn Xd  S(   Nt   *s"   source_input for %s not registered(   R9   R   R   R   (   R>   R   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   get_source_input[  s    c         C  sQ   t  j d |  | |  j k r@ | r@ t t d  |   n  | |  j | <d  S(   Ns.   [app] Change of translator for the %s builder.s    Translator for %r already exists(   RA   RB   R;   R   R   (   R>   R@   t
   translatorRF   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_translatorf  s    c         K  s   t  j d | |  x t |  D]q \ } } |  j j | i   } y# | \ } } | | f | | j <Wq  t k
 r t t d  | |   q  Xq  Wd  S(   Ns)   [app] adding translation_handlers: %r, %rsE   kwargs for add_node() must be a (visit, depart) function tuple: %r=%r(	   RA   RB   R   R<   Re   R   t
   ValueErrorR   R   (   R>   t   nodeR   t   builder_namet   handlersR<   t   visitt   depart(    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_translation_handlersm  s    c         C  s   |  j  j | j | j  S(   N(   R;   RW   R@   t   default_translator_class(   R>   RE   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   get_translator_classy  s    c   	      G  s   |  j  |  } | s( t d | j   | |   } |  j j | j d   } | d  k rs |  j j | j i   } n  xc t |  D]U \ } \ } } t | d | t	 | |   | r t | d | t	 | |   q q W| S(   Ns   translator not found for %st   visit_t   depart_(
   R   t   AssertionErrorR@   R<   RW   RH   t   formatR   t   setattrR   (	   R>   RE   R   t   translator_classR   R   R@   R   R   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   create_translator~  s    $c         C  s$   t  j d |  |  j j |  d  S(   Ns   [app] adding transform: %r(   RA   RB   R=   Rn   (   R>   t	   transform(    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_transform  s    c         C  s   |  j  S(   N(   R=   (   R>   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   get_transforms  s    c         C  s$   t  j d |  |  j j |  d  S(   Ns   [app] adding post transform: %r(   RA   RB   R7   Rn   (   R>   R   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_post_transform  s    c         C  s   |  j  S(   N(   R7   (   R>   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   get_post_transforms  s    c         C  s   | |  j  | <d  S(   N(   R+   (   R>   R^   t
   documenter(    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_documenter  s    c         C  s   | |  j  | <d  S(   N(   R)   (   R>   t   typt
   attrgetter(    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_autodoc_attrgetter  s    c         K  s   |  j  j | | f  d  S(   N(   R,   Rn   (   R>   R   t
   attributes(    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_css_files  s    c         K  s-   t  j d | |  |  j j | | f  d  S(   Ns   [app] adding js_file: %r, %r(   RA   RB   R5   Rn   (   R>   R   R   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_js_file  s    c         C  s*   t  j d |  |  j j | | f  d  S(   Ns   [app] adding latex package: %r(   RA   RB   R6   Rn   (   R>   R@   t   options(    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_latex_package  s    c         C  s\   t  j d | | |  | |  j k rE | rE t t d  |   n  | | f |  j | <d  S(   Ns*   [app] adding enumerable node: (%r, %r, %r)s%   enumerable_node %r already registered(   RA   RB   R2   R   R   (   R>   R   t   figtypet   title_getterRF   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_enumerable_node  s    c         C  s\   t  j d | | |  | |  j k r> t t d  |   n  | |  j | <| |  j | <d  S(   Ns+   [app] adding html_math_renderer: %s, %r, %rs%   math renderer %s is already registred(   RA   RB   R3   R   R   R4   (   R>   R@   t   inline_rendererst   block_renderers(    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   add_html_math_renderer  s    	c         C  s  | | j  k r d S| t k r@ t j t d  | t |  d S| j j |  y t | d d d g  } WnI t	 k
 r } t j
 t d  t j    t t d  | |   n Xt | d  s t j t d  |  i  } nE y | j |  } Wn/ t k
 r*} t t d  | | f   n X| d k r@i  } n. t | t  snt j t d  |  i  } n  t | | |  | j  | <| j j   d S(	   s   Load a Sphinx extension.Ns\   the extension %r was already merged with Sphinx since version %s; this extension is ignored.t   setups   Original exception:
s   Could not import extension %ssM   extension %r has no setup() function; is it really a Sphinx extension module?sp   The %s extension used by this project needs at least Sphinx v%s; it therefore cannot be built with this version.su   extension %r returned an unsupported object from its setup() function; it should return None or a metadata dictionary(   t
   extensionst   EXTENSION_BLACKLISTRA   t   warningR   t   _setting_up_extensionRn   t
   __import__RH   t   ImportErrort   verboset	   tracebackt
   format_excR   RC   R   R   R   t   dictR   t   pop(   R>   RM   t   extnamet   modt   errt   metadata(    (    s.   lib/python2.7/site-packages/sphinx/registry.pyRK     s<    				c         C  s7   d d l  m } d   | j j   D } | | d <| S(   Ni(   t   ENV_VERSIONc         S  s5   i  |  ]+ } | j  j d   r | j  d  | j  q S(   t   env_version(   R   RW   R@   (   t   .0t   ext(    (    s.   lib/python2.7/site-packages/sphinx/registry.pys
   <dictcomp>  s   	 t   sphinx(   t   sphinx.environmentR   R   t   values(   R>   RM   R   t
   envversion(    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   get_envversion  s    
N()   R   RD   R?   t   FalseRG   RP   RQ   RS   RT   R_   Rd   RH   Rk   Rm   Rp   R[   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   RK   R   (    (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyR(   9   sR   	F
							%																	
	.c         C  s   xn t  |  j j  D]Z \ } } | |  j j k rD | |  j j | <q |  j j | d k r | |  j j | <q q W|  j j |  j _ d S(   sD   Merge source_suffix which specified by user and added by extensions.N(   R   t   registryR:   t   configRH   (   RM   R   R   R   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   merge_source_suffix   s    c         C  s)   |  j  d t  i d d 6t d 6t d 6S(   Ns   config-initedt   builtint   versiont   parallel_read_safet   parallel_write_safe(   t   connectR   Rc   (   RM   (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyR     s
    (P   t   __doc__t
   __future__R    R   Ra   t   inspectR   t   typesR   t   docutils.parsers.rstR   t   pkg_resourcesR   t   sixR   R   t   sphinx.deprecationR   t   sphinx.domainsR   t   sphinx.domains.stdR	   R
   t   sphinx.errorsR   R   R   t   sphinx.extensionR   t   sphinx.localeR   t   sphinx.parsersR   R   t   sphinx.rolesR   t   sphinx.utilR   t   sphinx.util.docutilsR   R   t   typingR   R   R   R   R   R   R   R   t   docutilsR   t   docutils.ioR   t   docutils.parserst   docutils.transformsR   t   sphinx.applicationR   t   sphinx.buildersR    t   sphinx.configR!   R"   R#   R   R$   t   sphinx.ext.autodocR%   t   sphinx.util.typingR&   R'   t	   getLoggerR   RA   R   Rx   R(   R   R   (    (    (    s.   lib/python2.7/site-packages/sphinx/registry.pyt   <module>
   sL   :
 	