B
    dD'                  @   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    ]/work/yifan.wang/ringdown/master-ringdown-env/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_po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)r:   _locale_dirsr<   r/   )r$   r:   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'   r:   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$   rA   r:   rootdirnames	filenamesdirnamefilenamefullpathr    r    r!   pofiles^   s    



zCatalogRepository.pofilesc             c   s:   x4| j D ]*\}}tt|d }t||| jV  qW d S )Nr   )rN   r   r   splitextr"   r/   )r$   r:   rL   r   r    r    r!   catalogsm   s    zCatalogRepository.catalogs)r   r   r   __doc__r   r   r>   r7   r   r;   r   rN   r"   rP   r    r    r    r!   r9   G   s   "r9   )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   )rR   rS   r    r    r!   docname_to_domaint   s
    
rW   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%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.en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
ValueErrorcoreZUnknownLocaleErrorAttributeErrorr3   r4   r   )ri   rj   r-   rk   r    r    r!   babel_format_date   s    

rw   )rj   ri   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.rl    z%xz%X)r-   rk   )rC   getenvr   utcfromtimestampfloatnowr   utc
astimezonern   ro   r   date_format_rerV   date_format_mappingsgetrq   rr   rs   Zformat_timeformat_datetimeappendrw   r'   )	rj   ri   r<   source_date_epochresulttokenstokenZbabel_formatfunctionr    r    r!   rs      s.    




rs   r   )rL   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 )NrH   extr   basenamedocpathr<   z$Invalid figure_language_filename: %r)configZfigure_language_filenamer   rO   rK   rG   seprR   r   r<   rj   KeyErrorr   )rL   r   Zfilename_formatrX   rK   r   r6   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*   )rL   r   Z
translated_abspathr    r    r!   search_image_for_language   s
    

r   )NN)6rQ   rC   rern   r   r   r   typingr   r   r   r   r	   r
   r   r   Zbabel.datesrq   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   	getLoggerr   r3   r   r"   r9   r   r8   rW   r   compiler'   r   rr   rs   rw   r   r   r    r    r    r!   <module>   st   (
&-'