a
     ³Ša  ã                   @   sl   d Z ddlZddlmZ ddlZddlmZ ddlm	Z	m
Z
 ddlmZ e
rXddlmZ dd„ Zd	d
„ ZdS )z$
Utils to handle Switcher elements.
é    N)Ú_)Ú	iteritemsÚPY2)Úima)Úizipc           	         s"  | dd… } g ‰ t  t  | ¡¡}tt| |ƒƒD ]f\}\}}|rVˆ  tdƒ¡ d| |< q.t  t  |¡¡\}}ˆ  |t j ¡ dd„ | 	t j¡D ƒ| |< q.‡ ‡fdd„‰ˆdd„ t| ƒD ƒƒ |rg }ˆ D ]D}| 
tj¡ 	|¡}t|ƒd	kr| d
 |d ¡¡ qÈ| |¡ qÈndd„ ˆ D ƒ}|S )aL  
    Takes a list of paths and tries to "intelligently" shorten them all. The
    aim is to make it clear to the user where the paths differ, as that is
    likely what they care about. Note that this operates on a list of paths
    not on individual paths.

    If the path ends in an actual file name, it will be trimmed off.
    Nzunsaved filec                 S   s   g | ]}|r|‘qS © r   )Ú.0Úpartr   r   ú4lib/python3.9/site-packages/spyder/utils/switcher.pyÚ
<listcomp>2   ó    z!shorten_paths.<locals>.<listcomp>c                    sD  t j}t|  ¡ ƒsd S t|  ¡ ƒd ‰ˆs0d‰n2tˆƒD ](\‰‰t‡‡fdd„|  ¡ D ƒƒs8 qbq8ˆdkrpd}nvˆdkr‚ˆd }n2ˆdkr ˆd | ˆd  }nd| ˆˆd   }| D ],}ˆ|  || 7  < | | ˆd … | |< q¸| r@d|  ‰ }‡ fdd	„| ¡ D ƒ}|r$ˆ dkr||}q|tt	|ƒƒ\}‰‡ ‡fd
d	„| ¡ D ƒ}t
|ƒt
|ƒkshˆ dkr||}ˆ d7 ‰ qöq|qött	|ƒƒ\}‰ˆ dkrœd}nPˆ dkr°ˆd }n<ˆ dkrÐˆd | ˆd  }nˆd d | ˆˆ d   }| ¡ D ].}ˆ|  |ˆ dkr|nd 7  < | |= qôˆ‡ fdd	„| ¡ D ƒƒ qæd S )Nr   c                 3   s&   | ]}t |ƒˆ ko|ˆ  ˆkV  qd S ©N©Úlen)r   Útoks)ÚsÚ
sample_valr   r
   Ú	<genexpr>B   s   ÿz7shorten_paths.<locals>.recurse_level.<locals>.<genexpr>Ú é   é   z...c                    s"   i | ]\}}t |ƒˆ kr||“qS r   r   ©r   Úidxr   ©Úkr   r
   Ú
<dictcomp>Y   s   ÿz8shorten_paths.<locals>.recurse_level.<locals>.<dictcomp>c                    s&   i | ]\}}|ˆ  ˆˆ  kr||“qS r   r   r   )r   Úsample_toksr   r
   r   a   s   þc                    s   i | ]\}}||ˆ d … “qS r   r   r   r   r   r
   r   u   r   )ÚosÚsepÚanyÚvaluesÚlistÚ	enumerateÚallÚitemsÚnextr   r   Úkeys)Z	level_idxr   Z
short_formr   ÚgroupZprospective_groupr   ©Znew_path_listÚrecurse_level)r   r   r   r   r
   r)   4   sd    ÿ


ÿ
ÿ




"
z$shorten_paths.<locals>.recurse_levelc                 S   s   i | ]\}}|r||“qS r   r   )r   ÚiZplr   r   r
   r   w   r   z!shorten_paths.<locals>.<dictcomp>r   z...{}éÿÿÿÿc                 S   s   g | ]}|  tj¡‘qS r   )Úrstripr   r   )r   Úpathr   r   r
   r   ‚   r   )ÚospÚdirnameÚcommonprefixr"   ÚzipÚappendr   Ú
splitdriver   Úsplitr,   r   r   Úformat)	Ú	path_listZ
is_unsavedZcommon_prefixZiir-   Zis_unsavZdriveZresult_pathsZpath_elementsr   r(   r
   Úshorten_paths   s*    
Cr7   c                 C   s0   t jdkrd}ntjdkr d}nd}t | |¡S )zGet icon for file by extension.ÚdarwingÍÌÌÌÌÌì?Úntgš™™™™™é?g333333ã?)ÚsysÚplatformr   Únamer   Zget_icon_by_extension_or_type)r-   Zscale_factorr   r   r
   Úget_file_icon‡   s    

r=   )Ú__doc__r   Úos.pathr-   r.   r:   Zspyder.config.baser   Zspyder.py3compatr   r   Zspyder.utils.icon_managerr   Ú	itertoolsr   r1   r7   r=   r   r   r   r
   Ú<module>   s   n