B
    dm                 @   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 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 ddlmZmZ G dd dZG dd deZG dd deZ G dd de Z!G dd de Z"G dd deZ#dS )z'Templates utility functions for Sphinx.    N)partial)path)AnyCallableDictListOptionalTupleUnion)TemplateNotFound)Environment)
BaseLoader)SandboxedEnvironment)package_dir)SphinxFileSystemLoader)get_translator)rst	texescapec               @   sV   e Zd Zdee ddddZeeeef edddZ	eeeef edd	d
Z
dS )BaseRendererN)loaderreturnc             C   s.   t |dgd| _t| jjd< | jt  d S )Nzjinja2.ext.i18n)r   
extensionsrepr)r   envr   filtersZinstall_gettext_translationsr   )selfr    r   a/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/sphinx/util/template.py__init__   s    zBaseRenderer.__init__)template_namecontextr   c             C   s   | j ||S )N)r   Zget_templaterender)r   r   r    r   r   r   r!      s    zBaseRenderer.render)sourcer    r   c             C   s   | j ||S )N)r   Zfrom_stringr!   )r   r"   r    r   r   r   render_string   s    zBaseRenderer.render_string)N)__name__
__module____qualname__r   r   r   strr   r   r!   r#   r   r   r   r   r      s   r   c                   sN   e Zd Zeeee f dd fddZeeeee	f edddZ
  ZS )FileRendererN)search_pathr   c                s8   t |tr|g}nttd |}t|}t | d S )N)
isinstancer'   listfilterr   superr   )r   r)   r   )	__class__r   r   r   !   s
    
zFileRenderer.__init__)filenamer    r   c             C   s(   t j|}t j|}| |||S )N)osr   dirnamebasenamer!   )clsr/   r    r1   r2   r   r   r   render_from_file+   s    zFileRenderer.render_from_file)r$   r%   r&   r
   r'   r   r   classmethodr   r   r4   __classcell__r   r   )r.   r   r(       s    
r(   c                   sR   e Zd Zdedeee f dd fddZeeeee	f edddZ
  ZS )	SphinxRendererN)template_pathr   c                s&   |d krt jtd}t | d S )N	templates)r0   r   joinr   r-   r   )r   r8   )r.   r   r   r   3   s    zSphinxRenderer.__init__)r/   r    r   c             C   s   t ||S )N)r(   r4   )r3   r/   r    r   r   r   r4   8   s    zSphinxRenderer.render_from_file)N)r$   r%   r&   r
   r'   r   r   r5   r   r   r4   r6   r   r   )r.   r   r7   2   s   $r7   c                   s0   e Zd Zdee ee dd fddZ  ZS )LaTeXRendererN)r8   latex_enginer   c                s   |d krt jtdd}t | ttj|d}|| j	j
d< || j	j
d< tj| j	j
d< d| j	_d| j	_d	| j	_d| j	_d
| j	_d| j	_d S )Nr9   latex)r<   eescapeZeabbrz<%=z%>z<%z<#z#>)r0   r   r:   r   r-   r   r   r   r?   r   r   Zescape_abbrZvariable_start_stringZvariable_end_stringZblock_start_stringZblock_end_stringZcomment_start_stringZcomment_end_string)r   r8   r<   r?   )r.   r   r   r   >   s    zLaTeXRenderer.__init__)NN)r$   r%   r&   r   r'   r   r6   r   r   )r.   r   r;   =   s   r;   c                   s:   e Zd Zdedeee f ee dd fddZ  ZS )ReSTRendererN)r8   languager   c                sH   t  | | jj|d tj| jjd< tj| jjd< tj| jjd< d S )N)rA   r>   r?   heading)r-   r   r   extendr   r?   r   rB   )r   r8   rA   )r.   r   r   r   V   s
    zReSTRenderer.__init__)NN)	r$   r%   r&   r
   r'   r   r   r   r6   r   r   )r.   r   r@   U   s   r@   c               @   sH   e Zd ZdZeee ee ddddZeeeeee	f dddZ
dS )	SphinxTemplateLoaderz(A loader supporting template inheritanceN)confdirtemplates_pathssystem_templates_pathsr   c             C   sh   g | _ g | _x(|D ] }tt||}| j | qW x,|D ]$}t|}| j | | j| q<W d S )N)loaders
sysloadersr   r   r:   append)r   rE   rF   rG   Ztemplates_pathr   r   r   r   r   g   s    

zSphinxTemplateLoader.__init__)environmenttemplater   c          	   C   s`   | dr| j}|dd  }n| j}x.|D ]&}y|||S  tk
rN   Y q*X q*W t|d S )N!   )
startswithrI   rH   
get_sourcer   )r   rK   rL   rH   r   r   r   r   rP   u   s    


zSphinxTemplateLoader.get_source)r$   r%   r&   __doc__r'   r   r   r   r	   r   rP   r   r   r   r   rD   d   s   rD   )$rQ   r0   	functoolsr   r   typingr   r   r   r   r   r	   r
   Zjinja2r   Zjinja2.environmentr   Zjinja2.loadersr   Zjinja2.sandboxr   Zsphinxr   Zsphinx.jinja2gluer   Zsphinx.localer   Zsphinx.utilr   r   r   r(   r7   r;   r@   rD   r   r   r   r   <module>   s$   $