U
    ânldP  ã                   @   sF   d dl Z d dlmZ d dlmZmZ dadd„ Zdd„ Zdd	d
„Z	dS )é    N)Ú	translate)ÚDetectorÚUnknownLanguagec                   C   s    t d kstt ƒdkrt ¡ a t S ©Nr   )Ú__languagesÚlenr   Úget_installed_languages© r	   r	   ú7/var/www/html/LibreTranslate/libretranslate/language.pyÚload_languages   s    r   c              	      s~  t | tƒrd}n
d}| g} g }| D ]R}z8t|ƒj}tt|ƒƒD ]}t|ƒ|| _q>| |¡ W q" tk
rr   Y q"X q"t	dd„ |D ƒƒ‰t
ƒ }dd„ |D ƒ‰tt‡fdd„|ƒƒ}|sÂd	d
dœgS |�rZg }ˆD ]~‰ tt‡ fdd„|ƒƒ}	t|	ƒdk�r<|	d }
t	dd„ |	D ƒƒt|	ƒ |
_t	dd„ |	D ƒƒ|
_| |
¡ qÐ|	rÐ| |	d ¡ qÐ|�rZ|}|j‡fdd„dd� dd„ |D ƒS )NTFc                 s   s   | ]}|j V  qd S ©N©Útext_length)Ú.0Úcr	   r	   r
   Ú	<genexpr>$   s     z#detect_languages.<locals>.<genexpr>c                 S   s   g | ]
}|j ‘qS r	   ©Úcode©r   Úlr	   r	   r
   Ú
<listcomp>(   s     z$detect_languages.<locals>.<listcomp>c                    s   | j dko| jˆ kS r   )r   r   ©r   )Ú
lang_codesr	   r
   Ú<lambda>,   ó    z"detect_languages.<locals>.<lambda>g        Úen©Ú
confidenceÚlanguagec                    s
   | j ˆ kS r   r   r   )Ú	lang_coder	   r
   r   :   r   é   r   c                 s   s   | ]}|j V  qd S r   )r   r   r	   r	   r
   r   >   s     c                 s   s   | ]}|j V  qd S r   r   r   r	   r	   r
   r   ?   s     c                    s   | j | j ˆ  S r   )r   r   r   )Útext_length_totalr	   r
   r   K   r   )ÚkeyÚreversec                 S   s   g | ]}|j |jd œ‘qS )r   )r   r   r   r	   r	   r
   r   N   s     )Ú
isinstanceÚlistr   Ú	languagesÚranger   r   Úextendr   Úsumr   Úfilterr   ÚappendÚsort)ÚtextZis_batchÚ
candidatesÚtÚdÚir&   Úcandidate_langsZtemp_average_listÚlcÚlangr	   )r   r   r!   r
   Údetect_languages   sN    

ÿ
 ÿr5   Tc                 C   s   |   ¡ } t| ƒsdS t|ƒs | S |r”| t| ƒd  }|t|ƒd  }dddddg}||kr€||kr”||krv|d d… }||7 }n||kr”|d d… }|  ¡ r¤| ¡ S |  ¡ r´| ¡ S | d	  ¡ rØ|d	  ¡ |dd …  S | d	  ¡ rü|d	  ¡ |dd …  S |S )
NÚ r    ú!ú?Ú.ú,ú;éÿÿÿÿr   )Ústripr   ÚislowerÚlowerÚisupperÚupper)ÚsourceÚtranslationZimprove_punctuationZsource_last_charZtranslation_last_charZpunctuation_charsr	   r	   r
   Úimprove_translation_formattingQ   s2    
rD   )T)
ÚstringÚargostranslater   Zlibretranslate.detectr   r   r   r   r5   rD   r	   r	   r	   r
   Ú<module>   s   A