From: Ferruccio Guidi Date: Thu, 20 Dec 2018 15:46:01 +0000 (+0100) Subject: xoa utility updated X-Git-Tag: make_still_working~259 X-Git-Url: http://matita.cs.unibo.it/gitweb/?p=helm.git;a=commitdiff_plain;h=f4e15b10a8f778c77953ed4c1ebdc7107ffd4d55 xoa utility updated + two missing cases implemented + dependences fixed in Makefile --- diff --git a/matita/components/binaries/xoa/Makefile b/matita/components/binaries/xoa/Makefile index dd5a763f7..1933a2003 100644 --- a/matita/components/binaries/xoa/Makefile +++ b/matita/components/binaries/xoa/Makefile @@ -1,6 +1,6 @@ EXEC = xoa VERSION=0.2.0 -REQUIRES = helm-grafite +REQUIRES = helm-registry include ../Makefile.common diff --git a/matita/components/binaries/xoa/xoa.ml b/matita/components/binaries/xoa/xoa.ml index 219b90660..c5604f1e6 100644 --- a/matita/components/binaries/xoa/xoa.ml +++ b/matita/components/binaries/xoa/xoa.ml @@ -19,67 +19,76 @@ let incremental = ref true let separate = ref false let clear () = - incremental := true; - separate := false; - R.clear () + incremental := true; + separate := false; + R.clear () let unm_ex s = - Scanf.sscanf s "%u %u" A.mk_exists + Scanf.sscanf s "%u %u" A.mk_exists let unm_or s = - Scanf.sscanf s "%u" A.mk_or + Scanf.sscanf s "%u" A.mk_or let unm_and s = - Scanf.sscanf s "%u" A.mk_and + Scanf.sscanf s "%u" A.mk_and let process_centralized conf = - let preamble = L.get_preamble conf in - if R.has "xoa.objects" && R.has "xoa.notations" then begin - let ooch = L.open_out preamble (R.get_string "xoa.objects") in - let noch = L.open_out preamble (R.get_string "xoa.notations") in - List.iter (L.out_include ooch) (R.get_list R.string "xoa.include"); - L.out_include ooch (R.get_string "xoa.notations" ^ ".ma"); - List.iter (E.generate ooch noch) (R.get_list unm_ex "xoa.ex"); - List.iter (E.generate ooch noch) (R.get_list unm_or "xoa.or"); - List.iter (E.generate ooch noch) (R.get_list unm_and "xoa.and"); - close_out noch; close_out ooch - end + let preamble = L.get_preamble conf in + if R.has "xoa.objects" && R.has "xoa.notations" then begin + let ooch = L.open_out preamble (R.get_string "xoa.objects") in + let noch = L.open_out preamble (R.get_string "xoa.notations") in + List.iter (L.out_include ooch) (R.get_list R.string "xoa.include"); + L.out_include ooch (R.get_string "xoa.notations" ^ ".ma"); + List.iter (E.generate ooch noch) (R.get_list unm_ex "xoa.ex"); + List.iter (E.generate ooch noch) (R.get_list unm_or "xoa.or"); + List.iter (E.generate ooch noch) (R.get_list unm_and "xoa.and"); + close_out noch; close_out ooch + end -let generate (p, o, n) = function - | A.Exists (c, v) as d -> +let generate (p, o, n) d = + let oname, nname = match d with + | A.Exists (c, v) -> let oname = Printf.sprintf "%s/ex_%u_%u" o c v in let nname = Printf.sprintf "%s/ex_%u_%u" n c v in - if !incremental && L.exists_out oname && L.exists_out nname then () else - begin - let ooch = L.open_out p oname in - let noch = L.open_out p nname in - List.iter (L.out_include ooch) (R.get_list R.string "xoa.include"); - L.out_include ooch (nname ^ ".ma"); - E.generate ooch noch d; - close_out noch; close_out ooch - end - | A.Or c -> () - | A.And c -> () + oname, nname + | A.Or c -> + let oname = Printf.sprintf "%s/or_%u" o c in + let nname = Printf.sprintf "%s/or_%u" n c in + oname, nname + | A.And c -> + let oname = Printf.sprintf "%s/and_%u" o c in + let nname = Printf.sprintf "%s/and_%u" n c in + oname, nname + in + if !incremental && L.exists_out oname && L.exists_out nname then () else + begin + let ooch = L.open_out p oname in + let noch = L.open_out p nname in + List.iter (L.out_include ooch) (R.get_list R.string "xoa.include"); + L.out_include ooch (nname ^ ".ma"); + E.generate ooch noch d; + close_out noch; close_out ooch + end let process_distributed conf = - let preamble = L.get_preamble conf in - if R.has "xoa.objects" && R.has "xoa.notations" then begin - let st = preamble, R.get_string "xoa.objects", R.get_string "xoa.notations" in - List.iter (generate st) (R.get_list unm_ex "xoa.ex"); - List.iter (generate st) (R.get_list unm_or "xoa.or"); - List.iter (generate st) (R.get_list unm_and "xoa.and"); - end + let preamble = L.get_preamble conf in + if R.has "xoa.objects" && R.has "xoa.notations" then begin + let st = preamble, R.get_string "xoa.objects", R.get_string "xoa.notations" in + List.iter (generate st) (R.get_list unm_ex "xoa.ex"); + List.iter (generate st) (R.get_list unm_or "xoa.or"); + List.iter (generate st) (R.get_list unm_and "xoa.and"); + end let process conf = - if !separate then process_distributed conf else process_centralized conf + if !separate then process_distributed conf else process_centralized conf let _ = - let help = "Usage: xoa [ -Xs | ]*\n" in - let help_X = " Clear configuration" in - let help_s = " Generate separate objects" in - let help_u = " Update existing separate files" in - Arg.parse [ - "-X", Arg.Unit clear, help_X; - "-s", Arg.Set separate, help_s; - "-u", Arg.Clear incremental, help_u; - ] process help + let help = "Usage: xoa [ -Xs | ]*\n" in + let help_X = " Clear configuration" in + let help_s = " Generate separate objects" in + let help_u = " Update existing separate files" in + Arg.parse [ + "-X", Arg.Unit clear, help_X; + "-s", Arg.Set separate, help_s; + "-u", Arg.Clear incremental, help_u; + ] process help