Files
Geneweb/bin/gwu/gwu.ml
2024-03-05 22:01:20 +01:00

69 lines
2.6 KiB
OCaml

open GwuLib
let isolated = ref false
let speclist opts =
( "-odir",
Arg.String (fun s -> GwuLib.out_dir := s),
"<dir> create files from original name in directory (else on -o file)" )
:: ( "-isolated",
Arg.Set isolated,
" export isolated persons (work only if export all database)." )
:: ( "-old_gw",
Arg.Set GwuLib.old_gw,
" do not export additional fields (for backward compatibility: < 7.00)"
)
:: ( "-raw",
Arg.Set GwuLib.raw_output,
" raw output (without possible utf-8 conversion)" )
:: ( "-sep",
Arg.String (fun s -> GwuLib.separate_list := s :: !GwuLib.separate_list),
"<1st_name.num surname> To use together with the option \"-odir\": \
separate this person and all his ancestors and descendants sharing the \
same surname. All the concerned families are displayed on standard \
output instead of their associated files. This option can be used \
several times." )
:: ( "-sep_only_file",
Arg.String (fun s -> GwuLib.only_file := s),
"<file> with option \"-sep\", tells to separate only groups of that \
file." )
:: ( "-sep_limit",
Arg.Int (fun i -> GwuLib.sep_limit := i),
"<num> When using the option \"-sep\", groups of families can become \
isolated in the files. Gwu reconnects them to the separated families \
(i.e. displays them to standard output) if the size of these groups is \
less than "
^ string_of_int !GwuLib.sep_limit
^ ". The present option changes this limit." )
:: Gwexport.speclist opts
|> Arg.align
let main () =
let opts = ref Gwexport.default_opts in
Arg.parse (speclist opts) (Gwexport.anonfun opts) Gwexport.errmsg;
let opts = !opts in
match opts.Gwexport.base with
| None -> assert false
| Some (ifile, base) ->
let select = Gwexport.select opts [] in
let in_dir =
if Filename.check_suffix ifile ".gwb" then ifile else ifile ^ ".gwb"
in
let src_oc_ht = Hashtbl.create 1009 in
Gwdb.load_ascends_array base;
Gwdb.load_strings_array base;
if not opts.Gwexport.mem then (
Gwdb.load_couples_array base;
Gwdb.load_unions_array base;
Gwdb.load_descends_array base;
());
let _ofile, oc, close = opts.Gwexport.oc in
if not !GwuLib.raw_output then oc "encoding: utf-8\n";
if !GwuLib.old_gw then oc "\n" else oc "gwplus\n\n";
GwuLib.prepare_free_occ base;
GwuLib.gwu opts !isolated base in_dir !out_dir src_oc_ht select;
Hashtbl.iter (fun _ (_, _, close) -> close ()) src_oc_ht;
close ()
let _ = main ()