U
    ڀR]                     @   s   d Z ddlmZ ddlZddlZdddZG dd dZG dd	 d	Zed
krdZ	dD ]dZ
ee	e
Zede
d dZedee edde ed eded  ed qVd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}t | D ]^}z||\}}W n tk
r:   Y qY nX |ddks|ddkrZq||kr| }q|dkrt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                   @   s0   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 }t| jD ]t}z| }|d\}}W n tk
rJ   Y qY nX |ddks|ddkrjq||krzg ||< || | q|| | 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 |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 |S r#   r   __contains__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|dd| _i | _d| d< d| d< d| d< d| d< d| d< d| d	< |d
ksX|dkr\d}d|krv|d\}| d< d|kr|dd }d|kr|d\| d< | d< n|| d< t| d dkrd|| d f | d< n|| d< t| d dkrZt| d dkr d| d | d f | d	< nd| d  | d	< t| d dkrZd| d	 | d f | d	< zt| j| d d| d< W n" tk
r   | d | d< Y nX d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 |dS r   r   r    r   r   r   r"   p   s    zLangpackMacros.__getitem__c                 C   s   || j |< d S r#   r$   r%   r   r   r   r'   t   s    zLangpackMacros.__setitem__c                 C   s   | j |S r#   r(   r    r   r   r   r)   w   s    zLangpackMacros.__contains__c                 C   s\   t d}||}|rX|d|dd  | |d  ||dd d  }q
qXq
|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    

<zLangpackMacros.subst_stringc                 C   s&   t | }t |d| | dS )z$Substitute all macros in given file.wN)r   readwriterC   )r   r
   rA   r   r   r   
subst_file   s    zLangpackMacros.subst_filec              	   C   s:   t |D ]*\}}}|D ]}| t j||| qq
dS )z.Substitute all macros in given directory tree.N)r4   walkrG   r5   r6   )r   rootr5   dirsfilesfr   r   r   
subst_tree   s    zLangpackMacros.subst_treeN)
r*   r+   r,   r   r"   r'   r)   rC   rG   rM   r   r   r   r   r-   ?   s   0r-   __main__z/usr/share/language-selector)	Z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testtestrD   zfile  :)N)__doc__Z
__future__r   r4   r;   r   r   r-   r*   r8   r9   r   printtemplaterC   r   rF   rG   rE   unlinkr   r   r   r   <module>   s"   
U

