
    Je                     f    d 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
 ddlmZ  G d d	e      Zy)
zT
Widget that handles communications between the IPython Console and
the Help plugin
    N)UnpicklingError)ANSI_PATTERN)RichJupyterWidgetgetargspecfromtextgetsignaturefromtext)	CommErrorc                   B    e Zd ZdZd Zd Zd Zd ZddZd Z	d Z
d	 Zy
)
HelpWidgetz
    Widget with the necessary attributes and methods to handle communications
    between the IPython Console and the Help plugin
    c                 0    t        j                  dd|      S )z
        Replace invalid variable chars in a string by underscores

        Taken from https://stackoverflow.com/a/3305731/438386
        z
\W|^(?=\d)_)resub)selfvars     L/usr/lib/python3/dist-packages/spyder/plugins/ipythonconsole/widgets/help.pyclean_invalid_var_charsz"HelpWidget.clean_invalid_var_chars    s     vvmS#..    c                 b   |j                  di       }|j                  dd      }|rt        j                  t              j	                  d|      }| j
                  | j
                  dk(  r|j                  d      d   j                  d      d	   j                  d
      d	   j                         }|rZ|j                  d      }t        |      dkD  r;|d	   j                  dd      |k(  r#dj                  |dd       j                  d      S |j                  d      S |j                  d      S y)z-Get documentation from inspect reply content.data
text/plain Npython
Docstring:zType:r   zFile:z

   

)getr   compiler   r   language_namesplitstriplenreplacejoin)r   content	signaturer   textdocumentationsignature_and_docs          r   get_documentationzHelpWidget.get_documentation(   s"   {{62&xxb)::l+//D9D "".&&(2 JJ|,R0E'N1&E'N1& %'	  (5(;(;F(C% -.2-a088rBiO%{{+<QR+@AGGOO$**622zz&))r   c                 P    d}t        |      }|r||z   }|S |t        ||      z   }|S )z4Get signature from text using a given function name.r   r   )r   namer)   r(   argspecs        r   _get_signaturezHelpWidget._get_signatureM   sA    	$T* wI  3D$??Ir   c                 V   |j                  di       }|j                  dd      }|rst        j                  t              j	                  d|      }| j
                  ,| j
                  dk(  rd}| j                  | j                  _        | j                  j                         }|dd j                  d      d   }|j                  d      d   }	 | j                  |      }d	|v r|j                  d	      \  }}nd|}}|r2|j                         j                  d
d      }| j                  ||      }|dz   |dz   g}	|r||	v r6| j                  ||j                               }
|
r|
}|j                  d
d      }|j                  d      S |j                  d      S y# t        $ r Y w xY w)z(Get signature from inspect reply contentr   r   r   Nr   r   (.r   r   z(*args, **kwargs)z(self, /, *args, **kwargs)r   )r   r   r    r   r   r!   _prompt_pos_controlcurrent_prompt_posget_current_line_to_cursorr"   r   	Exceptionr#   r%   r0   )r   r'   r   r)   r(   liner.   before_text
after_textdefault_sigsafter_signatures              r   get_signaturezHelpWidget.get_signature\   s   {{62&xxb)::l+//D9D "".&&(2	373C3C0 }}??ACRys+B/zz#r*77=D
  4'.2jj.F+K.0$K #."3"3"5"="=dB"GK $ 3 3D+ FI ..77  !I$=&*&9&9j..0'O '$3	 ) 1 1$ ;I v..zz&))I ! s   F 	F('F(c                     	 | j                  d      j                  ||      S # t        t        t        t
        f$ r Y yw xY w)z Return True if object is definedTblocking)force_importN)call_kernel
is_definedTimeoutErrorr   RuntimeErrorr	   )r   objtxtrB   s      r   rD   zHelpWidget.is_defined   sN    	## $ *V,*?@ o|YG 		s   "% A Ac                     	 | j                  d      j                  |      S # t        t        t        t
        f$ r Y yw xY w)z#Get object documentation dictionaryTr@   N)rC   get_docrE   r   rF   r	   r   rG   s     r   rI   zHelpWidget.get_doc   sA    	##T#2::6BBo|YG 		    # ??c                     	 | j                  d      j                  |      S # t        t        t        t
        f$ r Y yw xY w)zGet object sourceTr@   N)rC   
get_sourcerE   r   rF   r	   rJ   s     r   rM   zHelpWidget.get_source   sA    	##T#2==fEEo|YG 		rK   c                    | j                         }| j                  j                  d      }|r|j                  |d   d   k(  r|j                  |j                         k(  r|d   }|j                  d      dk(  r|j                  dd      rm| j                  |      }| j                  ||      }| j                  d	uxr | j                  d
k(  }| j                  j                  ||| j                  d|       y	y	y	y	y	y	)z
        Reimplement call tips to only show signatures, using the same
        style from our Editor and External Console too
        call_tipparent_headermsg_idr'   statusokfoundFNr      )r*   language	max_linestext_new_line)_get_cursor_request_infor   idpospositionr>   r,   r!   r5   show_calltip)r   repcursorinfor'   r(   r*   new_lines           r   _handle_inspect_replyz HelpWidget._handle_inspect_reply   s   
 !!#!!%%j1 3/99FOO--)nG{{8$,We1L ..w7	 $ 6 6w	 J ..d: ? $ 2 2h >  **"/!//"* +  2M, . : r   N)F)__name__
__module____qualname____doc__r   r,   r0   r>   rD   rI   rM   rc    r   r   r   r      s1    
/#J<|r   r   )rg   r   pickler   qtconsole.ansi_code_processorr   qtconsole.rich_jupyter_widgetr   spyder_kernels.utils.dochelpersr   r   spyder_kernels.comms.commbaser	   r   rh   r   r   <module>rn      s2    
 # 6 ;C 3r" rr   