
    G@d                         d Z ddlmZ ddlmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ d	 Zd
 Zd Zd Zd Z G d de          ZdS )z%
Contains the text debugger manager.
    N)QInputDialog	QLineEdit)CONF)_)to_text_string)Manager)BlockUserDatac                  "   t          j        ddi           } t          |                                           D ]V}t	          j        |          }||k    r:|                     |          }|| v r| |                             |           Q|| |<   W| S Nrunbreakpoints)r   getlistkeysospnormcasepopextend)bp_dictfilenamenew_filenamebps       Dlib/python3.11/site-packages/spyder/plugins/editor/utils/debugger.py_load_all_breakpointsr      s    humR00G(( + +|H--8##X&&Bw&&%,,R0000(*%N    c                     t                                          t          j        |           g           }|r't	          |d         t
                    rd |D             }|S )Nr   c                     g | ]}|d fS N ).0linenos     r   
<listcomp>z$load_breakpoints.<locals>.<listcomp>'   s    @@@&~@@@r   )r   r   r   r   
isinstanceint)r   r   s     r   load_breakpointsr%   #   s_    '))--cl8.D.DbIIK Az+a.#66 A@@K@@@r   c                 |    t                      }||t          j        |           <   t          j        dd|           d S r   )r   r   r   r   set)r   r   r   s      r   save_breakpointsr(   +   s;    #%%G&1GCL""#HUM7+++++r   c                  2    t          j        ddi            d S r   )r   r'   r   r   r   clear_all_breakpointsr*   1   s    HUM2&&&&&r   c                     t          |           }|r@|d d          D ]#}|d         |k    r|                    |           $t          | |           d S d S )Nr   )r%   remover(   )r   r!   r   
breakpoints       r   clear_breakpointr.   5   sr    "8,,K 0%aaa. 	/ 	/J!}&&"":...;/////	0 0r   c                   X     e Zd ZdZ fdZd Z	 	 ddZd Zd Zd	 Z	d
 Z
d Zd Z xZS )DebuggerManagerz=
    Manages adding/removing breakpoint from the editor.
    c                    t          t          |                               |           d | _        i | _        g | _        | j        j                            | j	                   | j        j
                            | j                   d S r   )superr0   __init__r   _breakpoint_blocksr   editorsig_breakpoints_changedconnectbreakpoints_changedsig_filename_changedset_filename)selfr5   	__class__s     r   r3   zDebuggerManager.__init__B   sv    ot$$--f555"$+33D4LMMM(001BCCCCCr   c                     |d S | j         |k    r;| j         }|| _         | j        r(t          |g            |                                  d S d S d S r   )r   r   r(   )r;   r   old_filenames      r   r:   zDebuggerManager.set_filenameJ   sm    F=H$$=L$DM ( r222%%''''' %$( (r   NFc                    | j                                         sdS |,| j                                                                         }n/| j                                                             |dz
            }|                                }|st          | j                   }d|_        n|s|j         |_        d|_	        |||_	        |rn|j	        }t          j        | j         t          d          t          d          t          j        |          \  }}|sdS d|_        |rt          |          nd|_	        |j        rzt!          |                                                                          }t'          |          dk    s|                    d          rd|_        n|| j        t-          |          <   |                    |           | j         j                                         | j         j                                         dS )	zAdd/remove breakpoint.N   T
Breakpointz
Condition:r   )#"'F)r5   is_python_like
textCursorblockdocumentfindBlockByNumberuserDatar	   r-   breakpoint_conditionr   getTextr   r   Normalstrr   textstriplen
startswithr4   idsetUserDatasig_flags_changedemitr6   )r;   line_number	conditionedit_conditionrG   datavalidrO   s           r   toogle_breakpointz!DebuggerManager.toogle_breakpointT   s    {))++ 	FK**,,2244EEK((**<<[]KKE~~ 	- --D"DOO 	-"&/1DO(,D% (1D% 
	N1I+3DK45lOO45lOO4=4D4=	 ?  ?Iu
  "DO:C(MID%? 	;!%**,,//5577D4yyA~~!A!A~"'5:'5		2$%**,,,+0022222r   c                    g }i }| j         D ]x}| j         |         }|                                rU|                                }|r?|j        r8|||<   |                                dz   }|                    ||j        f           y|| _         |S )zGet breakpointsr@   )r4   isValidrJ   r-   blockNumberappendrK   )r;   r   pruned_breakpoint_blocksblock_idrG   rZ   rW   s          r   get_breakpointszDebuggerManager.get_breakpoints{   s    #% / 	B 	BH+H5E}} B~~'' BDO B9>,X6"'"3"3"5"5"9K&&$d&?@B B B":r   c                     g | _         | j                                        D ]	}d|_        
i | _        | j        j                                         | j        j                                         dS )zClear breakpointsFN)r   r5   blockuserdata_listr-   r4   r6   rV   rU   )r;   rZ   s     r   clear_breakpointsz!DebuggerManager.clear_breakpoints   sl    K2244 	$ 	$D#DOO"$+00222%**,,,,,r   c                     |                                   |D ]\  }}|                     ||           |                                 | _        dS )zSet breakpointsN)rf   r\   rc   r   )r;   r   rW   rX   s       r   set_breakpointszDebuggerManager.set_breakpoints   s[       &1 	; 	;"K"";	:::://11r   c                     |                                  }| j        |k    r;|| _        |                                  | j        j                                         dS dS )zBreakpoint list has changedN)rc   r   r(   r5   sig_repaint_breakpointsrV   )r;   r   s     r   r8   z#DebuggerManager.breakpoints_changed   s`    **,,{***D!!###K/4466666 +*r   c                 D   t          | j                  }t          | j                  }t          |          }t	          j        t	          j        |                    }|rt          |          }ng }t          ||           | j	        j
                                         d S r   )reprr   r   r   r   normpathabspathevalr(   r5   sig_breakpoints_savedrV   )r;   r   r   s      r   r(   z DebuggerManager.save_breakpoints   s    4+,,!$-00$[11<H 5 566 	{++KKK;///)..00000r   c                 T    |                      t          | j                             d S r   )rh   r%   r   )r;   s    r   r%   z DebuggerManager.load_breakpoints   s'    -dm<<=====r   )NNF)__name__
__module____qualname____doc__r3   r:   r\   rc   rf   rh   r8   r(   r%   __classcell__)r<   s   @r   r0   r0   >   s         D D D D D( ( ( =A).%3 %3 %3 %3N   
- 
- 
-2 2 27 7 7
1 
1 
1> > > > > > >r   r0   )ru   os.pathpathr   qtpy.QtWidgetsr   r   spyder.config.managerr   spyder.config.baser   spyder.py3compatr   spyder.api.managerr   "spyder.plugins.editor.utils.editorr	   r   r%   r(   r*   r.   r0   r   r   r   <module>r      s          2 2 2 2 2 2 2 2 & & & & & &             + + + + + + & & & & & & < < < < < <    , , ,' ' '0 0 0u> u> u> u> u>g u> u> u> u> u>r   