ó
öÀ„\c           @   sÎ  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l m Z d d l m 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 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 j e ƒ Z  e! rNd d l" m# Z# m$ Z$ m% Z% d d l& m' Z' n  e d d ƒ Z( d e( f d „  ƒ  YZ) d „  Z* d „  Z+ d d d e! e g  ƒ d „ Z- i d d 6d d 6d d 6d d 6d d  6d! d" 6d# d$ 6d% d& 6d' d( 6d) d* 6d+ d, 6d- d. 6d/ d0 6d1 d2 6d3 d4 6d5 d6 6d7 d8 6d9 d: 6d; d< 6d= d> 6d? d@ 6dA dB 6dC dD 6d? dE 6d dF 6d dG 6dH dI 6dJ dK 6dL dM 6dN dO 6Z. e j/ dP dQ j0 e. ƒ ƒ Z1 e j2 j3 dR „ Z4 d d dS „ Z3 dT „  Z5 dU „  Z6 d S(V   sÇ   
    sphinx.util.i18n
    ~~~~~~~~~~~~~~~~

    Builder superclass for all builders.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
iÿÿÿÿN(   t
   namedtuple(   t   datetime(   t   path(   t   write_mo(   t   read_po(   t   RemovedInSphinx30Warning(   t   SphinxError(   t   __(   t   logging(   t   Matcher(   t   SEPt   relpatht   walk(   t   Callablet   Listt   Set(   t   BuildEnvironmentt   CatalogInfos   base_dir,domain,charsetc           B   sV   e  Z e d  „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z RS(   c         C   s   |  j  d S(   Ns   .po(   t   domain(   t   self(    (    s/   lib/python2.7/site-packages/sphinx/util/i18n.pyt   po_file,   s    c         C   s   |  j  d S(   Ns   .mo(   R   (   R   (    (    s/   lib/python2.7/site-packages/sphinx/util/i18n.pyt   mo_file1   s    c         C   s   t  j |  j |  j ƒ S(   N(   R   t   joint   base_dirR   (   R   (    (    s/   lib/python2.7/site-packages/sphinx/util/i18n.pyt   po_path6   s    c         C   s   t  j |  j |  j ƒ S(   N(   R   R   R   R   (   R   (    (    s/   lib/python2.7/site-packages/sphinx/util/i18n.pyt   mo_path;   s    c         C   s5   t  j |  j ƒ p4 t  j |  j ƒ t  j |  j ƒ k  S(   N(   R   t   existsR   t   getmtimeR   (   R   (    (    s/   lib/python2.7/site-packages/sphinx/util/i18n.pyt   is_outdated@   s    c      
   C   sÒ   t  j |  j d d |  j ƒM } y t | | ƒ } Wn0 t k
 rf } t j t d ƒ |  j | ƒ d  SXWd  QXt  j |  j	 d ƒ J } y t
 | | ƒ Wn/ t k
 rÇ } t j t d ƒ |  j	 | ƒ n XWd  QXd  S(   Nt   rtt   encodings   reading error: %s, %st   wbs   writing error: %s, %s(   t   iot   openR   t   charsetR   t	   Exceptiont   loggert   warningR   R   R   (   R   t   localet   file_pot   pot   exct   file_mo(    (    s/   lib/python2.7/site-packages/sphinx/util/i18n.pyR   F   s    !(	   t   __name__t
   __module__t   propertyR   R   R   R   R   R   (    (    (    s/   lib/python2.7/site-packages/sphinx/util/i18n.pyR   *   s   	c         C   s)   | r |  j  t d ƒ d } n |  } | S(   Ni   i    (   t   splitR
   (   t   docnamet
   compactiont   ret(    (    s/   lib/python2.7/site-packages/sphinx/util/i18n.pyt   find_catalogV   s    c   	      C   s‚   | o	 | s g  St  |  | ƒ } g  | D]* } t j | t j | | ƒ | g ƒ ^ q& } g  | D] } | r] t | | ƒ ^ q] } | S(   N(   R2   t   gettextt   findR   R   R   (	   R/   t   srcdirt   locale_dirst   langR0   R   t   dir_t   filest   f(    (    s/   lib/python2.7/site-packages/sphinx/util/i18n.pyt   find_catalog_files`   s    4(s   utf-8c         C   s’  | d k	 r% t j d t d d ƒn  t ƒ  } | s8 | SxS|  D]K} | sQ q? n  t j | | d ƒ }	 t j |	 ƒ s{ q? n  xt |	 d t	 ƒD]ø \ }
 } } g  | D] } | j
 d ƒ r¤ | ^ q¤ } x¾ | D]¶ } | t j t |
 |	 ƒ | ƒ ƒ rù qÌ n  t j | ƒ d } t t j |
 | ƒ |	 ƒ j t j t ƒ } | rN| | k rNqÌ n  t |	 | | ƒ } | sr| j ƒ  rÌ | j | ƒ qÌ qÌ WqŽ Wq? W| S(	   s/  
    :param list locale_dirs:
       list of path as `['locale_dir1', 'locale_dir2', ...]` to find
       translation catalogs. Each path contains a structure such as
       `<locale>/LC_MESSAGES/domain.po`.
    :param str locale: a language as `'en'`
    :param list domains: list of domain names to get. If empty list or None
       is specified, get all domain names. default is None.
    :param boolean force_all:
       Set True if you want to get all catalogs rather than updated catalogs.
       default is False.
    :return: [CatalogInfo(), ...]
    sG   gettext_compact argument for find_catalog_source_files() is deprecated.t
   stackleveli   t   LC_MESSAGESt   followlinkss   .poi    N(   t   Nonet   warningst   warnR   t   setR   R   R   R   t   Truet   endswithR   t   splitextt   replacet   sepR
   R   R   t   add(   R6   R&   t   domainst   gettext_compactR"   t	   force_allt   excludedt   catalogst
   locale_dirR   t   dirpatht   dirnamest	   filenamesR:   t   filenamet   baseR   t   cat(    (    s/   lib/python2.7/site-packages/sphinx/util/i18n.pyt   find_catalog_source_filesl   s2    		"(!*t   EEEs   %at   EEEEs   %At   MMMs   %bt   MMMMs   %Bt   mediums   %ct   ds   %-dt   dds   %dt   Hs   %-Ht   HHs   %Ht   hs   %-It   hhs   %It   Ds   %-jt   DDDs   %jt   Ms   %-mt   MMs   %mt   ms   %-Mt   mms   %Mt   as   %pt   ss   %-St   sss   %St   WWs   %Ut   es   %wt   Ws   %-Ws   %Ws   %xs   %Xt   YYs   %yt   YYYYs   %Yt   zzzzs   %Zt   %s   %%s   (%s)t   |c         C   s¥   | d  k r d } n  t |  d ƒ s3 t j j } n  y | |  | d | ƒSWnT t t j j f k
 ry | |  | d d ƒSt k
 r  t	 j
 t d ƒ | ƒ | SXd  S(   Nt   ent   tzinfoR&   s[   Invalid date format. Quote the string by single quote if you want to output it directly: %s(   R?   t   hasattrt   babelt   datest   format_datet
   ValueErrort   coret   UnknownLocaleErrort   AttributeErrorR$   R%   R   (   t   datet   formatR&   t	   formatter(    (    s/   lib/python2.7/site-packages/sphinx/util/i18n.pyt   babel_format_dateÉ   s    	c   	   	   C   s  | d  k rN t j d ƒ } | d  k	 r? t j t | ƒ ƒ } qN t j ƒ  } n  g  } t j |  ƒ } x  | D]˜ } | t	 k rõ t	 j
 | d ƒ } | d k r© t j j } n' | d k rÄ t j j } n t j j } | j t | | d | d | ƒƒ qj | j | ƒ qj Wd j | ƒ S(   Nt   SOURCE_DATE_EPOCHt    s   %xs   %XR&   R~   (   R?   t   ost   getenvR   t   utcfromtimestampt   floatt   nowt   date_format_reR.   t   date_format_mappingst   getRu   Rv   Rw   t   format_timet   format_datetimet   appendR   R   (	   R}   R|   t   languaget   source_date_epocht   resultt   tokenst   tokent   babel_formatt   function(    (    s/   lib/python2.7/site-packages/sphinx/util/i18n.pyRw   Þ   s&    c         C   sê   | j  j s |  S| j  j } t ƒ  } t j |  ƒ \ | d <| d <t j | d ƒ } | r~ | j t j ƒ r~ | t j 7} n  | | d <t j	 | d ƒ | d <| j  j | d <y | j
 |   SWn# t k
 rå } t d | ƒ ‚ n Xd  S(   Nt   roott   extR   t   basenameR   s$   Invalid figure_language_filename: %r(   t   configR   t   figure_language_filenamet   dictR   RE   t   dirnameRD   RG   R–   R}   t   KeyErrorR   (   RR   t   envt   filename_formatR[   Rš   R)   (    (    s/   lib/python2.7/site-packages/sphinx/util/i18n.pyt   get_image_filename_for_language  s    	
c         C   s^   | j  j s |  St |  | ƒ } t j | j ƒ } t j t j | j | | ƒ ƒ rV | S|  Sd  S(   N(	   R—   R   Rž   R   Rš   R/   R   R   R5   (   RR   Rœ   t
   translatedRš   (    (    s/   lib/python2.7/site-packages/sphinx/util/i18n.pyt   search_image_for_language  s    !(7   t   __doc__R3   R    R‚   t   reR@   t   collectionsR    R   R   t   babel.datesRu   t   babel.messages.mofileR   t   babel.messages.pofileR   t   sphinx.deprecationR   t   sphinx.errorsR   t   sphinx.localeR   t   sphinx.utilR   t   sphinx.util.matchingR	   t   sphinx.util.osutilR
   R   R   t	   getLoggerR+   R$   t   Falset   typingR   R   R   t   sphinx.environmentR   t   LocaleFileInfoBaseR   R2   R;   R?   RU   Rˆ   t   compileR   R‡   Rv   Rw   R   Rž   R    (    (    (    s/   lib/python2.7/site-packages/sphinx/util/i18n.pyt   <module>
   s€   ,	
	2
#	