�`^c@s�dZddlmZddlmZidd6dd6dd 6Zd
Zddd��YZed
kr�ddl Z e j
ddd�ndS(s�ParenMatch -- An IDLE extension for parenthesis matching.
When you hit a right paren, the cursor should move briefly to the left
paren. Paren here is used generically; the matching applies to
parentheses, square brackets, and curly braces.
i�(tHyperParser(tidleConft(t)t[t]t{t}idt
ParenMatchcBseZdZdd#gfgZejddddd�Zejddd d
ddd�Zejej �d
�Z
ejdddd
ddd�ZdZd$Z
d�Zd�Zd�Zd�Zd�Zd�Zd%d�Zd�Zd�Zd�Zd �Zd!�Zd"�ZRS(&s�Highlight matching parentheses
There are three supported style of paren matching, based loosely
on the Emacs options. The style is select based on the
HILITE_STYLE attribute; it can be changed used the set_style
method.
The supported styles are:
default -- When a right paren is typed, highlight the matching
left paren for 1/2 sec.
expression -- When a right paren is typed, highlight the entire
expression from the left paren to the right paren.
TODO:
- extend IDLE with configuration dialog to change options
- implement rest of Emacs highlight styles (see below)
- print mismatch warning in IDLE status window
Note: In Emacs, there are several styles of highlight where the
matching paren is highlighted whenever the cursor is immediately
to the right of a right paren. I don't know how to do that in Tk,
so I haven't bothered.
teditsShow surrounding parenss<<flash-paren>>t
extensionsRtstyletdefaultt
expressionsflash-delayttypetinti�thilitetbelltboolis<<parenmatch-check-restore>>s
<KeyPress>s
<ButtonPress>s<Key-Return>s<Key-BackSpace>cCsT||_|j|_|jj|j|j�d|_d|_|j|j�dS(Ni( teditwinttexttbindtRESTORE_VIRTUAL_EVENT_NAMEt
restore_eventtcountertis_restore_activet set_styletSTYLE(tselfR((s(/sys/lib/python2.7/idlelib/ParenMatch.pyt__init__;s
cCsC|js?x'|jD]}|jj|j|�qWt|_ndS(N(RtRESTORE_SEQUENCESRt event_addRtTrue(Rtseq((s(/sys/lib/python2.7/idlelib/ParenMatch.pytactivate_restoreGs cCsC|jr?x'|jD]}|jj|j|�qWt|_ndS(N(RRRtevent_deleteRtFalse(RR!((s(/sys/lib/python2.7/idlelib/ParenMatch.pytdeactivate_restoreMs cCs[||_|dkr0|j|_|j|_n'|dkrW|j|_|j|_ndS(NRR
(Rtcreate_tag_defaultt
create_tagtset_timeout_lasttset_timeouttcreate_tag_expressiontset_timeout_none(RR((s(/sys/lib/python2.7/idlelib/ParenMatch.pyRSs cCsWt|jd�j�}|dkr2|j�dS|j�|j|�|j�dS(Ntinsert(RRtget_surrounding_bracketstNonetwarn_mismatchedR"R'R((Rteventtindices((s(/sys/lib/python2.7/idlelib/ParenMatch.pytflash_paren_event\s
cCs�|jjd�}|tkr"dSt|jd�}|j�sDdS|jt|t�}|dkrt|j �dS|j
�|j|�|j�dS(Ns insert-1c(
Rtgett_openersRRt
is_in_codeR-R R.R/R"R'R)(RR0tcloserthpR1((s(/sys/lib/python2.7/idlelib/ParenMatch.pytparen_closed_eventfs
cCs-|jjd�|j�|jd7_dS(Ntpareni(Rt
tag_deleteR%R(RR0((s(/sys/lib/python2.7/idlelib/ParenMatch.pyRvs
cCs ||jkr|j�ndS(N(RR(Rttimer_count((s(/sys/lib/python2.7/idlelib/ParenMatch.pythandle_restore_timer{scCs|jr|jj�ndS(N(tBELLRR(R((s(/sys/lib/python2.7/idlelib/ParenMatch.pyR/s cCs1|jjd|d�|jjd|j�dS(s'Highlight the single paren that matchesR9iN(Rttag_addt
tag_configt
HILITE_CONFIG(RR1((s(/sys/lib/python2.7/idlelib/ParenMatch.pyR&�scCsk|jj|d�d kr-|dd}n
|d}|jjd|d|�|jjd|j�dS(
sHighlight the entire expressioniRRRs+1cR9iN(RRR(RR3R>R?R@(RR1t
rightindex((s(/sys/lib/python2.7/idlelib/ParenMatch.pyR*�s
cCsM|jd7_||j|jjd�d�}|jjjt||�dS(sSHighlight will remain until user input turns it off
or the insert has movediR,cSsE||jjd�kr(|j|�n|jjjt||�dS(NR,(RtindexR<Rt
text_frametaftertCHECK_DELAY(tcallmeRtcRB((s(/sys/lib/python2.7/idlelib/ParenMatch.pyRF�sN(RRRBRRCRDRE(RRF((s(/sys/lib/python2.7/idlelib/ParenMatch.pyR+�s cCs8|jd7_|jjj|j||jd��dS(s7The last highlight created will be removed after .5 secicSs
|j|�S(N(R<(RRG((s(/sys/lib/python2.7/idlelib/ParenMatch.pyt<lambda>�sN(RRRCRDtFLASH_DELAY(R((s(/sys/lib/python2.7/idlelib/ParenMatch.pyR(�s(sShow surrounding parenss<<flash-paren>>(s
<KeyPress>s
<ButtonPress>s<Key-Return>s<Key-BackSpace>N(t__name__t
__module__t__doc__tmenudefsRt GetOptionRRItGetHighlighttCurrentThemeR@R=RRRR"R%RR2R8R.RR<R/R&R*R+R((((s(/sys/lib/python2.7/idlelib/ParenMatch.pyRs4
t__main__Ns!idlelib.idle_test.test_parenmatcht verbosityi((RLtidlelib.HyperParserRtidlelib.configHandlerRR4RERRJtunittesttmain(((s(/sys/lib/python2.7/idlelib/ParenMatch.pyt<module>s�
|