3 § f ,ã@sÄddlZddlZddlZddlZddlmZddlmZdZdd„Z dd„Z ej e ƒej ƒZ ej d ej ƒZd d „ZGd d „d eƒZdd„ZedkrÀddlmZedddd�ddlmZeeƒdS)éN)ÚidleConf)Ú DelegatorFcCsd|dj|ƒdS)z9Return a named group pattern matching list of alternates.z(?P<%s>ú|ú))Újoin)ÚnameZ alternates©rú6/opt/alt/python36/lib64/python3.6/idlelib/colorizer.pyÚany sr c Cs®dtdtjddgƒd}dd„ttƒDƒ}dtd|ƒd}td d gƒ}d }|d }|d }|d}|d}td||||gƒ} |d|d|d| dtddgƒS)Nz\bÚKEYWORDÚasyncÚawaitcSs*g|]"}|jdƒ r|tjkrt|ƒ‘qS)Ú_)Ú startswithÚkeywordÚkwlistÚstr)Ú.0rrrr ú s zmake_pat..z([^.'\"\\#]\b|^)ÚBUILTINÚCOMMENTz#[^\n]*z(?i:r|u|f|fr|rf|b|br|rb)?z'[^'\\\n]*(\\.[^'\\\n]*)*'?z"[^"\\\n]*(\\.[^"\\\n]*)*"?z''''[^'\\]*((\\.|'(?!''))[^'\\]*)*(''')?z'"""[^"\\]*((\\.|"(?!""))[^"\\]*)*(""")?ÚSTRINGrÚSYNCz\n)r rrÚdirÚbuiltins) ÚkwZ builtinlistÚbuiltinÚcommentZ stringprefixZsqstringZdqstringZ sq3stringZ dq3stringÚstringrrr Úmake_pats rz\s+(\w+)cCs^tjƒ}tj|dƒ}tj|ddd�}tj|dƒ}|j|d|d||d|d|dd�d S) zcSet color options of Text widget. If ColorDelegator is used, this should be called first. ZnormalZcursorZfg)ZfgBgZhiliteÚ foregroundÚ background)r r!ZinsertbackgroundZselectforegroundZselectbackgroundZinactiveselectbackgroundN)rÚ CurrentThemeÚ GetHighlightÚconfig)ÚtextÚthemeZ normal_colorsZ cursor_colorZ select_colorsrrr Ú color_config"s  r'c@s„eZdZdd„Zdd„Zdd„Zdd„Zdd d „Zdd d „Zd Z dZ dZ ddd„Z d Z ddd„Zdd„Zdd„Zdd„Zdd„Zd S) ÚColorDelegatorcCs"tj|ƒt|_t|_|jƒdS)N)rÚ__init__ÚprogÚidprogÚ LoadTagDefs)Úselfrrr r)9s zColorDelegator.__init__cCs\|jdk r|jdƒtj||ƒ|dk rL|jƒ|jd|jƒ|jddƒn d|_d|_ dS)Nz<>z1.0ÚendTF) ÚdelegateZunbindrÚ setdelegateÚ config_colorsZbindÚtoggle_colorize_eventÚ notify_rangeÚstop_colorizingÚallow_colorizing)r-r/rrr r0?s   zColorDelegator.setdelegatecCs8x(|jjƒD]\}}|r |j|f|Žq W|jdƒdS)NZsel)ÚtagdefsÚitemsZ tag_configureZ tag_raise)r-ÚtagZcnfrrr r1LszColorDelegator.config_colorsc Csztjƒ}tj|dƒtj|dƒtj|dƒtj|dƒtj|dƒdddœdddœtj|dƒtj|dƒd œ |_trvtd |jƒdS) NrrrrZ definition)r!r ÚerrorÚhit) rr rrÚ DEFINITIONrÚTODOZERRORr:r6)rr"r#r6ÚDEBUGÚprint)r-r&rrr r,Rs      zColorDelegator.LoadTagDefsNcCs6|j|ƒ}|jj|||ƒ|j||dt|ƒƒdS)Nz+%dc)Úindexr/Úinsertr3Úlen)r-r?ÚcharsZtagsrrr r@cs zColorDelegator.insertcCs&|j|ƒ}|jj||ƒ|j|ƒdS)N)r?r/Údeleter3)r-Úindex1Úindex2rrr rChs zColorDelegator.deleteTFcCsb|jd||ƒ|jr$tr tdƒdS|jrÚ colorizingr4r5ÚafterÚ recolorize)r-rDrErrr r3qszColorDelegator.notify_rangecCsR|jr(|j}d|_trtdƒ|j|ƒd|_d|_|rN|jsH|jƒn||_dS)Nzcancel scheduled recolorizerFT) rHr=r>Ú after_cancelr5r4rIÚdestroyÚclose_when_done)r-rNrHrrr Úcloses  zColorDelegator.closecCsŠ|jr(|j}d|_trtdƒ|j|ƒ|jrF|jrFtr@tdƒd|_|j |_|jrn|j rn|jd|jƒ|_tr†td|jr€dp‚dƒdS) Nzcancel scheduled recolorizerzstop colorizingTrFzauto colorizing turnedZonZoffÚbreak) rHr=r>rLr5rIr4rJrK)r-ZeventrHrrr r2�s"   z$ColorDelegator.toggle_colorize_eventc Csæd|_|jstrtdƒdS|js2tr.tdƒdS|jrHtrDtdƒdSzHd|_d|_trbtdƒtjƒ}|j ƒtjƒ}trŽtd||ƒWdd|_X|jrÈ|j dd ƒrÈtr¸td ƒ|j d |j ƒ|_|j râ|j }d|_ |jƒdS) Nz no delegatezauto colorizing is offzalready colorizingFTz colorizing...z %.3f secondsr<z1.0zreschedule colorizingrF)rHr/r=r>r5rIr4ÚtimeZ perf_counterÚrecolorize_mainÚ tag_nextrangerJrKrNrM)r-Zt0Zt1Útoprrr rKžs@zColorDelegator.recolorizecCsúd}�xî|jd|ƒ}|sP|\}}|jd||ƒ|jd|ƒ}|rJ|d}nd}d}|}d}d}�x�|�sð|}|j|d|ƒ}t|dd ƒ}d|j|d ƒk}|j||ƒ} | s²dSx|jD]} |j| ||ƒqºW|| }|jj |ƒ} x´| �r˜x–| j ƒj ƒD]†\} } | �rú| j | ƒ\}}|j | |d ||d |ƒ| dk�rú|jj||ƒ}|�rú|j dƒ\}}|j d|d ||d |ƒ�qúW|jj || jƒƒ} qæWd|j|d ƒk�r¸|}d}nd}|�sÎ|j d|ƒ|jƒ|jrbt�rêtdƒdSqbWqWdS)Nz1.0r<rrFÚFz+%d lines linestartéédz-1cz+%dcÚdefÚclassr;zcolorizing stopped)rXrY)rSÚ tag_removeZ tag_prevranger?ÚminZ tag_namesÚgetr6r*ÚsearchÚ groupdictr7ÚspanrGr+Úmatchr.Úupdater4r=r>)r-ÚnextÚitemÚheadÚtailrBZ lines_to_getÚokZmarkÚliner8ÚmÚkeyÚvalueÚaÚbÚm1rrr rR»sl            zColorDelegator.recolorize_maincCs"x|jD]}|j|ddƒqWdS)Nz1.0r.)r6rZ)r-r8rrr Ú removecolorsüs zColorDelegator.removecolors)N)N)N)N)Ú__name__Ú __module__Ú __qualname__r)r0r1r,r@rCrHr5rIr3rNrOr2rKrRrnrrrr r(7s      Ar(c Cs¾ddlm}m}ddlm}||ƒ}|jdƒtt|jƒj dƒdd…ƒ\}}|jd|d|d fƒd }||d d �}|j dd d�|j d|ƒ|j ƒt |ƒ||ƒ} tƒ} | j| ƒdS)Nr)ÚToplevelÚText)Ú PercolatorzTest ColorDelegatorú+rFz 700x250+%d+%déé¯aaif True: int ('1') # keyword, builtin, string, comment elif False: print(0) else: float(None) if iF + If + IF: 'keyword matching must respect case' if'': x or'' # valid string-keyword no-space combinations async def f(): await g() # All valid prefixes for unicode and byte strings should be colored. 'x', '''x''', "x", """x""" r'x', u'x', R'x', U'x', f'x', F'x' fr'x', Fr'x', fR'x', FR'x', rf'x', rF'x', Rf'x', RF'x' b'x',B'x', br'x',Br'x',bR'x',BR'x', rb'x'.rB'x',Rb'x',RB'x' # Invalid combinations of legal characters should be half colored. ur'x', ru'x', uf'x', fu'x', UR'x', ufr'x', rfu'x', xf'x', fx'x' Zwhite)r!Zboth)ÚexpandZfillr@)ZtkinterrrrsZidlelib.percolatorrtÚtitleÚmapÚintZgeometryÚsplitZpackr@Z focus_setr'r(Z insertfilter) ÚparentrrrsrtrTÚxÚyÚsourcer%ÚpÚdrrr Ú_color_delegators     rƒÚ__main__)Úmainz idlelib.idle_test.test_colorizerrV)Ú verbosityÚexit)Úrun)rrÚrerQZidlelib.configrZidlelib.delegatorrr=r rÚcompileÚSr*r+r'r(rƒroZunittestr…Zidlelib.idle_test.htestrˆrrrr Ús&  K"