src/Pure/General/path.ML
changeset 14912 88b9d9165452
parent 8806 a202293db3f6
child 14981 e73f8140af78
--- a/src/Pure/General/path.ML	Wed Jun 09 18:56:47 2004 +0200
+++ b/src/Pure/General/path.ML	Wed Jun 09 18:56:55 2004 +0200
@@ -24,10 +24,10 @@
   val make: string list -> T
   val pack: T -> string
   val unpack: string -> T
+  val dir: T -> T
   val base: T -> T
   val ext: string -> T -> T
-  val drop_ext: T -> T
-  val dir: T -> T
+  val split_ext: T -> T * string
   val expand: T -> T
   val position: T -> Position.T
 end;
@@ -134,17 +134,16 @@
     Some (prfx, Basic s) => f (prfx, s)
   | _ => error ("Cannot split path into dir/base: " ^ quote (pack path)));
 
+val dir = split_path (fn (prfx, _) => Path prfx);
 val base = split_path (fn (_, s) => Path [Basic s]);
 
 fun ext "" path = path
   | ext e path = split_path (fn (prfx, s) => append (Path prfx) (basic (s ^ "." ^ e))) path;
 
-val drop_ext = split_path (fn (prfx, s) => append (Path prfx)
+val split_ext = split_path (fn (prfx, s) => apfst (append (Path prfx))
   (case take_suffix (not_equal ".") (explode s) of
-    ([], _) => Path [Basic s]
-  | (cs, _) => Path [Basic (implode (take (length cs - 1, cs)))]));
-
-val dir = split_path (fn (prfx, _) => Path prfx);
+    ([], _) => (Path [Basic s], "")
+  | (cs, e) => (Path [Basic (implode (take (length cs - 1, cs)))], implode e)));
 
 
 (* evaluate variables *)