o
     JAfM                     @   s   	 d dl Z d dlmZ d dlmZ g dZdadd Zdd ZG d	d
 d
eZ	G dd dZ
edkrAd dlmZ edddd dS dS )    N)
messagebox)EditorWindow)zfile "([^"]*)", line (\d+)z([^\s]+)\((\d+)\)z^(\s*\S.*?):\s*(\d+):z([^\s]+):\s*(\d+):z^\s*(\S.*?):\s*(\d+):c                   C   s   	 dd t D ad S )Nc                 S   s   g | ]	}t |t jqS  )recompile
IGNORECASE).0patr   r   %/usr/lib/python3.10/idlelib/outwin.py
<listcomp>   s    z!compile_progs.<locals>.<listcomp>)file_line_patsfile_line_progsr   r   r   r
   compile_progs   s   
r   c              	   C   s   	 t st  t D ]'}|| }|r/|dd\}}zt|d}|  W  n ty.   Y qw qd S z|t|fW S  tyC   Y d S w )N      r)	r   r   searchgroupopencloseOSErrorint	TypeError)lineprogmatchfilenamelinenofr   r   r
   file_line_helper   s*   

	r   c                   @   sf   e Zd Z	 g dZdZdd Zdd Zdd Zd	d
 ZdddZ	dd Z
dd Zdd ZdddZdS )OutputWindow))ZCutz<<cut>>Zrmenu_check_cut)ZCopyz<<copy>>Zrmenu_check_copy)ZPastez	<<paste>>Zrmenu_check_paste)NNN)zGo to file/line<<goto-file-line>>NFc                 G   s&   t j| g|R   | jd| j d S )Nr!   )r   __init__textbindgoto_file_line)selfargsr   r   r
   r"   N   s   zOutputWindow.__init__c                 C      	 dS )NFr   )r&   r   r   r   r
   ispythonsourceS      zOutputWindow.ispythonsourcec                 C   r(   )NZOutputr   r&   r   r   r
   short_titleW   r*   zOutputWindow.short_titlec                 C   s   	 |   rdS dS )NZyesno)Z	get_savedr+   r   r   r
   	maybesave[   s   zOutputWindow.maybesaver   insertc                 C   s0   	 | j ||| | j | | j   t|S N)r#   r/   Zseeupdatelenr&   stagsZmarkr   r   r
   write`   s
   
zOutputWindow.writec                 C   s   	 |D ]}|  | qd S r0   )r6   )r&   linesr   r   r   r
   
writelinesv   s   zOutputWindow.writelinesc                 C   s   	 d S r0   r   r+   r   r   r
   flush{   r*   zOutputWindow.flushc                 O   s   t j|i | d S r0   )r   	showerror)r&   r'   kwargsr   r   r
   r:      s   zOutputWindow.showerrorNc                 C   sf   	 | j dd}t|}|s&| j dd}t|}|s&| jdd| j d d S |\}}| j|| d S )Nzinsert linestartzinsert lineendzinsert -1line linestartzinsert -1line lineendzNo special linezTThe line you point at doesn't look like a valid file name followed by a line number.)parent)r#   getr   r:   flistZgotofileline)r&   eventr   resultr   r   r   r   r
   r%      s"   zOutputWindow.goto_file_line)r   r/   r0   )__name__
__module____qualname__Zrmenu_specsZallow_code_contextr"   r)   r,   r.   r6   r8   r9   r:   r%   r   r   r   r
   r    :   s    	
r    c                   @   s6   e Zd ZddiddidZdd Zdd Zd	d
 ZdS )OnDemandOutputWindowZ
foregroundZbluez#007700)stdoutstderrc                 C   s   || _ d | _d S r0   )r>   owin)r&   r>   r   r   r
   r"      s   
zOnDemandOutputWindow.__init__c                 C   s"   | j s|   | j ||| d S r0   )rG   setupr6   r3   r   r   r
   r6      s   zOnDemandOutputWindow.writec                 C   sX   t | j | _}|j}| j D ]\}}|r|j|fi | q|d | jj| _d S )NZsel)	r    r>   rG   r#   tagdefsitemsZtag_configureZ	tag_raiser6   )r&   rG   r#   tagZcnfr   r   r
   rH      s   
zOnDemandOutputWindow.setupN)rA   rB   rC   rI   r"   r6   rH   r   r   r   r
   rD      s    rD   __main__)mainzidlelib.idle_test.test_outwinr   F)	verbosityexit)r   tkinterr   Zidlelib.editorr   r   r   r   r   r    rD   rA   ZunittestrM   r   r   r   r
   <module>   s    	e