src/Pure/General/file.ML
changeset 64304 96bc94c87a81
parent 63668 5efaa884ac6c
child 64698 e022a69db531
equal deleted inserted replaced
64303:605351c7ef97 64304:96bc94c87a81
     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 =