]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/xml/xml.ml
added gzip support to Xml
[helm.git] / helm / ocaml / xml / xml.ml
index 9dcd16fc0780e897518c71c49ea1b3d2ee6a8d34..64c066a1eacf1a611396bd5427fdddfede8a6097 100644 (file)
@@ -101,6 +101,10 @@ let pp_to_outchan strm oc =
   flush oc
 ;;
 
+let pp_to_gzipchan strm oc =
+  pp_gen (fun s -> Gzip.output oc s 0 (String.length s)) strm;
+  Gzip.flush oc
+
 (** pretty printer to string *)
 let pp_to_string strm =
   let buf = Buffer.create 10240 in
@@ -112,21 +116,27 @@ let pp_to_string strm =
 (* Usage:                                                                   *)
 (*  pp tokens None     pretty prints the output on stdout                   *)
 (*  pp tokens (Some filename) pretty prints the output on the file filename *)
-let pp ?(quiet=false) strm fn =
-  match fn with
-  | Some filename ->
-      let outchan = open_out filename in
-      (try
-        pp_to_outchan strm outchan;
-      with e ->
-        close_out outchan;
-        raise e);
-      close_out outchan;
-      if not quiet then
-        begin
-          print_string ("\nWriting on file \"" ^ filename ^
-            "\" was succesfull\n");
-          flush stdout
-        end
-  | None -> pp_to_outchan strm stdout
+let pp ?(gzip=false) strm fn =
+  if gzip then
+    match fn with
+    | Some filename ->
+        let outchan = Gzip.open_out filename in
+        (try
+          pp_to_gzipchan strm outchan;
+        with e ->
+          Gzip.close_out outchan;
+          raise e);
+        Gzip.close_out outchan
+    | None -> failwith "Can't sent gzipped output to stdout"
+  else
+    match fn with
+    | Some filename ->
+        let outchan = open_out filename in
+        (try
+          pp_to_outchan strm outchan;
+        with e ->
+          close_out outchan;
+          raise e);
+        close_out outchan
+    | None -> pp_to_outchan strm stdout
 ;;