U
    \Sh%                      @  s  d Z ddlmZ ddlZddlZddlmZmZ ddlmZ ddlm	Z	m
Z
mZmZ ddl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mZ e	rddlmZ ee Z!G dd deZ"G dd de"Z#G dd dZ$ddddddZ%dddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d-ddd0d1d2d3d4d5Z&e'd6d7(e& Z)ej*j+fd8ddd9dd:d;d<Z,dd=dd>ddd?d@dAZ+ddBddCdDdEZ-ddBddCdFdGZ.dS )Hz$Builder superclass for all builders.    )annotationsN)datetimetimezone)path)TYPE_CHECKINGCallable	Generator
NamedTuple)write_mo)read_po)SphinxError)__)logging)SEP
canon_pathrelpath)BuildEnvironmentc                   @  s&   e Zd ZU ded< ded< ded< dS )LocaleFileInfoBasestrbase_dirdomaincharsetN)__name__
__module____qualname____annotations__ r   r   C/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/util/i18n.pyr      s   
r   c                   @  sv   e Zd ZeddddZeddddZeddddZeddd	d
ZddddZdddddddZ	dS )CatalogInfor   returnc                 C  s
   | j d S )N.por   selfr   r   r   po_file#   s    zCatalogInfo.po_filec                 C  s
   | j d S )Nz.mor"   r#   r   r   r   mo_file'   s    zCatalogInfo.mo_filec                 C  s   t | j| jS N)r   joinr   r%   r#   r   r   r   po_path+   s    zCatalogInfo.po_pathc                 C  s   t | j| jS r'   )r   r(   r   r&   r#   r   r   r   mo_path/   s    zCatalogInfo.mo_pathboolc                 C  s&   t | j p$t | jt | jk S r'   )r   existsr*   getmtimer)   r#   r   r   r   is_outdated3   s    zCatalogInfo.is_outdatedFNone)locale	use_fuzzyr    c                 C  s   t | j| jd\}zt||}W nF tk
rf } z(ttd| j| W Y W 5 Q R  d S d }~X Y nX W 5 Q R X t | jdN}zt	||| W n6 tk
r } zttd| j| W 5 d }~X Y nX W 5 Q R X d S )N)encodingzreading error: %s, %swbzwriting error: %s, %s)
openr)   r   r   	Exceptionloggerwarningr   r*   r
   )r$   r0   r1   Zfile_popoexcZfile_mor   r   r   r
   8   s    ,zCatalogInfo.write_moN)F)
r   r   r   propertyr%   r&   r)   r*   r.   r
   r   r   r   r   r   !   s   r   c                   @  s\   e Zd ZdZddddddddZedd	d
dZedd	ddZedd	ddZdS )CatalogRepositoryz"A repository for message catalogs.r   z	list[str]r/   )basedirlocale_dirslanguager2   r    c                 C  s   || _ || _|| _|| _d S r'   )r<   _locale_dirsr>   r2   )r$   r<   r=   r>   r2   r   r   r   __init__J   s    zCatalogRepository.__init__zGenerator[str, None, None]r   c                 c  sZ   | j s
d S | jD ]D}t| j|}t|| j d}t|rD|V  qttd| qd S )NLC_MESSAGESzlocale_dir %s does not exists)	r>   r?   r   r(   r<   r,   r6   verboser   )r$   
locale_dirZlocale_pathr   r   r   r=   Q   s    

zCatalogRepository.locale_dirsz&Generator[tuple[str, str], None, None]c           	      c  s   | j D ]x}t|| jd}t|D ]X\}}}|D ]}|dr2|| q2|D ]*}|drPt||}|t	||fV  qPq$qd S )NrA   .r!   )
r=   r   r(   r>   oswalk
startswithremoveendswithr   )	r$   rC   r<   rootdirnames	filenamesdirnamefilenamefullpathr   r   r   pofiles^   s    


zCatalogRepository.pofilesz"Generator[CatalogInfo, None, None]c                 c  s6   | j D ]*\}}tt|d }t||| jV  qd S )Nr   )rP   r   r   splitextr   r2   )r$   r<   rN   r   r   r   r   catalogsm   s    zCatalogRepository.catalogsN)	r   r   r   __doc__r@   r:   r=   rP   rR   r   r   r   r   r;   G   s   r;   r   z
bool | str)docname
compactionr    c                 C  s*   t |tr|S |r"| tdd S | S dS )z'Convert docname to domain for catalogs.   r   N)
isinstancer   splitr   )rT   rU   r   r   r   docname_to_domaint   s
    
rY   ZEEEZEEEEZMMMZMMMMZmediumdddHZHHhhhDZDDDMZMMmmmasssZWWeWZYYZyyyyzzzZZZZ%)z%az%Az%bz%Bz%cz%-dz%dz%-Hz%Hz%-Iz%Iz%-jz%jz%-mz%mz%-Mz%Mz%pz%-Sz%Sz%Uz%wz%-Wz%W%x%Xz%yz%Yz%Zz%zz%%z(%s)|r   r   )dateformatr0   	formatterr    c              	   C  sx   t | dstjj}z|| ||dW S  ttjjfk
rL   || |dd Y S  tk
rr   t	t
d| | Y S X d S )Ntzinfo)r0   enz[Invalid date format. Quote the string by single quote if you want to output it directly: %s)hasattrbabeldatesformat_date
ValueErrorcoreZUnknownLocaleErrorAttributeErrorr6   r7   r   )rm   rn   r0   ro   r   r   r   babel_format_date   s    

ry   )rm   zdatetime | None)rn   rm   r>   r    c          	   	   C  s   |d krBt d}|d k	r0tjt|tjd}ntjtjd }g }t	
| }|D ]f}|tkrt|d}|dkr~tjj}n|dkrtjj}ntjj}|t||||d qT|| qTd|S )NSOURCE_DATE_EPOCH)tz rj   rk   )r0   ro   )rE   getenvr   fromtimestampfloatr   utcnow
astimezonedate_format_rerX   date_format_mappingsgetrs   rt   ru   Zformat_timeformat_datetimeappendry   r(   )	rn   rm   r>   source_date_epochresulttokenstokenZbabel_formatfunctionr   r   r   ru      s(    




ru   r   )rN   envr    c              
   C  s   |j j}i }t| \|d< |d< t|d }|rJ|tjsJ|tj7 }t|j}|rp|tjsp|tj7 }||d< t|d |d< ||d< |j j	|d< z|j
f |W S  tk
r } ztd| |W 5 d }~X Y nX d S )NrJ   extr   basenamedocpathr>   z$Invalid figure_language_filename: %r)configZfigure_language_filenamer   rQ   rM   rI   seprT   r   r>   rn   KeyErrorr   )rN   r   Zfilename_formatrZ   rM   r   r9   r   r   r   get_image_filename_for_language   s"    

r   c                 C  s.   t | |}||\}}t|r&|S | S d S r'   )r   Z
relfn2pathr   r,   )rN   r   Z
translated_abspathr   r   r   search_image_for_language   s
    

r   )/rS   
__future__r   rE   rer   r   r   typingr   r   r   r	   Zbabel.datesrs   Zbabel.messages.mofiler
   Zbabel.messages.pofiler   Zsphinx.errorsr   Zsphinx.localer   Zsphinx.utilr   Zsphinx.util.osutilr   r   r   Zsphinx.environmentr   	getLoggerr   r6   r   r   r;   rY   r   compiler(   r   rt   ru   ry   r   r   r   r   r   r   <module>   sv   
&-($