equal
deleted
inserted
replaced
6 |
6 |
7 signature FILE = |
7 signature FILE = |
8 sig |
8 sig |
9 val standard_path: Path.T -> string |
9 val standard_path: Path.T -> string |
10 val platform_path: Path.T -> string |
10 val platform_path: Path.T -> string |
11 val bash_string: string -> string |
|
12 val bash_args: string list -> string |
|
13 val bash_path: Path.T -> string |
11 val bash_path: Path.T -> string |
14 val full_path: Path.T -> Path.T -> Path.T |
12 val full_path: Path.T -> Path.T -> Path.T |
15 val tmp_path: Path.T -> Path.T |
13 val tmp_path: Path.T -> Path.T |
16 val exists: Path.T -> bool |
14 val exists: Path.T -> bool |
17 val rm: Path.T -> unit |
15 val rm: Path.T -> unit |
44 (* system path representations *) |
42 (* system path representations *) |
45 |
43 |
46 val standard_path = Path.implode o Path.expand; |
44 val standard_path = Path.implode o Path.expand; |
47 val platform_path = ML_System.platform_path o standard_path; |
45 val platform_path = ML_System.platform_path o standard_path; |
48 |
46 |
49 fun bash_string "" = "\"\"" |
47 val bash_path = Bash_Syntax.string o standard_path; |
50 | bash_string str = |
|
51 str |> translate_string (fn ch => |
|
52 let val c = ord ch in |
|
53 (case ch of |
|
54 "\t" => "$'\\t'" |
|
55 | "\n" => "$'\\n'" |
|
56 | "\f" => "$'\\f'" |
|
57 | "\r" => "$'\\r'" |
|
58 | _ => |
|
59 if Symbol.is_ascii_letter ch orelse Symbol.is_ascii_digit ch orelse |
|
60 exists_string (fn c => c = ch) "-./:_" then ch |
|
61 else if c < 16 then "$'\\x0" ^ Int.fmt StringCvt.HEX c ^ "'" |
|
62 else if c < 32 orelse c >= 127 then "$'\\x" ^ Int.fmt StringCvt.HEX c ^ "'" |
|
63 else "\\" ^ ch) |
|
64 end); |
|
65 |
|
66 val bash_args = space_implode " " o map bash_string; |
|
67 |
|
68 val bash_path = bash_string o standard_path; |
|
69 |
48 |
70 |
49 |
71 (* full_path *) |
50 (* full_path *) |
72 |
51 |
73 fun full_path dir path = |
52 fun full_path dir path = |