
xR              	   @   s)  d  Z  d d l m Z d d l Z d d l Z d d d  Z Gd d   d  Z Gd d	   d	  Z e d
 k r%d Z	 x d d d d d d d d d g	 D] Z
 e e	 e
  Z e d e
 d  d Z e d e j e   e d d  j e  e j d  e d e d  j    e j d  q Wd S)zmacros.py: Generate macro values from configuration values and provide
substitution functions.

The following macros are available:

  LCODE CCODE PKGCODE LOCALE
    )print_functionNc             C   s   d } x t  |   D]| } y | j |  \ } } Wn t k
 rI w Yn X| j d  d k s | j d  d k rw q | | k r | j   } q W| d k r t d | |  f   | S)z[Look up key in given file ("key value" lines). Throw an exception if
    key was not found.N#r   zKey %s not found in %s)opensplit
ValueErrorfindstripKeyError)filekeysepvallkv r   9/usr/lib/python3/dist-packages/LanguageSelector/macros.py	_file_map   s    *r   c               @   sF   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 S)LangcodeMacrosz1/usr/share/language-selector/data/langcode2localec             C   s   i  |  _  i  } x t |  j  D] } y% | j   } | j d  \ } } Wn t k
 ra w Yn X| j d  d k s | j d  d k r q | | k r g  | | <| | j |  q W| | |  d <d  S)N:r   r   ZLOCALES)macrosr   LANGCODE_TO_LOCALErstripr   r   r   append)selfZlangCodeZlocalesr   r   r   r   r   r   __init__%   s    	*
zLangcodeMacros.__init__c             C   s   |  j  j | d  S)N )r   get)r   itemr   r   r   __getitem__5   s    zLangcodeMacros.__getitem__c             C   s   | |  j  | <d  S)N)r   )r   r   valuer   r   r   __setitem__9   s    zLangcodeMacros.__setitem__c             C   s   |  j  j |  S)N)r   __contains__)r   r   r   r   r   r"   <   s    zLangcodeMacros.__contains__N)__name__
__module____qualname__r   r   r   r!   r"   r   r   r   r   r   !   s
   r   c               @   sd   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d S)LangpackMacrosc             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 } d | k r | j d  \ } |  d <d | k r | j d  d } d | k r | j d  \ |  d <|  d <n
 | |  d <t |  d  d k r)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	 <y! t |  j |  d d  |  d <Wn  t k
 r|  d |  d <Yn Xd S)a9  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]
        dataZlocale2langpackr   ZLCODEZCCODEZVARIANTLOCALEZPKGCODEZ	SYSLOCALECZPOSIXZen_US@.r   _z%s@%sz%s_%s.UTF-8z%s.UTF-8r   N)	ospathjoinZLOCALE_TO_LANGPACKr   r   lenr   r	   )r   datadirlocaler   r   r   r   @   s<    
	





 

!zLangpackMacros.__init__c             C   s   |  j  j | d  S)Nr   )r   r   )r   r   r   r   r   r   p   s    zLangpackMacros.__getitem__c             C   s   | |  j  | <d  S)N)r   )r   r   r    r   r   r   r!   t   s    zLangpackMacros.__setitem__c             C   s   |  j  j |  S)N)r   r"   )r   r   r   r   r   r"   w   s    zLangpackMacros.__contains__c             C   s|   t  j d  } xf | j |  } | rs | d | j d  d  |  | j d  | | j d  d d  } q Pq W| S)z&Substitute all macros in given string.z
%([A-Z]+)%N   )recompilesearchstartgroupend)r   sZre_macromr   r   r   subst_stringz   s    LzLangpackMacros.subst_stringc             C   s5   t  |  j   } t  | d  j |  j |   d S)z$Substitute all macros in given file.wN)r   readwriter<   )r   r
   r:   r   r   r   
subst_file   s    zLangpackMacros.subst_filec             C   sW   xP t  j |  D]? \ } } } x- | D]% } |  j t  j j | | |   q& Wq Wd S)z.Substitute all macros in given directory tree.N)r-   walkr@   r.   r/   )r   rootr.   dirsfilesfr   r   r   
subst_tree   s    zLangpackMacros.subst_treeN)
r#   r$   r%   r   r   r!   r"   r<   r@   rF   r   r   r   r   r&   ?   s   0r&   __main__z/usr/share/language-selectorZdeZde_DEzde_DE.UTF-8zde_DE.UTF-8@eurozfr_BE@latinzzh_CN.UTF-8zzh_TW.UTF-8zzh_HK.UTF-8Zinvalid_Localez-------z---------------z;"%PKGCODE%: %LCODE% %CCODE% %VARIANT% %LOCALE% %SYSLOCALE%"zstring:Ztesttestr=   zfile  :)__doc__Z
__future__r   r-   r4   r   r   r&   r#   r1   r2   r   printtemplater<   r   r?   r@   r>   unlinkr   r   r   r   <module>   s"   U(