
    G@d                     
   d Z ddlZddlZddlmZmZ ddlmZmZm	Z	 ddl
m
Z
 	 ddlmZ dZn# e$ r dZY nw xY wdd	lmZ dd
lmZ ddlmZmZmZ h dZe
j        e
j        hZd Zd Z G d d          Z G d de          ZdS )zCode snippets editor extension.    N)QTextCursorQColor)QtQMutexQMutexLocker)diff_match_patch)indexTF)to_text_string)EditorExtension)build_snippet_astnodestokenize>   intname
whitespacec                     d| _         | S )zDInidicate that a modification function should not be called on undo.T)no_undo)fs    Ilib/python3.11/site-packages/spyder/plugins/editor/extensions/snippets.pyr   r   "   s    AIH    c                 F     t          j                    fd            }|S )z,Prevent concurrent access to snippets rtree.c                     | j         j        sd S t          sd S t          | j                  5  t          d          s|                                   | g|R i |cd d d            S # 1 swxY w Y   d S )Nr   )editorcode_snippetsrtree_availabler   modification_lockhasattrupdate_undo_stack)selfargskwargsr   s      r   wrapperzlock.<locals>.wrapper*   s    {( 	F 	F$011 	, 	,1i(( )&&(((1T+D+++F++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   0A**A.1A.)	functoolswraps)r   r"   s   ` r   lockr%   (   s8    _Q, , , , , Nr   c                        e Zd ZdZddZd ZdS )SnippetSearcherVisitorz3Traverse and extract information from snippets AST.r   c                 h    || _         || _        d| _        d| _        || _        i | _        i | _        d S Nr   )linecolumnline_offsetcolumn_offsetnode_numbersnippet_mapposition_map)r   r*   r+   r.   s       r   __init__zSnippetSearcherVisitor.__init__:   s>    	&r   c                    t          |t          j                  rA|j        }| j                            |g           }|                    |           || j        |<   |j        r(|j        |f| j	        | j
        <   | xj
        dz  c_
        d S d S )N   )
isinstancer   TabstopSnippetNodenumberr/   getappendmark_for_positionpositionr0   r.   )r   nodesnippet_numbernumber_snippetss       r   visitzSnippetSearcherVisitor.visitC   s    dE455 	?![N".22>2FFO""4(((/>D^,! 	"37=$2GDd./!	" 	"r   N)r   )__name__
__module____qualname____doc__r1   r>    r   r   r'   r'   7   s=        ==   " " " " "r   r'   c                   $   e Zd ZdZd Zd Zd Zeed                         Z	eed                         Z
eed                         Zd Ze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dZd Zd Zd Zd ZdS )SnippetsExtensionzECodeEditor extension on charge of autocompletion and snippet display.c                 |   t          j        |            d| _        d| _        d| _        d| _        d | _        d | _        d | _        t                      | _
        t                      | _        t                      | _        i | _        i | _        g | _        g | _        t"          rt          j                    | _        d S d S )NFr   )r   r1   is_snippet_activeinserting_snippetactive_snippetr.   r	   aststarting_positionr   r   
event_lockupdate_locknode_positionsnippets_map
undo_stack
redo_stackr   Indexr   s    r   r1   zSnippetsExtension.__init__Q   s     &&&!&!& 
!%!' ((!88 	'DJJJ	' 	'r   c                 D   |rF| j         j                            | j                   | j         j                            | j                   | j         j                            | j                   | j         j                            | j	                   | j         j
                            | j                   | j         j                            | j                   | j         j                            | j                   | j         j                            | j                   | j         j                            | j                   dS 	 | j         j                            | j                   | j         j                            | j                   | j         j                            | j                   | j         j                            | j	                   | j         j
                            | j                   | j         j                            | j                   | j         j                            | j                   | j         j                            | j                   | j         j                            | j                   dS # t(          $ r Y dS w xY w)z*Connect/disconnect sig_key_pressed signal.N)r   sig_key_pressedconnect_on_key_pressedsig_insert_completioninsert_snippetsig_cursor_position_changedcursor_changedsig_text_was_inserted_redraw_snippetssig_will_insert_text_process_textsig_will_paste_textsig_will_remove_selectionremove_selectionsig_undo_undosig_redo_redo
disconnect	TypeError)r   states     r   on_state_changedz"SnippetsExtension.on_state_changedd   s[    	K'//0DEEEK-55d6IJJJK3;;#% % %K-55d6KLLLK,44T5GHHHK+33D4FGGGK199%' ' 'K ((444K ((44444+66t7KLLL1<<') ) )7BB') ) )1<<)+ + +0;;D<NOOO/::4;MNNN5@@)+ + +$//
;;;$//
;;;;;   s   EJ 
JJc                     t          j        | j                  }|| j        | j        f}| j                            d|           d S r)   )copydeepcopyrK   rL   rJ   rQ   insert)r   ast_copyinfos      r   r   z#SnippetsExtension.update_undo_stack   sC    =**$0$2EFq$'''''r   c                    t          | j                  dk    r|                                  | j        r5d}| j        j        }|D ]*}|j        D ] \  }}|t          v r|t          |          z  }!+t          | j                  dk    rt          |          D ]}t          | j                  dk    r ns| j        	                    d          }t          j        | j                  }|| j        | j        f}	| j                            d|	           |\  | _        | _        | _        |                                  | j                            d           |                                  d S d S d S Nr   r   )lenrQ   resetrH   r   patchdiffsVALID_UPDATESrangepoprm   rn   rK   rL   rJ   rR   ro   _update_astclear_extra_selectionsdraw_snippets)
r   num_popsrv   rw   opdata_rq   rp   	redo_infos
             r   re   zSnippetsExtension._undo   s    t1$$JJLLL! 	%HK%E . ."'+ . .JR]** CII-. 4?##a''x 	1 	1A4?++q00?..q11D#}TX66H!)4+A!%!4!6IO**1i888,0*TXt5((  """22?CCC""$$$$$)	% 	% ('r   c                    | j         r5d}| j        j        }|D ]*}|j        D ] \  }}|t          v r|t          |          z  }!+t          | j                  dk    rt          |          D ]}t          | j                  dk    r ns| j                            d          }t          j
        | j                  }|| j        | j        f}	| j                            d|	           |\  | _        | _        | _        |                                  | j                            d           |                                  d S d S d S rs   )rH   r   rv   rw   rx   rt   rR   ry   rz   rm   rn   rK   rL   rJ   rQ   ro   r{   r|   r}   )
r   r~   rv   rw   r   r   r   rq   rp   	undo_infos
             r   rg   zSnippetsExtension._redo   sh    ! 	%HK%E . ."'+ . .JR]** CII-. 4?##a''x 	1 	1A4?++q00?..q11D#}TX66H!)4+A!%!4!6IO**1i888,0*TXt5((  """22?CCC""$$$$$)	% 	% ('r   c                 t    | j         r0| j                            d           |                                  d S d S )Nr   )rH   r   r|   r}   rT   s    r   r^   z"SnippetsExtension._redraw_snippets   sG     ! 	!K..???     	! 	!r   c                    |                                 rd S t          | j                  5  |                                }t	          |                                          }| j        rW| j                                        \  }}| 	                    ||          \  }}}|t          j        k    rc|                                 | j        dz   t          | j                  z  }	|                     |	           |	dk    r|                                  n|t          j        k    r)|                                  |                                 nut          |          dk    rb|dv}
|| j        j        v}|| j        j        v}|
o|o|}|:||dk    r|                                  n|s|dk    r|                     |           d d d            d S # 1 swxY w Y   d S )Nr3   r   >   ()[]{}
)
isAcceptedr   rM   keyr
   textrH   r   get_cursor_line_column_find_node_by_positionr   Key_TabacceptrJ   rt   rP   select_snippetru   
Key_Escapeauto_completion_characterssignature_completion_charactersr`   )r   eventr   r   r*   r+   r;   snippet__next_snippet	not_bracenot_completionnot_signaturevalids                 r   rX   z!SnippetsExtension._on_key_pressed   s    	F$/**  	5  	5))++C!%**,,//D% 5#{AACCf$($?$?&%" %"!gr"*$$LLNNN%)%81%<$'(9$:$:%;L''555#q((

BM))JJLLLLLNNNNYY]] $,J JIDK$JJ # DK$OO " &J.J]E'"?ddll JJLLLL" 5ddll ..t444A 	5  	5  	5  	5  	5  	5  	5  	5  	5  	5  	5  	5  	5  	5  	5  	5  	5  	5s   FGGGc                 $   | j         r| j                                        \  }}|dk    r|                     |||           n1|dk    r|                                  n|                     ||           |                                  g | _        d S d S )Nr   r   )rH   r   r   insert_textru   delete_textr{   rR   )r   r   r*   r+   s       r   r`   zSnippetsExtension._process_text   s    ! 
	!;==??LD&t||  tV4444

  v... DOOO
	! 
	!r   c                 4   | j                                         }| j                                         \  }}|r|                     ||           d S |                     ||          \  }}}|j        }	t          |	          dk    r|	d         \  }
}|
|f|
|ff}	|j        d         d         }|||fk    r|j        }|j        }|j	        }t          |j                  }|d |         t          |j        j                  z   ||dz   d          z   }||_        t          |          dk    r#||dz
           }|                     ||||           |}| j        D ]*}||k    r"| j        |         }|D ]}|j        }||_        |}+d S |                     ||||           d S Nr3   r   )r   has_selected_textget_selection_start_end_remove_selectionr   r:   rt   r6   index_in_parentparentlisttokensplaceholder_delete_tokenrP   )r   r*   r+   r   startendr;   r   	text_noderO   xyfirst_text_positionr<   snippet_positiontext_parentparent_tokensdelete_tokennext_numbercurrent_numbersnippet_nodessnippet_nodes                         r   r   zSnippetsExtension.delete_text   s    K99;;[88::
s 	""5#...F#'#>#>tV#L#L gy}"" #DAqVaV,M'03A64.00$^N&6!.K !344M*+<,<+<=!'"5"<==>*+;a+?+@+@ABM "/K=!!A%%,-=-AB ""<dFKKK(K"&"3 5 5!N22$($5n$EM(5 5 5)5)<.9+&45 5 tYf=====r   c                    |j         }t          |j                  }|j        }t	          |          dk    r|dk    r|dz   t	          |          k     r||dz
           }||dz            }	d}
|j        rdt          |t          j                  s| 	                                 d S |j
        t          v r&|j
        |	j
        k    r|j        |	j        z   |_        d}
|d |         |||
z   d          z   }n^|                    |           nG|\  }}|||fk    r||dz
           }|j        }|d d         }d}d}t	          |          dk    r2|dz
  dk    r||dz
           }nd}|                    |dz
             d}n||_        |rQ|j        rJ|j
        t          v r<|j
        |j
        k    r,|j        |j        z   |_        |                    ||z
             nz|||fk    rB|j        }|d d         }t	          |          dk    r|                    |           n8||_        n0|\  }}||z
  }|j        }|d |         ||dz   d          z   }||_        t	          |          dk    rt          j                    g}||_        d S )Nr3   r      rG   TF)r:   r   r   r   rt   r9   r4   r   LeafNoderu   r   MERGE_ALLOWEDvaluerz   )r   r;   r   r*   r+   rO   text_node_tokens
node_index	left_node
right_nodeoffset
node_startnode_endprevious_tokenprevious_valuemergediff
node_valuer   r   s                       r   r   zSnippetsExtension._delete_token#  s   	 011)
}""A~~*q.37G3H3H"H"H,Z!^<	-j1n=
. '%i@@ 

 ~66$>Z_<< )*2B B &O%&F$[j[1$Z&%8%9%9:; ! 
 !$$Z0000#0 JdF^++!1*q.!A!/!5!/!4~&&!++!A~)))9*q.)I %$((a888DD+9N( H- H955#yN,???$2$84:$E !/ 4 0 4 4Z$5F G G GdF^++!Z
'_
z??a''$((4444!+DJJ!1z!Z
'.D1HII1FF
'
  A%% % 0 01+	r   c                 R   | j                                         }| j                                         \  }}|r.	 |                     ||           n# t          $ r Y d S w xY w|\  }}|                     ||          \  }}}	|||	|                                  d S t          |          }
d |
D             }|D ]}|                    ||f           |j	        dk    rt          j        | }||_        d S |j        }t          |          dk    r)|d         \  }}	 ||f||dz   ff}n# t          $ r Y d S w xY w|\  }}|j        }t#          |	j                  }||f|k    rd}d}|d         }|d         }|dk    rYt          |          dk    rF||dz
           }|j        r4|j	        t(          v r&|j	        |j	        k    rd}|j        |j        z   |_        |j        r4|j	        t(          v r&|j	        |j	        k    rd}|j        |j        z   |_        |d ||z
           |z   |||z   d          z   }n||f|k    rd}d}|d         }|d         }|dk    r\|t          |          dz
  k     rF||dz            }|j        r4|j	        t(          v r&|j	        |j	        k    rd}|j        |j        z   |_        |j        r4|j	        t(          v r&|j	        |j	        k    rd}|j        |j        z   |_        |d ||z
           |z   |||z   d          z   }n|\  }}||z
  }|j        }|d |         }||dz   d          } |d |         }!||d          }"|d         }|d         }d}#|j        r*|j	        t(          v r||j	        k    rd}#|!|j        z   |_        |#s-|                    t          j        |j	        |!                     d}$|j        r*|j	        t(          v r||j	        k    rd}$|j        |"z   |_        |$s.|                     dt          j        |j	        |"                     ||z   | z   }||	_        d S )	Nc                 L    g | ]!}t          j        |j        |j                  "S rC   )r   r   tokenr   ).0ts     r   
<listcomp>z1SnippetsExtension.insert_text.<locals>.<listcomp>y  s(    HHHAu~agqw77HHHr   EPSILONr3   r   rG   r   FT)r   r   r   r   	Exceptionr   ru   r   compute_positionr   r   TextNoder   r:   rt   ri   r   r   r   r9   r   r   r8   r   ro   )%r   r   r*   r+   r   r   r   r;   r   r   r   token_nodesr   new_text_noder:   r   r   
leaf_startleaf_endr   r   left_offsetright_offsetfirst_token
last_tokenprevious_node	next_noder   	start_posr   r   first_tokenssecond_tokens
first_partsecond_part
left_mergeright_merges%                                        r   r   zSnippetsExtension.insert_textf  sK    K99;;[88::
s 	!&&uc2222    LD&#'#>#>tV#L#L gy<7?i.?JJLLLF$HHHHH  	3 	3E""D&>22229	!!!NK8M"/GF=x==AA;DAqFQAJ/     (
H)
	 011&>Z''KL%a.K$RJA~~#&6"7"7!";"; 0a @0 I"'=88&+}/AAA*+K - 3k6G G (- + ;?m33!$)33'(&,tz9 #( !!:*{":!:; l!:!;!;<= 
 F^x''KL%a.K$RJQ:4D0E0E0I#I#I,Z!^<	/ D!-77%?in<<+,L * 09? B ', , <#}44"'4944&' J):: $) !!:*{":!:; l!:!;!;<=  &LAyI%DJE+KZK8L,Z!^__=MuuJ,K%a.K$RJJ, K#}44"di//%)
,69J,J) K##EN49j$I$IJJJK+ J?m33!TY..&*+5+;k+I
( P$$Qty+(N(NOOO+k9MI+	s#   A 
AAD' '
D54D5c                    g | _         |j        }|j        }t          |          dk    r|d         \  }}	||	f||	dz   fg}|\  }
}|j        }|j        }t          |j                  }|d |         }||dz   d          }|
||fk    rd}t          |          dk    rx|j        d         }d}t          |t          j
                  r9t          |j        j                  t          |j        dd                    z   }g }nt          |j                  }g }|st          |t          j                  r|t          |j                  z  }n|                    |           |                                                    |          s|                    |           n|||fk    r+|                    |           |                    |           n|
\  }}||z
  }|d |         }||d          }t          j        |j        |          }t          j        |j        |          }|                    |           |                    |           |                    |           ||z   }||_        d S )Nr3   r   FT)rR   r   r:   rt   r   r   r   r   r4   r   SnippetASTNoder   r8   r   
startswithr   r   )r   leafr   new_noder*   r+   r   leaf_positionr   r   r   r   
leaf_indexr   text_tokensr   r   single_tokenpossible_snippetr   r   r   r   r   
first_nodesecond_nodes                             r   _insert_snippet_at_nodez)SnippetsExtension._insert_snippet_at_node  s   
}"" #DAqVaQZ0M,
H)
);-..";J;/#JNOO4$'' L;1$$#+?1#5 #.0DEE 	' -9@AAX_QRR0112 ! %'MM#'#8#8L$&M .h77 2 D$9$99LL ''111}}11%88 . ''---$''%%%))))%LAyI%DuuJ,K	:>>J.K@@K
+++))),,,"]2(r   c                    |\  }}|\  }}t          | j                  }| j        |         \  }}	i }
|D ]}|\  \  }	}\  }}||f|
|<   g }||fg}t          ||dz             D ]}|
|         \  }}t          |          dk    r||fg}||k     r|                    ||f           n+||k    r%|                    |t          ||          f           |                    |           g }|S r   )minrO   ry   rt   r8   )r   r   r   
start_linestart_columnend_line
end_columnroot_colroot_positionr   line_limitssegmentr*   polygon	seg_startseg_ends                   r   _region_to_polygonz$SnippetsExtension._region_to_polygon  s7   #( 
L"*t)**-h7q$ 	- 	-G&-#JQs!&K-.*hl33 		 		D!,T!2Iw7||q   ),-hg////!!c':&>&>?@@@NN7###GGr   c                 p   ||}}d }|||j         |j         k    r||j        }|j         |j         k    r||n}|j         |j         k    r||j        }|j         |j         k    r||nOt          |          t          |          k    rt          |t          j                  r|}n|j        }|j        }|||S N)depthr   idr4   r   r   )r   
start_nodeend_noder   r   ancestors         r   _find_lowest_common_ancestorz.SnippetsExtension._find_lowest_common_ancestor4  s     *H:	#
(>/J$4449N%,	 /J$4449N  #io55*'.
 #io55* !)}}:..i)=>> (H!(I#*J) #
(>* r   c                 2    |                      ||           d S r  )r   )r   selection_startselection_ends      r   rc   z"SnippetsExtension.remove_selectionN  s    >>>>>r   c                     | j         | \  }}} | j         | \  }}}|                     ||          }||                                  d S |                     ||          }|D ]Y}|\  \  }}	\  }}
t	          |t                                }t          | j                            |                    }|	}|D ]}| j	        |         \  }}|j
        r||
k    r n|j        }t          |t          j                  rt          |          dk    r|d         }|d         \  }}||k    rD|j                                         t          j        t          j                              |_        ||k    r||
k    r|                                 |j        }t          |j                  }|                    |j                   ||_        |j        }d}| j        D ]$}||k    r| j        |         }||z
  |_        |dz  }%It          |t          j                  rt          |          dk    r|d         d         \  }}||k    r~||
k    rx|                                 |}|j        [|j        }t          |t          j                  r:t          |j        j                  }|                    |j                   ||_        t          |t          j                  rt          |          dk    r|d         \  }}||f||dz   ff}|\  \  }}\  }}||k    rh||
k    r@|j        }t          |j                  }|                    |j                   ||_        |}|
|z
  }|j        }||d          |_        ||z   }||k     r3||z
  }|
|z
  }|j        }|d |         ||d          z   |_        |||z
  z   }[|                                  d S r   )r   r  ru   r  sumtupler   r	   intersectionrO   	to_deleter:   r4   r   r   rt   r   deleter   r   r   r   rz   r   r6   rP   r   r{   )r   r  r  r	  r   r
  r  polyr   r   r   bboxnodes_spannedcurrent_positionnode_idr;   rO   r   r   node_parentr   r<   r   numr   	leaf_lineleaf_colr   
start_diffend_diffs                                 r   r   z#SnippetsExtension._remove_selectionR  s_   646H
Aq44mD!Q44ZJJJJLLLF&&FF I	H I	HG18.Q:w((D !8!8!>!>??M+( DH DH,W54> #z11E $dE$899 =H=))Q..(5a(8/<Q/?,
H(G33 ,33555/4~en>N>N/O/OD,,'+;;;':55 $.2k04$/$618 18 - 1 1$2F G G G5B 215'(+/+< !2 !2C'*^';';262CC2H9G$9N(,	en55 'H=))Q..1>q1A!1D.X%)999':55 $3; 0#';#:26+K'1+u~'N'N %K8<,0K,>9@ 9@(5(9(9$:N(O(O(O=J(:en55 H=))Q...;A.>+	8&1Ix!|3L)N5B2OQ
]a':55#z11*.+K,01C,D,DM)--d.BCCC1>K./7,,#-#8D)-J)3DEE):DJ/9D/@,,#&666%5
%B
#-#8%)Z
&0*&=&0&;'<
 -:0EF )r   c                    |j         | _         | j                            |j                   |j        D ]}|j        |         \  }}t	          |t
                    r:|D ]6}t          d |D                       }| j                            ||           7at	          |t                    rLt          |          dk    r|dz  }t          d |D                       }| j                            ||           d S )Nc              3   $   K   | ]}|D ]}|V  d S r  rC   r   poscoors      r   	<genexpr>z9SnippetsExtension.update_position_tree.<locals>.<genexpr>  s/      #L#LS#L#LD#L#L#L#L#L#L#Lr   r3   r   c              3   $   K   | ]}|D ]}|V  d S r  rC   r#  s      r   r&  z9SnippetsExtension.update_position_tree.<locals>.<genexpr>  s/       J J#c J Jd J J J J J J Jr   )
r.   rO   updater0   r4   r   r  r	   ro   rt   )r   visitorrO   r:   r   r   s         r   update_position_treez&SnippetsExtension.update_position_tree  s   ".!!'"6777$1 
	; 
	;M!.}=KHa(D)) ;' > >G##L#LG#L#L#LLLGJ%%mW====> He,, ;x==A%%'!|H  J J J J JJJ
!!-:::
	; 
	;r   c                    ||fdz  }t          | j                            |                    }d\  }}}t          |          dk    r|D ]|}| j        |         d         }t          |t          j                  r|}2t          |t          j                  r	|dk    r|}Ut          |t          j	                  r|j
        dk    r n}|>t          |          }	t          d |j        D                       }
|	|
vr|j        d         }|||fS )Nr   )NNNr   rG   r   c                 ,    g | ]}t          |          S rC   )r  )r   r   s     r   r   z<SnippetsExtension._find_node_by_position.<locals>.<listcomp>  s    GGG%BuIIGGGr   )r   r	   r  rt   rO   r4   r   r   r   r   r   r  setr   )r   r*   colpointnode_numberscurrent_nodenearest_textnearest_snippetr.   r  text_idss              r   r   z(SnippetsExtension._find_node_by_position  s,   saDJ33E::;;6F3lO|q  + 	 	#1+>rBlE,@AA &2OOen== "a'''3en== #(I55#&&GGG<3FGGGHHHh&&+226_l::r   c                     t           sd S | j        r	d| _        d S |                     ||          \  }}}|2| j        j        p| j        j        }|s|                                  d S d S ||j        | _        d S d S )NF)	r   rI   r   r   
is_undoing
is_redoingru   r6   rJ   )r   r*   r.  r;   r3  r   ignores          r   r\   z SnippetsExtension.cursor_changed  s     	F! 	%*D"F#'#>#>tS#I#I oq<[+Et{/EF 

  *&5&<### +*r   Fc                    d| _         d | _        i | _        i | _        |s*d | _        g | _        g | _        d| _        d| _        d | _	        t          rt          j                    | _        | j                            d           d S )Nr   FrG   r   )r.   r	   rO   rP   rK   rQ   rR   rH   rJ   rL   r   rS   r   r|   )r   partial_resets     r   ru   zSnippetsExtension.reset  s    
 	*DH DO DO%*D""$D%)D" 	'DJ**?;;;;;r   c           	      R   | j                                         }| j        D ]}| j        |         }|D ]}t          | j                                                   }|j        }t          |j        t                    rt          |j                  g}|D ]}|d         \  }}	|d         \  }
}|d         |d         k    r|dz  }|	                    |          }|
                    |                                           |                    t          j                   |                    t          j        |	           |	                    |
          }|
                    |                                t          j                   |                    t          j        t          j                   |                    t          j        |t          j                   t          | j         j                  }| j                             dt          |          |           d S )	Nr   rG   r3   nmoder=  r?  r   )outline_color)r   documentrP   r   
textCursorr:   r4   r  r   findBlockByNumbersetPositionmovePositionStartOfBlockNextCharacter
KeepAnchorr   comment_colorhighlight_selection)r   rB  r<   r   r;   cursorr:   pathr   r   r   r   start_block	end_blockcolors                  r   r}   zSnippetsExtension.draw_snippets  sF   ;''))"/ 	I 	IN -n=M% I I$T[%;%;%=%=>>=dmU33 5 $T] 3 34H$ I ID/3Aw,J+/8(HjAw$r(**"a
"*"<"<Z"H"HK&&{';';'='=>>>''(@AAA''#1\ ( C C C ( : :8 D DI&&!**,,k.DF F F''#0{7M ( O O O''#1Z(3 ( 5 5 5 #4;#<==EK33O4?4G4GBG 4 I I I I)II	I 	Ir   c                    | j                                         }| j                                         }|| j        vr1d}|| j        vr&t	          | j                                                  }| j        |         d         }|| _        |j        }t          |t                    rt          |          g}|d         d         \  }}|d         d         \  }}	|d         d         |d         d         k    r|                                dk    r|	dz  }	|                    |          }
|                    |
                                           |                    t          j                   |                    t          j        |           |                    |          }|                    |                                t          j                   |                    t          j        t          j                   |                    t          j        |	t          j                   | j                             |           | j                                          d S )Nr   rG    r3   r<  r>  r@  )r   rC  rB  rP   maxkeysrJ   r:   r4   r  r   r   rD  rE  rF  r   rG  rH  rI  setTextCursorrequest_signature)r   r<   rL  rB  r;   rO   r   r   r   r   rN  rO  s               r   r   z SnippetsExtension.select_snippet  sA   ''));''))!222NT%666!$T%6%;%;%=%=!>!> 03,mU++ 	2!-001M#0#3A#6 
L,R04*A-"3B"777yy{{b  a
00<<;//11222K4555% 	 	7 	7 	7..x88	  +"8	: 	: 	:$;+A 	 	C 	C 	C%' 	 	) 	) 	) 	!!&)))%%'''''r   c                    | j         |                     d           d| _        | j                            | j                    | j         \  }}t          ||| j                  }| j                            |           |j        | _	        | 
                    |           | j                            d           |                                  d S d S )NT)r:  r   )rL   ru   rH   rK   r   r'   r.   r   r/   rP   r*  r   r|   r}   )r   r   r   r)  s       r   r{   zSnippetsExtension._update_ast2  s    !-JJTJ***%)D"H%%d&<==='+'=$J,L$*:< <GHOOG$$$ ' 3D%%g...K..???      .-r   c                 ^   | j                                         \  }}t          ||| j                  }t	          |          }|                    ||f           |                    |           d| _        | j                             |	                                d           | j         j
        sd S t          sd S d}| j        rAt          | j                  5  |                     ||          \  }}}	|d}|j        }
|
dz   }|j        }|D ]}||         }|D ]	}||_        
|dz  }| j        D ]&}||
k    r| j        |         }|D ]	}||_        
|dz  }'|                                  |                     |||||           |                                  t-          |          dk    r|                     |
dz              |                                  n||                                  d d d            n# 1 swxY w Y   |r|                                  || _        |j        | _        t-          | j                  dk    rQd| _        ||f| _        |                     |           |                                  |                     d           d S |                                  d S d S )NTF)will_insert_textr3   r   )r<   )r   r   r'   r.   r   r   r   rI   r   r   r   r   rH   r   r   r   r6   r/   rP   r   r   r{   rt   r   r}   ru   rK   rL   r*  )r   r   r*   r+   r)  rK   new_snippetr   snippet_rootr   root_numberr   r/   r<   r   r   s                   r   rZ   z SnippetsExtension.insert_snippet@  sI   {99;;f(vt7GHH%%dF^,,,

7!%

UCCC{( 	F 	F! 	!d455 ! !(,(C(C&)" )"%lA+"'K"."5K"-/K")"5K*5 ) )(3N(C,9 > >L2=L//#q(*.*; - -)K77,0,=n,MM0= B B6A 3 3'1,K**,,,00lCv? ? ?$$&&&;''!++++;?+KKK&&((((%JJLLL9! ! ! ! ! ! ! ! ! ! ! ! ! ! !<  	JJLLLDH ' 3D4$%%)))-&*.&))'222""$$$##1#55555 

	 	s   DG::G>G>N)F)r?   r@   rA   rB   r1   rk   r   r%   r   re   rg   r^   rX   r`   r   r   r   r   r  r  rc   r   r*  r   r\   ru   r}   r   r{   rZ   rC   r   r   rE   rE   N   s       OO' ' '&  @( ( (
 
% % W 
T%2 
% % W 
T%. 
! ! W 
T!
$5 $5 $5L 
! ! 
T!)> )> )>VA, A, A,F~, ~, ~,@4) 4) 4)l  0  4 
? ? 
T?R R Rh; ; ;; ; ;0= = ="< < < < I I IB!( !( !(F! ! != = = = =r   rE   )rB   rm   r#   
qtpy.QtGuir   r   qtpy.QtCorer   r   r   r   rtreer	   r   r   spyder.py3compatr
   spyder.api.editorextensionr   spyder.utils.snippets.astr   r   r   r   DIFF_DELETEDIFF_INSERTrx   r   r%   r'   rE   rC   r   r   <module>re     s   & %      + * * * * * * * 0 0 0 0 0 0 0 0 0 0 - - - - - -OO   OOO , + + + + + 6 6 6 6 6 6 H H H H H H H H H H .--!-/?/KL    " " " " " " " ".o o o o o o o o o os   - 77