a
    åze¡=  ã                   @   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rÐd dlmZ eddd d! dS )"é    N)Úaskyesno)Ú
askinteger)ÚidleConfc                   @   s2   e Zd Zdd„ Zedd„ ƒZdd„ Zd
dd	„ZdS )ÚFormatParagraphc                 C   s
   || _ d S ©N©Úeditwin©Úselfr   © r   ú$/usr/lib/python3.9/idlelib/format.pyÚ__init__   s    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'   s    zFormatParagraph.closeNc           	      C   sà   |d u r| j n|}| jj}| j ¡ \}}|rF|rF| ||¡}t|ƒ}nt|| d¡ƒ\}}}}|rpt|||ƒ}n
t	||ƒ}| 
ddd¡ ||krÆ| 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_event)N)Ú__name__Ú
__module__Ú__qualname__r   Úclassmethodr   r   r1   r   r   r   r   r      s
   
r   c           
      C   s:  t t| d¡ƒ\}}|  d| d| ¡}|  d| dd¡r`t|ƒr`|d }|  d| d| ¡}q(|}t|ƒ}t|ƒ}t|ƒ|kr®t||d … ƒs®|d }|  d| d| ¡}qtd| }|d }|  d| d| ¡}|dkrt|ƒ|krt||d … ƒs|d }|  d| d| ¡}qÒ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_linenor/   Zcomment_header_lenr-   r,   r   r   r   r!   S   s2    ÿ

ÿþr!   c                 C   st  |   d¡}d}t|ƒ}||k r4t|| ƒr4|d }q||kr@| S t|| ƒ}|d |k rzt||d  ƒszt||d  ƒ}n|}|d |… }|}||k rJt|| ƒsJt  d|| ¡}	tdt|	ƒdƒD ]x}
|	|
 }|sØqÆt||  ¡ ƒ|kr
||kr
| | ¡ ¡ |}|| d }|
d t|	ƒk rÆ|	|
d  dkrÆ|d }qÆ|d }qŽ| | ¡ ¡ | 	||d … ¡ d 
|¡S )NÚ
r   r8   z(\s+)é   ú )r:   r<   r;   Ú
get_indentÚreÚrangeÚ
expandtabsÚappendÚrstripÚextendÚjoin)r.   r+   ÚlinesÚiÚnZindent1Zindent2ÚnewÚpartialÚwordsÚjZwordr   r   r   r$   x   s>    

ÿ 

r$   c                    s„   t ˆ ƒ‰d ‡fdd„|  d¡D ƒ¡} t|t ˆ ƒ dƒ}t| |ƒ}| d¡}d}|d shd}|d d… }d ‡ fdd„|D ƒ¡| S )Nr@   c                 3   s   | ]}|ˆ d … V  qd S r   r   ©Ú.0r?   )Úlcr   r   Ú	<genexpr>¡   ó    z#reformat_comment.<locals>.<genexpr>é   Ú éÿÿÿÿc                 3   s   | ]}ˆ | V  qd S r   r   rR   )r/   r   r   rU   °   rV   )r<   rJ   r:   Úmaxr$   )r.   r+   r/   Zformat_widthr0   Zblock_suffixr   )r/   rT   r   r#   œ   s    

r#   c                 C   s   t  d| ¡d uS )Nz^\s*$)rD   Úmatch©r?   r   r   r   r;   ²   s    r;   c                 C   s   t  d| ¡ ¡ S )Nz	^([ \t]*)©rD   r[   Úgroupr\   r   r   r   rC   ·   s    rC   c                 C   s"   t  d| ¡}|d u rdS | d¡S )Nz^([ \t]*#*)rX   r8   r]   )r?   Úmr   r   r   r    »   s    r    z[ \t]*c                 C   s$   t  | ¡}| ¡ t| ¡  |¡ƒfS r   )Ú_line_indent_rer[   r   r<   r^   rF   )r?   Útabwidthr_   r   r   r   Úget_line_indentÊ   s    
rb   c                   @   sh   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   s
   || _ d S r   r   r	   r   r   r   r   ×   s    zFormatRegion.__init__c                 C   sr   | j j}| j  ¡ \}}|r<|r<| |d ¡}| |d ¡}n| d¡}| d¡}| ||¡}| d¡}||||fS )Nz
 linestartz-1c lineend +1czinsert linestartzinsert lineend +1cr@   )r   r   r   r"   r   r:   )r
   r   r,   r-   ÚheadÚtailÚcharsrK   r   r   r   Ú
get_regionÚ   s    



zFormatRegion.get_regionc                 C   sz   | j j}d |¡}||kr&| ¡  d S | ddd¡ | d|¡ | ¡  | ||¡ | ||¡ | 	¡  | 
d|d¡ d S )Nr@   r   r   r   r   )r   r   rJ   Zbellr%   r&   r'   r(   r   r)   Ztag_add)r
   rd   re   rf   rK   r   Únewcharsr   r   r   Ú
set_regionð   s    
zFormatRegion.set_regionNc           
      C   s|   |   ¡ \}}}}tt|ƒƒD ]J}|| }|rt|| jjƒ\}}	|	| jj }	| j |	¡||d …  ||< q|  ||||¡ dS ©Nr   )	rg   rE   r<   rb   r   ra   ÚindentwidthÚ_make_blanksri   ©
r
   r*   rd   re   rf   rK   Úposr?   ÚrawÚ	effectiver   r   r   Úindent_region_event  s    z FormatRegion.indent_region_eventc           
      C   s‚   |   ¡ \}}}}tt|ƒƒD ]P}|| }|rt|| jjƒ\}}	t|	| jj dƒ}	| j |	¡||d …  ||< q|  	||||¡ dS )Nr   r   )
rg   rE   r<   rb   r   ra   rZ   rk   rl   ri   rm   r   r   r   Údedent_region_event  s    z FormatRegion.dedent_region_eventc                 C   sN   |   ¡ \}}}}tt|ƒd ƒD ]}|| }d| ||< q |  ||||¡ dS )Nr8   ú##r   ©rg   rE   r<   ri   ©r
   r*   rd   re   rf   rK   rn   r?   r   r   r   Úcomment_region_event   s    z!FormatRegion.comment_region_eventc                 C   s†   |   ¡ \}}}}tt|ƒƒD ]T}|| }|s.q|d d… dkrL|dd … }n|d d… dkrh|dd … }|||< q|  ||||¡ dS )NrA   rs   r8   ú#r   rt   ru   r   r   r   Úuncomment_region_event,  s    
z#FormatRegion.uncomment_region_eventc                 C   s’   |   ¡ \}}}}|  ¡ }|d u r$d S tt|ƒƒD ]L}|| }|r0t||ƒ\}	}
t|
|ƒ\}}d| d|  ||	d …  ||< q0|  ||||¡ dS )Nú	rB   r   )rg   Ú_asktabwidthrE   r<   rb   Údivmodri   )r
   r*   rd   re   rf   rK   ra   rn   r?   ro   rp   ZntabsZnspacesr   r   r   Útabify_region_event?  s    "z FormatRegion.tabify_region_eventc                 C   s\   |   ¡ \}}}}|  ¡ }|d u r$d S tt|ƒƒD ]}||  |¡||< q0|  ||||¡ dS rj   )rg   rz   rE   r<   rF   ri   )r
   r*   rd   re   rf   rK   ra   rn   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)rA   é   ©ÚparentZinitialvalueZminvalueÚmaxvalue)r   r   r   rk   r   r   r   r   rz   Y  s    úzFormatRegion._asktabwidth)N)N)N)N)N)N)r2   r3   r4   r   rg   ri   rq   rr   rv   rx   r|   r}   rz   r   r   r   r   rc   Ô   s   





rc   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚIndentsc                 C   s
   || _ d S r   r   r	   r   r   r   r   g  s    zIndents.__init__c                 C   sJ   | j }|j}tddd|  d d|  d d |jdrF| |_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   rk   )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}|r8||jkr8|js8||_dS )NzIndent widthz6New indent width (2-16)
(Always use 8 when using tabs)rA   r~   r   r   )r   r   r   rk   r„   )r
   r*   r   rN   r   r   r   Úchange_indentwidth_eventz  s    úz Indents.change_indentwidth_eventN)r2   r3   r4   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   s
   || _ d S r   r   r	   r   r   r   r   ‰  s    zRstrip.__init__Nc           	      C   sÐ   | j j}| j j}| ¡  tt| d¡ƒƒ}td|ƒD ]L}| d| d| ¡}t	|ƒ}t	| 
¡ ƒ}||k r4| d||f d| ¡ q4| d¡dkrÄt| j dƒsÄ| d	¡d
krÄ| d¡dkrÄ| d¡ qœ| ¡  d S )Nr   r8   z%i.0z%i.endz%i.%izend-2cr@   Zinterpzend-1cr   zend-3c)r   r   Úundor'   r   Úfloatr"   rE   r   r<   rH   r(   Úhasattrr)   )	r
   r*   r   rˆ   Zend_lineZcurZtxtro   Zcutr   r   r   Ú	do_rstripŒ  s$    
ÿÿzRstrip.do_rstrip)N)r2   r3   r4   r   r‹   r   r   r   r   r‡   ˆ  s   r‡   Ú__main__)Úmainzidlelib.idle_test.test_formatrA   F)Ú	verbosityÚexit)rD   Ztkinter.messageboxr   Ztkinter.simpledialogr   Zidlelib.configr   r   r   r!   r$   r#   r;   rC   r    Úcompiler`   rb   rc   r‚   r‡   r2   Zunittestr   r   r   r   r   Ú<module>   s(   C%$

 $ 