(* Abstract type for the index, generated from C++ code *) type index external build_lex_index : Tree.tree_pointer -> Tag.t -> index = "caml_build_lex_index" external print_lex_index : index -> unit = "caml_print_lex_index" let main () = if Array.length Sys.argv != 3 then let () = Printf.eprintf "Error: invalid argument" in exit 1 else let file = Sys.argv.(1) in (* Load the index or the xml file *) Printf.printf "Loading document\n%!"; let document = if Filename.check_suffix file ".srx" then Tree.load file else if Filename.check_suffix file ".xml" then Tree.parse_xml_uri file else let () = Printf.eprintf "Error: unrecognized extension" in exit 2 in Tag.init (Tree.tag_operations document); Printf.printf "Building lex index for tag %s\n%!" (Tag.to_string (Tag.tag Sys.argv.(2))); let index = build_lex_index (Tree.get_tree_pointer document) (Tag.tag Sys.argv.(2)) in Printf.printf "Printing lex index\n%!"; print_lex_index index; exit 0 let () = try main () with e -> Printf.eprintf "Fatal error: %s" (Printexc.to_string e); exit 3