(* Copyright (C) 2000, HELM Team. * * This file is part of HELM, an Hypertextual, Electronic * Library of Mathematics, developed at the Computer Science * Department, University of Bologna, Italy. * * HELM is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * HELM is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HELM; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA. * * For details, see the HELM World-Wide-Web page, * http://cs.unibo.it/helm/. *) (******************************************************************************) (* *) (* PROJECT HELM *) (* *) (* Claudio Sacerdoti Coen *) (* 24/01/2000 *) (* *) (* This is a textual interface to the Coq-like pretty printer cicPp for cic *) (* terms exported in xml. It uses directly the modules cicPp and cache and *) (* indirectly all the other modules (cicParser, cicParser2, cicParser3, *) (* getter). The syntax is "experiment[.opt] filename1 ... filenamen" where *) (* filenamei is the path-name of an xml file describing a cic term. On stdout *) (* are pretty-printed all the n terms *) (* *) (******************************************************************************) let pretty_print = ref true;; let read_from_stdin = ref false;; let uris_in_input = ref false;; let parse uri = if !pretty_print then begin print_endline ("^^^" ^ uri ^ "^^^") ; print_string (CicPp.ppobj (CicCache.get_obj (UriManager.uri_of_string uri))); print_endline ("\n$$$" ^ uri ^ "$$$\n") end else begin print_string uri ; let _ = CicCache.get_obj (UriManager.uri_of_string uri) in print_endline " OK!" ; flush stdout end ;; let uri_of_filename fn = if !uris_in_input then fn else let uri = Str.replace_first (Str.regexp (Str.quote Configuration.helm_dir)) "cic:" fn in let uri' = Str.replace_first (Str.regexp "\.xml$") "" uri in uri' ;; let read_filenames_from_stdin () = let files = ref [] in try while true do let l = Str.split (Str.regexp " ") (read_line ()) in List.iter (fun x -> files := (uri_of_filename x) :: !files) l done with End_of_file -> files := List.rev !files ; List.iter parse !files ;; (* filenames are read from command line and converted to uris via *) (* uri_of_filenames; then the cic terms are load in cache via *) (* CicCache.get_obj and then pretty printed via CicPp.ppobj *) let main() = let files = ref [] in Arg.parse ["-nopp", Arg.Clear pretty_print, "Do not pretty print, parse only" ; "-stdin", Arg.Set read_from_stdin, "Read from stdin" ; "-uris", Arg.Set uris_in_input, "Read uris, not filenames" ; "-update", Arg.Unit Getter.update, "Update the getter view of the world"] (fun x -> files := (uri_of_filename x) :: !files) " usage: experiment file ... List of options:"; if !read_from_stdin then read_filenames_from_stdin () else begin files := List.rev !files; List.iter parse !files end ;; main();;