
    Je                     T    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	 ddl
mZ d Zd Zy)z$
Utils to handle Switcher elements.
    N)_)	iteritems)imac                    | dd } g t        j                  t        j                  |             }t        t	        | |            D ]  \  }\  }}|r j                  t        d             d| |<   +t        j                  t        j                  |            \  }}j                  |t         j                  z          |j                  t         j                        D cg c]  }|s|	 c}| |<    fd t        |       D 	ci c]  \  }}	|	s	||	 c}	}       |r|g }
D ]s  }|j                  t        j                        j                  |      }t        |      dkD  r$|
j                  dj                  |d                c|
j                  |       u |
S D cg c]!  }|j                  t        j                        # }
}|
S c c}w c c}	}w c c}w )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           
        
 t         j                  }t        | j                               sy t	        | j                               d   }|sd
n8t        |      D ]*  \  
t        
fd| j                         D              r* n 
dk(  rd}nO
dk(  r|d   }n"
dk(  r|d   |z   |d   z   }nd|z   |
dz
     z   }| D ]  }|xx   ||z   z  cc<   | |   
d  | |<    | r^d| }}	 |j                         D ci c]  \  }}t        |      |k(  r|| }}}|r|dk(  r|}nkt        t        |            \  }	}|j                         D ci c]  \  }}||   ||   k(  r|| }}}t        |      t        |      k(  s|dk(  r|}|dz  }nnt        t        |            \  }	}|dk(  rd}n3|dk(  r|d   }n(|dk(  r|d   |z   |d   z   }n|d   dz   |z   ||dz
     z   }|j                         D ]  }|xx   ||dkD  r|ndz   z  cc<   | |=   |j                         D ci c]  \  }}|||d   c}}       | r]y y c c}}w c c}}w c c}}w )Nr   c              3   N   K   | ]  }t        |      kD  xr |   k(    y w)N)len).0tokss
sample_vals     7/usr/lib/python3/dist-packages/spyder/utils/switcher.py	<genexpr>z7shorten_paths.<locals>.recurse_level.<locals>.<genexpr>?   s2      ;# t9q=BT!W
-BB ;s   "%       z...)ossepanyvalueslist	enumerateallitemsr	   nextr   keys)	level_idxr   sample_toks
short_formidxkgroupr   prospective_groupr   r   r   new_path_listrecurse_levels             @@r   r%   z$shorten_paths.<locals>.recurse_level1   s   ff 9##%& 9++-.q1A!*;!7 : ;'0'7'7'9; ; 6JAv(^
a(^c1KNB
"S[;qs+;;
  4c"j3&66"!*3!3	#4
 )uA ).%I939<Ta &)$Y %I! %I$Av 1!%i&6!7;(-%C93(,Q;q>(A &)$Y %C! %C ()SZ716-EFA# $ ")E"23NA{Av
a(^
a(^c1KNB
(^e3c9K!<LL
zz| #c"j1q5Cb&II"cN# %++-HYS$3QR=HIA %I%C( Is   9I I"I
r   z...{})ospdirnamecommonprefixr   zipappendr   
splitdriver   splitrstripr   r	   format)	path_list
is_unsavedcommon_prefixiipathis_unsavdrivepartiplresult_pathspath_elementsr$   r%   s               @@r   shorten_pathsr<      s    !IMKK 0 0 ;<M )#i*D E KT8  >!23 IbM..T):;KE4  1.2jj.AJdTTJIbMKAJF i	&:AUQb1b5AB! 	*D KK/55mDM=!A%##GNN=3D$EF##D)	*  9FFBFF+FFe KJ B Gs    G(G

G
G
$&Gc                     t         j                  dk(  rd}nt        j                  dk(  rd}nd}t	        j
                  | |      S )zGet icon for file by extension.darwing?ntg?g333333?)sysplatformr   namer   get_icon_by_extension_or_type)r4   scale_factors     r   get_file_iconrE      s=     ||x	D,,T<@@    )__doc__r   os.pathr4   r'   r@   spyder.config.baser   spyder.py3compatr   spyder.utils.icon_managerr   r<   rE    rF   r   <module>rM      s-   
 
  
 ! & )k\
ArF   