
    iJ                     4   U d Z ddlZddlZddlmZ ddlmZmZ ej                  rddl
mZ  ej                  dej                        Z	 eeeef   Zej&                  ed<   	  G d	 d
ej*                        Z G d dee      Z G d de      Zdededz  fdZy)z1Processor used for ``online_dictionary`` engines.    N)sxng_locales   )OnlineProcessorOnlineParams)SearchQueryz.*?([a-z]+)-([a-z]+) (.+)$
FromToTypec                   4    e Zd ZU dZeed<   	 eed<   	 eed<   y)
DictParamszDictionary request parameters.	from_langto_langqueryN)__name__
__module____qualname____doc__r   __annotations__str     :/root/searxng/searx/search/processors/online_dictionary.pyr
   r
      s    (2%JMr   r
   c                       e Zd ZdZy)OnlineDictParamsz5Request parameters of a ``online_dictionary`` engine.N)r   r   r   r   r   r   r   r   r   !   s    ?r   r   c                   F     e Zd ZU dZdZeed<   dddededz  f fd	Z xZ	S )
OnlineDictionaryProcessorz2Processor class for ``online_dictionary`` engines.online_dictionaryengine_typesearch_queryr   engine_categoryreturnNc                     t         	|   ||      }|yt        j                  |j                        }|sy|j                         \  }}}t        |      }t        |      }|r|syi ||||d}|S )zReturns a dictionary with the :ref:`request params <engine request
        online_dictionary>` (:py:obj:`OnlineDictParams`).  ``None`` is returned
        if the search query does not match :py:obj:`search_syntax`.N)r   r   r   )super
get_paramssearch_syntaxmatchr   groups_get_lang_descr)
selfr   r   online_paramsmr   r   r   params	__class__s
            r   r"   z$OnlineDictionaryProcessor.get_params*   s    
 .3W-?o-^  2 23$%HHJ!	7E#I.	!'*$
$
"	$
 r   )
r   r   r   r   r   r   r   r   r"   __classcell__)r+   s   @r   r   r   %   s6    <*K*} s O_bfOf  r   r   langr   c                 X   | j                         } t        |       dk(  }|r5t        D ]+  }|d   dd | k(  sd|d   dd |d   j                         fc S  yt        D ]L  }|d   j                         | k(  s|d   j                         | k(  s0d|d   dd |d   j                         fc S  y)u<  Returns language's code and language's english name if argument ``lang``
    describes a language known by SearXNG, otherwise ``None``.

    Examples:

    .. code:: python

        >>> _get_lang_descr("zz")
        None
        >>> _get_lang_descr("uk")
        (True, "uk", "ukrainian")
        >>> _get_lang_descr(b"uk")
        (True, "uk", "ukrainian")
        >>> _get_lang_descr("en")
        (True, "en", "english")
        >>> _get_lang_descr("Español")
        (True, "es", "spanish")
        >>> _get_lang_descr("Spanish")
        (True, "es", "spanish")

       r   NT   r   )lowerlenr   )r-   is_abbrls      r   r&   r&   F   s    , ::<D$i1nG 	6AtBQx4ad2Ah!

55	6  2Q4::<41Q4::<4#7!A$r(AaDJJL112 r   )r   typingtresearx.sxng_localesr   onliner   r   TYPE_CHECKINGsearx.search.modelsr   compileIr#   tupleboolr   r   	TypeAliasr   	TypedDictr
   r   r   r&   r   r   r   <module>rB      s    7  	 + 1??/

8"$$? >c3/
AKK / P
N 
N@z< @ B #  *t"3  r   