
    Je                     *   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!      ZIy)(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                   0    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zy
)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     =/usr/lib/python3/dist-packages/spyder/plugins/help/widgets.pyr+   r+   2   s1    <)L0O.N2%J*J$IDrB   r+   c                       e Zd ZdZdZy)HelpWidgetOptionsMenuSectionsdisplay_sectionother_sectionN)r5   r6   r7   DisplayOtherrA   rB   rC   rE   rE   ?   s    GErB   rE   c                       e Zd ZdZy)HelpWidgetMainToolbarSectionsmain_sectionN)r5   r6   r7   MainrA   rB   rC   rK   rK   D   s    DrB   rK   c                        e Zd ZdZdZdZdZdZy)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JrB   rO   c                   @    e Zd ZdZ eee      ZddZddZd Z	ddZ
y)	ObjectComboBoxz)
    QComboBox handling object names
    Nc                     t        j                  | |       || _        | j                  t        j
                  t        j                         ddd| _        ||| _        y y )N )TF)	r'   __init__helpsetSizePolicyr   	ExpandingFixedtipsID)selfparentid_s      rC   r^   zObjectComboBox.__init__Y   sR    !!$/	;00+2C2CDb)	?DG rB   c                 n   | j                   j                         sy|| j                         }t        j                  dt        |      d      syt        |      }d}| j                   j                  d      r+| j                   j                  }||j                  |d      }|s0| j                   j                         }|	 |j                  |      }|S |S # t        j                  $ rK | j                   j                         }	 |j                  |      }Y |S # t        j                  $ r Y Y |S w xY ww xY w)zReturn True if string is validTz^[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   s0   yy**,<##%Dyy-s4y!<% 9901II,,E #(#3#3F#3#N II'')E ','7'7'?$   ||  II//1E+0+;+;F+C(   "<< 	s*   C -D4DD0+D4/D00D4c                 B    | j                  | j                                y N)validaterm   re   s    rC   validate_current_textz$ObjectComboBox.validate_current_text~   s    d&&()rB   c                 h   | j                  |      }| j                         r||r=|s;| j                  | j                  |          | j                  j                  dd       y|r0| j                          | j                         j                  d       y| j                  j                  dd       yyy)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#==?u0udii./

u- MMOMMO55e<JJOOE51  1?rB   r}   )T)r5   r6   r7   __doc__r   boolr   r^   r{   r   r~   rA   rB   rC   r[   r[   R   s)     4E 8*2rB   r[   c                   L     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                 L   t         rt        | 	  ||       n-t        j                  | |       t	        j                  | |       t        |       | _        | j                  j                          t        rA| j                  j                  j                         j                  t        t                     no| j                  j                  j                  dj                  t                     | j                  j                         j!                  t"        j$                         t'        |       | _        | j(                  j+                  | j                  j                         | j(                  j-                          t/               }|j1                  d       |j3                  dddd       |j5                  | j                         |j5                  | j(                         | j7                  |       | j                  j8                  j;                  | j<                         y )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   GV&9T6*&&t&A#D)LL##((*==}%' LL##11&&}57LL77//1 't,##DLL$;$;< !!!!Q1-&))*v 	  (()>)>?rB   c                 >    | j                   j                  ||       y)Set font
fixed_fontN)r   set_fontre   fontr   s      rC   r   zRichText.set_font   s    dz:rB   c                 <    | j                   j                  ||       y)zSet html textN)r   setHtmlre   	html_textbase_urls      rC   set_htmlzRichText.set_html   s    Y1rB   c                 v    t        |t              r|}nt        |      }| j                  j                  |       y r}   )
isinstancer   r   load)re   urlqurls      rC   load_urlzRichText.load_url   s,    c4 D9D$rB   c                 X    | j                  d| j                  j                                y )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/     d| @D;2 .rB   r   c                   `    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y)	PlainTextz2
    Read-only editor widget with find dialog
    c                 F   t        j                  | |       d | _        t        |       | _        | j                  j	                  ddd       | j                  j
                  j                  | j                         | j                  j                  d       | j                  j                  t        j                         t        |       | _        | j                  j                  | j                         | j                  j                          t!               }|j#                  dddd       |j%                  | j                         |j%                  | j                         | j'                  |       | j                  j(                  j                  | j*                         y )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__   s8   v& 't,  #( 	! 	

 	%%--d.@.@A%(()=)=> 't,##DKK0!!!Q1-%))*v..6622	4rB   Nc                 p    | j                   j                  |       | j                   j                  |       y)r   N)r   set_color_schemer   re   r   color_schemes      rC   r   zPlainText.set_font   s&    $$\2T"rB   c                 :    | j                   j                  |       y)zSet color schemeN)r   r   re   r   s     rC   r   zPlainText.set_color_scheme   s    $$\2rB   c                     |r| j                   j                  d       n| j                   j                  d        | j                   j                  |       | j                   j                  d       y )Nr   sof)r   set_languageset_textset_cursor_position)re   textis_codes      rC   r   zPlainText.set_text   sM    KK$$T*KK$$T*T"''.rB   c                 8    | j                   j                          y r}   )r   r   r   s    rC   r   zPlainText.clear  s    rB   c                 :    | j                   j                  |       y r}   )r   toggle_wrap_modere   values     rC   set_wrap_modezPlainText.set_wrap_mode	  s    $$U+rB   c                 8    | j                   j                          y r}   )r   copyr   s    rC   r   zPlainText.copy  s    rB   c                 8    | j                   j                          y 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      sB     HM(.v%4:#
3/, rB   r   c                   z    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=d.Z.d>d/Z/d0 Z0d1 Z1de2fd2Z3d>d3Z4d4 Z5d?d5Z6d6 Z7d7 Z8d8 Z9d9 Z: xZ;S )@
HelpWidgetTNc                     t            |||       d _        d  _        d d g _        d  _        d  _        d  _         j                  dt        d       _
        t        d       _        d _        t        d t         j                   j                         j                         _        d  _        d  _        d  _        t)                _        t-                _        t1        t        d             _        t4        j6                   j2                  _        t;                _        t4        j>                   j<                  _        t1        t        d             _         t4        jB                   j@                  _        tE         t4        jF                         _$        tK                _&        t4        jN                   jL                  _         jL                  jQ                  d        jH                  jS                   j                  d	              jH                  jU                  d
d        j*                  jW                   j                  d              j<                  jY                  t        d      t        d      g       t[        j\                  d      sJt[        j\                  dd      s4 j<                  j_                           j2                  j_                          ta               x _1        }|je                   j.                         |je                   j*                          jg                  |        j                   jh                  jk                   jl                          j                   jn                  jk                   jp                          jH                  jr                  jk                   jt                          j.                  jv                  jk                   jx                          j<                  jz                  jk                   fd        j|                  jk                   j~                          j                  jk                   j                         y )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                 $    j                         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__!  sR   vv. !%)" $< $ $#j(LI56 +$T\\DMMJ]]

 
 $"#D/!$"1X;/5AA%dO5AA"1X;/5AA*(446 %T?4?? 	$$T*%%dmm4I&JK%%a,%%dmmF&;<""AiL!H+#>?,,V400D""$""$ &4%55F()v 	&&..--	/%%--,,	.''(:(:;''//0G0GH--55+	-''(:(:;  (():):;rB   c                     t        d      S )NHelpr   r   s    rC   	get_titlezHelpWidget.get_titlei  s    yrB   c           	      	     j                  t        j                  t        d      d j	                  d      d       _         j                  t        j                  t        d       fdd       _         j                  t        j                  t        d	       fd
d       _	         j                  t        j                  t        d      d j	                  d      d       _         j                  t        j                  t        d      dd       _         j                  t        j                  t        d      d j	                  d      d       _         j                  t        j                   t        d      d j	                  d      d       _         j                  t        j$                  t        d      d j'                  d       j	                  d      d       _         j                  t        j*                  t        d       j,                   j'                  d             _        t1               }|j3                  d       |j5                   j"                         |j5                   j                          j7                         } j                   j"                   j                  fD ]$  } j9                  ||t:        j<                         &  j9                   j                  |t:        j>                          jA                  d       _!         j9                   j                   jB                  d        j9                   j                   jB                  d        j9                   j
                   jB                  d         jE                         } jF                   jH                   jJ                   jL                   jN                   j.                   j(                  fD ]$  } jQ                  ||tR        jT                  !       &  jW                           jY                           j-                           jZ                  j\                  j_                   j`                         y )"Nz
Wrap linesTr   )r  r   toggledinitialoptionCopyc                 8    j                   j                         S r}   )r  r   r   re   s    rC   r   z"HelpWidget.setup.<locals>.<lambda>w  s    DOO$8$8$: rB   F)r  r   	triggeredregister_shortcutz
Select Allc                 8    j                   j                         S r}   )r  r   r   s    rC   r   z"HelpWidget.setup.<locals>.<lambda>}  s    DOO$>$>$@ 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  s7   --"--<MM&) . 
  --"--6:#	 . 
 "&!3!3",,<@#	 "4 "
 #'"4"4"88%&MM"45% #5 #
 #'"4"4"33=! 	 #5 #
 !% 2 2"11;MM+. !3 !
 "&!3!3"22<MM,/ "4 "
 "//"//=!!!+.MM(+ 0 
  --"''6--!!&)	 . 
 $D)!!$'t556t445 $$&**D,B,B,,. 	D!!5== " 	 	##177 	 	
 )-(8(8%)'%))" 	 	

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

 	))" 	 	
 '')&&(9(94;L;L&&(8(8$:J:J'') 	D $$5:: % 	 	  "! 	99AA..	0rB   c                 ^    | j                   du xs | j                  du xs | 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  s;    %%- -%%--$$,	.rB   r   )r  c                 :    | j                   j                  |       y r}   )r  r   r   s     rC   on_wrap_option_updatez HelpWidget.on_wrap_option_update  s    %%e,rB   r(  c                     |r| j                  d      }t        d      }n| j                  d      }t        d      }| j                  t        j                        }|j                  |       |j                  |       y )NlockUnlockr'  Lock)r:  r   
get_actionr+   r9   setIcon
setToolTip)re   r   r)  tipactions        rC   on_lock_updatezHelpWidget.on_lock_update  sf    ##F+DH+C##K0DF)C!2!?!?@t#rB   ri   c                     | j                   j                          | j                         r| j                          y | j	                          y r}   )rS   r   rJ  r<  r  r   s     rC   on_automatic_import_updatez%HelpWidget.on_automatic_import_update  s8    //1,,.##% rB   r%  c                 z   |r\| | _         | j                  j                  | j                         | j	                  t
        j                        j                  d       n,|| _         | j                  j                  | j                         | j                         r| j                          y | j                          y 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                     |r>| j                          | j                  t        j                        j	                  d       | | _        | j                         r| j                          y | j                          y rZ  )	switch_to_plain_textrQ  r+   r;   r\  r   rJ  r<  r  r   s     rC   on_show_source_updatez HelpWidget.on_show_source_update  sa    %%'OO-<<=HH #,,.##% rB   r   r   ui_theme)r,  r  c                 V    |dk(  r| j                  dd      }| j                  |       y )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CE((/rB   c                 4   | j                         j                         D ]h  \  }}| j                  | j                  | j                  | j
                  | j                  fD ]'  }||j                         vs	 |j                  |       ) j y # t        $ r Y 8w xY wr}   )
get_actionsitemsr  r  rQ   rS   rT   actionsr>  RuntimeError)re   __rU  widgets       rC   update_actionszHelpWidget.update_actions+  s    **,224 	JB
  ??>>,,,,++	- 	
 !11((0		 ( s   5B	BBc                 j    | j                   j                         j                          | j                   S r}   )rS   r   r   r   s    rC   get_focus_widgetzHelpWidget.get_focus_widget<  s)    ""$..0   rB   c                 p    | j                   j                  |      }| j                  j                  |       y r}   )r  mapToGlobalrB  popup)re   points     rC   rF  z(HelpWidget._show_plain_text_context_menuB  s*    ++E2%%++E2rB   c                     | j                   j                          | j                  |t        j                  | j
                               | j                  j                          | j                          y)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  sS     	  "	4+=+=dmm+LM  %%'rB   c                 (   | j                   j                          | j                  j                  d       t	        j
                  d      }t        j                  | t        d      t        d      ||fz         | j                  j                          y)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0:
fI -  y)	*	
 	  %%'rB   c                 <    | j                   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                   j                  d       y)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                   j                  d       y)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                    | j                         }|r5| j                  j                          | j                  j	                          n4| j                  j	                          | j                  j                          | j                  t        j                        j                  |       | j                  t        j                        j                  |       | j                          y)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                 B    | j                         r|| _        y|| _        y)z
        Save help text.

        Parameters
        ----------
        callback: callable
            Method to call on save.
        N)rl   r   r   )re   callbacks     rC   	save_textzHelpWidget.save_text  s      !!#$,D!#+D rB   c                 P   | j                         r| j                  }n| j                  }|3| j                  d      r| j	                          y| j                          y|d   }|dd } ||  |j                  | j                  u r| j                          y| j	                          y)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    !!#&&B%%B:}}\*))+((*a5Dab6D$K}}.((*))+rB   c                 |    | j                  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  s0     ==&??...>>---rB   c                 `    | j                  t        j                        j                  d       y)zSwitch to plain text mode.TN)rQ  r+   r:   r\  r   s    rC   r_  zHelpWidget.switch_to_plain_text  s     )99:EEdKrB   c                 `    | j                  t        j                        j                  d       y)zSwitch to rich text mode.TN)rQ  r+   r;   r\  r   s    rC   rE  zHelpWidget.switch_to_rich_text  s     )889DDTJrB   c           
         t        |      t        u r|d   }|r0dj                  dt        |      z  d|ddt        |      z  dg      }nd}	 |d   rdj                  d||d   dg      }nd}|d   rdj                  d	|d   d
g      }nd}dj                  ||||d   g      }n|}| j                  j                  ||       | j                  | j                  j                  ||g       y# t        $ r | j
                  }d}Y yw xY w)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  s$    :<DGGST]D$$'D	M6%; <	 		?!#'tIG"IJ "$J<77Hd6lN#KLDD
 J!%k!2!4 5I I  G400)WEF  !\\
s   ?C+ +DDc                     | j                   j                  ||       | j                  | j                   j                  ||g       y)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  s5     		84//HEFrB   c                 8   | j                   j                          t        d      }t        d      }t        j
                  dk(  r|j                  dd      }| j                  t        ||| j                        t        j                  | j                               y)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  sw    $$&67$%6777d?%--dC8KO[4==It}}-	
rB   c           	         t        d      }t        d      }t        d      }t        d      }| j                  dd      }| j                  dd      }t        j                  d	k(  r$|j	                  d
d      }|j	                  d
d      }| j                  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  }
| j                  t        ||
||	| j                        t        j                  | j                               ydt        d      z  }||k(  r||z   |d|fz  }
n||z   ||d|fz  }
|
|z  }
| j                  |
d       y)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==4k ) K <<8#-55feDO/77F==%gJE !:;}H"22!14H!H/)&0*%K&M( !( "35I!I/)&0**61eF 2N4 !4
 ##E%*:H37==%B %)$6$6t}}$EG
 & +7 )8 8N "22!14H!H#VUM4 !4 "35I!I#%5vuNF !F ^+Mu=rB   c                 x    | j                          t        ||| j                        }| j                  ||       y)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?  s5     	  ""Hx,0MM;tW-rB   c                 J    | j                          | j                  |d       y)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  s#     	!!#D%0rB   c                     t        d      }t        j                  j                  |d      }t	        |d      5 }|j                         }ddd       | j                  d       y# 1 sw Y   xY w)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^  sd     //JK77<<~>(C  	B779D	 	D40	 	s   A%%A.c                     t        |j                               }|dk(  r| j                          y|j                  d      rt	        |       y| j
                  j                  |       y)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  sN     S\\^,"" ^^F#sONN##C(rB   c                     |rO| j                         r| j                  dd       y| j                  | j                  | j                  d       yyy)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  sU     %%'$$T$>&&2##D$9$9#N 3 rB   c                    | j                  d      r|sy| j                          d}|%t        | j                  j	                               }d}| j                  ||      }|r|sy|r| j                  j                  |       |r| j                  j                          | j                  j                         }|| j                  |<   y)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    " =="=%%'<!$"3"3"?"?"ABD LtNC%&&t,$$&!!..0"&rB   c                 Z   | j                  d      r|sy| j                          || _        | j                  j	                  |d          | j                  d      r| j                  |       n| j                  |d       | j                  j                         }|d   | j                  |<   y)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    , =="=$$& )  :!67==%""9-	59!!..0"+K"8rB   c                     || _         y)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                 T    | 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zzrB   c                    t        |t              r2|j                  dd      }t        j                  j                  |      }nd}| j                  j                  ||| j                  d      || j                         | j                          y)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  su     i&==,DGGOOD)EE 	""9gt}}V7L#(4== 	# 	B!!#rB   c                    | j                         }|yt        |      }|j                  |      sA| j                  d      r*| j                  j                  |d      r| j                  }nd}d}d}|"|j                  |      }|j                  |      }d}| j                  d      r!| j                  | j                         |duS | j                  r	}|}|y}|}|t        d      }|ryd}| j                  ||	       y)
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  s.     =!(+)01++66xDH 7 J++"--)C**84K==%""3"?d?"^^H&# "H# !<=H%$Hg6rB   c                 >    | j                   j                  ||       y)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                 Z    || j                   }| j                  j                  ||       y)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  s,     55L  L ArB   c                 H    || _         | j                  j                  |       y)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"((6rB   c                 :    | j                   j                  |       y)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                  j                               D ]5  }|j                  t	        | j                  j                  |                   7 |S )z=
        Return list of strings on object combo box.
        )rangerS   countappendr!   itemText)re   r  r  s      rC   get_historyzHelpWidget.get_historys  sW     4,,2245 	NENN>$*;*;*D*DU*KLM	N rB   c                 j    || _         | j                    |j                         j                  | _        yy)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}  s4     !(  ,")"4"4"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     s   N XN7M (ND<Px0t. 6"- #- 8$
 %
 -.! /! ;'! (!" =)
! *
! L*j1IJ0 K0"! 
&\3 3(25--",,* . .LK+GZG
7>r.&
1 
V1 1)" 
V	$Z	$O   O"%'N#9J	 48( $08t
=B 
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  =2 2 2
 8 % ; 7 5J J ? + ! : . - / 6 2 <
 00
 
 
  >2% >2B8.w) 8.vB  B Ju=! u=rB   