]> matita.cs.unibo.it Git - helm.git/blob - matita/components/binaries/matex/matex.ml
auxiliary executables (xoa, matitadep, probe, matex) ported to dune
[helm.git] / matita / components / binaries / matex / matex.ml
1 (*
2     ||M||  This file is part of HELM, an Hypertextual, Electronic        
3     ||A||  Library of Mathematics, developed at the Computer Science     
4     ||T||  Department, University of Bologna, Italy.                     
5     ||I||                                                                
6     ||T||  HELM is free software; you can redistribute it and/or         
7     ||A||  modify it under the terms of the GNU General Public License   
8     \   /  version 2 or (at your option) any later version.      
9      \ /   This software is distributed as is, NO WARRANTY.     
10       V_______________________________________________________________ *)
11
12 module A = Arg
13 module F = Filename
14
15 module U = NUri
16 module R = Helm_registry
17 module L = Librarian
18
19 module X = Ground
20 module G = Options
21 module E = Engine
22 (* module O = TeXOutput *)
23 module K = Kernel
24
25 let help_O = "<dir> Set this output directory"
26 let help_X = " Clear configuration and options"
27 let help_a = " Log alpha-unconverted identifiers (default: no)"
28 let help_c = " Check term transformations (default: no)"
29 let help_g = " Global alpha-conversion (default: no)"
30 let help_l = "<file> Output the list of generated files in this file"
31 let help_m = " Log missing notational macros (default: no)"
32 let help_p = " Omit proofs (default: no)"
33 let help_t = " Omit types (default: no)"
34
35 let help   = ""
36
37 (* internal functions *******************************************************)
38
39 let alpha_decode = R.triple R.string R.string R.string
40
41 let const_decode = R.pair R.string R.string
42
43 let macro_decode = R.quad R.string R.string R.int R.int
44
45 let init registry =
46    R.load_from registry; 
47    if !G.no_init then begin
48       K.init ();
49       G.no_init := false;
50    end;
51    G.alpha_type := R.get_list alpha_decode "matex.alpha.type";
52    G.alpha_sort := R.get_list alpha_decode "matex.alpha.sort";
53    G.alpha_gref := R.get_list const_decode "matex.alpha.gref";
54    G.macro_gref := R.get_list macro_decode "matex.notation.const"
55
56 let is_registry s =
57    F.check_suffix s ".conf.xml"
58
59 let no_init () =
60    failwith "MaTeX: main: registry not initialized" 
61
62 let malformed s =
63    failwith ("MaTeX: main: malformed argument: " ^ s)
64
65 let set_list fname =
66    let file = F.concat !G.out_dir fname in
67    G.close_list (); G.list_och := Some (open_out file)
68
69 let process s =
70    if is_registry s then init s
71    else if !G.no_init then no_init ()
72    else if L.is_uri s then E.process (U.uri_of_string s)
73    else malformed s
74
75 let main =
76 begin try
77    A.parse [
78       "-O", A.String ((:=) G.out_dir), help_O;
79       "-X", A.Unit G.clear, help_X;
80       "-a", A.Set G.log_alpha, help_a;
81       "-c", A.Set G.check, help_c;
82       "-g", A.Set G.global_alpha, help_g;
83       "-l", A.String set_list, help_l;
84       "-m", A.Set G.log_missing, help_m;
85       "-p", A.Set G.no_proofs, help_p;
86       "-t", A.Set G.no_types, help_t;
87    ] process help
88 with
89    | X.Error s -> X.log s
90 end;
91 G.close_list ()