6.5 Clean Path

<..static String cleanPath( path )..>
 public static String cleanPath( String path ){
      String slash = System.getProperty("file.separator");
      String userDir = System.getProperty( "user.dir" );
   <.clean leading wigle.>
   <.clean leading dots.>
   <.clean internal dots.>
   return path;
 }
 -_-_-

<..clean leading wigle..>
   if( (path.length() > 0) && (path.charAt(0) == ’~’) ){
     if( (path.length() == 1) || (path.charAt(1) != ’~’) ){
       path = System.getProperty( "user.home" )
                              + path.substring(1);
   } }
 -_-_-

<..clean leading dots..>
   if( path.startsWith("..") ){
      path = userDir.substring(0,
                Math.max(0,Math.max(
                  userDir.lastIndexOf("/")
                  ,
                  userDir.lastIndexOf("\\")
                )))
             + path.substring(2);
   }
   if( path.startsWith(".") ){
      path = userDir + slash + path.substring(1);
   }
 -_-_-

<..clean internal dots..>
   int i;
   while(
     ((i=path.indexOf("/..")) != -1)
     ||
     ((i=path.indexOf("\\..")) != -1)
   ){
     String s = path.substring(0,i);
     int j = Math.max(s.lastIndexOf("/"), s.lastIndexOf("\\"));
     path = path.substring(0,j) + path.substring(i+3);
   }
   while(
     ((i=path.indexOf("/.")) != -1)
     ||
     ((i=path.indexOf("\\.")) != -1)
   ){
     String s = path.substring(0,i);
     int j = Math.max(s.indexOf("/"), s.indexOf("\\"));
     path = path.substring(0,j) + path.substring(i+2);
   }
 -_-_-