o
    Nit+                     @  sz  U d Z ddlmZ ddl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 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mZ e
rddlZddlmZ ddl	m Z m!Z! ddl"m#Z# ddl$m%Z% G dd de Z&G dd de Z'G dd de Z(e&e'B e(B Z)de*d< ej+dd dkrddlm,Z, nej-Z,e.e/Z0G dd deZ1G dd de1Z2G d d! d!Z3dpd'd(Z4i d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdNd2d2dQdRdSdTdUdVZ5e6dWdX7e5 Z8ej9j:fdqd^d_Z;dd`dadrdfdgZ:dsdldmZ<dtdndoZ=dS )uz$Builder superclass for all builders.    )annotationsN)datetimetimezone)path)TYPE_CHECKING
NamedTuple)write_mo)read_po)SphinxError)__)logging)SEP_last_modified_time
canon_pathrelpath)Iterator)Protocol	TypeAlias)Locale)BuildEnvironmentc                   @  s   e Zd Z			ddd	d
ZdS )DateFormatter.datedt.date | Noneformatstrlocalestr | Locale | Nonereturnc                 C     d S N )selfr   r   r   r    r    D/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/util/i18n.py__call__$   s   zDateFormatter.__call__N)...)r   r   r   r   r   r   r   r   __name__
__module____qualname__r#   r    r    r    r"   r   #   s
    r   c                   @      e Zd Z				ddddZdS )TimeFormatter.time$dt.time | dt.datetime | float | Noner   r   tzinfodt.tzinfo | Noner   r   r   c                 C  r   r   r    )r!   r*   r   r,   r   r    r    r"   r#   ,      zTimeFormatter.__call__N....)
r*   r+   r   r   r,   r-   r   r   r   r   r$   r    r    r    r"   r)   +       r)   c                   @  r(   )DatetimeFormatter.r    dt.date | dt.time | float | Noner   r   r,   r-   r   r   r   c                 C  r   r   r    )r!   r   r   r,   r   r    r    r"   r#   5   r.   zDatetimeFormatter.__call__Nr/   )
r   r2   r   r   r,   r-   r   r   r   r   r$   r    r    r    r"   r1   4   r0   r1   r   	Formatter   )      )UTCc                   @  s&   e Zd ZU ded< ded< ded< dS )LocaleFileInfoBaser   base_dirdomaincharsetN)r%   r&   r'   __annotations__r    r    r    r"   r8   G   s   
 r8   c                   @  sZ   e Zd ZedddZedddZedddZedd	d
ZdddZddddZ	dS )CatalogInfor   r   c                 C  
   | j d S )N.por:   r!   r    r    r"   po_fileN      
zCatalogInfo.po_filec                 C  r>   )Nz.mor@   rA   r    r    r"   mo_fileR   rC   zCatalogInfo.mo_filec                 C     t | j| jS r   )r   joinr9   rB   rA   r    r    r"   po_pathV      zCatalogInfo.po_pathc                 C  rE   r   )r   rF   r9   rD   rA   r    r    r"   mo_pathZ   rH   zCatalogInfo.mo_pathboolc                 C  s"   t | j pt| jt| jk S r   )r   existsrI   r   rG   rA   r    r    r"   is_outdated^   s   zCatalogInfo.is_outdatedFr   	use_fuzzyNonec                 C  s  t | j| jd3}zt||}W n# ty3 } zttd| j| W Y d }~W d    d S d }~ww W d    n1 s>w   Y  t | jd6}zt	||| W n tyn } zttd| j| W Y d }~nd }~ww W d    d S W d    d S 1 sw   Y  d S )N)encodingzreading error: %s, %swbzwriting error: %s, %s)
openrG   r;   r	   	Exceptionloggerwarningr   rI   r   )r!   r   rM   file_popoexcfile_mor    r    r"   r   d   s,   
 "zCatalogInfo.write_moN)r   r   )r   rJ   )F)r   r   rM   rJ   r   rN   )
r%   r&   r'   propertyrB   rD   rG   rI   rL   r   r    r    r    r"   r=   M   s    
r=   c                   @  sD   e Zd ZdZdddZedddZedddZedddZdS )CatalogRepositoryz"A repository for message catalogs.basedirstr | os.PathLike[str]locale_dirs	list[str]languager   rO   r   rN   c                 C  s   || _ || _|| _|| _d S r   )r[   _locale_dirsr_   rO   )r!   r[   r]   r_   rO   r    r    r"   __init__v   s   
zCatalogRepository.__init__Iterator[str]c                 c  s\    | j sd S | jD ]"}t| j|}t|| j d}t|r#|V  q	ttd| q	d S )NLC_MESSAGESzlocale_dir %s does not exist)	r_   r`   r   rF   r[   rK   rS   verboser   )r!   
locale_dirlocale_pathr    r    r"   r]      s   

zCatalogRepository.locale_dirsIterator[tuple[str, str]]c           	      c  s    | j D ]<}t|| jd}t|D ],\}}}dd |D D ]}|| q|D ]}|dr>t||}|t||fV  q)qqd S )Nrc   c                 S  s   g | ]	}| d r|qS ).)
startswith).0dr    r    r"   
<listcomp>   s    z-CatalogRepository.pofiles.<locals>.<listcomp>r?   )	r]   r   rF   r_   oswalkremoveendswithr   )	r!   re   r[   rootdirnames	filenamesdirnamefilenamefullpathr    r    r"   pofiles   s   

zCatalogRepository.pofilesIterator[CatalogInfo]c                 c  s8    | j D ]\}}tt|d }t||| jV  qd S )Nr   )rw   r   r   splitextr=   rO   )r!   r[   ru   r:   r    r    r"   catalogs   s
   zCatalogRepository.catalogsN)
r[   r\   r]   r^   r_   r   rO   r   r   rN   )r   rb   )r   rg   )r   rx   )	r%   r&   r'   __doc__ra   rY   r]   rw   rz   r    r    r    r"   rZ   s   s    
rZ   docnamer   
compaction
bool | strr   c                 C  s&   t |tr|S |r| tdd S | S )z'Convert docname to domain for catalogs.   r   )
isinstancer   splitr   )r|   r}   r    r    r"   docname_to_domain   s
   
r   z%aEEEz%AEEEEz%bMMMz%BMMMMz%cmediumz%-drk   z%dddz%-HHz%HHHz%-Ihz%Ihhz%-jDz%jDDDz%-mMz%mMMz%-Mmz%MmmasssWWeWYYyyyyzzzZZZ%)z%pz%-Sz%Sz%Uz%wz%-Wz%W%x%Xz%yz%Yz%Zz%zz%%z(%s)|r   r   r   r   	formatterc              	   C  sp   t | ds	tjj}z|| ||dW S  ttjjfy%   || |dd Y S  ty7   t	t
d| | Y S w )Nr,   )r   enz[Invalid date format. Quote the string by single quote if you want to output it directly: %s)hasattrbabeldatesformat_date
ValueErrorcoreUnknownLocaleErrorAttributeErrorrS   rT   r   )r   r   r   r   r    r    r"   babel_format_date   s   
r   F)r   
local_timedatetime | Noner_   r   rJ   c          
   	   C  s   |d u rt d}|d urtjt|td}ntjtd}|r%|jd d}g }t	| }|D ]3}|t
v r\t
|d}|dkrCtjj}	n|dkrLtjj}	ntjj}	|t||||	d q.|| q.d|S )NSOURCE_DATE_EPOCH)tz r   r   )r   r   )rm   getenvr   fromtimestampfloatr7   now
astimezonedate_format_rer   date_format_mappingsgetr   r   r   format_timeformat_datetimeappendr   rF   )
r   r   r_   r   source_date_epochresulttokenstokenbabel_formatfunctionr    r    r"   r      s0   




r   ru   r\   envr   c              
   C  s   t | \}}t |}t |j}z|jjj|||o|t t ||o'|t |jj	dW S  t
yC } z
d|}t||d }~ww )N)rq   extr   basenamedocpathr_   z"Invalid figure_language_filename: )r   ry   rt   r|   configfigure_language_filenamer   r   r   r_   KeyErrorr
   )ru   r   rq   r   rt   r   rW   msgr    r    r"   get_image_filename_for_language'  s"   




r   c                 C  s*   t | |}||\}}t|r|S | S r   )r   
relfn2pathr   rK   )ru   r   
translated_abspathr    r    r"   search_image_for_language<  s
   

r   )r|   r   r}   r~   r   r   )
r   r   r   r   r   r   r   r3   r   r   )
r   r   r   r   r_   r   r   rJ   r   r   )ru   r\   r   r   r   r   )ru   r   r   r   r   r   )>r{   
__future__r   rm   resysr   r   r   typingr   r   babel.datesr   babel.messages.mofiler   babel.messages.pofiler	   sphinx.errorsr
   sphinx.localer   sphinx.utilr   sphinx.util.osutilr   r   r   r   dtcollections.abcr   r   r   
babel.corer   sphinx.environmentr   r   r)   r1   r3   r<   version_infor7   utc	getLoggerr%   rS   r8   r=   rZ   r   r   compilerF   r   r   r   r   r   r   r    r    r    r"   <module>   s    		
&
1	
(
2