U
    \Sh                     @  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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 zddlmZ W n  e k
r   ddlm!Z Y nX e	rddl"m#Z# dddddZ$dddddZ%dddddZ&ddddd d!Z'd"ddd#d$d%Z(G d&d' d'Z)ed(dd"d"dd)d*d+Z*G d,d- d-eZ+G d.d/ d/eeZ,dS )0z+Glue code for the jinja2 templating engine.    )annotationsN)path)pformat)TYPE_CHECKINGAnyCallableIterator)
BaseLoaderFileSystemLoaderTemplateNotFound)Environment)SandboxedEnvironment)open_if_exists)TemplateBridge)Theme)logging)mtimes_of_files)pass_context)contextfunction)Builderstrbool)valreturnc                 C  s   t | tr|  dkS t| S )N)true1yeson)
isinstancer   lowerr   r    r!   D/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/jinja2glue.py_tobool   s    
r#   intc                 C  s&   z
t | W S  tk
r    Y dS X d S Nr   )r$   
ValueErrorr    r!   r!   r"   _toint#   s    
r'   z	int | strc                 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+   listzIterator[list])valuesslicesr   c           
      c  s   t | }d}| D ]}|dt|d d  7 }q|| }d}t|D ]n}d}|}	||d krdt|}n>| |d  D ]0}|dt|d d  7 }|d7 }||krp qqp||	| V  qBd S )Nr      )r,   lenrange)
r-   r.   seqlengthvalueZitems_per_sliceoffsetZslice_numbercountstartr!   r!   r"   _slice_index<   s"    
r8   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_accesskeysr/   zaccesskey="%s" )vars)r9   r:   r!   r!   r"   	accesskeyQ   s    
r=   c                   @  s:   e Zd ZddddZddddZdddd	ZeZd
S )idgenNoner   c                 C  s
   d| _ d S r%   idselfr!   r!   r"   __init__\   s    zidgen.__init__r$   c                 C  s   | j S NrA   rC   r!   r!   r"   current_   s    zidgen.currentc                 C  s   |  j d7  _ | j S )Nr/   rA   rC   r!   r!   r"   __next__b   s    zidgen.__next__N)__name__
__module____qualname__rE   rG   rH   nextr!   r!   r!   r"   r>   [   s   r>   dict)r9   messageargskwargsr   c                 O  sN   d| kr.|  d|  dd }d| d| }td}|j|f|| dS )NZpagenameZfile_suffixr;   zin rendering z: zsphinx.themes)getr   	getLoggerwarning)r9   rN   rO   rP   filenameloggerr!   r!   r"   rS   h   s    
rS   c                   @  s"   e Zd ZdZddddddZdS )	SphinxFileSystemLoaderzd
    FileSystemLoader subclass that is not so strict about '..'  entries in
    template names.
    r   r   tuple[str, str, Callable]environmenttemplater   c              
     s   | j D ]p}tt|| t }|d kr,q| | | j}W 5 Q R X t	 dd fdd}| |f  S t
|d S )Nr   r@   c                     s,   zt  kW S  tk
r&   Y dS X d S )NF)r   getmtimeOSErrorr!   rT   mtimer!   r"   uptodate   s    z3SphinxFileSystemLoader.get_source.<locals>.uptodate)
searchpathr   pathlibPathr   readdecodeencodingr   r[   r   )rD   rY   rZ   r`   fcontentsr_   r!   r]   r"   
get_sourcex   s    

z!SphinxFileSystemLoader.get_sourceN)rI   rJ   rK   __doc__rh   r!   r!   r!   r"   rV   r   s   rV   c                   @  sj   e Zd ZdZdddddddd	Zd
dd
dddZd
dd
dddZddddZdd
ddddZdS )BuiltinTemplateLoaderzK
    Interfaces the rendering environment of jinja2 for use in Sphinx.
    Nr   zTheme | Nonezlist[str] | Noner?   )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   rn   Zconfdir)ro   tprk   r!   r"   rq      s   r   c                 S  s   g | ]}t |qS r!   )rV   )ro   xr!   r!   r"   rq      s     zjinja2.ext.i18n)loader
extensionsZtoboolZtointZtodimZslice_indexdebugrS   r=   r>   )Zget_theme_dirsr,   r0   configZtemplates_pathtemplatepathlen	pathchainloadersZappZ
translatorr   rY   r#   filtersr'   r+   r8   r   r   globalsrS   r=   r>   Zinstall_gettext_translations)	rD   rk   rl   rm   rz   ZloaderchainZcfg_templates_pathZuse_i18nrv   r!   rs   r"   init   s@    

zBuiltinTemplateLoader.initr   rM   )rZ   r9   r   c                 C  s   | j ||S rF   )rY   Zget_templaterender)rD   rZ   r9   r!   r!   r"   r      s    zBuiltinTemplateLoader.render)sourcer9   r   c                 C  s   | j ||S rF   )rY   Zfrom_stringr   )rD   r   r9   r!   r!   r"   render_string   s    z#BuiltinTemplateLoader.render_stringfloatr@   c                 C  s   t t| jdS )Nz.html)maxr   rz   rC   r!   r!   r"   newest_template_mtime   s    z+BuiltinTemplateLoader.newest_template_mtimer   rW   rX   c              	   C  sh   | j }|dr*|| jd  }|dd  }|D ],}z|||W   S  tk
rX   Y q.X q.t|d S )N!r/   )r{   
startswithry   rh   r   )rD   rY   rZ   r{   ru   r!   r!   r"   rh      s    
z BuiltinTemplateLoader.get_source)NN)	rI   rJ   rK   ri   r~   r   r   r   rh   r!   r!   r!   r"   rj      s   	  0rj   )-ri   
__future__r   ra   osr   pprintr   typingr   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+   r8   r=   r>   rS   rV   rj   r!   r!   r!   r"   <module>   s:   
	