]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/http_getter/http_getter_misc.ml
split into two major parts:
[helm.git] / helm / http_getter / http_getter_misc.ml
index ad543b447e783f5a9dadd1fbc4bab70c853c3c67..c983c298813e0a83f5fc8e8be3cc2aa40a38af87 100644 (file)
@@ -1,5 +1,5 @@
 (*
- * Copyright (C) 2003:
+ * Copyright (C) 2003-2004:
  *    Stefano Zacchiroli <zack@cs.unibo.it>
  *    for the HELM Team http://helm.cs.unibo.it/
  *
@@ -26,8 +26,9 @@
  *  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+))?(/.*)?$"
@@ -40,16 +41,18 @@ let bufsiz = 16384  (* for file system I/O *)
 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 =
@@ -57,6 +60,12 @@ let hashtbl_sorted_fold f tbl init =
   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
@@ -234,52 +243,8 @@ let http_get url =
         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
-;;