B
    d                 @   s  d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
mZmZmZ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 ddl m!Z! yddlm"Z" W n  e#k
r   ddlm$Z" Y nX erddl%m&Z& e'e(dddZ)e'e*dddZ+ee*e'f e'dddZ,ee*ee dddZ-ee'e'dddZ.G dd dZ/e"e
e'eee'd d!d"Z0G d#d$ d$eZ1G d%d& d&eeZ2dS )'z+Glue code for the jinja2 templating engine.    N)path)pformat)	TYPE_CHECKINGAnyCallableDictIteratorListOptionalTupleUnion)
BaseLoaderFileSystemLoaderTemplateNotFound)Environment)SandboxedEnvironment)open_if_exists)TemplateBridge)Theme)logging)mtimes_of_files)pass_context)contextfunction)Builder)valreturnc             C   s   t | tr|  dkS t| S )N)true1yeson)
isinstancestrlowerbool)r    r$   ^/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/sphinx/jinja2glue.py_tobool   s    
r&   c             C   s"   yt | S  tk
r   dS X d S )Nr   )int
ValueError)r   r$   r$   r%   _toint!   s    r)   c             C   s4   | dkrdS t |  r0t| dkr(dS d|  S | S )a  
    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.
    Ninitialr   0z%spx)r!   isdigitr'   )r   r$   r$   r%   _todim(   s
    r-   )valuesslicesr   c       
      c   s   t | }d}x$| D ]}|dt|d d  7 }qW || }d}x|t|D ]p}d}|}	||d krjt|}n@x>| |d  D ].}|dt|d d  7 }|d7 }||krxP qxW ||	| V  qHW d S )Nr      )listlenrange)
r.   r/   seqlengthvalueZitems_per_sliceoffsetZslice_numbercountstartr$   r$   r%   _slice_index:   s"    

r:   )contextkeyr   c             C   s>   d| kri | j d< |r:|| j d kr:d| j d |< d| S dS )z+Helper to output each access key only once.Z_accesskeysr0   zaccesskey="%s" )vars)r;   r<   r$   r$   r%   	accesskeyO   s    
r?   c               @   s:   e Zd ZddddZedddZedddZeZdS )	idgenN)r   c             C   s
   d| _ d S )Nr   )id)selfr$   r$   r%   __init__Z   s    zidgen.__init__c             C   s   | j S )N)rA   )rB   r$   r$   r%   current]   s    zidgen.currentc             C   s   |  j d7  _ | j S )Nr0   )rA   )rB   r$   r$   r%   __next__`   s    zidgen.__next__)__name__
__module____qualname__rC   r'   rD   rE   nextr$   r$   r$   r%   r@   Y   s   r@   )r;   messageargskwargsr   c             O   sJ   d| kr*|  d|  dd }d||f }td}|j|f|| dS )NZpagenameZfile_suffixr=   zin rendering %s: %szsphinx.themes)getr   	getLoggerwarning)r;   rJ   rK   rL   filenameloggerr$   r$   r%   rO   f   s    
rO   c               @   s,   e Zd ZdZeeeeeef dddZdS )SphinxFileSystemLoaderzd
    FileSystemLoader subclass that is not so strict about '..'  entries in
    template names.
    )environmenttemplater   c          
      s   xv| j D ]l}tt|| t }|d kr.q| | | j}W d Q R X t	 t
d fdd}| |fS W t|d S )N)r   c                  s(   yt  kS  tk
r"   dS X d S )NF)r   getmtimeOSErrorr$   )rP   mtimer$   r%   uptodate   s    z3SphinxFileSystemLoader.get_source.<locals>.uptodate)
searchpathr!   pathlibPathr   readdecodeencodingr   rU   r#   r   )rB   rS   rT   rY   fcontentsrX   r$   )rP   rW   r%   
get_sourcev   s    
z!SphinxFileSystemLoader.get_sourceN)	rF   rG   rH   __doc__r   r!   r   r   ra   r$   r$   r$   r%   rR   p   s   rR   c               @   s   e Zd ZdZddee eee  ddddZee	eddd	Z
ee	ed
ddZedddZeeeeeef dddZdS )BuiltinTemplateLoaderzK
    Interfaces the rendering environment of jinja2 for use in Sphinx.
    Nr   )builderthemedirsr   c       	         sB  |r |  }|dd |D  }n|r6t|}t|}ng }g }t jj| _ jjr fdd jjD }||dd< ||dd< || _dd |D | _ jj	d k	}|rdgng }t
| |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	 d S )Nc             S   s   g | ]}t |d qS )z..)r   join).0pr$   r$   r%   
<listcomp>   s    z.BuiltinTemplateLoader.init.<locals>.<listcomp>c                s   g | ]}t  j|qS r$   )r   rg   Zconfdir)rh   tp)rd   r$   r%   rj      s   r   c             S   s   g | ]}t |qS r$   )rR   )rh   xr$   r$   r%   rj      s    zjinja2.ext.i18n)loader
extensionsZtoboolZtointZtodimZslice_indexdebugrO   r?   r@   )Zget_theme_dirsr1   r2   configZtemplates_pathtemplatepathlen	pathchainloadersZappZ
translatorr   rS   r&   filtersr)   r-   r:   r   r   globalsrO   r?   r@   Zinstall_gettext_translations)	rB   rd   re   rf   rr   ZloaderchainZcfg_templates_pathZuse_i18nrn   r$   )rd   r%   init   s<    


zBuiltinTemplateLoader.init)rT   r;   r   c             C   s   | j ||S )N)rS   Zget_templaterender)rB   rT   r;   r$   r$   r%   rw      s    zBuiltinTemplateLoader.render)sourcer;   r   c             C   s   | j ||S )N)rS   Zfrom_stringrw   )rB   rx   r;   r$   r$   r%   render_string   s    z#BuiltinTemplateLoader.render_string)r   c             C   s   t t| jdS )Nz.html)maxr   rr   )rB   r$   r$   r%   newest_template_mtime   s    z+BuiltinTemplateLoader.newest_template_mtime)rS   rT   r   c          	   C   sf   | j }|dr*|| jd  }|dd  }x.|D ]&}y|||S  tk
rT   Y q0X q0W t|d S )N!r0   )rs   
startswithrq   ra   r   )rB   rS   rT   rs   rm   r$   r$   r%   ra      s    


z BuiltinTemplateLoader.get_source)NN)rF   rG   rH   rb   r
   r   r	   r!   rv   r   rw   ry   floatr{   r   r   r   ra   r$   r$   r$   r%   rc      s    +rc   )3rb   rZ   osr   pprintr   typingr   r   r   r   r   r	   r
   r   r   Zjinja2r   r   r   Zjinja2.environmentr   Zjinja2.sandboxr   Zjinja2.utilsr   Zsphinx.applicationr   Zsphinx.themingr   Zsphinx.utilr   Zsphinx.util.osutilr   r   ImportErrorr   Zsphinx.buildersr   r!   r#   r&   r'   r)   r-   r:   r?   r@   rO   rR   rc   r$   r$   r$   r%   <module>   s8   ,
	