
    f"                         d dl mZmZmZ d dlZd dlZd dlmZ d dlm	Z	 d dl
Z
 e
j                  d      Z G d d      Z G d d	      Zy)
    )divisionprint_functionunicode_literalsN)minidom)	open_utf8LanguageSupportc                      e Zd ZdZi 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ddddd d!d"d"dd#d$d%d&d'd(d)d*d+d,d-Zd>d/Zed0        Zd1 Zd2 Z	d3 Z
d4 Zd5 Zd6 Zd7 Zd8 Zd9 Zd: Zd; Zed<        Zed=        Zy.)?
LanguageDBzC
    Keeps track of languages selectable in the language menu.
    aaETarEGbnBDcaEScsCZdaDKdeDEelGRenUSeoXXeseufrFRfyBLgaIEgdGBitITNLPLPKPTRORUSORSSEERTR)linlomplpaptrorusosrsvtitrNc                 >    || _         g | _        t               | _        y N)_wp_locale_idsISOCodes
_iso_codes)selfwps     9/usr/lib/python3/dist-packages/Onboard/LanguageSupport.py__init__zLanguageDB.__init__F   s    "*    c                  P    t        t        j                  j                               S rD   )listr
   _main_languageskeys rM   rK   get_main_languageszLanguageDB.get_main_languagesK   s    J..33566rM   c                 0    | j                  |      }|r|S |S rD   )get_language_full_name)rI   lang_id	full_names      rK   get_language_full_name_or_idz'LanguageDB.get_language_full_name_or_idO   s     //8	rM   c                     | j                  |      \  }}| j                  j                  |      }|r1| j                  j                  |      }|s|}|r|dk7  r|d|z   dz   z  }|S )Nr   z ())split_lang_idrH   get_translated_language_nameget_translated_country_name)rI   rV   	lang_codecountry_codenamecountrys         rK   rU   z!LanguageDB.get_language_full_nameU   sl    "&"4"4W"=	<;;IFooAA,OG&$w,,rM   c                 d    | j                  |      \  }}| j                  j                  |      }|S rD   )r[   rH   r\   )rI   rV   r^   r_   r`   s        rK   get_language_namezLanguageDB.get_language_namea   s0    "&"4"4W"=	<;;IFrM   c                 .    | j                  |      \  }}|S rD   )r[   )rI   rV   r^   r_   s       rK   get_language_codezLanguageDB.get_language_codef   s    "&"4"4W"=	<rM   c                 x    | j                         }||vr%| j                  |      \  }}| j                  |      }|S )a  
        Return lang_id if there is an exact match, else return the
        default lang_id for its lanugage code.

        Doctests:
        >>> l = LanguageDB()
        >>> l.get_system_model_language_ids = lambda : ["en_US", "en_GB", "de_DE"]
        >>> l.find_system_model_language_id("en")
        'en_US'
        >>> l.find_system_model_language_id("en_XY")
        'en_US'
        >>> l.find_system_model_language_id("en_US")
        'en_US'
        >>> l.find_system_model_language_id("en_GB")
        'en_GB'
        )get_system_model_language_idsr[   get_main_lang_id)rI   rV   	known_idsr^   r_   s        rK   find_system_model_language_idz(LanguageDB.find_system_model_language_idj   sD    " 668	)#&*&8&8&A#I|++I6GrM   c                 6    | j                   j                         S )zO
        List of language_ids of the available system language models.
        )rE   get_system_model_namesrI   s    rK   rg   z(LanguageDB.get_system_model_language_ids        xx..00rM   c                 6    | j                   j                         S )zP
        List of language_ids (ll_CC) that can be selected by the user.
        )rE   get_merged_model_namesrm   s    rK   get_language_idszLanguageDB.get_language_ids   rn   rM   c                 V    d}| j                   j                  |d      }|r|dz   |z   }|S )zW
        Complete given language code to the language id of the main language.
         _)rP   get)rI   r^   rV   r_   s       rK   rh   zLanguageDB.get_main_lang_id   s7     ++//	2>#o4GrM   c                     g }| j                         D ]<  }| j                  |      \  }}}|s|dvs |}|r|d|z   z  }|j                  |       > |S )N)POSIXCrt   )_get_locale_ids_split_locale_idappend)rI   lang_ids	locale_idr^   r_   encodingrV   s          rK   _get_language_ids_in_localez&LanguageDB._get_language_ids_in_locale   sj    --/ 	)I040E0Ei0P-I|Xn!<#s\11G(	) rM   c                 \    | j                   s| j                         | _         | j                   S rD   )rF   _find_locale_idsrm   s    rK   ry   zLanguageDB._get_locale_ids   s(    #446DrM   c           	      @   g }	 t        j                  ddg      j                  d      j                  d      }|D cg c]  }|s|	 c}S # t        $ rC}t
        j                  t        ddj                  | j                        |             Y d }~Zd }~ww xY wc c}w )Nlocalez-azUTF-8
zFailed to execute '{}', {} )

subprocesscheck_outputdecodesplitOSError_loggererror_formatjoinargs)rI   
locale_idseids       rK   r   zLanguageDB._find_locale_ids   s    
	5#00(D1AB$*F7OEE$K 
 (.r2..  	5MM'">HHTYY/4 5 5	5 /s"   5A BB	B9BBc                     | j                  d      }t        |      dk\  r|d   nd}t        |      dk\  r|d   nd}t        j                  |      \  }}|||fS )N.   r   rs      )r   lenr
   r[   )r}   tokensrV   r~   r^   r_   s         rK   rz   zLanguageDB._split_locale_id   s^    %"6{a/&)R #Fq 06!9b",":":7"C	<,00rM   c                     | j                  d      }t        |      dk\  r|d   nd}t        |      dk\  r|d   nd}||fS )Nrt   r   r   rs   r   )r   r   )rV   r   r^   r_   s       rK   r[   zLanguageDB.split_lang_id   sG    s#$'K1$4vay"	$'K1$4vay",&&rM   rD   )__name__
__module____qualname____doc__rP   rL   staticmethodrS   rX   rU   rc   re   rj   rg   rq   rh   r   ry   r   rz   r[   rR   rM   rK   r
   r
   "   sz   td dd d d	
 d d d d d d d d d d d  d!" #"""""""""""";O@%
 7 7

.11	 
/ 1 1 ' 'rM   r
   c                   R    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zedd
       Zy)rG   z
    Load and translate ISO language and country codes.

    Doctests:
    >>> ic = ISOCodes()
    >>> ic.get_language_name("en")
    'English'
    >>> ic.get_country_name("DE")
    'Germany'
    c                 @    i | _         i | _        | j                          y rD   )
_languages
_countries	_read_allrm   s    rK   rL   zISOCodes.__init__   s    rM   c                 :    | j                   j                  |d      S Nrs   )r   ru   rI   r^   s     rK   rc   zISOCodes.get_language_name   s    ""9b11rM   c                 :    | j                   j                  |d      S r   )r   ru   )rI   r_   s     rK   get_country_namezISOCodes.get_country_name   s    ""<44rM   c                 L    t        j                  d| j                  |            S )Niso_639)gettextdgettextrc   r   s     rK   r\   z%ISOCodes.get_translated_language_name   s     	4+A+A)+LMMrM   c                 X    | j                  |      }|s|}t        j                  d|      S )Niso_3166)r   r   r   )rI   r_   country_names      rK   r]   z$ISOCodes.get_translated_country_name   s-    ,,\:'L
L99rM   c                 D    | j                          | j                          y rD   )_read_languages_read_countriesrm   s    rK   r   zISOCodes._read_all   s    rM   c                 L   t        d      5 }t        j                  |      j                  }|j	                  d      D ]P  }| j                  |d      }|s| j                  |d      }| j                  |dd      }|s?|sB|| j                  |<   R 	 d d d        y # 1 sw Y   y xY w)Nz$/usr/share/xml/iso-codes/iso_639.xmliso_639_entryiso_639_1_codeiso_639_2T_coder`   rs   )r   r   parsedocumentElementgetElementsByTagName	_get_attrr   )rI   fdomnoder^   	lang_names         rK   r   zISOCodes._read_languages   s    => 	;!--"22C00A 	; NN41AB	  $t5F GI NN4<	1:DOOI.	;	; 	; 	;s   A/B<B?BB#c                 >   t        d      5 }t        j                  |      j                  }|j	                  d      D ]I  }| j                  |d      }| j                  |d      }|s*|s-|| j                  |j                         <   K 	 d d d        y # 1 sw Y   y xY w)Nz%/usr/share/xml/iso-codes/iso_3166.xmliso_3166_entryalpha_2_coder`   )r   r   r   r   r   r   r   upper)rI   r   r   r   r_   r   s         rK   r   zISOCodes._read_countries   s    >? 	I1--"22C001AB I#~~dNC#~~dF;L<HDOOL$6$6$89I	I 	I 	Is   AB'B*BBc                 V    | j                   j                  |      }|r|j                  S yr   )
attributesru   value)r   r`   defaultattrs       rK   r   zISOCodes._get_attr   s&    ""4(::rM   N)rs   )r   r   r   r   rL   rc   r   r\   r]   r   r   r   r   r   rR   rM   rK   rG   rG      sE    	25N:;	I  rM   rG   )
__future__r   r   r   r   r   xml.domr   Onboard.utilsr   logging	getLoggerr   r
   rG   rR   rM   rK   <module>r      sK   ( B A    # 
'

-
.\' \'~C CrM   