B
    .KcD'                  @   s  d 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	m
Z
mZ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 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)e*ee+e*f e*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d.d/d0d1d2d3Z-e.d4d5/e- Z0ej1j2fee*e*e	e*d6d7d8Z3dBe*ee ee* e*d9d:d;Z2e*d<e*d=d>d?Z4e*d<e*d=d@dAZ5dS )Cz$Builder superclass for all builders.    N)datetimetimezone)path)TYPE_CHECKINGCallable	GeneratorList
NamedTupleOptionalTupleUnion)write_mo)read_po)RemovedInSphinx70Warning)SphinxError)__)logging)SEP
canon_pathrelpath)BuildEnvironmentc               @   s&   e Zd ZU eed< eed< eed< dS )LocaleFileInfoBasebase_dirdomaincharsetN)__name__
__module____qualname__str__annotations__ r    r    /lib/python3.7/site-packages/sphinx/util/i18n.pyr      s   
r   c               @   sv   e Zd ZeedddZeedddZeedddZeeddd	Ze	dd
dZ
dee	ddddZdS )CatalogInfo)returnc             C   s
   | j d S )Nz.po)r   )selfr    r    r!   po_file#   s    zCatalogInfo.po_filec             C   s
   | j d S )Nz.mo)r   )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 )N)r   r'   r   r&   )r$   r    r    r!   mo_path/   s    zCatalogInfo.mo_pathc             C   s&   t | j p$t | jt | jk S )N)r   existsr)   getmtimer(   )r$   r    r    r!   is_outdated3   s    zCatalogInfo.is_outdatedFN)locale	use_fuzzyr#   c             C   s   t | j| jdL}yt||}W n6 tk
rV } zttd| j| d S d }~X Y nX W d Q R X t | jdN}yt	||| W n6 tk
r } zttd| j| W d d }~X Y nX W d 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$   r-   r.   Zfile_poZpoexcZfile_mor    r    r!   r   8   s    zCatalogInfo.write_mo)F)r   r   r   propertyr   r%   r&   r(   r)   boolr,   r   r    r    r    r!   r"   !   s   r"   c               @   s   e Zd ZdZeee eeddddZeeeddf dddZ	eee
eef ddf dd	d
Zeeeddf dddZdS )CatalogRepositoryz"A repository for message catalogs.N)basedirlocale_dirslanguager/   r#   c             C   s   || _ || _|| _|| _d S )N)r9   _locale_dirsr;   r/   )r$   r9   r:   r;   r/   r    r    r!   __init__J   s    zCatalogRepository.__init__)r#   c             c   s^   | j s
d S xN| jD ]D}t| j|}t|| j d}t|rF|V  qttd| qW d S )NLC_MESSAGESzlocale_dir %s does not exists)	r;   r<   r   r'   r9   r*   r3   verboser   )r$   
locale_dirZlocale_pathr    r    r!   r:   Q   s    
zCatalogRepository.locale_dirsc       	      c   s   x| j D ]}t|| jd}xnt|D ]`\}}}x |D ]}|dr8|| q8W x2|D ]*}|drZt||}|t	||fV  qZW q(W qW d S )Nr>   .z.po)
r:   r   r'   r;   oswalk
startswithremoveendswithr   )	r$   r@   r9   rootZdirnames	filenamesdirnamefilenameZfullpathr    r    r!   pofiles^   s    



zCatalogRepository.pofilesc             c   s:   x4| j D ]*\}}tt|d }t||| jV  qW d S )Nr   )rK   r   r   splitextr"   r/   )r$   r9   rJ   r   r    r    r!   catalogsm   s    zCatalogRepository.catalogs)r   r   r   __doc__r   r   r=   r6   r   r:   r   rK   r"   rM   r    r    r    r!   r8   G   s   "r8   )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   )rO   rP   r    r    r!   docname_to_domaint   s
    
rT   ZEEEZEEEEZMMMZMMMMZmediumdddHZHHhZhhDZDDDMZMMmZmmasssZWWeWZYYZyyyyZ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%Wz%xz%Xz%yz%Yz%Zz%zz%%z(%s)|)dateformatr-   	formatterr#   c          	   C   s   |d krt dt d}t| ds*tjj}y|| ||dS  ttjj	fk
r^   || |ddS  t
k
r   ttd| |S X d S )Nz=The locale argument for babel_format_date() becomes required.enZtzinfo)r-   z[Invalid date format. Quote the string by single quote if you want to output it directly: %s)warningswarnr   hasattrbabeldatesformat_date
ValueErrorZcoreZUnknownLocaleErrorAttributeErrorr3   r4   r   )rc   rd   r-   re   r    r    r!   babel_format_date   s    

ro   )rd   rc   r;   r#   c       	   	   C   s   |d kr:t d}|d k	r*tt|}nttj }|d krRt	
dt d}g }t| }xn|D ]f}|tkrt|d}|dkrtjj}n|dkrtjj}ntjj}|t||||d qf|| qfW d|S )NSOURCE_DATE_EPOCHz9The language argument for format_date() becomes required.rf    z%xz%X)r-   re   )rB   getenvr   ZutcfromtimestampfloatZnowr   ZutcZ
astimezonerg   rh   r   date_format_rerS   date_format_mappingsgetrj   rk   rl   Zformat_timeZformat_datetimeappendro   r'   )	rd   rc   r;   Zsource_date_epochresulttokenstokenZbabel_formatZfunctionr    r    r!   rl      s.    




rl   r   )rJ   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< y|j
f |S  tk
r } ztd| |W d d }~X Y nX d S )NrG   Zextr   basenamedocpathr;   z$Invalid figure_language_filename: %r)ZconfigZfigure_language_filenamer   rL   rI   rF   seprO   r|   r;   rd   KeyErrorr   )rJ   r{   Zfilename_formatrU   rI   r}   r5   r    r    r!   get_image_filename_for_language   s"    

r   c             C   s.   t | |}||\}}t|r&|S | S d S )N)r   Z
relfn2pathr   r*   )rJ   r{   Z
translated_abspathr    r    r!   search_image_for_language   s
    

r   )NN)6rN   rB   rerg   r   r   r   typingr   r   r   r   r	   r
   r   r   Zbabel.datesrj   Zbabel.messages.mofiler   Zbabel.messages.pofiler   Zsphinx.deprecationr   Zsphinx.errorsr   Zsphinx.localer   Zsphinx.utilr   Zsphinx.util.osutilr   r   r   Zsphinx.environmentr   Z	getLoggerr   r3   r   r"   r8   r   r7   rT   ru   compiler'   rt   rk   rl   ro   r   r   r    r    r    r!   <module>   st   (
&-'