
    G@d                     R   d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	m
Z
mZmZ ddlmZ ddlmZmZ ddlmZmZmZmZmZmZmZmZmZ ddlmZ dd	lm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)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? e5j@        ZA G d d          ZB G d d          ZC G d d          ZD G d d          ZE G d  d!e;          ZF G d" d#ee#          ZG G d$ d%e          ZH G d& d'e!          ZIdS )(z
Help plugin widgets.
    N)PYQT5)QtQUrlSignalSlotQPoint)QColor)	WEBENGINEQWebEnginePage)	QActionGroup	QComboBoxQLabel	QLineEditQMessageBoxQSizePolicyQStackedLayoutQVBoxLayoutQWidget)on_conf_change_)PluginMainWidget)SpyderWidgetMixin)get_module_source_path)CSS_PATHgenerate_contextloadingusagewarning)SphinxThread)to_text_string)programs)get_image_path)QStylePalette)
start_file)FrameWebView)EditableComboBox)FindReplace)SimpleCodeEditorc                   2    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )HelpWidgetActionstoggle_automatic_import_actiontoggle_locked_actiontoggle_plain_mode_actiontoggle_rich_mode_actiontoggle_show_source_actiontoggle_wrap_actionhelp_widget_copy_action)select_all_actionhome_actionN)__name__
__module____qualname__ToggleAutomaticImportToggleLockedTogglePlainModeToggleRichModeToggleShowSource
ToggleWrap
CopyAction	SelectAllHome     ;lib/python3.11/site-packages/spyder/plugins/help/widgets.pyr+   r+   2   s=        <)L0O.N2%J*J$IDDDrB   r+   c                       e Zd ZdZdZdS )HelpWidgetOptionsMenuSectionsdisplay_sectionother_sectionN)r5   r6   r7   DisplayOtherrA   rB   rC   rE   rE   ?   s        GEEErB   rE   c                       e Zd ZdZdS )HelpWidgetMainToolbarSectionsmain_sectionN)r5   r6   r7   MainrA   rB   rC   rK   rK   D   s        DDDrB   rK   c                   "    e Zd ZdZdZdZdZdZdS )HelpWidgetToolbarItemssource_labelsource_comboobject_labelobject_comboobject_editN)r5   r6   r7   SourceLabelSourceComboObjectLabelObjectCombo
ObjectEditrA   rB   rC   rO   rO   H   s'         K K K KJJJrB   rO   c                   H    e Zd ZdZ eee          ZddZddZd Z	d	dZ
dS )
ObjectComboBoxz)
    QComboBox handling object names
    Nc                     t          j        | |           || _        |                     t          j        t          j                   ddd| _        |	|| _        d S d S )N )TF)	r'   __init__helpsetSizePolicyr   	ExpandingFixedtipsID)selfparentid_s      rC   r^   zObjectComboBox.__init__Y   s^    !$///	;0+2CDDDb))	?DGGG ?rB   c                 n   | j                                         sdS ||                                 }t          j        dt          |          d          sdS t          |          }d}| j                             d          r%| j         j        }||	                    |d          }|s| j         
                                }|q	 |	                    |          }nZ# t          j        $ rH | j         
                                }	 |	                    |          }n# t          j        $ r Y nw xY wY nw xY w|S )zReturn True if string is validTNz^[a-zA-Z0-9_\.]*$r   Fautomatic_importforce_import)r_   source_is_consolecurrentTextresearchstrr!   get_confinternal_shell
is_defined	get_shellsocketerror)re   qstrobjtxtshell_is_definedshells        rC   is_validzObjectComboBox.is_validb   s`   y**,, 	4<##%%Dy-s4yy!<< 	5%% 9011 	OI,E #(#3#3F#3#N#N  	I''))E ','7'7'?'?$$|    I//11E+0+;+;F+C+C((!<   	  s6   C (D2DD2D,)D2+D,,D21D2c                 T    |                      |                                            d S N)validaterm   re   s    rC   validate_current_textz$ObjectComboBox.validate_current_text~   s&    d&&(()))))rB   Tc                    |                      |          }|                                 r||r?|s=|                     | j        |                    | j                            dd           dS |r=|                                  |                                                     d           dS | j                            dd           dS dS dS )z)Reimplemented to avoid formatting actionsNF)	r{   hasFocusshow_tiprc   validemitselectedlineEditcursorWordForward)re   rw   editingr   s       rC   r~   zObjectComboBox.validate   s    d##==?? 	2u0 2u 2di.///
u-----  2MMOOOMMOO55e<<<<<JOOE511111	2 	200rB   r}   )T)r5   r6   r7   __doc__r   boolr   r^   r{   r   r~   rA   rB   rC   r[   r[   R   s|          F4E          8* * *2 2 2 2 2 2rB   r[   c                   R     e Zd ZdZ ee          Z fdZddZd Z	d Z
d Z xZS )	RichTextz)
    WebView widget with find dialog
    c                 p   t           r$t                                          ||           n+t          j        | |           t	          j        | |           t          |           | _        | j                                         t          rD| j        j	        
                                                    t          t                               nm| j        j	                            d                    t                               | j        
                                                    t"          j                   t'          |           | _        | j                            | j        j	                   | j                                         t/                      }|                    d           |                    dddd           |                    | j                   |                    | j                   |                     |           | j        j                            | j                   d S )N)class_parentzbackground:{}r   )r   superr^   r   r   r&   webviewsetupr
   
web_widgetpagesetBackgroundColorr	   MAIN_BG_COLORsetStyleSheetformatsetLinkDelegationPolicyr   DelegateAllLinksr(   find_widget
set_editorhider   
setSpacingsetContentsMargins	addWidget	setLayoutlinkClickedconnectsig_link_clicked)re   rf   layout	__class__s      rC   r^   zRichText.__init__   s    	BGGV&9999T6***&t&AAAA#D)) 	1L#((**==}%%' ' ' ' L#11&&}557 7 7L77/1 1 1 't,,##DL$;<<< !!!!Q1---&&&)***v 	 (()>?????rB   Nc                 >    | j                             ||           dS )Set font
fixed_fontN)r   set_fontre   fontr   s      rC   r   zRichText.set_font   s#    dz:::::rB   c                 <    | j                             ||           dS )zSet html textN)r   setHtmlre   	html_textbase_urls      rC   set_htmlzRichText.set_html   s     Y11111rB   c                     t          |t                    r|}nt          |          }| j                            |           d S r}   )
isinstancer   r   load)re   urlqurls      rC   load_urlzRichText.load_url   sB    c4   	DD99D$rB   c                 `    |                      d| j                                                   d S )Nr]   )r   r   r   r   s    rC   clearzRichText.clear   s*    b$,**,,-----rB   r}   )r5   r6   r7   r   r   r   r   r^   r   r   r   r   __classcell__r   s   @rC   r   r      s          vd|| @  @  @  @  @D; ; ; ;2 2 2     . . . . . . .rB   r   c                   n    e Zd ZdZ e            Z ee          Zd ZddZ	d Z
d Zd Zd Zd	 Zd
 ZdS )	PlainTextz2
    Read-only editor widget with find dialog
    c                 "   t          j        | |           d | _        t          |           | _        | j                            ddd           | j        j                            | j                   | j                            d           | j        	                    t          j                   t          |           | _        | j                            | j                   | j                                         t!                      }|                    dddd           |                    | j                   |                    | j                   |                     |           | j        j                            | j                   d S )NpyF)languagehighlight_current_linelinenumbersTr   )r   r^   editorr)   setup_editorsig_focus_changedr   focus_changedsetReadOnlysetContextMenuPolicyr   CustomContextMenur(   r   r   r   r   r   r   r   customContextMenuRequested!sig_custom_context_menu_requested)re   rf   r   s      rC   r^   zPlainText.__init__   sq   v&&& 't,,  #( 	! 	
 	
 	

 	%--d.@AAA%%%(()=>>> 't,,##DK000!!!Q1---%%%)***v.662	4 	4 	4 	4 	4rB   Nc                 n    | j                             |           | j                             |           dS )r   N)r   set_color_schemer   re   r   color_schemes      rC   r   zPlainText.set_font   s4    $$\222T"""""rB   c                 :    | j                             |           dS )zSet color schemeN)r   r   re   r   s     rC   r   zPlainText.set_color_scheme   s    $$\22222rB   c                     |r| j                             d           n| j                             d            | j                             |           | j                             d           d S )Nr   sof)r   set_languageset_textset_cursor_position)re   textis_codes      rC   r   zPlainText.set_text   sk     	+K$$T****K$$T***T"""''.....rB   c                 8    | j                                          d S r}   )r   r   r   s    rC   r   zPlainText.clear  s    rB   c                 :    | j                             |           d S r}   )r   toggle_wrap_modere   values     rC   set_wrap_modezPlainText.set_wrap_mode	  s    $$U+++++rB   c                 8    | j                                          d S r}   )r   copyr   s    rC   r   zPlainText.copy  s    rB   c                 8    | j                                          d S r}   )r   	selectAllr   s    rC   
select_allzPlainText.select_all  s    rB   r}   )r5   r6   r7   r   r   r   r   r   r^   r   r   r   r   r   r   r   rA   rB   rC   r   r      s          FHHM(.v%4 4 4:# # # #
3 3 3/ / /  , , ,           rB   r   c                       e Zd ZdZ e            Z	  e            Z	  e            Z	 d< fd	Zd Z	d Z
d Z ed          d	             Z ed
          d             Z ed          d             Z ed          d             Z ed          d             Z edddg          d             Zd Zd Z ee          d             Zd Zd Zd Zd Zd Zd Zd  Zd! Ze d"             Z!d# Z"d$ Z#d% Z$d& Z%d' Z&d( Z'd=d+Z(d, Z) e            d-             Z*d. Z+ e             ee,           ee,e,          d>d/                                    Z-d?d0Z.d@d1Z/d2 Z0d3 Z1de2fd4Z3d@d5Z4d6 Z5dAd7Z6d8 Z7d9 Z8d: Z9d; Z: xZ;S )B
HelpWidgetTNc                     t                                          |||           d _        d  _        d d g _        d  _        d  _        d  _                             dt          d           _
        t          d           _        d _        t          d t           j         j
                   j
                   _        d  _        d  _        d  _        t)                      _        t-                      _        t1          t          d                     _        t4          j         j        _        t;                      _        t4          j         j        _        t1          t          d                     _         t4          j!         j         _        tE           t4          j#                   _$        tK                      _&        t4          j'         j&        _         j&        (                    d            j$        )                                         d	                      j$        *                    d
d            j        +                                         d                      j        ,                    t          d          t          d          g           t[          j.        d          sGt[          j.        dd          s2 j        /                                  j        /                                 ta                      x _1        }|2                     j                   |2                     j                    3                    |            j        j4        5                     j6                    j        j7        5                     j8                    j$        j9        5                     j:                    j        j;        5                     j<                    j        j=        5                     fd            j>        5                     j?                    j@        5                     jA                   d S )NTcss_path
appearancezNo documentation availabler   )html_text_no_docr   SourceObjectmax_history_entriesr   r]   wrapConsoleEditorropejediz>=0.11.0c                 ,                                     S r}   )source_changed)xre   s    rC   <lambda>z%HelpWidget.__init__.<locals>.<lambda>c  s    d))++ rB   )Br   r^   _starting_up_current_color_scheme_last_texts_last_editor_doc_last_console_cb_last_editor_cbrq   r   r   r   no_docs	docstringr    r   _sphinx_threadrz   internal_consolerr   r   
plain_textr   	rich_textr   rP   rO   rU   rd   r   rQ   rV   rR   rW   r[   rX   rS   r   rT   rY   r   setMaxCountsetItemTextr   addItemsr"   is_module_installedr   r   stack_layoutr   r   
html_readyr   _on_sphinx_thread_html_ready	error_msg_on_sphinx_thread_error_msgr   force_refreshr   handle_link_clickscurrentIndexChangedsig_render_startedstart_spinnersig_render_finishedstop_spinner)re   namepluginrf   r   r   s   `    rC   r^   zHelpWidget.__init__!  s   vv... !%)" $< $ $#j(LII566 +$T\DMJJJ]
 
 

 
 $"#D//!$"1X;;//5A%dOO5A"1X;;//5A*(46 6 %T??4? 	$$T***%%dmm4I&J&JKKK%%a,,,%%dmmF&;&;<<<""AiLL!H++#>???,V44 	%0DD	%""$$$""$$$ &4%5%55F((()))v 	&..-	/ 	/ 	/%--,	. 	. 	.''(:;;;'//0GHHH-55++++	- 	- 	-''(:;;; (():;;;;;rB   c                      t          d          S )NHelpr   r   s    rC   	get_titlezHelpWidget.get_titlei  s    yyrB   c           	      	                          t          j        t          d          d                     d          d           _                              t          j        t          d           fdd           _                              t          j        t          d	           fd
d           _	                              t          j
        t          d          d                     d          d           _                              t          j        t          d          dd           _                              t          j        t          d          d                     d          d           _                              t          j        t          d          d                     d          d           _                              t          j        t          d          d                     d                               d          d           _                              t          j        t          d           j                             d                     _        t1                     }|                    d           |                     j                   |                     j                                                    } j         j         j        fD ]$}                     ||t:          j                   %                      j        |t:          j                                         d           _!                              j         j!        d                                 j	         j!        d                                 j         j!        d             "                                } j#         j$         j%         j&         j'         j         j        fD ]$} (                    ||tR          j*        !           % +                                  ,                                                                    j-        j.        /                     j0                   d S )"Nz
Wrap linesTr   )r  r   toggledinitialoptionCopyc                 6    j                                         S r}   )r  r   r   re   s    rC   r   z"HelpWidget.setup.<locals>.<lambda>w  s    DO$8$8$:$: rB   F)r  r   	triggeredregister_shortcutz
Select Allc                 6    j                                         S r}   )r  r   r   s    rC   r   z"HelpWidget.setup.<locals>.<lambda>}  s    DO$>$>$@$@ rB   zAutomatic importri   zShow Sourceshow_source)r  r   r  r  z	Rich Text	rich_modez
Plain Text
plain_modezLock/Unlock	lock_openlocked)r  r   r  iconr  r  r@   home)r  r   r!  r)  )menusectionplain_text_context_menucopy_sectionr,  select_sectionwrap_section)toolbarr,  )1create_actionr+   r=   r   rq   wrap_actionr>   copy_actionr?   r3   r8   auto_import_actionr<   show_source_actionr;   rich_text_actionr:   plain_text_actionr9   create_iconlocked_actionr@   show_intro_messager4   r   setExclusive	addActionget_options_menuadd_item_to_menurE   rH   rI   create_menu_plain_text_context_menuget_main_toolbarrP   rQ   rR   rS   rT   add_item_to_toolbarrK   rM   r   switch_to_rich_textr  r   r   _show_plain_text_context_menu)re   help_actionsr+  itemr2  s   `    rC   r   zHelpWidget.setupl  s   --"-<MM&)) . 
 
  --"-6::::#	 . 
 
 "&!3!3",<@@@@#	 "4 "
 "
 #'"4"4"8%&&MM"455% #5 #
 #
 #'"4"4"3=!! 	 #5 #
 #
 !% 2 2"1;MM+.. !3 !
 !
 "&!3!3"2<MM,// "4 "
 "
 "//"/=!!!!+..MM(++ 0 
 
  --"'6-!!&))	 . 
 
 $D))!!$'''t5666t4555 $$&&*D,B,. 	 	D!!5= "     	#17 	 	
 	
 	
 )-(8(8%)' )'%)" 	 	
 	
 	

 	")$ 	 	
 	
 	

 	)" 	 	
 	
 	
 ''))&(94;L&(8$:J') 	 	D $$5: %     	  """!!! 	9AA.	0 	0 	0 	0 	0rB   c                 8    | j         du p| j        du p| j        du S )z7Determine if the help welcome page should be displayed.N)r   r   r   r   s    rC   _should_display_welcome_pagez'HelpWidget._should_display_welcome_page  s2    %- -%--$,	.rB   r   )r  c                 :    | j                             |           d S r}   )r  r   r   s     rC   on_wrap_option_updatez HelpWidget.on_wrap_option_update  s    %%e,,,,,rB   r(  c                 .   |r%|                      d          }t          d          }n$|                      d          }t          d          }|                     t          j                  }|                    |           |                    |           d S )NlockUnlockr'  Lock)r:  r   
get_actionr+   r9   setIcon
setToolTip)re   r   r)  tipactions        rC   on_lock_updatezHelpWidget.on_lock_update  s     	##F++DH++CC##K00DF))C!2!?@@t#rB   ri   c                     | j                                          |                                 r|                                  d S |                                  d S r}   )rS   r   rJ  r<  r  r   s     rC   on_automatic_import_updatez%HelpWidget.on_automatic_import_update  s[    //111,,.. 	!##%%%%%     rB   r%  c                    |rZ| | _         | j                            | j                   |                     t
          j                                      d           n&|| _         | j                            | j                   | 	                                r| 
                                 d S |                                  d S NF)r   r	  setCurrentWidgetr  rQ  r+   r<   
setCheckedr  rJ  r<  r  r   s     rC   on_rich_mode_updatezHelpWidget.on_rich_mode_update  s     		@!&YDN..t~>>>OO->??JJ    #DN..t???,,.. 	!##%%%%%     rB   r$  c                 "   |rF|                                   |                     t          j                                      d           | | _        |                                 r|                                  d S |                                  d S rZ  )	switch_to_plain_textrQ  r+   r;   r\  r   rJ  r<  r  r   s     rC   on_show_source_updatez HelpWidget.on_show_source_update  s     	%%'''OO-<==HH   #,,.. 	!##%%%%%     rB   r   r   ui_theme)r,  r  c                 j    |dk    r|                      dd          }|                     |           d S )Nra  r   r   r/  )rq   set_plain_text_color_scheme)re   r  r   s      rC   change_color_schemezHelpWidget.change_color_scheme$  s<    ZMM*lMCCE((/////rB   c                    |                                                                  D ]e\  }}| j        | j        | j        | j        | j        fD ]?}||                                vr'	 |                    |           /# t          $ r Y ;w xY w@fd S r}   )
get_actionsitemsr  r  rQ   rS   rT   actionsr>  RuntimeError)re   __rU  widgets       rC   update_actionszHelpWidget.update_actions+  s    **,,2244 	 	JB
  ?>,,+	- 	 	
 !1!111((0000'    2		 	s   %A;;
BBc                 f    | j                                                                          | j         S r}   )rS   r   r   r   s    rC   get_focus_widgetzHelpWidget.get_focus_widget<  s,    ""$$..000  rB   c                 n    | j                             |          }| j                            |           d S r}   )r  mapToGlobalrB  popup)re   points     rC   rF  z(HelpWidget._show_plain_text_context_menuB  s4    ++E22%++E22222rB   c                     | j                                          |                     |t          j        | j                             | j                                         |                                  dS )z
        Set our sphinx documentation based on thread result.

        Parameters
        ----------
        html_text: str
            Html results text.
        N)	r  waitset_rich_text_htmlr   fromLocalFiler   r  r   r  )re   r   s     rC   r  z'HelpWidget._on_sphinx_thread_html_readyG  si     	  """	4+=dm+L+LMMM %%'''rB   c                 0   | j                                          | j                            d           t	          j        d          }t          j        | t          d          t          d          ||fz             | j	        
                                 dS )z
        Display error message on Sphinx rich text failure.

        Parameters
        ----------
        error_msg: str
            Error message text.
        Tsphinxr  zThe following error occurred when calling <b>Sphinx %s</b>. <br>Incompatible Sphinx version or doc string decoding failed.<br><br>Error message:<br>%sN)r  rt  r9  r\  r"   get_module_versionr   criticalr   r  r   )re   r  
sphinx_vers      rC   r  z&HelpWidget._on_sphinx_thread_error_msgU  s     	  """))$///0::
fII -   y)	*	
 	
 	
 	 %%'''''rB   c                 <    | j                                         dk    S )z!Return True if source is Console.r   )rQ   currentIndexr   s    rC   rl   zHelpWidget.source_is_consolen  s     --//144rB   c                 :    | j                             d           dS )z)Switch to editor view of the help viewer.   NrQ   setCurrentIndexr   s    rC   switch_to_editor_sourcez"HelpWidget.switch_to_editor_sourcer      ))!,,,,,rB   c                 :    | j                             d           dS )z*Switch to console view of the help viewer.r   Nr  r   s    rC   switch_to_console_sourcez#HelpWidget.switch_to_console_sourcev  r  rB   c                    |                                  }|r3| j                                         | j                                         n2| j                                         | j                                         |                     t          j                                      |           |                     t          j	                                      |           | 
                                 dS )z$Handle a source (plain/rich) change.N)rl   rS   showrT   r   rQ  r+   r<   
setEnabledr8   restore_text)re   
is_consoles     rC   r   zHelpWidget.source_changedz  s    ++--
 	$""$$$!!#### ""$$$!!###):;;FF	 	 	)?@@KK	 	 	rB   c                 N    |                                  r	|| _        dS || _        dS )z
        Save help text.

        Parameters
        ----------
        callback: callable
            Method to call on save.
        N)rl   r   r   )re   callbacks     rC   	save_textzHelpWidget.save_text  s4     !!## 	,$,D!!!#+D   rB   c                 p   |                                  r| j        }n| j        }|A|                     d          r|                                  dS |                                  dS |d         }|dd         } ||  |j        | j        u r|                                  dS |                                  dS )z!Restore last text using callback.Nr&  r   r  )rl   r   r   rq   r_  rE  __self__r  )re   cbfuncargss       rC   r  zHelpWidget.restore_text  s    !!## 	&&BB%B:}}\** +))+++++((*****a5Dabb6DD$KK}..((*****))+++++rB   c                 \    |                      d          r| j        j        S | j        j        S )zShow find widget.r&  )rq   r  r   r  r   s    rC   r   zHelpWidget.find_widget  s.     ==&& 	.?..>--rB   c                 j    |                      t          j                                      d           dS )zSwitch to plain text mode.TN)rQ  r+   r:   r\  r   s    rC   r_  zHelpWidget.switch_to_plain_text  s,    )9::EEdKKKKKrB   c                 j    |                      t          j                                      d           dS )zSwitch to rich text mode.TN)rQ  r+   r;   r\  r   s    rC   rE  zHelpWidget.switch_to_rich_text  s,    )899DDTJJJJJrB   c           
      \   t          |          t          u r|d         }|r<d                    dt          |          z  d|ddt          |          z  dg          }nd}	 |d         r d                    d||d         dg          }nd}|d         rd                    d	|d         d
g          }nd}n# t          $ r | j        }d}Y nw xY wd                    ||||d         g          }n|}| j                            ||           |                     | j        j        ||g           dS )a  
        Set plain text docs.

        Parameters
        ----------
        text: str
            Text content.
        is_code: bool
            True if it is code text.

        Notes
        -----
        Text is coming from utils.dochelpers.getdoc
        r  r]   =


argspeczDefinition: notezType: z

----

r   N)	typedictjoinlen	TypeErrorr   r  r   r  )re   r   r   r  	rst_title
definitionr  	full_texts           rC   set_plain_textzHelpWidget.set_plain_text  so    ::<D GGST]D$$'D		M6%; < <		 		? $!#'tIG"I "IJJ "$J< 77Hd6lN#KLLDDD   !\
 J!%k!2!4 5 5II I  G4440)WEFFFFFs    AB4 4C
	C
c                     | j                             ||           |                     | j         j        ||g           dS )z
        Set rich text.

        Parameters
        ----------
        html_text: str
            Html string.
        base_url: str
            Location of stylesheets and images to load in the page.
        N)r  r   r  r   s      rC   ru  zHelpWidget.set_rich_text_html  s@     		8444/HEFFFFFrB   c                 D   | j                                          t          d          }t          d          }t          j        dk    r|                    dd          }|                     t          ||| j	                  t          j        | j	                             dS )z>Create html page to show while the documentation is generated.zRetrieving documentationloading_spritesnt\/r   N)r  r   r   r#   osr  replaceru  r   r   r   rv  )re   loading_messageloading_imgs      rC   show_loading_messagezHelpWidget.show_loading_message  s    $$&&&677$%6777d??%--dC88KO[4=IIIt}--	
 	
 	
 	
 	
rB   c           	      r   t          d          }t          d          }t          d          }t          d          }|                     dd          }|                     dd          }t          j        d	k    r,|                    d
d          }|                    d
d          }|                     d          rt          d          }t          d          }t          d          }	||k    r||z   d|z   dz   dd|z   dz   fz  }
n||z   d|z   dz   d|z   dz   dd|z   dz   fz  }
|                     t          ||
||	| j                  t          j	        | j                             dS dt          d          z  }||k    r||z   |d|fz  }
n||z   ||d|fz  }
|
|z  }
| 
                    |
d           dS )z.Show message on Help with the right shortcuts.ziHere you can get help of any object by pressing %s in front of it, either on the Editor or the Console.%szwHere you can get help of any object by pressing %s in front of it on the Editor, or %s in front of it on the Console.%sz~Help can also be shown automatically after writing a left parenthesis next to an object. You can activate this behavior in %s.zPreferences > Helpzeditor/inspect current object	shortcutsr/  z&ipython_console/inspect current objectdarwinCtrlCmdr%  UsagezNew to Spyder? Read ourtutorialz<b>z</b>z<br><br>z<i>z</i>r   z

%szMPlease consider installing Sphinx to get documentation rendered in rich text.r  Fr   N)r   rq   sysplatformr  ru  r   r   r   rv  r  )re   intro_message_eqintro_message_difintro_message_commonprefsshortcut_editorshortcut_consoletitletutorial_messager  intro_messageinstall_sphinxs               rC   r<  zHelpWidget.show_intro_message  s}     &' '  !, -  - &''--+[ ( B B==4k ) K K <8##-55feDDO/77FF==%% 	>gJJE !:;;}}H"222!14H!H/)&0*%K&M( !( "35I!I/)&0**61eF 2N4 !4
 ##E%*:H37=%B %B %B %)$6t}$E$EG G G G G
 & +7 )8 )8 8N "222!14H!H#VUM4 !4 "35I!I#%5vuNF !F ^+Mu=====rB   Fr]   c                     |                                   t          ||| j                  }|                     ||           dS )a  
        Show text in rich mode.

        Parameters
        ----------
        text: str
            Plain text to display.
        collapse: bool, optional
            Show collapsable sections as collapsed/expanded. Default is False.
        img_path: str, optional
            Path to folder with additional images needed to correctly
            display the rich text help. Default is ''.
        )collapseimg_pathr   N)rE  r   r   render_sphinx_doc)re   r   r  r  contexts        rC   show_rich_textzHelpWidget.show_rich_text?  sO     	  """"Hx,0M; ; ;tW-----rB   c                 \    |                                   |                     |d           dS )z
        Show text in plain mode.

        Parameters
        ----------
        text: str
            Plain text to display.
        Fr  N)r_  r  )re   r   s     rC   show_plain_textzHelpWidget.show_plain_textR  s5     	!!###D%00000rB   c                 
   t          d          }t          j                            |d          }t	          |d          5 }|                                }ddd           n# 1 swxY w Y   |                     |d           dS )zShow the Spyder tutorial.zspyder.plugins.help.utilsztutorial.rstrNT)r  )r   r  pathr  openreadr  )re   tutorial_pathr  fhr   s        rC   show_tutorialzHelpWidget.show_tutorial^  s     //JKK7<<~>>(C   	B7799D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	D400000s    A!!A%(A%c                     t          |                                          }|dk    r|                                  dS |                    d          rt	          |           dS | j                            |           dS )z
        Handle how url links should be opened.

        Parameters
        ----------
        url: QUrl
            QUrl object containing the link to open.
        zspy://tutorialhttpN)r!   toStringr  
startswithr%   r  r   )re   r   s     rC   r  zHelpWidget.handle_link_clicksi  s|     S\\^^,,"""     ^^F## 	)sOOOOON##C(((((rB   c                     |rR|                                  r|                     dd           dS | j         |                     | j        d           dS dS dS )z
        Force a refresh/rerender of the help viewer content.

        Parameters
        ----------
        valid: bool, optional
            Default is True.
        editing: bool, optional
            Default is True.
        NT)r  )rl   set_object_textr   set_editor_doc)re   r   r   s      rC   r  zHelpWidget.force_refreshz  s      	O%%'' O$$T$>>>>>&2##D$9#NNNNN		O 	O 32rB   c                    |                      d          r|sdS |                                  d}|(t          | j                                                  }d}|                     ||          }|r|sdS |r| j                            |           |r| j                                         | j	        
                                }|| j        |<   dS )a  
        Set object's name in Help's combobox.

        Parameters
        ----------
        text: str
            Object name.
        force_refresh: bool, optional
            Force a refresh with the rendering.
        ignore_unknown: bool, optional
            Ignore not found object names.

        See Also
        --------
        :py:meth:spyder.widgets.mixins.GetHelpMixin.show_object_info
        r(  NTF)ignore_unknown)rq   r  r!   rS   rm   	show_helpadd_textsig_item_foundr   rQ   r}  r   )re   r   r  r  add_to_combofoundindexs          rC   r  zHelpWidget.set_object_text  s    " =="" 	= 	F%%'''<!$"3"?"?"A"ABBD LtNCC 	% 	F 	-&&t,,, 	'$$&&&!..00"&rB   c                    |                      d          r|sdS |                                  || _        | j                            |d                    |                      d          r|                     |           n|                     |d           | j                                        }|d         | j	        |<   dS )a  
        Set content for help data sent from the editor.

        Parameters
        ----------
        help_data: dict
            Dictionary with editor introspection information.
        force_refresh: bool, optional
            Force a refresh with the rendering.

        Examples
        --------
        >>> help_data = {
            'obj_text': str,
            'name': str,
            'argspec': str,
            'note': str,
            'docstring': str,
            'path': str,
        }
        r(  Nobj_textr%  Fr  r   )
rq   r  r   rT   setTextr  r  rQ   r}  r   )re   	help_datar  r  s       rC   r  zHelpWidget.set_editor_doc  s    , =="" 	= 	F$$&&& )  :!6777==%% 	:""9----	5999!..00"+K"8rB   c                     || _         dS )z
        Bind to shell.

        Parameters
        ----------
        shell: object
            internal shell or ipython console shell
        N)rz   )re   rz   s     rC   	set_shellzHelpWidget.set_shell  s     


rB   c                 6    | j         | j        | _         | j         S )z@
        Return shell which is currently bound to Help.
        )rz   rr   r   s    rC   rt   zHelpWidget.get_shell  s     :,DJzrB   c                 6   t          |t                    r6|                    dd          }t          j                            |          }nd}| j                            |||                     d          || j	                   | 
                                 dS )a;  
        Transform help_data dictionary to HTML and show it.

        Parameters
        ----------
        help_data: str or dict
            Dictionary with editor introspection information.
        context: dict
            Sphinx context.
        css_path: str
            Path to CSS file for styling.
        r  r]   mathr   N)r   r  popr  r  dirnamer  renderrq   r   r  )re   r  r  r   r  dnames         rC   r  zHelpWidget.render_sphinx_doc  s     i&& 	==,,DGOOD))EEE 	""9gt}}V7L7L#(4= 	# 	B 	B 	B!!#####rB   c                 P   |                                  }|dS t          |          }|                    |          s?|                     d          r$| j                            |d          r| j        }nd}d}d}|*|                    |          }|                    |          }d}|                     d          r |                     || j                   |duS | j	        r|}||}|dS n|}||}|t          d          }|rdS nd}|                     ||	           dS )
z
        Show help for an object's name.

        Parameters
        ----------
        obj_text: str
            Object's name.
        ignore_unknown: bool, optional
            Ignore unknown object's name.
        Nri   Trj   Fr%  r   zNo source code available.r  )rt   r!   rs   rq   rr   get_doc
get_sourcer  r   r   r   r  )re   r  r  rz   docsource_textr   hlp_texts           rC   r  zHelpWidget.show_help  sz      =F!(++)) 	#011 #+66xDH 7 J J# +"--))C**844K==%% 	""3"???d?"^ 	H&# 5"H# !<==H% %$uHg666trB   c                 >    | j                             ||           dS )z
        Set rich text mode font.

        Parameters
        ----------
        fixed_font: QFont
            The current rich text font to use.
        r   N)r  r   r   s      rC   set_rich_text_fontzHelpWidget.set_rich_text_font@  s%     	<<<<<rB   c                 P    || j         }| j                            ||           dS )z
        Set plain text mode font.

        Parameters
        ----------
        font: QFont
            The current plain text font to use.
        color_scheme: str
            The selected color scheme.
        N)r   )r   r  r   r   s      rC   set_plain_text_fontzHelpWidget.set_plain_text_fontL  s3     5L  L AAAAArB   c                 H    || _         | j                            |           dS )z
        Set plain text mode color scheme.

        Parameters
        ----------
        color_scheme: str
            The selected color scheme.
        N)r   r  r   r   s     rC   rc  z&HelpWidget.set_plain_text_color_scheme\  s(     &2"((66666rB   c                 :    | j                             |           dS )z
        Set list of strings on object combo box.

        Parameters
        ----------
        history: list
            List of strings of objects.
        N)rS   r  )re   historys     rC   set_historyzHelpWidget.set_historyh  s!     	""7+++++rB   c                     g }t          | j                                                  D ]<}|                    t	          | j                            |                               =|S )z=
        Return list of strings on object combo box.
        )rangerS   countappendr!   itemText)re   r  r  s      rC   get_historyzHelpWidget.get_historys  sd     4,224455 	N 	NENN>$*;*D*DU*K*KLLMMMMrB   c                 b    || _         | j          |                                j        | _        dS dS )z
        Set the internal console shell.

        Parameters
        ----------
        console: :py:class:spyder.plugins.console.plugin.Console
            Console plugin.
        N)r  
get_widgetrz   rr   )re   consoles     rC   set_internal_consolezHelpWidget.set_internal_console}  s:     !( ,")"4"4"6"6"<D -,rB   )NNN)Fr]   )TT)FF)Fr}   )<r5   r6   r7   ENABLE_SPINNERr   r  r  r  r^   r  r   rJ  r   rL  rV  rX  r]  r`  rd  rl  rn  r   r   rF  r  r  rl   r  r  r   r  r  propertyr   r_  rE  r  ru  r  r<  r  r  r  r  r   r  r  r  r  rt   r   r  r  r  r  rc  r  r  r  r   r   s   @rC   r   r     sd       N VXXN7M &((ND< D< D< D< D< D<P  x0 x0 x0t. . . ^6"""- - #"- ^8$$$
 
 %$
 ^-...! ! /.! ^;'''! ! ('!" ^=)))
! 
! *)
! ^L*j1IJJJ0 0 KJ0  "! ! ! 
T&\\3 3 \3  ( ( (25 5 5- - -- - -  ", , ,, , ,* . . X.L L LK K K+G +G +GZG G G
 
 
7> 7> 7>r. . . .&
1 
1 
1 
TVV1 1 V1) ) )" 
TVV	T$ZZ	T$O O O  Z VO"%' %' %' %'N#9 #9 #9 #9J	 	 	   48( $ $ $ $08 8 8 8t
= 
= 
=B B B B 
7 
7 
7	, 	, 	,  = = = = = = =rB   r   )Jr   r  rn   ru   r  qtpyr   qtpy.QtCorer   r   r   r   r   
qtpy.QtGuir	   qtpy.QtWebEngineWidgetsr
   r   qtpy.QtWidgetsr   r   r   r   r   r   r   r   r   spyder.api.config.decoratorsr   spyder.api.translationsr   spyder.api.widgets.main_widgetr   spyder.api.widgets.mixinsr   spyder.config.baser   #spyder.plugins.help.utils.sphinxifyr   r   r   r   r   &spyder.plugins.help.utils.sphinxthreadr    spyder.py3compatr!   spyder.utilsr"   spyder.utils.image_path_managerr#   spyder.utils.paletter$   spyder.utils.qthelpersr%   spyder.widgets.browserr&   spyder.widgets.comboboxesr'   spyder.widgets.findreplacer(   spyder.widgets.simplecodeeditorr)   COLOR_BACKGROUND_1r   r+   rE   rK   rO   r[   r   r   r   rA   rB   rC   <module>r      s   
 
			 				  



       6 6 6 6 6 6 6 6 6 6 6 6 6 6       = = = = = = = =2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 8 7 7 7 7 7 % % % % % % ; ; ; ; ; ; 7 7 7 7 7 7 5 5 5 5 5 5J J J J J J J J J J J J J J ? ? ? ? ? ? + + + + + + ! ! ! ! ! ! : : : : : : . . . . . . - - - - - - / / / / / / 6 6 6 6 6 6 2 2 2 2 2 2 < < < < < <
 0
 
 
 
 
 
 
 
       
              >2 >2 >2 >2 >2% >2 >2 >2B8. 8. 8. 8. 8.w) 8. 8. 8.vB  B  B  B  B  B  B  B Ju= u= u= u= u=! u= u= u= u= u=rB   