
    G@d                     ~    d Z ddlZddlmZ ddlmZ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dS )zT
Widget that handles communications between the IPython Console and
the Help plugin
    N)UnpicklingError)ANSI_OR_SPECIAL_PATTERNANSI_PATTERN)RichJupyterWidget)
QEventLoopgetargspecfromtextgetsignaturefromtext)	CommErrorc                   D    e Zd ZdZd Zd Zd Zd ZddZd Z	d	 Z
d
 ZdS )
HelpWidgetz
    Widget with the necessary attributes and methods to handle communications
    between the IPython Console and the Help plugin
    c                 .    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     Jlib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/help.pyclean_invalid_var_charsz"HelpWidget.clean_invalid_var_chars!   s     vmS#...    c                    |                     di           }|                     dd          }|r| j        Y| j        dk    rMt          j        t                                        d|          }|                     |                              d          d         }|                    d          d                             d	          d
                             d          d
         }|r|                    |          }t          |          dk    rf|d                             d          d                             d	          d
                             d          d
         	                    d          S |	                    d          S t          j        t                                        d|          }|	                    d          S dS )z-Get documentation from inspect reply content.data
text/plain Npython(
Docstring:zType:r   zFile:   
)
getlanguage_namer   compiler   r   get_signaturesplitlenstrip)r   contentr   text	signaturedocumentationdoc_from_signatures          r   get_documentationzHelpWidget.get_documentation)   s   {{62&&xxb)) 	".*h66z,//33B== ..w77==cBB2F	 "&L!9!9"!=!&w"3385>>!"E  A)6)<)<Y)G)G&-..22 22 6 < <\ J J2 N %gq!2 %gq!2385==A %**6222z,//33B==zz&)))2r   c                 X    d}t          |          }|r||z   }nt          ||          }|S )z4Get signature from text using a given function name.r   r   )r   namer)   r*   argspecs        r   _get_signaturezHelpWidget._get_signatureF   s>    	$T** 	9 wII,T488Ir   c                 n   |                     di           }|                     dd          }|r| j        ;| j        dk    r/| j        | j        _        | j                                        }|dd                             d          d         }|                    d          d         }	 |                     |          }n# t          $ r Y nw xY w|                    d	          }|d
         }| 	                    ||          }|d         }| 	                    ||          }	t          |          t          |	          k    r|}
n|	}
t          j        d|
          }
|
                    d          S t          j        t                                         d|          }|                    d          S dS )z(Get signature from inspect reply contentr   r   r   Nr   r   r   .r   r   r    )r!   r"   _prompt_pos_controlcurrent_prompt_posget_current_line_to_cursorr%   r   	Exceptionr1   r&   r   r   r'   r   r#   r   )r   r(   r   r)   liner/   before_textbefore_signature
after_textafter_signaturer*   s              r   r$   zHelpWidget.get_signatureS   s   {{62&&xxb)) '	".*h66373C0}??AACRCys++B/zz#r*77==DD    D zz,// #1g#'#6#6t[#I#I  ""X
"&"5"5dJ"G"G '((3+?+??? 0II /I 47IFF	 v...z,//33B==zz&)))2s   -C 
CCFc                     	 |                      d                              ||          S # t          t          t          t
          f$ r Y dS w xY w)z Return True if object is definedTblocking)force_importN)call_kernel
is_definedTimeoutErrorr   RuntimeErrorr   )r   objtxtrA   s      r   rC   zHelpWidget.is_defined   sf    	## $  *V,*??@ o|YG 	 	 	44	s   *- AAc                     	 |                      d                              |          S # t          t          t          t
          f$ r Y dS w xY w)z#Get object documentation dictionaryTr?   N)rB   get_docrD   r   rE   r   r   rF   s     r   rH   zHelpWidget.get_doc   sW    	##T#22::6BBBo|YG 	 	 	44	   (+ AAc                     	 |                      d                              |          S # t          t          t          t
          f$ r Y dS w xY w)zGet object sourceTr?   N)rB   
get_sourcerD   r   rE   r   rI   s     r   rL   zHelpWidget.get_source   sW    	##T#22==fEEEo|YG 	 	 	44	rJ   c                    |                                  }| j                            d          }|r|j        |d         d         k    r|j        |                                k    r|d         }|                    d          dk    r|                    dd          rl|                     |          }|                     |          }| j        d	uo
| j        d
k    }| j	        
                    ||| j        d|           d	S d	S d	S d	S d	S d	S )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   s6   
 !!##!%%j11 	TWO 4X >>>FOO----)nG{{8$$,,We1L1L, ..w77	 $ 6 6w ? ? .d: ? $ 2h > **"/!/"* +     	 	>>--,,,,r   N)F)__name__
__module____qualname____doc__r   r-   r1   r$   rC   rH   rL   rb    r   r   r   r      s         
/ / /  :  + + +Z           r   r   )rf   r   pickler   qtconsole.ansi_code_processorr   r   qtconsole.rich_jupyter_widgetr   qtpy.QtCorer   spyder_kernels.utils.dochelpersr	   r
   spyder_kernels.comms.commbaser   r   rg   r   r   <module>rn      s     
			 # " " " " " O O O O O O O O ; ; ; ; ; ; " " " " " "C C C C C C C C 3 3 3 3 3 3R R R R R" R R R R Rr   