ó
·bMc        	   @   s  d  Z  d d l Z d d l Z d d l Z d d „ Z d d d „  ƒ  YZ d d d „  ƒ  YZ e d k rd	 Z	 x¥ d
 d d d d d d d d g	 D] Z
 e e	 e
 ƒ Z d Ge
 Gd GHd Z d Ge j e ƒ GHe d d ƒ j e ƒ e j d ƒ d Ge d ƒ j ƒ  GHe j d ƒ q Wn  d S(   s¢   macros.py: Generate macro values from configuration values and provide
substitution functions.

The following macros are available:

  LCODE CCODE PKGCODE LOCALE
iÿÿÿÿNc         C   s¾   d } x t |  ƒ D] } y | j | ƒ \ } } Wn t k
 rH q n X| j d ƒ d k s | j d ƒ d k ry q n  | | k r | j ƒ  } q q W| d k rº t d | |  f ‚ n  | S(   s[   Look up key in given file ("key value" lines). Throw an exception if
    key was not found.t   #i    s   Key %s not found in %sN(   t   Nonet   opent   splitt
   ValueErrort   findt   stript   KeyError(   t   filet   keyt   sept   valt   lt   kt   v(    (    s;   /usr/lib/python2.7/dist-packages/LanguageSelector/macros.pyt	   _file_map   s    *t   LangcodeMacrosc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s1   /usr/share/language-selector/data/langcode2localec         C   sÑ   i  |  _  i  } x­ t |  j ƒ D]œ } y% | j ƒ  } | j d ƒ \ } } Wn t k
 r` q n X| j d ƒ d k s | j d ƒ d k r‘ q n  | | k rª g  | | <n  | | j | ƒ q W| | |  d <d  S(   Nt   :R    i    t   LOCALES(   t   macrosR   t   LANGCODE_TO_LOCALEt   rstripR   R   R   t   append(   t   selft   langCodet   localesR   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/LanguageSelector/macros.pyt   __init__"   s    	*c         C   s   |  j  j | d ƒ S(   Nt    (   R   t   get(   R   t   item(    (    s;   /usr/lib/python2.7/dist-packages/LanguageSelector/macros.pyt   __getitem__2   s    c         C   s   | |  j  | <d  S(   N(   R   (   R   R   t   value(    (    s;   /usr/lib/python2.7/dist-packages/LanguageSelector/macros.pyt   __setitem__6   s    c         C   s   |  j  j | ƒ S(   N(   R   t   __contains__(   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/LanguageSelector/macros.pyR!   9   s    (   t   __name__t
   __module__R   R   R   R    R!   (    (    (    s;   /usr/lib/python2.7/dist-packages/LanguageSelector/macros.pyR      s
   			t   LangpackMacrosc           B   sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s  t  j j | d d ƒ |  _ i  |  _ d |  d <d |  d <d |  d <d |  d <d |  d <d |  d	 <| d
 k sx | d k r d } n  d | k r© | j d ƒ \ } |  d <n  d | k rË | j d ƒ d } n  d | k r÷ | j d ƒ \ |  d <|  d <n
 | |  d <t |  d ƒ d k r2d | |  d f |  d <n
 | |  d <t |  d ƒ d k rÑt |  d ƒ d k r‡d |  d |  d f |  d	 <n d |  d |  d	 <t |  d ƒ d k rÑd |  d	 |  d f |  d	 <qÑn  y! t |  j |  d d ƒ |  d <Wn t k
 r|  d |  d <n Xd S(   s9  Initialize values of macros.

        This uses information from maps/, config/, some hardcoded aggregate
        strings (such as package names), and some external input:
        
        - locale: Standard locale representation (e. g. pt_BR.UTF-8)
                  Format is: ll[_CC][.UTF-8][@variant]
        t   datat   locale2langpackR   t   LCODEt   CCODEt   VARIANTt   LOCALEt   PKGCODEt	   SYSLOCALEt   Ct   POSIXt   en_USt   @t   .i    t   _s   %s@%ss   %s_%s.UTF-8s   %s.UTF-8R   N(	   t   ost   patht   joint   LOCALE_TO_LANGPACKR   R   t   lenR   R   (   R   t   datadirt   locale(    (    s;   /usr/lib/python2.7/dist-packages/LanguageSelector/macros.pyR   =   s<    
	





	 

"!c         C   s   |  j  j | d ƒ S(   NR   (   R   R   (   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/LanguageSelector/macros.pyR   m   s    c         C   s   | |  j  | <d  S(   N(   R   (   R   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/LanguageSelector/macros.pyR    q   s    c         C   s   |  j  j | ƒ S(   N(   R   R!   (   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/LanguageSelector/macros.pyR!   t   s    c         C   so   t  j d ƒ } xY | j | ƒ } | rg | | j d ƒ d  |  | j d ƒ | | j d ƒ d } q Pq | S(   s&   Substitute all macros in given string.s
   %([A-Z]+)%i   (   t   ret   compilet   searcht   startt   groupt   end(   R   t   st   re_macrot   m(    (    s;   /usr/lib/python2.7/dist-packages/LanguageSelector/macros.pyt   subst_stringw   s    @c         C   s5   t  | ƒ j ƒ  } t  | d ƒ j |  j | ƒ ƒ d S(   s$   Substitute all macros in given file.t   wN(   R   t   readt   writeRC   (   R   R   R@   (    (    s;   /usr/lib/python2.7/dist-packages/LanguageSelector/macros.pyt
   subst_file„   s    c         C   sW   xP t  j | ƒ D]? \ } } } x- | D]% } |  j t  j j | | | ƒ ƒ q& Wq Wd S(   s.   Substitute all macros in given directory tree.N(   R3   t   walkRG   R4   R5   (   R   t   rootR4   t   dirst   filest   f(    (    s;   /usr/lib/python2.7/dist-packages/LanguageSelector/macros.pyt
   subst_treeŠ   s    (	   R"   R#   R   R   R    R!   RC   RG   RM   (    (    (    s;   /usr/lib/python2.7/dist-packages/LanguageSelector/macros.pyR$   <   s   	0					t   __main__s   /usr/share/language-selectort   det   de_DEs   de_DE.UTF-8s   de_DE.UTF-8@euros   fr_BE@latins   zh_CN.UTF-8s   zh_TW.UTF-8s   zh_HK.UTF-8t   invalid_Locales   -------s   ---------------s;   "%PKGCODE%: %LCODE% %CCODE% %VARIANT% %LOCALE% %SYSLOCALE%"s   string:t   testtestRD   s   file  :(    (    (   t   __doc__R:   t   os.pathR3   R   R   R   R$   R"   R8   R9   R   t   templateRC   R   RF   RG   RE   t   unlink(    (    (    s;   /usr/lib/python2.7/dist-packages/LanguageSelector/macros.pyt   <module>   s   $U(