o
     JAf¡=  ã                   @   sÚ   	 d dl Z d dlmZ d dlmZ d dlmZ G dd„ dƒZe ¡  dd„ Z	d	d
„ Z
dd„ Zdd„ Zdd„ Zdd„ Ze  d¡Zdd„ ZG dd„ dƒZG dd„ dƒZG dd„ dƒZedkrkd dlmZ eddd d! dS dS )"é    N)Úaskyesno)Ú
askinteger)ÚidleConfc                   @   s4   e Zd Z	 dd„ Zedd„ ƒZdd„ Zd
dd	„ZdS )ÚFormatParagraphc                 C   ó
   || _ d S ©N©Úeditwin©Úselfr	   © r   ú%/usr/lib/python3.10/idlelib/format.pyÚ__init__   ó   
zFormatParagraph.__init__c                 C   s   t jdddddd| _d S )NÚ
extensionsr   z	max-widthÚintéH   )ÚtypeÚdefault)r   Z	GetOptionÚ	max_width)Úclsr   r   r   Úreload"   s   ÿzFormatParagraph.reloadc                 C   s
   d | _ d S r   r   ©r   r   r   r   Úclose'   r   zFormatParagraph.closeNc           	      C   sâ   	 |d u r| j n|}| jj}| j ¡ \}}|r$|r$| ||¡}t|ƒ}nt|| d¡ƒ\}}}}|r9t|||ƒ}nt	||ƒ}| 
ddd¡ ||krd| d|¡ | ¡  | ||¡ | ||¡ | ¡  n| d|¡ | d¡ dS )NÚinsertÚselú1.0ÚendÚbreak)r   r	   ÚtextÚget_selection_indicesÚgetÚget_comment_headerÚfind_paragraphÚindexÚreformat_commentÚreformat_paragraphÚ
tag_removeÚmark_setÚundo_block_startÚdeleter   Úundo_block_stopZsee)	r   ÚeventÚlimitr   ÚfirstÚlastÚdataÚcomment_headerÚnewdatar   r   r   Úformat_paragraph_event*   s,   

ÿ


z&FormatParagraph.format_paragraph_eventr   )Ú__name__Ú
__module__Ú__qualname__r   Úclassmethodr   r   r3   r   r   r   r   r      s    
r   c           
      C   sŠ  	 t t| d¡ƒ\}}|  d| d| ¡}|  d| dd¡r=t|ƒr=|d }|  d| d| ¡}|  d| dd¡r=t|ƒs"|}t|ƒ}t|ƒ}t|ƒ|krqt||d … ƒsq|d }|  d| d| ¡}t|ƒ|krqt||d … ƒrUd| }|d }|  d| d| ¡}|dkrµt|ƒ|krµt||d … ƒsµ|d }|  d| d| ¡}|dkrµt|ƒ|krµt||d … ƒr•d|d  }	|	|||  |	|¡fS )NÚ.z%d.0z%d.endú<r   é   r   )Úmapr   Úsplitr!   ZcompareÚis_all_whiter"   Úlen)
r   ZmarkÚlinenoÚcolÚlineZfirst_linenor1   Zcomment_header_lenr/   r.   r   r   r   r#   S   sB   þÿýÿÿüÿr#   c                 C   s’  	 |   d¡}d}t|ƒ}||k r$t|| ƒr$|d }||k r$t|| ƒs||kr*| S t|| ƒ}|d |k rGt||d  ƒsGt||d  ƒ}n|}|d |… }|}||k r´t|| ƒs´t  d|| ¡}	tdt|	ƒdƒD ]:}
|	|
 }|stqkt||  ¡ ƒ|kr‹||kr‹| | ¡ ¡ |}|| d }|
d t|	ƒk r¥|	|
d  dkr¥|d }qk|d }||k r´t|| ƒr[| | ¡ ¡ | 	||d … ¡ d 
|¡S )NÚ
r   r:   z(\s+)é   ú )r<   r>   r=   Ú
get_indentÚreÚrangeÚ
expandtabsÚappendÚrstripÚextendÚjoin)r0   r-   ÚlinesÚiÚnZindent1Zindent2ÚnewÚpartialÚwordsÚjZwordr   r   r   r&   x   sD   
ÿ €ò
r&   c                    s†   	 t ˆ ƒ‰d ‡fdd„|  d¡D ƒ¡} t|t ˆ ƒ dƒ}t| |ƒ}| d¡}d}|d s5d}|d d… }d ‡ fdd„|D ƒ¡| S )NrB   c                 3   s    | ]	}|ˆ d … V  qd S r   r   ©Ú.0rA   )Úlcr   r   Ú	<genexpr>¡   s   € z#reformat_comment.<locals>.<genexpr>é   Ú éÿÿÿÿc                 3   s    | ]}ˆ | V  qd S r   r   rT   )r1   r   r   rW   °   s   € )r>   rL   r<   Úmaxr&   )r0   r-   r1   Zformat_widthr2   Zblock_suffixr   )r1   rV   r   r%   œ   s   

r%   c                 C   s   	 t  d| ¡d uS )Nz^\s*$)rF   Úmatch©rA   r   r   r   r=   ²   s   r=   c                 C   s   	 t  d| ¡ ¡ S )Nz	^([ \t]*)©rF   r\   Úgroupr]   r   r   r   rE   ·   s   rE   c                 C   s$   	 t  d| ¡}|d u rdS | d¡S )Nz^([ \t]*#*)rY   r:   r^   )rA   Úmr   r   r   r"   »   s   
r"   z[ \t]*c                 C   s&   	 t  | ¡}| ¡ t| ¡  |¡ƒfS r   )Ú_line_indent_rer\   r   r>   r_   rH   )rA   Útabwidthr`   r   r   r   Úget_line_indentÊ   s   
rc   c                   @   sj   e Z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d„Z	ddd„Z
ddd„Zdd„ ZdS )ÚFormatRegionc                 C   r   r   r   r
   r   r   r   r   ×   r   zFormatRegion.__init__c                 C   st   	 | j j}| j  ¡ \}}|r|r| |d ¡}| |d ¡}n
| d¡}| d¡}| ||¡}| d¡}||||fS )Nz
 linestartz-1c lineend +1czinsert linestartzinsert lineend +1crB   )r	   r   r    r$   r!   r<   )r   r   r.   r/   ÚheadÚtailÚcharsrM   r   r   r   Ú
get_regionÚ   s   	


zFormatRegion.get_regionc                 C   s|   	 | j j}d |¡}||kr| ¡  d S | ddd¡ | d|¡ | ¡  | ||¡ | ||¡ | 	¡  | 
d|d¡ d S )NrB   r   r   r   r   )r	   r   rL   Zbellr'   r(   r)   r*   r   r+   Ztag_add)r   re   rf   rg   rM   r   Únewcharsr   r   r   Ú
set_regionð   s   

zFormatRegion.set_regionNc           
      C   s~   	 |   ¡ \}}}}tt|ƒƒD ]%}|| }|r4t|| jjƒ\}}	|	| jj }	| j |	¡||d …  ||< q|  ||||¡ dS ©Nr   )	rh   rG   r>   rc   r	   rb   ÚindentwidthÚ_make_blanksrj   ©
r   r,   re   rf   rg   rM   ÚposrA   ÚrawÚ	effectiver   r   r   Úindent_region_event  s   €z FormatRegion.indent_region_eventc           
      C   s„   	 |   ¡ \}}}}tt|ƒƒD ](}|| }|r7t|| jjƒ\}}	t|	| jj dƒ}	| j |	¡||d …  ||< q|  	||||¡ dS )Nr   r   )
rh   rG   r>   rc   r	   rb   r[   rl   rm   rj   rn   r   r   r   Údedent_region_event  s   €z FormatRegion.dedent_region_eventc                 C   sP   	 |   ¡ \}}}}tt|ƒd ƒD ]}|| }d| ||< q|  ||||¡ dS )Nr:   ú##r   ©rh   rG   r>   rj   ©r   r,   re   rf   rg   rM   ro   rA   r   r   r   Úcomment_region_event   s   z!FormatRegion.comment_region_eventc                 C   sˆ   	 |   ¡ \}}}}tt|ƒƒD ]*}|| }|sq|d d… dkr'|dd … }n|d d… dkr5|dd … }|||< q|  ||||¡ dS )NrC   rt   r:   ú#r   ru   rv   r   r   r   Úuncomment_region_event,  s   
z#FormatRegion.uncomment_region_eventc                 C   s”   	 |   ¡ \}}}}|  ¡ }|d u rd S tt|ƒƒD ]&}|| }|r?t||ƒ\}	}
t|
|ƒ\}}d| d|  ||	d …  ||< q|  ||||¡ dS )Nú	rD   r   )rh   Ú_asktabwidthrG   r>   rc   Údivmodrj   )r   r,   re   rf   rg   rM   rb   ro   rA   rp   rq   ZntabsZnspacesr   r   r   Útabify_region_event?  s    €z FormatRegion.tabify_region_eventc                 C   s^   	 |   ¡ \}}}}|  ¡ }|d u rd S tt|ƒƒD ]}||  |¡||< q|  ||||¡ dS rk   )rh   r{   rG   r>   rH   rj   )r   r,   re   rf   rg   rM   rb   ro   r   r   r   Úuntabify_region_eventN  s   z"FormatRegion.untabify_region_eventc                 C   s   	 t dd| jj| jjdddS )Nz	Tab widthzColumns per tab? (2-16)rC   é   ©ÚparentZinitialvalueZminvalueÚmaxvalue)r   r	   r   rl   r   r   r   r   r{   Y  s   úzFormatRegion._asktabwidthr   )r4   r5   r6   r   rh   rj   rr   rs   rw   ry   r}   r~   r{   r   r   r   r   rd   Ô   s    





rd   c                   @   s&   e Zd Z	 dd„ Zdd„ Zdd„ ZdS )ÚIndentsc                 C   r   r   r   r
   r   r   r   r   g  r   zIndents.__init__c                 C   sJ   | j }|j}tddd|  d d|  d d |jdr#| |_d	|_d
S )NzToggle tabsz
Turn tabs )ZonZoffz?
Indent width )zwill bez
remains atz 8.z!
 Note: a tab is always 8 columns)r   é   r   )r	   Úusetabsr   r   rl   )r   r,   r	   r…   r   r   r   Útoggle_tabs_eventj  s$   
ÿþþýúzIndents.toggle_tabs_eventc                 C   s<   | j }tdd|j|jddd}|r||jkr|js||_dS )NzIndent widthz6New indent width (2-16)
(Always use 8 when using tabs)rC   r   r€   r   )r	   r   r   rl   r…   )r   r,   r	   rP   r   r   r   Úchange_indentwidth_eventz  s   úz Indents.change_indentwidth_eventN)r4   r5   r6   r   r†   r‡   r   r   r   r   rƒ   d  s
    rƒ   c                   @   s   e Zd Zdd„ Zddd„ZdS )ÚRstripc                 C   r   r   r   r
   r   r   r   r   ‰  r   zRstrip.__init__Nc           	      C   sê   | j j}| j j}| ¡  tt| d¡ƒƒ}td|ƒD ]&}| d| d| ¡}t	|ƒ}t	| 
¡ ƒ}||k r@| d||f d| ¡ q| d¡dkrot| j dƒso| d	¡d
kro| d¡dkro| d¡ | d	¡d
kro| d¡dks\| ¡  d S )Nr   r:   z%i.0z%i.endz%i.%izend-2crB   Zinterpzend-1cr   zend-3c)r	   r   Úundor)   r   Úfloatr$   rG   r!   r>   rJ   r*   Úhasattrr+   )	r   r,   r   r‰   Zend_lineZcurZtxtrp   Zcutr   r   r   Ú	do_rstripŒ  s(   €
ÿ
þzRstrip.do_rstripr   )r4   r5   r6   r   rŒ   r   r   r   r   rˆ   ˆ  s    rˆ   Ú__main__)Úmainzidlelib.idle_test.test_formatrC   F)Ú	verbosityÚexit)rF   Ztkinter.messageboxr   Ztkinter.simpledialogr   Zidlelib.configr   r   r   r#   r&   r%   r=   rE   r"   Úcompilera   rc   rd   rƒ   rˆ   r4   ZunittestrŽ   r   r   r   r   Ú<module>   s.    C%$

 $ þ