ó
öÀ„\c           @   s¼  d  Z  d d l m Z d d l m Z d d l m Z m Z m Z m	 Z	 d d l
 m Z 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 r7d d l m Z 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  d „  Z% d „  Z& d „  Z' d „  Z( d „  Z) d e* f d „  ƒ  YZ+ e d „  ƒ Z, d e f d „  ƒ  YZ- d e e f d „  ƒ  YZ. d S(   sÐ   
    sphinx.jinja2glue
    ~~~~~~~~~~~~~~~~~

    Glue code for the jinja2 templating engine.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
iÿÿÿÿ(   t   path(   t   pformat(   t   Anyt   Callablet   Iteratort   Tuple(   t   FileSystemLoadert
   BaseLoadert   TemplateNotFoundt   contextfunction(   t   SandboxedEnvironment(   t   open_if_exists(   t   string_types(   t   TemplateBridge(   t   logging(   t   mtimes_of_files(   R   R   t   Dictt   ListR   R   t   Union(   t   Environment(   t   Builder(   t   Themec         C   s)   t  |  t ƒ r |  j ƒ  d k St |  ƒ S(   Nt   truet   1t   yest   on(   R   R   R   R   (   t
   isinstanceR   t   lowert   bool(   t   val(    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyt   _tobool"   s    c         C   s'   y t  |  ƒ SWn t k
 r" d SXd  S(   Ni    (   t   intt
   ValueError(   R   (    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyt   _toint)   s    c         C   sD   |  d k r d St |  ƒ j ƒ  r@ t |  ƒ d k r8 d Sd |  S|  S(   s  
    Make val a css dimension. In particular the following transformations
    are performed:

    - None -> 'initial' (default CSS value)
    - 0 -> '0'
    - ints and string representations of ints are interpreted as pixels.

    Everything else is returned unchanged.
    t   initiali    t   0s   %spxN(   t   Nonet   strt   isdigitR   (   R   (    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyt   _todim1   s
    c   
      c   sì   t  |  ƒ } d } x* |  D]" } | d t | d d ƒ 7} q W| | } d } x– t | ƒ D]ˆ } d } | }	 | | d k r t | ƒ } nK xH |  | D]< } | d t | d d ƒ 7} | d 7} | | k r˜ Pq˜ q˜ W| |	 | !Vq\ Wd  S(   Ni    i   (   t   listt   lent   range(
   t   valuest   slicest   seqt   lengtht   valuet   items_per_slicet   offsett   slice_numbert   countt   start(    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyt   _slice_indexD   s"     

c         C   sR   d |  k r i  |  j  d <n  | rN | |  j  d k rN d |  j  d | <d | Sd S(   s+   Helper to output each access key only once.t   _accesskeysi   s   accesskey="%s"t    (   t   vars(   t   contextt   key(    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyt	   accesskeyZ   s    t   idgenc           B   s)   e  Z d  „  Z d „  Z d „  Z e Z RS(   c         C   s   d |  _  d  S(   Ni    (   t   id(   t   self(    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyt   __init__f   s    c         C   s   |  j  S(   N(   R=   (   R>   (    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyt   currentj   s    c         C   s   |  j  d 7_  |  j  S(   Ni   (   R=   (   R>   (    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyt   __next__n   s    (   t   __name__t
   __module__R?   R@   RA   t   next(    (    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyR<   e   s   			c         O   sd   d |  k r> |  j  d ƒ |  j  d d ƒ } d | | f } n  t j d ƒ } | j | | | Ž d S(   Nt   pagenamet   file_suffixR7   s   in rendering %s: %ss   sphinx.themes(   t   getR   t	   getLoggert   warning(   R9   t   messaget   argst   kwargst   filenamet   logger(    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyRI   u   s    t   SphinxFileSystemLoaderc           B   s   e  Z d  Z d „  Z RS(   sd   
    FileSystemLoader subclass that is not so strict about '..'  entries in
    template names.
    c            s¤   x‘ |  j  D]† } t j | | ƒ ‰  t ˆ  ƒ } | d  k r@ q
 n  |  | j ƒ  j |  j ƒ } Wd  QXt j ˆ  ƒ ‰ ‡  ‡ f d †  } | ˆ  | f SWt	 | ƒ ‚ d  S(   Nc              s0   y t  j ˆ  ƒ ˆ k SWn t k
 r+ t SXd  S(   N(   R    t   getmtimet   OSErrort   False(    (   RM   t   mtime(    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyt   uptodate’   s    (
   t
   searchpathR    t   joinR   R$   t   readt   decodet   encodingRP   R   (   R>   t   environmentt   templateRU   t   ft   contentsRT   (    (   RM   RS   s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyt
   get_source†   s    (   RB   RC   t   __doc__R^   (    (    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyRO   €   s   t   BuiltinTemplateLoaderc           B   sA   e  Z d  Z d d d „ Z d „  Z d „  Z d „  Z d „  Z RS(   sK   
    Interfaces the rendering environment of jinja2 for use in Sphinx.
    c         C   sð  | r> | j  ƒ  } | g  | D] } t j | d ƒ ^ q } n- | r_ t | ƒ } t | ƒ } n g  } g  } t | j j ƒ |  _ | j j r× g  | j j D] } t j | j | ƒ ^ q™ } | | d d +| | d d +n  | |  _	 g  | D] }	 t
 |	 ƒ ^ qç |  _ | j j d  k	 }
 |
 r#d g p&g  } t d |  d | ƒ |  _ t |  j j d <t |  j j d <t |  j j d <t |  j j d	 <t t ƒ |  j j d
 <t |  j j d <t t ƒ |  j j d <t |  j j d <|
 rì|  j j | j j ƒ n  d  S(   Ns   ..i    s   jinja2.ext.i18nt   loadert
   extensionst   toboolt   tointt   todimt   slice_indext   debugRI   R;   R<   (   t   get_theme_dirsR    RV   R(   R)   t   configt   templates_patht   templatepathlent   confdirt	   pathchainRO   t   loaderst   appt
   translatorR$   R
   RZ   R   t   filtersR!   R'   R5   R	   R   t   globalsRI   R;   R<   t   install_gettext_translations(   R>   t   buildert   themet   dirsRm   t   pt   loaderchaint   tpt   cfg_templates_patht   xt   use_i18nRb   (    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyt   init£   s<    ,+	"c         C   s   |  j  j | ƒ j | ƒ S(   N(   RZ   t   get_templatet   render(   R>   R[   R9   (    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyR   Ï   s    c         C   s   |  j  j | ƒ j | ƒ S(   N(   RZ   t   from_stringR   (   R>   t   sourceR9   (    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyt   render_stringÓ   s    c         C   s   t  t |  j d ƒ ƒ S(   Ns   .html(   t   maxR   Rm   (   R>   (    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyt   newest_template_mtime×   s    c         C   s{   |  j  } | j d ƒ r2 | |  j } | d } n  x6 | D]. } y | j | | ƒ SWq9 t k
 rf q9 Xq9 Wt | ƒ ‚ d  S(   Nt   !i   (   Rn   t
   startswithRk   R^   R   (   R>   RZ   R[   Rn   Ra   (    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyR^   Ý   s    	N(	   RB   RC   R_   R$   R}   R   R‚   R„   R^   (    (    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyR`   œ   s   ,			N(/   R_   t   osR    t   pprintR   t   typingR   R   R   R   t   jinja2R   R   R   R	   t   jinja2.sandboxR
   t   jinja2.utilsR   t   sixR   t   sphinx.applicationR   t   sphinx.utilR   t   sphinx.util.osutilR   RR   R   R   R   t   jinja2.environmentR   t   sphinx.buildersR   t   sphinx.themingR   R   R!   R'   R5   R;   t   objectR<   RI   RO   R`   (    (    (    s0   lib/python2.7/site-packages/sphinx/jinja2glue.pyt   <module>
   s0   ""4					