
    G@d!r                         d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
mZmZ ddlmZ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mZ dd
l m!Z! ddl"m#Z#m$Z$m%Z% ddl&m'Z' ddl(m)Z)  G d de!          Z*dS )z
This module contains the marker panel.

Adapted from pyqode/core/panels/folding.py of the
`PyQode project <https://github.com/pyQode/pyQode>`_.
Original file:
<https://github.com/pyQode/pyqode.core/blob/master/pyqode/core/panels/folding.py>
    )ceilN)IntervalTree)SignalQSizeQPointFQRectFQRectQt)QApplicationQStyleOptionViewItemQStyle)	
QTextBlockQColorQFontMetricsFQPainterQLinearGradientQPenQPaletteQResizeEventQCursor)FoldingRegion)TextDecorationDRAW_ORDERS)Panel)
TextHelperDelayJobRunnerdrift_color)ima)QStylePalettec                       e Zd ZdZ eee          Z e            Z e            Z	e
d             Zej        d             Ze
d             Zej        d             Ze
d             Zej        d             Zd Zd	 Zd
 Z	 d'dZ fdZd Zd Zd Zd Zd Zd Zd Zd Z fdZd Z fdZd Zd Z d Z!d Z"d Z#d Z$d Z%d  Z&d! Z'd" Z(d# Z)d$ Z*d% Z+d& Z, xZ-S )(FoldingPanela  
    Displays the document outline and lets the user collapse/expand blocks.

    The data represented by the panel come from the Language Server Protocol
    invoked via the CodeEditor. This panel stores information about both
    folding regions and their folding state.
    c                     | j         S )z
        Defines whether the panel will use native indicator icons or
        use custom ones.

        If you want to use custom indicator icons, you must first
        set this flag to False.
        )native_iconsselfs    Hlib/python3.11/site-packages/spyder/plugins/editor/panels/codefolding.pyr#   zFoldingPanel.native_icons8   s           c                     || _         | j        rD| j        j        D ]9}	 ||j                            | j                  _        (# t          $ r Y 4w xY wd S d S N)_native_iconseditorclonesmodesget	__class__r#   KeyErrorr%   valueclones      r&   r#   zFoldingPanel.native_iconsC   s|    "; 	+  CHEKOODN33@@   D		 	 s   $A
AAc                     | j         S )a6  
        Gets/sets the icons for the fold indicators.

        The list of indicators is interpreted as follow::

            (COLLAPSED_OFF, COLLAPSED_ON, EXPANDED_OFF, EXPANDED_ON)

        To use this property you must first set `native_icons` to False.

        :returns: tuple(str, str, str, str)
        )_indicators_iconsr$   s    r&   indicators_iconszFoldingPanel.indicators_iconsO   s     %%r'   c                     t          |          dk    rt          d          || _        | j        rD| j        j        D ]9}	 ||j                            | j                  _        (# t          $ r Y 4w xY wd S d S )N   z5The list of custom indicators must contains 4 strings)
len
ValueErrorr5   r+   r,   r-   r.   r/   r6   r0   r1   s      r&   r6   zFoldingPanel.indicators_icons^   s    u::?? ' ( ( (!&; 	+  ;@ KOO( ((8(8   D	 	 s    $A%%
A21A2c                     | j         S )z
        True to highlight the caret scope automatically.

        (Similar to the ``Highlight blocks in Qt Creator``.

        Default is False.
        )_highlight_caretr$   s    r&   highlight_caret_scopez"FoldingPanel.highlight_caret_scopen   s     $$r'   c                 z   || j         k    r|| _         | j        r|r,d| _        | j        j                            | j                   n+d| _        | j        j                            | j                   | j        j        D ];}	 ||j        	                    | j
                  _        (# t          $ r Y 4w xY wd S d S d S )N)r<   r+   
_block_nbrcursorPositionChangedconnect_highlight_caret_scope
disconnectr,   r-   r.   r/   r=   r0   r1   s      r&   r=   z"FoldingPanel.highlight_caret_scopey   s    D)))$)D!{  5&(DOK5==35 5 5 5 ')DOK5@@35 5 5![/  EDI  N, ,,A,A#     *)  s   $B''
B43B4c                 "   t          j        |            d| _        d| _        d| _        d| _        d| _        d| _        g | _        i | _	        | 
                    d           d| _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d| _        d| _        t/          d          | _        t3                      | _        t7          d d           | _        i | _        i | _        i | _        i | _         d S )NF)zfolding.arrow_right_offzfolding.arrow_right_onzfolding.arrow_down_offzfolding.arrow_down_onr?      T   )delay)!r   __init__r*   r5   r@   r<   r=   _indic_size_scope_decos_block_decossetMouseTracking
scrollable_mouse_over_line_current_scope_prev_cursorcontext_menuaction_collapseaction_expandaction_collapse_allaction_expand_all_original_background_display_folding_key_pressedr   _highlight_runnerr   current_treer   rootfolding_regionsfolding_statusfolding_levelsfolding_nestingr$   s    r&   rI   zFoldingPanel.__init__   s    t""
  %%*" d### $"  #!#' !%$(! %!!/c!:!:!:(NN!$--	!  !r'   c                     |dS |\  | _         | _        | _        | _        | _        | _        |                                  dS )z$Update folding panel folding ranges.N)r[   r\   r]   r`   r_   r^   update)r%   folding_infos     r&   update_foldingzFoldingPanel.update_folding   sH    F 6B	3	DI		t3		d1r'   c                 H   t          | j                                                  }t          t	          |                                          t	          |                                                    }|                                dk    r|                    d           |S )z=Returns the widget size hint (based on the editor font size) rF   )r   r+   fontr   r   heightwidthsetWidth)r%   fm	size_hints      r&   sizeHintzFoldingPanel.sizeHint   s{    4;++--..$ryy{{++T"))++->->??	??r!!r"""r'   Fc                 R   || j         v r| j        |         }| j         |         }| j        |k    }|s|                     ||||           |rW|r|                     ||||           | j        D ]}	| j        |	         }
|
j        |k    r d S |                     ||           d S |st          | j                                                  D ][}	| j        |	         }
|
j        |k    r=| j        	                    |	           | j
        j                            |
           ~
 d S Xd S d S d S r)   )r]   r^   rO   _draw_fold_indicatorrL   block_add_fold_decorationlistkeyspopr+   decorationsremove)r%   line_numbertop_positionro   paintermouse_hover	collapsedline_end
mouse_over	deco_linedecos              r&   _draw_collapsed_indicatorz&FoldingPanel._draw_collapsed_indicator   s   $...+K8I+K8H.+=J B)) *iB B B  F--$j)WF F F
 "&!2 ? ?I,Y7DzU**  +
 --eX>>>>>  !%d&7&<&<&>&>!?!? 
 
I,Y7D zU**)--i888/66t<<<  +9 /., 
 
r'   c                 h   t          t          |                               |           t          |           }| j        s^| j        sWt          | j                                                  r/| j	        j
        D ]"}|\  }}}|                     ||||d           #d S | j        `| j	                                                            | j                  }	 |                     ||           n# t           t"          f$ r Y nw xY w| j	        j
        D ] \  }}}|                     ||||d           !d S )NT)ry   F)superr!   
paintEventr   rX   rY   anyr^   valuesr+   visible_blocksr   rO   documentfindBlockByNumber_draw_fold_region_backgroundr:   r0   )r%   eventrx   inforw   rv   ro   r/   s          r&   r   zFoldingPanel.paintEvent   s    	lD!!,,U3334..$ 	T-> 	4&--//00 3 K6 3 3D7;4L+u22#\5T 3 3 3 3 3 F ,K((**<<%' 'E11%AAAA)     150J 	N 	N,L+u**\5'u + N N N N	N 	Ns   C. .DDc                    t          | j                  }|                                }| j        |         }|dk    r|                    |          }nd}|                    |          }||z
  }|dk    r&|                                                                 }|                                                                 }	|                     t          d||	|          |           dS )z
        Draw the fold region when the mouse is over and non collapsed
        indicator.

        :param top: Top position
        :param block: Current block.
        :param painter: QPainter
        r   N)
r   r+   blockNumberr]   line_pos_from_numberrl   rg   rh   
_draw_rectr   )
r%   ro   rx   thstartendtopbottomhws
             r&   r   z)FoldingPanel._draw_fold_region_background  s     $$!!##"5)199))%00CCC((--SL66&&((AMMOO!!##q#q!,,g66666r'   c                    | j         j        }t          |                                |                                          }t
          j        dk    rh|                    d|                    d                     |                    d|                    d                     |	                    d          }ng|                    d|                    d                     |                    d|                    d                     |	                    d          }|
                    ||           |                    t          |                     |                    |                                t          dd          z   |                                t          dd          z
             |                    |                                t          dd          z   |                                t          dd          z
             |                    |                                t          dd          z   |                                t          dd          z
             |                    |                                t          dd          z   |                                t          dd          z
             dS )z
        Draw the background rectangle using the current style primitive color.

        :param rect: The fold zone rect to draw

        :param painter: The widget's painter.
        darwinr   d      n      N)r+   sideareas_colorr   topLefttopRightsysplatform
setColorAtlighterdarkerfillRectsetPenr   drawLiner   
bottomLeftbottomRight)r%   rectrx   cgradoutlines         r&   r   zFoldingPanel._draw_rect$  sP    K't||~~t}}??<8##OOAqyy~~...OOAqyy~~...hhsmmGGOOAqyy~~...OOAqyy~~...hhsmmGt$$$tG}}%%% A' A'	( 	( 	( 	** A'))++ A'	( 	( 	( 	 A'))++ A'	( 	( 	( 	 A'** A'	( 	( 	( 	( 	(r'   c                    t          d||                                                                 |                                                                           }| j        r,t                      }||_        t          j        t          j	        z  t          j
        z  |_        |s|xj        t          j        z  c_        |r}|xj        t          j        t          j        z  t          j        z  z  c_        |j                            t$          j        |                                                                            |j                            dd           |                                                     t          j        |||            dS d}|sd}|r|dz  }t3          j        | j        |                                       ||           dS )a  
        Draw the fold indicator/trigger (arrow).

        :param top: Top position
        :param mouse_over: Whether the mouse is over the indicator
        :param collapsed: Whether the trigger is collapsed or not.
        :param painter: QPainter
        r      r   N)r	   rl   rh   rg   r*   r   r   r   State_Active
State_ItemState_Childrenstate
State_OpenState_MouseOverState_EnabledState_SelectedpalettesetBrushr   Window	highlight	translatestyledrawPrimitivePE_IndicatorBranchr   iconr5   paint)r%   r   r|   rz   rx   r   optindexs           r&   rn   z!FoldingPanel._draw_fold_indicatorI  s    QT]]__2244]]__++--/ / 	I&((CCH,*+./CI  /		V..		 A		f4$23$34 5		 $$X_%)\\^^%=%=%?%?A A AHr1%%%JJLL&&v'@'*GT; ; ; ; ; E  
HT+E23399'4HHHHHr'   c                     |                                 }|| j        vrQ| j        D ]I}| j        |         }||k    r4||k     r.| j                                                            |          } nJ|S )z6Find parent scope, if the block is not a fold trigger.)r   r]   r+   r   r   )r%   ro   
block_line
start_lineend_lines        r&   find_parent_scopezFoldingPanel.find_parent_scopen  s    &&((
T111"2  
/
;j((!J.. $ 4 4 6 6 H H&!( !(r'   c                 p    | j         D ]!}| j        j                            |           "g | j         dd<   dS )z'Clear scope decorations (on the editor)N)rK   r+   rt   ru   r%   r~   s     r&   _clear_scope_decoszFoldingPanel._clear_scope_decos{  sG    % 	1 	1DK#**40000!!!!r'   c                     | j         j        }|                                dk     rt          |d          }nt          |d          }|S )z
        Gets the base scope highlight color (derivated from the editor
        background)

        For lighter themes will be a darker color,
        and for darker ones will be a lighter color
           r   i   )r+   r   	lightnessr   )r%   colors     r&   _get_scope_highlight_colorz'FoldingPanel._get_scope_highlight_color  sH     +??s""s++EEs++Er'   c                    |                                  }t          j        d          }t          | j                                        t          d|dz
            ||          }|                    |           |                    dd           | j        j	        
                    |           | j                            |           dS )	z
        Create a decoration and add it to the editor.

        Args:
            start (int) start line of the decoration
            end (int) end line of the decoration
        codefoldingr   r   )r   r   
draw_orderTF)clearN)r   r   r.   r   r+   r   maxset_backgroundset_full_widthrt   addrK   append)r%   r   r   r   r   ds         r&   _decorate_blockzFoldingPanel._decorate_block  s     //11 _]33
4;//11&)!UQY&7&7$'&02 2 2 	
	U+++##A&&&  #####r'   c                    |                                 }| j        |         }||f}| j        | j        |k    rG|| _        |                                  |\  }}| j        |         s|                     ||           dS dS dS )zu
        Highlights the current fold scope.

        :param block: Block that starts the current fold scope.
        N)r   r]   rP   r   r^   r   )r%   ro   r   r   scoper   r   s          r&   _highlight_blockzFoldingPanel._highlight_block  s     &&((
'
3X&'4+>%+G+G"'D##%%%JE3&u- 1$$UC000001 1 ,H+Gr'   c                     t          t          |                               |           t          | j                  }|                    |                                                                          }|dk    r| j                                        	                    |          }| 
                    |          }|                                }|| j        v r| j        +t          j        t!          t"          j                             | j        |                                k    rG| j        @|                                | _        	 |                     |           n[# t(          $ r Y nOw xY w|                                | _        	 | j                            | j        |           n# t(          $ r Y nw xY w|| _        n3| j                                         d| _        t          j                     |                                  dS dS )z
        Detect mouser over indicator and highlight the current scope in the
        editor (up and down decoration arround the foldable text when the mouse
        is over an indicator).

        :param event: event
        r   N)r   r!   mouseMoveEventr   r+   line_nbr_from_positionposyr   r   r   r   r]   rO   r   setOverrideCursorr   r
   PointingHandCursorr   r0   rZ   request_job_highight_blockcancel_requestsrestoreOverrideCursorrepaint)r%   r   r   linero   rv   r/   s         r&   r   zFoldingPanel.mouseMoveEvent  s    	lD!!00777$$((99199K((**<<TBBE**511E++--Kd222(0 2 5668 8 8)U->->-@-@@@-9 -2,=,=,?,?D)--e4444#     -2,=,=,?,?D).:: 15: : : :#     (-$$ &66888(,%2444LLNNNNNI 9s$   E" "
E/.E/ F- -
F:9F:c                 <    d| _         |                                  d S )NT)rX   r   )r%   r   s     r&   
enterEventzFoldingPanel.enterEvent  s     $r'   c                 z   t          t          |                               |           t          j                     | j                                         | j        s#|                                  d| _	        d| _
        nd| _        |                                  | j                                         d| _        dS )z
        Removes scope decorations and background from the editor and the panel
        if highlight_caret_scope, else simply update the scope decorations to
        match the caret scope.
        Nr?   F)r   r!   
leaveEventr   r   rZ   r   r=   r   rO   rP   r@   rC   r+   r   rX   )r%   r   r/   s     r&   r   zFoldingPanel.leaveEvent  s     	lD!!,,U333*,,,..000) 	*##%%%$(D!"&D DO''))) %r'   c                    |                                 }| j                            |dz   |          }t          j        d          }t          ||          }|j        j                            | j	                   ||_
        ||_        |                                 |                    t          |                                 d                     |                    |                                            |                    t%          t&          j                             || j        |<   | j        j                            |           dS )zc
        Add fold decorations (boxes arround a folded block in the editor
        widget).
        r   r   )r   r   N)r   r+   get_text_regionr   r.   r   signalsclickedrB   _on_fold_deco_clickedtooltipro   select_lineset_outliner   r   r   set_foregroundr   r   COLOR_TEXT_4rL   rt   r   )r%   ro   r   r   textr   r~   s          r&   rp   z!FoldingPanel._add_fold_decoration  s-   
 &&((
{**:>8DD _]33
e
;;;$$T%?@@@
++--s4 4 	5 	5 	5D;;==>>>F=#=>>???(,*%##D)))))r'   c                    |                                 |k    ri|                                rU|                    d           |                                }|                                 |k    r|                                U|S )NFr   isValid
setVisiblenext)r%   ro   r   s      r&   _get_block_until_linez"FoldingPanel._get_block_until_line  st    !!X--%--//-U###JJLLE !!X--%--//- r'   c                    |                                 |k     ri|                                rU|                    d           |                                }|                                 |k     r|                                U|S )z3Fold region spanned by *start_line* and *end_line*.Fr   r%   ro   r   r   s       r&   fold_regionzFoldingPanel.fold_region  st    !!H,,,U###JJLLE !!H,,, r'   c                 |   |dz
  | j         v rL| j         |dz
           }| j                             |dz
             | j        j                            |           |                                |k     r|                                r|                                }|                    d           d}|| j        v r;||k    r5| j        |         }| j	        |         rd}| 
                    ||dz
            }|r|                                }|                                |k     r|                                dS dS dS dS )z5Unfold region spanned by *start_line* and *end_line*.r   TFN)rL   rs   r+   rt   ru   r   r   r   r]   r^   r  r   )r%   ro   r   r   r~   current_lineget_next	block_ends           r&   unfold_regionzFoldingPanel.unfold_region  sO   >T...$Z!^4D!!*q.111K#**4000!!H,,, ,,..LT"""H 444$
22 0>	&|4 M$H 66ui!mLLE %

 !!H,,,,,,,,,,,r'   c                    |                                 }|| j        vrdS | j        |         }| j        |         r?|                     |||           d| j        |<   | j        |                     ||           n5|                     |||           d| j        |<   |                                  |                                  dS )z
        Toggle a fold trigger block (expand or collapse it).

        :param block: The QTextBlock to expand/collapse
        NFT)	r   r]   r^   r	  rO   r   r  r   _refresh_editor_and_scrollbarsr  s       r&   toggle_fold_triggerz FoldingPanel.toggle_fold_trigger4  s     &&((
T111F'
3z* 	&uj(;;;.3D
+$0$$Z:::UJ999.2D
+##%%%++-----r'   c                     | j         H| j                                                            | j                   }|                     |           dS dS )z+Folds/unfolds the pressed indicator if any.N)rO   r+   r   r   r  )r%   r   ro   s      r&   mousePressEventzFoldingPanel.mousePressEventI  sV     ,K((**<<%' 'E$$U+++++ -,r'   c                 :    |                      |j                   dS )z<Unfold a folded block that has just been clicked by the userN)r  ro   r   s     r&   r   z"FoldingPanel._on_fold_deco_clickedP  s      ,,,,,r'   c                    |r|| j         j                            | j                   | j        r+| j         j                            | j                   d| _        | j         j                            | j	                   dS | j         j        
                    | j                   | j        r+| j         j        
                    | j                   d| _        | j         j        
                    | j	                   dS )zV
        On state changed we (dis)connect to the cursorPositionChanged signal
        r?   N)r+   sig_key_pressedrB   _on_key_pressedr<   rA   rC   r@   new_text_set_clear_block_decorD   )r%   r   s     r&   on_state_changedzFoldingPanel.on_state_changedT  s      	HK'//0DEEE$ %199/1 1 1"$K$,,T-CDDDDDK'2243GHHH$ %1<</1 1 1"$K$//0FGGGGGr'   c                 0   |                                 t          j        t          j        hv }| j                                        }|                                r$|                                 t          j        k    rd}|                                s|rd| _	        |                                r)|
                                |                                f}n|                                f}|D ]}| j                                                            |          }|                                dz   }|| j        v rK| j        |         r=| j        |         }|r-|                                rt%          | j                                      ||          }	|	
                                |
                                k    r|
                                }
n|	
                                }
|	                                |                                k     r|                                }n|	                                }|	                    |
           |	                    ||	j                   | j                            |	           d| _	        dS dS )z
        Override key press to select the current scope if the user wants
        to deleted a folded scope (without selecting it).
        Tr   FN)keyr
   
Key_DeleteKey_Backspacer+   
textCursorhasSelection
Key_Returnr   rY   selectionStartselectionEndpositionr   	findBlockr   r]   r^   r   select_linessetPosition
KeepAnchorsetTextCursor)r%   r   delete_requestcursorpositions_to_checkr   ro   r   r   tcr   r   s               r&   r  zFoldingPanel._on_key_pressedg  sc   
 8H(II''))   	&yy{{bm++!%::<< 	&> 	& $D""$$ ;&,&;&;&=&=&,&9&9&;&;&="" '-oo&7&7%:") 6 6,,..88=="..0014
$"666+J7 7#3J?H% 6&*=*=*?*? 6'44AA&2 2,,..1F1F1H1HHH$*$9$9$;$;EE$&$5$5$7$7E??,,v/B/B/D/DDD"("5"5"7"7CC"$//"3"3Cu---sBM:::11"555 %D9	& 	&r'   c                    t          | j                                                   | j                                         | j                                        }|                    |                                dz              | j                            t          | j                                        |                     dS )ap  
        Refrehes editor content and scollbars.

        We generate a fake resize event to refresh scroll bar.

        We have the same problem as described here:
        http://www.qtcentre.org/threads/44803 and we apply the same solution
        (don't worry, there is no visual effect, the editor does not grow up
        at all, even with a value = 500)
        r   N)	r   r+   mark_whole_doc_dirtyr   sizeri   rh   resizeEventr   )r%   ss     r&   r  z+FoldingPanel._refresh_editor_and_scrollbars  s     	4;44666K	

17799q=!!!T[-=-=-?-? C CDDDDDr'   c                 r   |                                   | j                                                                        }|                                ri|                                }|| j        v r$| j        |         }|                     |||           |                                }|                                i| 	                                 | j        
                                }|                    |j                   | j                            |           | j                                         dS )zd
        Collapses all triggers and makes all blocks with fold level > 0
        invisible.
        N)r  r+   r   
firstBlockr   r   r]   r  r   r  r  movePositionStartr$  collapse_all_triggeredemit)r%   ro   rv   r   r(  s        r&   collapse_allzFoldingPanel.collapse_all  s   
 	   $$&&1133mmoo 	!++--Kd222/<  X>>>JJLLE mmoo 	! 	++---[##%%
!!!!!"%%%#((*****r'   c                     | j         D ].}| j         |         }| j        j                            |           /i | _         dS )z#Clear the folded block decorations.N)rL   r+   rt   ru   )r%   r}   r~   s      r&   r  zFoldingPanel._clear_block_deco  sK    * 	1 	1I$Y/DK#**40000r'   c                    | j                                                                         }|                                ri|                                }|| j        v r$| j        |         }|                     |||           |                                }|                                i|                                  | 	                                 | j
                                         dS )zExpands all fold triggers.N)r+   r   r/  r   BlockNumberr]   r	  r   r  r  expand_all_triggeredr3  )r%   ro   rv   r   s       r&   
expand_allzFoldingPanel.expand_all  s    $$&&1133mmoo 	!++--Kd222/<""5+x@@@JJLLE mmoo 	! 	   ++---!&&(((((r'   c                    | j                                         }|                                }| j        |k    r|                     |                                          }|                                }|| j        v r@|                                | _        	 |                     |           n$# t          $ r Y nw xY w| 
                                 || _        dS )z
        Highlight the scope of the current caret position.

        This get called only if :attr:`
        spyder.widgets.panels.FoldingPanel.highlight_care_scope` is True.
        N)r+   r  r   r@   r   ro   r]   rO   r   r0   r   )r%   r&  	block_nbrro   rv   s        r&   rC   z#FoldingPanel._highlight_caret_scope  s     ''))&&((	?i''**6<<>>::E++--Kd222(-(9(9(;(;%))%0000    D
 '')))#s   B- -
B:9B:)F).__name__
__module____qualname____doc__r   r   booltrigger_state_changedr2  r8  propertyr#   setterr6   r=   rI   rd   rl   r   r   r   r   rn   r   r   r   r   r   r   r   r   rp   r  r  r	  r  r  r   r  r  r  r4  r  r9  rC   __classcell__)r/   s   @r&   r!   r!   )   s          #F:t44#VXX!688! ! X! 	 	 	 & & X&    % % X% !  "!*%" %" %"N     8=# # # #JN N N N N@7 7 7.#( #( #(J#I #I #IJ  " " "  $ $ $&1 1 1$/ / / / /b  & & & & &&* * *(    % % %,. . .*, , ,- - -H H H&'& '& '&RE E E"+ + +&  ) ) )$ $ $ $ $ $ $r'   r!   )+r?  mathr   r   intervaltreer   qtpy.QtCorer   r   r   r   r	   r
   qtpy.QtWidgetsr   r   r   
qtpy.QtGuir   r   r   r   r   r   r   r   r   "spyder.plugins.editor.panels.utilsr   $spyder.plugins.editor.api.decorationr   r   spyder.api.panelr   "spyder.plugins.editor.utils.editorr   r   r   spyder.utils.icon_managerr   spyder.utils.paletter   r!    r'   r&   <module>rQ     s          



 & % % % % % A A A A A A A A A A A A A A A A E E E E E E E E E E! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
 = < < < < < L L L L L L L L " " " " " "= = = = = = = = = = ) ) ) ) ) ) . . . . . .u
$ u
$ u
$ u
$ u
$5 u
$ u
$ u
$ u
$ u
$r'   