
    i                         d dl mZ d dlZd dlZd dlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZ  ej                  e      ZdZd	Zd
ZdZdZd Zd Zd ZddZddZd Zd Zd Zd ZddZ 	 	 ddZ!ddZ"y)    )CounterN   )registry)get_setting)autodiscover)LanguageCodeErrorLanguageDetectionErrorLanguagePackNotFoundztransliterate.utilszArtur Barseghyanz2013-2018 Artur BarseghyanzGPL 2.0/LGPL 2.1)detect_languageget_available_language_codesget_available_language_packsget_translit_functionslugifysuggesttranslitc                     | S )zFake translation wrapper. )vals    o/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/transliterate/utils.py_r       s    J    c                  :    t         j                   st                yy)zEnsure autodiscover.N)r   r   r   r   r   ensure_autodiscoverr   %   s      r   c                     t                t        j                  |       }|t        t	        d| z               |       }|j
                  S )zjReturn translit function for the language given.

    :param str language_code:
    :return callable:
    'Language pack for code %s is not found.)r   r   getr
   r   r   )language_codeclslanguage_packs      r   r   r   ,   sM     
,,}
%C
{"7-GH
 	
 EM!!!r   c                     t                ||du rt        t        d            |t        | d      }t	        j
                  |      }|t        t        d|z               |       }|j                  | ||      S )a  Transliterate the text for the language given.

    Language code is optional in case of reversed translations (from some
    script to latin).

    :param str value:
    :param str language_code:
    :param bool reversed: If set to True, reversed translation is made.
    :param bool strict: If given, all that are not found in the
        transliteration pack, are simply stripped out.
    :return str:
    FA``language_code`` is optional with ``reversed`` set to True only.)fail_silentlyr   )reversedstrict)r   r   r   r   r   r   r
   r   )valuer   r#   r$   r   r   s         r   r   r   >   s     U!2  
 	

 'UC
,,}
%C
{"7-GH
 	
 EM!!%(6!JJr   c                     t                ||du rt        t        d            t        j                  |      }|t        t        d|z               |       }|j                  | ||      S )zSuggest possible variants.

    :param str value:
    :param str language_code:
    :param bool reversed: If set to True, reversed translation is made.
    :param int limit: Limit number of suggested variants.
    :return list:
    Fr!   r   )r#   limit)r   r   r   r   r   r
   r   )r%   r   r#   r'   r   r   s         r   r   r   a   s     U!2  
 	

 ,,}
%C
{"7-GH
 	
 EM   GGr   c                      t                t        j                  j                         D  cg c]  \  } }| 	 c}} S c c}} w )zQGet list of language codes for registered language packs.

    :return list:
    r   r   itemskeyr   s     r   r   r   ~   1    
 "*"3"3"9"9";<JS#C<<<   <c                      t                t        j                  j                         D  cg c]  \  } }|	 c}} S c c}} w )z>Get list of registered language packs.

    :return list:
    r)   r+   s     r   r   r      r-   r.   c                 V    t                t        j                  j                  | d      S )zGet registered language pack by language code given.

    :param str language_code:
    :return transliterate.base.TranslitLanguagePack: Returns None on failure.
    N)r   r   r   )r   s    r   get_language_packr1      s#       55r   c                 :    dj                  t        d |             S )zStrip numbers from text. c                 $    | j                          S N)isdigit)us    r   <lambda>zstrip_numbers.<locals>.<lambda>   s    		O r   )joinfilter)texts    r   strip_numbersr<      s    7763T:;;r   c                     |t        d      }t        |       } t               }| j                  d      D ]  }t	        |      dkD  s||xx   dz  cc<     |j                  |      S )zeExtract most common words.

    :param unicode text:
    :param int num_words:
    :return list:
    #LANGUAGE_DETECTION_MAX_NUM_KEYWORDS r   )r   r<   r   splitlenmost_common)r;   	num_wordscounterwords       r   extract_most_common_wordsrF      si      EF	DiG

3 t9q=DMQM y))r   c                    t                |t        d      }t        | |      }t               }t	               }|D ]I  \  }}|D ]?  }	|D ]8  }
|
j
                  s|
j                  |	      s"||
j                  xx   dz  cc<   : A K 	 |j                  d      d   d   S # t        $ r3}t        d      rt        j                  t        |             Y d}~nd}~ww xY w|st        t        d      | z        y)a\  Detect the language from the value given.

    Detect the language from the value given based on ranges defined in active
    language packs.

    :param unicode value: Input string.
    :param int num_words: Number of words to base decision on.
    :param bool fail_silently:
    :param bool heavy_check: If given, heavy checks would be applied when
        simple checks don't give any results. Heavy checks are language
        specific and do not apply to a common logic. Heavy language detection
        is defined in the ``detect`` method of each language pack.
    :return str: Language code.
    Nr>   )rC   r   r   DEBUGz.Can't detect language for the text "%s" given.)r   r   rF   r   r   
detectablecontainsr   rB   	ExceptionLOGGERdebugstrr	   r   )r;   rC   r"   heavy_checkmost_common_wordsrD   available_language_packsrE   occurrencesletterr   errs               r   r   r      s      EF	1$)LiG;=. k 	F!9  ++0F0Fv0NM778A=8	#""1%a(++ #wLLS"# $BCdJ
 	
 s   B 	C()CCc                 <   |st        |       }|rt        | |d      }t        j                  d|      j	                  dd      j                  d      }t        j                  dd|      j                         j                         }t        j                  dd	|      S y
)zSlugify the given text.

    If no ``language_code`` is given, auto-detect the language code from
    text given.

    :param str text:
    :param str language_code:
    :return str:
    T)r#   NFKDasciiignorez[^\w\s-]r3   z[-\s]+-N)
r   r   unicodedata	normalizeencodedecoderesubstriplower)r;   r   transliterated_textslugs       r   r   r      s     '-&t]TJ$$V-@A!6'84!6'? 	 vvk2t,224::<vvid++ r   )NFF)NFNr5   )NTF)#collectionsr   loggingr^   rZ   baser   confr   discoverr   
exceptionsr   r	   r
   	getLogger__name__rL   	__title__
__author____copyright____license____all__r   r   r   r   r   r   r   r1   r<   rF   r   r   r   r   r   <module>rq      s      	    "  
		8	$!	
, 
"$ KFH:==6<
*$ 9= %*
Z,r   