
    G@dj                     >    d Z ddlmZ ddlmZ  G d de          ZdS )z7This module contains the close quotes editor extension.    )QTextCursor)EditorExtensionc                   v    e Zd ZdZg dZeddd         Zeddd         ZdddddddZd	 Zd
 Z		 	 ddZ
d ZdS )CloseBracketsExtensionz3Editor Extension for insert brackets automatically.)(){}[]N      z()z{}z[]c                     |r&| j         j                            | j                   dS | j         j                            | j                   dS )z*Connect/disconnect sig_key_pressed signal.N)editorsig_key_pressedconnect_on_key_pressed
disconnect)selfstates     Nlib/python3.11/site-packages/spyder/plugins/editor/extensions/closebrackets.pyon_state_changedz'CloseBracketsExtension.on_state_changed   sO     	IK'//0DEEEEEK'2243GHHHHH    c                    |                                 rd S |                                }|| j        v rP| j        rK| j        j                                         |                     |           |                                 d S d S d S )N)	
isAcceptedtextBRACKETS_CHARenabledr   completion_widgethide_autoinsert_bracketsaccept)r   eventchars      r   r   z&CloseBracketsExtension._on_key_pressed   s     	F
 zz||4%%%$,%K)..000%%d+++LLNNNNN &%%%r   Fc                    || j         }| j        }n|g}dddd|         g}| j                                                                        }|                                }t          |          D ]u\  }}	|	|v r;| j                            ||z   |	d          }
|
|
|t          |          z   k    r dS |	|v r-| j                            ||z   |	d          }
|
|
|k     r|s dS vdS )	z
        Checks if there is an unmatched brackets in the 'text'.

        The brackets type can be general or specified by closing_brackets_type
        (')', ']' or '}')
        Nr   r	   r   )r   r
   r   T)forwardF)	BRACKETS_LEFTBRACKETS_RIGHTr   
textCursorblockposition	enumeratefind_brace_matchlen)r   r   closing_brackets_type
autoinsertopening_bracketsclosing_bracketsr*   line_posposr$   matchs              r   unmatched_brackets_in_linez1CloseBracketsExtension.unmatched_brackets_in_line)   sA    !(#1#2 56&)&)!+ !++@!B  C&&((..00>>##"4 	  	 IC'''44Xc\4=A 5 C CMuxD		/A'A'A44'''44Xc\4=B 5 D D
 Mux'7'7
'744ur   c                    | j         |         }| j                                        }| j                            dd                                          }| j                                        r| j                                        }| j                            d                    |d         ||d                              |	                    t          j        t          j        d           |	                    t          j        t          j        t          |                     | j                            |           d	S || j        v r|r|d         | j        v s
|d         dv rT| j                            |           |	                    t          j                   | j                            |           n| j                            |           || j        j        v r| j                                         d	S d	S || j        v r| j                                        |k    r| j                                                                        s|                     |                                                                |d          s[|	                    t          j        t          j        d           |                                 | j                            |           d	S | j                            |           d	S d	S )
z@Control automatic insertation of brackets in various situations.cursoreolz	{0}{1}{2}r   r   ),:;T)r0   N)BRACKETS_PAIRr   r)   get_textstriphas_selected_textget_selected_textinsert_textformatmovePositionr   Left
MoveAnchor
KeepAnchorr.   setTextCursorr'   r(   PreviousCharactersignature_completion_charactersrequest_signature	next_char
atBlockEndr6   r*   r   NextCharacterclearSelection)r   r$   pairr8   trailing_textr   s         r   r!   z+CloseBracketsExtension._autoinsert_bracketsJ   s   !$''')),,Xu==CCEE;((** 	.;0022DK##K$6$6tAwd1g$N$NOOO 0+2H!LLL 0+2H #D		+ + +K%%f-----T'''! .!!$(;;;!!$77''---##K$ABBB))&1111''---t{BBB--///// CBT(((%%''4//..00;;== 077++--t 8 F F 0
 ##K$=$/$:A? ? ?%%'''))&11111''----- )(r   )NF)__name__
__module____qualname____doc__r   r'   r(   r=   r   r   r6   r!    r   r   r   r      s        ==222M!##A#&M"14a4(NTTT+ +MI I I   FJ.3   B&. &. &. &. &.r   r   N)rU   
qtpy.QtGuir   spyder.api.editorextensionr   r   rV   r   r   <module>rY      so    > = " " " " " " 6 6 6 6 6 6d. d. d. d. d._ d. d. d. d. d.r   