(*
- * Copyright (C) 2003:
+ * Copyright (C) 2003-2004:
* Stefano Zacchiroli <zack@cs.unibo.it>
* for the HELM Team http://helm.cs.unibo.it/
*
* http://helm.cs.unibo.it/
*)
-open Http_getter_debugger;;
-open Printf;;
+open Printf
+
+open Http_getter_debugger
let trailing_dot_gz_RE = Pcre.regexp "\\.gz$" (* for g{,un}zip *)
let url_RE = Pcre.regexp "^([\\w.-]+)(:(\\d+))?(/.*)?$"
let tcp_bufsiz = 4096 (* for TCP I/O *)
let fold_file f init fname =
- let inchan = open_in fname in
- let res =
- try
- Zack.fold_in f init inchan
- with e -> close_in inchan; raise e
+ let ic = open_in fname in
+ let rec aux acc =
+ let line = try Some (input_line ic) with End_of_file -> None in
+ match line with
+ | None -> acc
+ | Some line -> aux (f line acc)
in
- close_in inchan;
+ let res = try aux init with e -> close_in ic; raise e in
+ close_in ic;
res
-let iter_file f = fold_file (fun _ line -> f line) ()
+let iter_file f = fold_file (fun line _ -> f line) ()
let hashtbl_sorted_fold f tbl init =
let sorted_keys =
in
List.fold_left (fun acc k -> f k (Hashtbl.find tbl k) acc) init sorted_keys
+let hashtbl_sorted_iter f tbl =
+ let sorted_keys =
+ List.sort compare (Hashtbl.fold (fun key _ keys -> key::keys) tbl [])
+ in
+ List.iter (fun k -> f k (Hashtbl.find tbl k)) sorted_keys
+
let cp src dst =
let (ic, oc) = (open_in src, open_out dst) in
let buf = String.create bufsiz in
url (Printexc.to_string e));
None
- (** apply a transformation "string list -> string list" to file lines *)
-let mangle_file ~fname f =
- let ic = open_in fname in
- let lines = Zack.input_lines ic in
- close_in ic;
- let oc = open_out fname in
- Zack.output_lines (f lines) oc;
- close_out oc
-;;
-
-let add_line ~fname ?position line =
- mangle_file ~fname
- (fun lines ->
- match position with
- | None -> lines @ [line]
- | Some i ->
- assert (i >= 0);
- let rec add_after i = function
- | (acc, []) -> acc @ [line] (* eof *)
- | (acc, ((hd::tl) as l)) ->
- if i = 0 then
- acc @ [line] @ l
- else
- add_after (i-1) (acc @ [hd], tl)
- in
- add_after i ([], lines))
-;;
-
-let remove_line ~fname position =
- mangle_file ~fname
- (fun lines ->
- assert (position >= 0);
- let rec remove i = function
- | (acc, []) -> acc (* eof *)
- | (acc, ((hd::tl) as l)) ->
- if i = 0 then
- acc @ tl
- else
- remove (i-1) (acc @ [hd], tl)
- in
- remove position ([], lines))
-;;
-
let is_blank_line =
let blank_line_RE = Pcre.regexp "(^#)|(^\\s*$)" in
fun line ->
Pcre.pmatch ~rex:blank_line_RE line
-;;