src/Pure/General/path.ML
changeset 15570 8d8c70b41bab
parent 15531 08c8dad8e399
child 17827 b32fad049413
equal deleted inserted replaced
15569:1b3115d1a8df 15570:8d8c70b41bab
    88       else if x = Root then rev_app (x :: xs) ys
    88       else if x = Root then rev_app (x :: xs) ys
    89       else rev_app xs ys
    89       else rev_app xs ys
    90   | rev_app xs (y :: ys) = rev_app (y :: xs) ys;
    90   | rev_app xs (y :: ys) = rev_app (y :: xs) ys;
    91 
    91 
    92 fun append (Path xs) (Path ys) = Path (rev_app (rev xs) ys);
    92 fun append (Path xs) (Path ys) = Path (rev_app (rev xs) ys);
    93 fun appends paths = foldl (uncurry append) (current, paths);
    93 fun appends paths = Library.foldl (uncurry append) (current, paths);
    94 val make = appends o map basic;
    94 val make = appends o map basic;
    95 fun norm path = rev_app [] path;
    95 fun norm path = rev_app [] path;
    96 
    96 
    97 
    97 
    98 (* pack *)
    98 (* pack *)
   140   | ext e path = split_path (fn (prfx, s) => append (Path prfx) (basic (s ^ "." ^ e))) path;
   140   | ext e path = split_path (fn (prfx, s) => append (Path prfx) (basic (s ^ "." ^ e))) path;
   141 
   141 
   142 val split_ext = split_path (fn (prfx, s) => apfst (append (Path prfx))
   142 val split_ext = split_path (fn (prfx, s) => apfst (append (Path prfx))
   143   (case take_suffix (not_equal ".") (explode s) of
   143   (case take_suffix (not_equal ".") (explode s) of
   144     ([], _) => (Path [Basic s], "")
   144     ([], _) => (Path [Basic s], "")
   145   | (cs, e) => (Path [Basic (implode (take (length cs - 1, cs)))], implode e)));
   145   | (cs, e) => (Path [Basic (implode (Library.take (length cs - 1, cs)))], implode e)));
   146 
   146 
   147 
   147 
   148 (* evaluate variables *)
   148 (* evaluate variables *)
   149 
   149 
   150 fun eval env (Variable s) = rep (env s)
   150 fun eval env (Variable s) = rep (env s)
   151   | eval _ x = [x];
   151   | eval _ x = [x];
   152 
   152 
   153 fun evaluate env (Path xs) =
   153 fun evaluate env (Path xs) =
   154   Path (norm (flat (map (eval env) xs)));
   154   Path (norm (List.concat (map (eval env) xs)));
   155 
   155 
   156 val expand = evaluate (unpack o getenv);
   156 val expand = evaluate (unpack o getenv);
   157 
   157 
   158 val position = Position.line_name 1 o quote o pack o expand;
   158 val position = Position.line_name 1 o quote o pack o expand;
   159 
   159