a
    	¼3j‘3  ã                   @   sÄ   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ dZdd„ Z	dd„ Z
e e
ƒ ej¡Ze d	ej¡Zd
d„ ZG dd„ deƒZdd„ ZedkrÀd dlmZ edddd d dlmZ eeƒ dS )é    N)ÚidleConf)Ú	DelegatorFc                 C   s   d|  d  |¡ d S )Nz(?P<%s>ú|ú))Újoin)ÚnameZ
alternates© r   úM/www/server/python_manager/versions/3.9.10/lib/python3.9/idlelib/colorizer.pyÚany   s    r
   c            
      C   s¦   dt dtjƒ d } dd„ ttƒD ƒ}dt d|ƒ d }t ddgƒ}d	}|d
 }|d }|d }|d }t d||||gƒ}	| d | d | d |	 d t ddgƒ S )Nz\bÚKEYWORDc                 S   s(   g | ] }|  d ¡s|tjvrt|ƒ‘qS )Ú_)Ú
startswithÚkeywordÚkwlistÚstr)Ú.0r   r   r   r	   Ú
<listcomp>   s   

þzmake_pat.<locals>.<listcomp>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
   r   r   ÚdirÚbuiltins)
ÚkwZbuiltinlistÚbuiltinÚcommentZstringprefixZsqstringZdqstringZ	sq3stringZ	dq3stringÚstringr   r   r	   Úmake_pat   s    ÿ
ÿr   z\s+(\w+)c                 C   s^   t  ¡ }t  |d¡}t  |d¡d }t  |d¡}| j|d |d ||d |d |d d d S )NZnormalZcursorÚ
foregroundZhiliteÚ
background)r   r   ZinsertbackgroundZselectforegroundZselectbackgroundZinactiveselectbackground)r   ÚCurrentThemeÚGetHighlightZconfig)ÚtextÚthemeZnormal_colorsZcursor_colorZselect_colorsr   r   r	   Úcolor_config&   s    úr$   c                   @   s|   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zddd„Zddd„Z	ddd„Z
dd„ Zddd„Zdd„ Zdd„ Zdd„ ZdS ) ÚColorDelegatorc                 C   s*   t  | ¡ |  ¡  t| _t| _|  ¡  d S ©N)r   Ú__init__Ú
init_stateÚprogÚidprogÚLoadTagDefs©Úselfr   r   r	   r'   K   s
    
zColorDelegator.__init__c                 C   s   d | _ d| _d| _d| _d S )NTF)Úafter_idÚallow_colorizingÚstop_colorizingÚ
colorizingr,   r   r   r	   r(   R   s    zColorDelegator.init_statec                 C   s\   | j d ur|  d¡ t | |¡ |d urL|  ¡  |  d| j¡ |  dd¡ nd| _d| _	d S )Nz<<toggle-auto-coloring>>ú1.0ÚendTF)
ÚdelegateZunbindr   ÚsetdelegateÚconfig_colorsÚbindÚtoggle_colorize_eventÚnotify_ranger0   r/   )r-   r4   r   r   r	   r5   Y   s    

zColorDelegator.setdelegatec                 C   s4   | j  ¡ D ]\}}| j|fi |¤Ž q
|  d¡ d S )NZsel)ÚtagdefsÚitemsZtag_configureZ	tag_raise)r-   ÚtagZcnfr   r   r	   r6   p   s    zColorDelegator.config_colorsc                 C   sz   t  ¡ }t  |d¡t  |d¡t  |d¡t  |d¡t  |d¡d d dœd d dœt  |d¡t  |d¡d	œ	| _trvtd
| jƒ d S )Nr   r   r   r   Z
definition)r   r   ÚerrorÚhit)	r   r   r   r   Ú
DEFINITIONr   ÚTODOÚERRORr>   r:   )r   r    r!   r:   ÚDEBUGÚprint)r-   r#   r   r   r	   r+   v   s    






ózColorDelegator.LoadTagDefsNc                 C   s6   |   |¡}| j |||¡ |  ||dt|ƒ  ¡ d S )Nú+%dc)Úindexr4   Úinsertr9   Úlen)r-   rE   ÚcharsÚtagsr   r   r	   rF   ‹   s    
zColorDelegator.insertc                 C   s&   |   |¡}| j ||¡ |  |¡ d S r&   )rE   r4   Údeleter9   ©r-   Zindex1Úindex2r   r   r	   rJ   ‘   s    
zColorDelegator.deletec                 C   sb   |   d||¡ | jr$tr tdƒ d S | jr<d| _tr<tdƒ | jr^trNtdƒ |  d| j¡| _d S )Nr@   zcolorizing already scheduledTústop colorizingzschedule colorizingé   )	Útag_addr.   rB   rC   r1   r0   r/   ÚafterÚ
recolorizerK   r   r   r	   r9   —   s    zColorDelegator.notify_rangec                 C   s8   | j r(| j }d | _ trtdƒ |  |¡ d| _d| _d S )Núcancel scheduled recolorizerFT)r.   rB   rC   Úafter_cancelr/   r0   )r-   r.   r   r   r	   Úclose¥   s    
zColorDelegator.closec                 C   sˆ   | j r(| j }d | _ trtdƒ |  |¡ | jrF| jrFtr@tdƒ d| _| j | _| jrl| jsl|  d| j¡| _ tr„td| jr~dndƒ dS )	NrR   rM   TrN   zauto colorizing turnedZonZoffÚbreak)	r.   rB   rC   rS   r/   r1   r0   rP   rQ   )r-   Úeventr.   r   r   r	   r8   ®   s     

ÿz$ColorDelegator.toggle_colorize_eventc                 C   sÒ   d | _ | jstrtdƒ d S | js2tr.tdƒ d S | jrHtrDtdƒ d S zNd| _d| _trbtdƒ t ¡ }|  	¡  t ¡ }trŽtd||  ƒ W d| _nd| _0 | jrÎ|  
dd	¡rÎtr¾td
ƒ |  d| j¡| _ d S )Nzno delegatezauto colorizing is offzalready colorizingFTzcolorizing...z%.3f secondsr@   r2   zreschedule colorizingrN   )r.   r4   rB   rC   r/   r1   r0   ÚtimeÚperf_counterÚrecolorize_mainÚtag_nextrangerP   rQ   )r-   Út0Út1r   r   r	   rQ   Æ   s,    
zColorDelegator.recolorizec                 C   sØ  d}|   d|¡}|sqÔ|\}}|  d||¡ |  d|¡}|rF|d nd}d}|}d}d}|s|}|  |d|  ¡}t|d d	ƒ}d|  |d
 ¡v }|  ||¡}	|	s¨d S | jD ]}
|  |
||¡ q®||	 }| j 	|¡}|r|| 
¡  ¡ D ]~\}}|rè| |¡\}}|  ||d|  |d|  ¡ |dv rè| j ||¡}|rè| d¡\}}|  d|d|  |d|  ¡ qè| j 	|| ¡ ¡}qÖd|  |d
 ¡v rš|}d}nd}|s°|  d|¡ |  ¡  | jrZtrÌtdƒ d S qZqd S )Nr2   r@   r   rN   Ú Fz+%d lines linestarté   éd   z-1crD   )ÚdefÚclassr?   zcolorizing stopped)rZ   Ú
tag_removeZtag_prevrangerE   ÚminZ	tag_namesÚgetr:   r)   ÚsearchÚ	groupdictr;   ÚspanrO   r*   Úmatchr3   Úupdater0   rB   rC   )r-   ÚnextÚitemÚheadÚtailrH   Zlines_to_getÚokZmarkÚliner<   ÚmÚkeyÚvalueÚaÚbZm1r   r   r	   rY   è   sj    ÿ


þ

þzColorDelegator.recolorize_mainc                 C   s   | j D ]}|  |dd¡ qd S )Nr2   r3   )r:   rb   )r-   r<   r   r   r	   Úremovecolors'  s    
zColorDelegator.removecolors)N)N)N)N)Ú__name__Ú
__module__Ú__qualname__r'   r(   r5   r6   r+   rF   rJ   r9   rT   r8   rQ   rY   ru   r   r   r   r	   r%   ;   s   


	
"?r%   c                 C   s¾   ddl m}m} ddlm} || ƒ}| d¡ tt|  ¡  	d¡dd … ƒ\}}| d|d |d	 f ¡ d
}||dd}|j
ddd | d|¡ | ¡  t|ƒ ||ƒ}	tƒ }
|	 |
¡ d S )Nr   )ÚToplevelÚText)Ú
PercolatorzTest ColorDelegatorú+rN   z700x250+%d+%dé   é¯   ab  if 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 keyword-string 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'
Zwhite)r   Zboth)ÚexpandÚfillrF   )Útkinterry   rz   Zidlelib.percolatorr{   ÚtitleÚmapÚintZgeometryÚsplitÚpackrF   Z	focus_setr$   r%   Zinsertfilter)Úparentry   rz   r{   ÚtopÚxÚyÚsourcer"   ÚpÚdr   r   r	   Ú_color_delegator-  s     
 ÿrŽ   Ú__main__)Úmainz idlelib.idle_test.test_colorizerr^   )Ú	verbosityÚexit)Úrun)r   r   ÚrerW   Zidlelib.configr   Zidlelib.delegatorr   rB   r
   r   ÚcompileÚSr)   r*   r$   r%   rŽ   rv   Zunittestr   Zidlelib.idle_test.htestr“   r   r   r   r	   Ú<module>   s&    s"