
    i                         U d Z dgZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZ d	d
lmZ g Zee   ed<   dedefdZej0                   G d ded             Zy)a<  Typification of the *code* results.  Results of this type are rendered in
the :origin:`code.html <searx/templates/simple/result_templates/code.html>`
template.  For highlighting the code passages, Pygments_ is used.

.. _Pygments:  https://pygments.org

----

.. autoclass:: Code
   :members:
   :show-inheritance:

Code    N)	highlight)LEXERS)guess_lexerget_lexer_by_nameguess_lexer_for_filename)ClassNotFound)HtmlFormatter   )
MainResult_pygments_languagescode_languagereturnc                     t         sFt        j                         D ]/  }|d   D ]%  }t         j                  |j	                                ' 1 | j	                         t         v S )z?Checks if the specified ``code_language`` is known in Pygments.   )r   r   valuesappendlower)r   l
alias_names      (/root/searxng/searx/result_types/code.pyis_valid_languager   !   s[     	?Ad ?
#**:+;+;+=>?	?  $777    c                        e Zd ZU dZdZeed<   dZedz  ed<   	 g Ze	e
eef      ed<   	  e       Zee   ed<   	 dZeed	<   	 dZedz  ed
<   	 dZeed<   	 dZeed<   	  fdZd Zd ZdefdZ xZS )r   z2Result type suitable for displaying code passages.z	code.htmltemplateN
repository	codelineshl_lines<guess>r   filenameTstrip_new_linesFstrip_whitespacec                     t         |           | j                  s| j                  r| j                  | _        | j                  dk7  r.t        | j                        st        d| j                         y y )Nr   zunknown code_language: )super__post_init__titler    r   r   
ValueError)self	__class__s    r   r%   zCode.__post_init__\   se    zzdmmDJ*3DTEWEW3X6t7I7I6JKLL 4Y*r   c                 J    t        | j                   d| j                         S )zThe hash value is build up from URL and code lines. :py:obj:`Code
        <Result.__eq__>` objects are equal, when the hash values of both objects
        are equal.
         )hashurlr   )r(   s    r   __hash__zCode.__hash__e   s#    
 txxj$..!1233r   c                 Z   | j                   dk7  rt        | j                         S dj                  | j                  D cg c]  }|d   	 c}      }| j                  r	 t        | j                  |      S 	 t        |      S c c}w # t        $ r Y w xY w# t        $ r Y t        d      S w xY w)Nr   
r   text)r   r   joinr   r    r   r	   r   )r(   r   src_codes      r   	get_lexerzCode.get_lexerl   s    *$T%7%78899DNN;qad;<==/xHH	x(( < !   	 ((	s)   B B 5
B 	BB	B*)B*r   c                    	  j                         	d}dd}g g 	 fd} j                  D ]6  \  }}||||dz   |k7  r |di | |g||}$j                  |       |}8  |di | dj                        S )zRendered HTML, additional options are accepted, for more details have
        a look at HtmlFormatter_.

        .. _HtmlFormatter: https://pygments.org/docs/formatters/#HtmlFormatter
        r   Nc                  ,   ddfddj                   D cg c]
  }|z
  dz    c}ffD ]  \  }}| j                  ||      | |<    | j                  dd      | d<   j                  t        dj	                        t        d	i |              y c c}w )
N)linenosinlinelinenostart)cssclasszcode-highlightr   r   wrapcodeTr0    )r   getr   r   r2   r
   )	kwargshlkdefault
code_blockcode_block_starthtml_code_blockslexerr(   s	       r   _renderzCode.HTML.<locals>._render   s    % 01.$--PBb#33a7PQ	 3
7 #JJq'2q	3 "(J!=F:##IIj)!+F+ Qs   Br   r0   r<   )r4   r   r   r2   )
r(   optionsline_nocode_block_endrF   	code_linerB   rC   rD   rE   s
   `     @@@@r   HTMLz	Code.HTML|   s       !%) "
&(	 	* #'.. 	%GY%#* )nq.@G.K"'" ([
#* !( i($N#	%( 	'yy)**r   )__name__
__module____qualname____doc__r   str__annotations__r   r   listtupleintsetr   r   r    r!   boolr"   r%   r.   r4   rK   __classcell__)r)   s   @r   r   r   +   s    <Hc!Jd
!A')ItE#s(O$)) Hc#h."M3"$  HcDj$ !OT E #d"3M4) 8+ 8+r   T)kw_only)rO   __all__typingtpygmentsr   pygments.lexers._mappingr   pygments.lexersr   r   r   pygments.utilr	   pygments.formattersr
   _baser   r   rR   rP   rQ   rV   r   finalr   r<   r   r   <module>rc      ss    (   + T T ' -  "$ T#Y #8S 8T 8 H+:t H+ 	H+r   