ž ©ÿfEc @sƒdZddlTddlmZddlmZmZdZdZdZ dZ dZ dZ dZ dZdZGdd„dƒZdS(uH An auto-completion window for IDLE, used by the AutoComplete extension i(u*(uMC_SHIFT(uCOMPLETE_FILESuCOMPLETE_ATTRIBUTESu<>u u u<>uuu u uu u u u u u!<>u uu ucBsÈ|EeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„ZdS( uAutoCompleteWindowcCs¨||_d|_|_|_d|_|_d|_d|_d|_ d|_ d|_ d|_ d|_ d|_|_|_|_|_|_d|_dS(NF(uwidgetuNoneuautocompletewindowulistboxu scrollbaruorigselforegrounduorigselbackgroundu completionsumorecompletionsumodeustartu startindexulasttypedstartuuserwantswindowuhideidu keypressidu listupdateidu winconfigidu keyreleaseidu doubleclickiduFalseulastkey_was_tab(uselfuwidget((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyu__init__s        ,uAutoCompleteWindow.__init__cCsòtt|jƒt|ƒƒ}d}x1||krW|j|||krW|d7}q'W|t|jƒkr¦|jjd|j|fd|jt|jƒfƒn|t|ƒkrå|jjd|j|f||d…ƒn||_dS(Niiu%s+%dc(uminulenustartuwidgetudeleteu startindexuinsert(uselfunewstartumin_lenui((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyu _change_start8s& u AutoCompleteWindow._change_startcCsvd}t|jƒ}xD||kr[||d}|j||krN|}q|d}qWt|t|jƒdƒS(u’Find the first index in self.completions where completions[i] is greater or equal to s, or the last index if there is no such one.iii(ulenu completionsumin(uselfusuiujum((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyu_binary_searchEs u!AutoCompleteWindow._binary_searchc CsG|j|ƒ}|j|dt|ƒ…|kr6|S|d}t|jƒ}xT||kr¥||d}|j|dt|ƒ…|kr˜|}qR|d}qRW|d}||krÇ|j|S|j|}|j|}tt|ƒt|ƒƒ} t|ƒ}x.|| kr8||||kr8|d7}q W|d|…S(uÖAssuming that s is the prefix of a string in self.completions, return the longest string which is a prefix of all the strings which s is a prefix of them. If s is not a prefix of a string, return s.Nii(u_binary_searchu completionsulenumin( uselfusufirstuiujumulastu first_compu last_compumin_len((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyu_complete_stringRs(# #       #u#AutoCompleteWindow._complete_stringcCsÍt|jjƒdƒ}|jj|ƒ|j}|j|}|j|ƒ|kr]|}nbtt|ƒt|ƒƒ}d}x.||kr®||||kr®|d7}qW|d|…}|j |ƒ|j|dt|j ƒ…|j kr|jj d|j d|j ƒn²|jj d|jjdƒd|jjdƒƒ|jrÉ|j|_d|_|jjdtƒx$|jD]}|jjt|ƒqƒW|jj|j|j ƒƒ|jƒndS(u|Should be called when the selection of the Listbox has changed. Updates the Listbox display and calls _change_start.iiNuselectbackgrounduselectforegroundubgufg(uintulistboxu curselectionuseeulasttypedstartu completionsu_binary_searchuminulenu _change_startustartu configureuorigselbackgrounduorigselforegrounducgetumorecompletionsuNoneudeleteuENDuinsertu select_setu_selection_changed(uselfucurselultsuselstartunewstartumin_lenuiuitem((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyu_selection_changedqs2   # )    u%AutoCompleteWindow._selection_changedcCsQ|\|_|_||_|jj|ƒ|_|jj|jdƒ|_|rè|j|jƒ}|j}|j |ƒ|j |ƒ}|j||krè|t |jƒdksÛ|j|ddt |ƒ…|krè||kSn||_ |j|_ t|jƒ|_} | jdƒ| jdƒy#| jjdd| jddƒWntk rdYnXt| d tƒ|_} t| d | jd dd d ƒ|_} x!|jD]} | jt| ƒq°W| jdƒ|_ | jdƒ|_!| j"d| j#ƒ| j$dt%dt&ƒ| j$dt'dt(ddƒ|jj*|j |jƒƒ|j+ƒ|jj,t-|j.ƒ|_/x!t0D]} |jj1t-| ƒq{W|jj,t2|j3ƒ|_4x!t5D]} |jj1t2| ƒqºW|jj,t6|j7ƒ|_8|jj1t6t9ƒ| j,t:|j;ƒ|_<| j,t=|j>ƒ|_?| j,t@|jAƒ|_BdS(u¤Show the autocomplete list, bind events. If complete is True, complete the text, and if there is exactly one matching completion, don't open a list.uinsertiNu +10000+10000u!::tk::unsupported::MacWindowStyleustyleuhelpu noActivatesuorientuyscrollcommanduexportselectionubguwhiteuselectforegrounduselectbackgrounducommandusideufilluexpandFT(Cu completionsumorecompletionsumodeuwidgetuindexu startindexugetustartu_complete_stringu _change_startu_binary_searchulenuuserwantswindowulasttypedstartuTopleveluautocompletewindowu wm_geometryuwm_overrideredirectutkucallu_wuTclErroru ScrollbaruVERTICALu scrollbaruListboxusetuFalseulistboxuinsertuENDucgetuorigselforegrounduorigselbackgrounduconfiguyviewupackuRIGHTuYuLEFTuBOTHuTrueu select_setu_selection_changedubinduHIDE_VIRTUAL_EVENT_NAMEu hide_eventuhideiduHIDE_SEQUENCESu event_adduKEYPRESS_VIRTUAL_EVENT_NAMEukeypress_eventu keypressiduKEYPRESS_SEQUENCESuKEYRELEASE_VIRTUAL_EVENT_NAMEukeyrelease_eventu keyreleaseiduKEYRELEASE_SEQUENCEuLISTUPDATE_SEQUENCEulistselect_eventu listupdateiduWINCONFIG_SEQUENCEuwinconfig_eventu winconfigiduDOUBLECLICK_SEQUENCEudoubleclick_eventu doubleclickid(uselfu comp_listsuindexucompleteumodeu userWantsWinu completedustartuiuacwu scrollbarulistboxuitemuseq((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyu show_window•sf   '              uAutoCompleteWindow.show_windowcCs |jƒsdS|j}|j|jƒ|j|jƒ\}}}}|j}|jƒ|jƒ}} |jƒ|jƒ} } |jƒt |t d| |ƒƒ} |j ƒ|} | ||| ksØ|| krå| |7} n | | 8} |j d| | fƒdS(Niu+%d+%d( u is_activeuwidgetuseeu startindexubboxuautocompletewindowu winfo_widthu winfo_heightu winfo_rootxuminumaxu winfo_rootyu wm_geometry(uselfueventutextuxuyucxucyuacwu acw_widthu acw_heightu text_widthu text_heightunew_xunew_y((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyuwinconfig_eventÚs   &   u"AutoCompleteWindow.winconfig_eventcCs|jƒsdS|jƒdS(N(u is_activeu hide_window(uselfuevent((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyu hide_eventïs uAutoCompleteWindow.hide_eventcCsJ|jƒsdSd|_t|jjƒdƒ}|j|j|ƒdS(NiT(u is_activeuTrueuuserwantswindowuintulistboxu curselectionu _change_startu completions(uselfueventucursel((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyulistselect_eventôs   u#AutoCompleteWindow.listselect_eventcCs;t|jjƒdƒ}|j|j|ƒ|jƒdS(Ni(uintulistboxu curselectionu _change_startu completionsu hide_window(uselfueventucursel((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyudoubleclick_eventûsu$AutoCompleteWindow.doubleclick_eventcs]|jƒsdS|j‰t|dƒr4|j}nd}ˆdkrRd&|_ntˆƒdks‹ˆd'ks‹|jtkrˆd(krÂ|t @ rÂtˆƒdkrÀ|j |j ˆƒn¦ˆdkrã|j |j d ƒnƒˆdkr|j |j d ƒn`ˆdkr)|j |j d ƒn=t|j ƒdkrL|j ƒdS|j |j dd)…ƒ|j |_ |jjdt|jjƒdƒƒ|jj|j|j ƒƒ|jƒd Sˆd krÜ|j ƒdS|jtkr÷ˆd*ks|jtkrˆd+kr|t @ rt|jjƒdƒ}|j|dt|j ƒ…|j kr|jtksx|j r|j |j|ƒn|j ƒdSˆd,kr-| r-d-|_t|jjƒdƒ}ˆdkrçd}nˆdkr t|jƒd}nâˆd.kr—|jj|jjƒƒ|jjdƒ}ˆdkrbtd||ƒ}qëˆdkstt‚tt|jƒd||ƒ}nTˆdkr¹td|dƒ}n2ˆdksËt‚tt|jƒd|dƒ}|jj|ƒ|jj|ƒ|jƒ|j |j|ƒd Sˆdkr| r|jr„t|jjƒdƒ}|j |j|ƒ|j ƒd Sd-|_d-|_dSn¼t‡fdd†d/DƒƒrÀdS|jrK|jd%krK|j |j |jƒ|j |_ |jjdt|jjƒdƒƒ|jj|j|j ƒƒ|jƒd S|j ƒdSdS(0Numc_stateiuTabiu underscoreu BackSpaceuperioduminusu_u.u-ubreakuReturnuspaceu parenleftu parenrightu bracketleftu bracketrightuslashu backslashuquotedblu apostropheuHomeuEnduPrioruNextuUpuDownc3s|]}|ˆkVqdS(N((u.0us(ukeysym(u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyu asu4AutoCompleteWindow.keypress_event..uShiftuControluAltuMetauCommanduOptionu F(u underscoreu BackSpace(uperioduminusiÿÿÿÿ(uperioduspaceu parenleftu parenrightu bracketleftu bracketright(uslashu backslashuquotedblu apostrophe(uHomeuEnduPrioruNextuUpuDownT(uPrioruNext(uShiftuControluAltuMetauCommanduOption( u is_activeukeysymuhasattrumc_stateuFalseulastkey_was_tabulenumodeuCOMPLETE_FILESuMC_SHIFTu _change_startustartu hide_windowulasttypedstartulistboxu select_clearuintu curselectionu select_setu_binary_searchu_selection_changeduCOMPLETE_ATTRIBUTESu completionsuTrueuuserwantswindowunearestu winfo_heightumaxuAssertionErroruminuanyuchar(uselfueventustateucurselunewselujump((ukeysymu?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyukeypress_events²            &      )        #         &  u!AutoCompleteWindow.keypress_eventcCs[|jƒsdS|jjdƒ|jjd|jt|jƒfƒkrW|jƒndS(Nuinsertu%s+%dc(u is_activeuwidgetuindexu startindexulenustartu hide_window(uselfuevent((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyukeyrelease_eventts  +u#AutoCompleteWindow.keyrelease_eventcCs |jdk S(N(uautocompletewindowuNone(uself((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyu is_active|suAutoCompleteWindow.is_activecCs|j|j|jƒƒdS(N(u _change_startu_complete_stringustart(uself((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyucompletesuAutoCompleteWindow.completecCsL|jƒsdSx!tD]}|jjt|ƒqW|jjt|jƒd|_x!tD]}|jjt |ƒqZW|jjt |j ƒd|_ |jjt t ƒ|jjt |j ƒd|_ |jjt|jƒd|_|jjt|jƒd|_|jjƒd|_|jjƒd|_|jjƒd|_dS(N(u is_activeuHIDE_SEQUENCESuwidgetu event_deleteuHIDE_VIRTUAL_EVENT_NAMEuunbinduhideiduNoneuKEYPRESS_SEQUENCESuKEYPRESS_VIRTUAL_EVENT_NAMEu keypressiduKEYRELEASE_VIRTUAL_EVENT_NAMEuKEYRELEASE_SEQUENCEu keyreleaseidulistboxuLISTUPDATE_SEQUENCEu listupdateiduautocompletewindowuWINCONFIG_SEQUENCEu winconfigidu scrollbarudestroy(uselfuseq((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyu hide_windowƒs0              uAutoCompleteWindow.hide_windowN(u__name__u __module__u __qualname__u__init__u _change_startu_binary_searchu_complete_stringu_selection_changedu show_windowuwinconfig_eventu hide_eventulistselect_eventudoubleclick_eventukeypress_eventukeyrelease_eventu is_activeucompleteu hide_window(u __locals__((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyuAutoCompleteWindows  $ E     s   uAutoCompleteWindowN(u u ( uuu u uu u u u u (u__doc__utkinteruidlelib.MultiCalluMC_SHIFTuidlelib.AutoCompleteuCOMPLETE_FILESuCOMPLETE_ATTRIBUTESuHIDE_VIRTUAL_EVENT_NAMEuHIDE_SEQUENCESuKEYPRESS_VIRTUAL_EVENT_NAMEuKEYPRESS_SEQUENCESuKEYRELEASE_VIRTUAL_EVENT_NAMEuKEYRELEASE_SEQUENCEuLISTUPDATE_SEQUENCEuWINCONFIG_SEQUENCEuDOUBLECLICK_SEQUENCEuAutoCompleteWindow(((u?/opt/alt/python33/lib64/python3.3/idlelib/AutoCompleteWindow.pyus