o
    Ni                     @  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	 ddl
mZmZ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 erfddlmZmZ ddlmZ ddlmZ ddl m!Z! d4ddZ"d5ddZ#d6ddZ$d7d!d"Z%d8d&d'Z&G d(d) d)Z'ed9d.d/Z(G d0d1 d1eZ)G d2d3 d3eeZ*dS ):z+Glue code for the jinja2 templating engine.    )annotationsN)path)pformat)TYPE_CHECKINGAny)
BaseLoaderFileSystemLoaderTemplateNotFound)SandboxedEnvironment)open_if_existspass_context)TemplateBridge)logging)_last_modified_time)CallableIterator)Environment)Builder)Themevalstrreturnboolc                 C  s   t | tr|  dv S t| S )N)true1yeson)
isinstancer   lowerr   r    r    E/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/jinja2glue.py_tobool   s   
r"   intc                 C  s    zt | W S  ty   Y dS w Nr   )r#   
ValueErrorr   r    r    r!   _toint!   s
   
r&   	int | strc                 C  s4   | du rdS t |  rt| 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listslicesIterator[list]c           
      c  s    |   }d}| D ]}|dt|d d  7 }q	|| }d}t|D ]7}d}|}	||d kr3t|}n| |d  D ]}|dt|d d  7 }|d7 }||krQ nq9||	| V  q"d S )Nr      )copylenrange)
r,   r.   seqlengthvalueitems_per_sliceoffsetslice_numbercountstartr    r    r!   _slice_index:   s(   
r<   contextr   keyc                 C  s>   d| vr	i | j d< |r|| j d vrd| j d |< d| S dS )z+Helper to output each access key only once._accesskeysr0   zaccesskey="%s" )vars)r=   r>   r    r    r!   	accesskeyO   s   
rB   c                   @  s.   e Zd ZdddZdddZddd	ZeZd
S )idgenr   Nonec                 C  s
   d| _ d S r$   idselfr    r    r!   __init__Z   s   
zidgen.__init__r#   c                 C  s   | j S NrE   rG   r    r    r!   current]   s   zidgen.currentc                 C  s   |  j d7  _ | j S Nr0   rE   rG   r    r    r!   __next__`   s   zidgen.__next__N)r   rD   )r   r#   )__name__
__module____qualname__rI   rK   rM   nextr    r    r    r!   rC   Y   s
    


rC   dict[str, Any]messageargskwargsc                 O  sT   d| v r|  d|  dd }d| d| }td}|j|g|R i | dS )Npagenamefile_suffixr@   zin rendering z: zsphinx.themes)getr   	getLoggerwarning)r=   rS   rT   rU   filenameloggerr    r    r!   rZ   g   s   
rZ   c                   @  s   e Zd ZdZddd	Zd
S )SphinxFileSystemLoaderzd
    FileSystemLoader subclass that is not so strict about '..'  entries in
    template names.
    environmentr   templater   r   #tuple[str, str, Callable[[], bool]]c           	        s   | drd}|d| }nd }| jD ]&}t|| t }|d ur& n|d ur:t|| t }|d ur: nqt|| | | j	}W d    n1 sTw   Y  t
 d fdd}| |fS )Nz.jinja_tr   r   c                     s$   zt  kW S  ty   Y dS w )NF)r   OSErrorr    r[   mtimer    r!   uptodate   s
   z3SphinxFileSystemLoader.get_source.<locals>.uptodate)r   r   )endswithremovesuffix
searchpathr   joinr   r	   readdecodeencodingr   )	rH   r^   r_   legacy_suffixlegacy_templaterh   fcontentsre   r    rc   r!   
get_sourcew   s,   


z!SphinxFileSystemLoader.get_sourceNr^   r   r_   r   r   r`   )rN   rO   rP   __doc__rq   r    r    r    r!   r]   q   s    r]   c                   @  s\   e Zd ZdZ		d#d$ddZd%ddZd&ddZd'ddZd(ddZd)ddZ	d*d!d"Z
dS )+BuiltinTemplateLoaderzK
    Interfaces the rendering environment of jinja2 for use in Sphinx.
    Nbuilderr   themeTheme | Nonedirslist[str] | Noner   rD   c           	        sD  |r|  }|dd |D  }n|rt|}t|}ng }g }t jj| _ jjrA fdd jjD }||dd< ||dd< || _dd |D | _ jj	d u}|rWd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 d S )Nc                 S  s   g | ]}t |d qS )z..)r   ri   ).0pr    r    r!   
<listcomp>   s    z.BuiltinTemplateLoader.init.<locals>.<listcomp>c                   s   g | ]	}t  j|qS r    )r   ri   confdir)rz   tpru   r    r!   r|      s    r   c                 S  s   g | ]}t |qS r    )r]   )rz   xr    r    r!   r|      s    zjinja2.ext.i18n)loader
extensionstobooltointtodimslice_indexdebugrZ   rB   rC   )get_theme_dirsr-   r2   configtemplates_pathtemplatepathlen	pathchainloadersapp
translatorr
   r^   r"   filtersr&   r+   r<   r   r   globalsrZ   rB   rC   install_gettext_translations)	rH   ru   rv   rx   r   loaderchaincfg_templates_pathuse_i18nr   r    r   r!   init   sB   

zBuiltinTemplateLoader.initr_   r   r=   rR   c                 C     | j ||S rJ   )r^   get_templaterender)rH   r_   r=   r    r    r!   r         zBuiltinTemplateLoader.rendersourcec                 C  r   rJ   )r^   from_stringr   )rH   r   r=   r    r    r!   render_string   r   z#BuiltinTemplateLoader.render_stringfloatc                 C     |   d S r$   _newest_template_mtime_namerG   r    r    r!   newest_template_mtime      z+BuiltinTemplateLoader.newest_template_mtimec                 C  r   rL   r   rG   r    r    r!   newest_template_name   r   z*BuiltinTemplateLoader.newest_template_nametuple[float, str]c                 C  s   t dd | jD S )Nc              	   s  sX    | ]'}t |D ]\}}}|D ]}|d rt t j||jd |fV  qq	qdS )z.htmli ʚ;N)oswalkrf   statr   ri   st_mtime_ns)rz   dirnameroot_dirsfilessfiler    r    r!   	<genexpr>   s    zDBuiltinTemplateLoader._newest_template_mtime_name.<locals>.<genexpr>)maxr   rG   r    r    r!   r      s   z1BuiltinTemplateLoader._newest_template_mtime_namer^   r   r`   c              	   C  st   | j }|dr|| jd  }|dd  }|D ]}z	|||W   S  ty+   Y qw |d| jjj }t|)N!r0   z not found in )r   
startswithr   rq   r	   r^   r   r   )rH   r^   r_   r   r   msgr    r    r!   rq      s   
z BuiltinTemplateLoader.get_source)NN)ru   r   rv   rw   rx   ry   r   rD   )r_   r   r=   rR   r   r   )r   r   r=   rR   r   r   )r   r   )r   r   )r   r   rr   )rN   rO   rP   rs   r   r   r   r   r   r   rq   r    r    r    r!   rt      s    	
3



rt   )r   r   r   r   )r   r   r   r#   )r   r'   r   r   )r,   r-   r.   r#   r   r/   )r=   r   r>   r   r   r   )
r=   rR   rS   r   rT   r   rU   r   r   r   )+rs   
__future__r   r   r   pprintr   typingr   r   jinja2r   r   r	   jinja2.sandboxr
   jinja2.utilsr   r   sphinx.applicationr   sphinx.utilr   sphinx.util.osutilr   collections.abcr   r   jinja2.environmentr   sphinx.buildersr   sphinx.themingr   r"   r&   r+   r<   rB   rC   rZ   r]   rt   r    r    r    r!   <module>   s6    





	*