
    Jej                     6    d Z ddlmZ ddlmZ  G d de      Zy)z7This module contains the close quotes editor extension.    )QTextCursor)EditorExtensionc                   h    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y)CloseBracketsExtensionz3Editor Extension for insert brackets automatically.)(){}[]N      z()z{}z[]c                     |r0| j                   j                  j                  | j                         y| j                   j                  j	                  | j                         y)z*Connect/disconnect sig_key_pressed signal.N)editorsig_key_pressedconnect_on_key_pressed
disconnect)selfstates     P/usr/lib/python3/dist-packages/spyder/plugins/editor/extensions/closebrackets.pyon_state_changedz'CloseBracketsExtension.on_state_changed   sA    KK''//0D0DEKK''2243G3GH    c                    |j                         ry |j                         }|| j                  v rS| j                  rF| j                  j
                  j                          | j                  |       |j                          y y y )N)	
isAcceptedtextBRACKETS_CHARenabledr   completion_widgethide_autoinsert_bracketsaccept)r   eventchars      r   r   z&CloseBracketsExtension._on_key_pressed   sg    
 zz|4%%%$,,KK))..0%%d+LLN +7%r   c                    || j                   }| j                  }n|g}dddd|   g}| j                  j                         j	                         }|j                         }t        |      D ]q  \  }}	|	|v r6| j                  j                  ||z   |	d      }
|
|
|t        |      z   kD  r y|	|v sE| j                  j                  ||z   |	d      }
|
	|
|k  sn|rq y y)z
        Checks if there is an unmatched brackets in the 'text'.

        The brackets type can be general or specified by closing_brackets_type
        (')', ']' or '}')
        r   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)   s    !(#11#22 56&)&)!++@!B  C&&(..0>>#"4 	 IC''44Xc\4=A 5 CMuxD	/A'A''44Xc\4=B 5 D
 Mux'7
	  r   c                 
   | j                   |   }| j                  j                         }| j                  j                  dd      j	                         }| j                  j                         r| j                  j                         }| j                  j                  dj                  |d   ||d                |j                  t        j                  t        j                  d       |j                  t        j                  t        j                  t        |             | j                  j                  |       y	|| j                   v r|r|d   | j"                  v s|d   dv rV| j                  j                  |       |j                  t        j$                         | j                  j                  |       n| j                  j                  |       || j                  j&                  v r| j                  j)                          y	y	|| j"                  v r| j                  j+                         |k(  r| j                  j                         j-                         s| j/                  |j1                         j3                         |d      s[|j                  t        j4                  t        j                  d       |j7                          | j                  j                  |       y	| j                  j                  |       y	y	)
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   sD   !!$'''),,Xu=CCE;;((*;;002DKK##K$6$6tAwd1g$NO 0 0+2H2H!L 0 0+2H2H #D	+KK%%f-T'''!!!$(;(;;!!$7''-##K$A$AB))&1''-t{{BBB--/ CT(((%%'4/..0;;=77++-t 8 F ##K$=$=$/$:$:A?%%'))&1''- )r   )NF)__name__
__module____qualname____doc__r   r'   r(   r=   r   r   r6   r!    r   r   r   r      s^    =2M!#A#&M"14a4(NTTT+MI FJ.3B&.r   r   N)rU   
qtpy.QtGuir   spyder.api.editorextensionr   r   rV   r   r   <module>rY      s    > " 6d._ d.r   