diff --git a/doc/developer/check_api/Makefile b/doc/developer/check_api/Makefile index 627161a760fede2302313a7bcda0da6cbfe04c54..6f6e94d6df445d3266a02ce6edbb4adea3b076ff 100644 --- a/doc/developer/check_api/Makefile +++ b/doc/developer/check_api/Makefile @@ -26,7 +26,7 @@ all: check_and_compare main.idx main.idx: ../developer.idx $(wildcard ../*.tex) cp ../developer.idx main.idx -check_and_compare: check_index_grammar.cmi check_index_grammar.cmx \ +check_and_compare: check_index_grammar.cmi check_index_lexer.cmi check_index_grammar.cmx \ check_index_lexer.cmx check_and_compare.cmx $(OCAMLOPT) -o check_and_compare str.cmxa check_index_grammar.cmx \ check_index_lexer.cmx check_and_compare.cmx diff --git a/doc/developer/check_api/check_and_compare.ml b/doc/developer/check_api/check_and_compare.ml index e767939d391a8f5760b5239aa1627a82f05f6718..7a8d95b50d782b45087d123feeeeb48091108203 100644 --- a/doc/developer/check_api/check_and_compare.ml +++ b/doc/developer/check_api/check_and_compare.ml @@ -24,7 +24,8 @@ let repair_word s = with Not_found -> st in Str.global_replace (Str.regexp "\\") "" (repair_word_aux s) - + +let external_names = [ "Landmarks"; "Makefile" ] (** [fill_tbl] takes a file containing data which is as "element_name/type/comment/" or "element_name". @@ -34,53 +35,23 @@ let repair_word s = let fill_tbl tbl file_name = try let c = open_in file_name in - try - while true do - let s = input_line c - in - if not (Str.string_match (Str.regexp "Command.Line") s 0) - && not ( Hashtbl.mem tbl s) - then match (Str.split (Str.regexp "/") s) with - | [] -> () - | h::[] -> Hashtbl.add tbl h [] - | h::q -> Hashtbl.add tbl h q + let add_if_needed name infos = + if not (Hashtbl.mem tbl name || List.mem name external_names) then + Hashtbl.add tbl name infos + in + try + while true do + let s = input_line c in + match (Str.split (Str.regexp "/") s) with + | [] -> () + | h::[] -> add_if_needed h [] + | h::q -> add_if_needed h q done with End_of_file -> close_in c with Sys_error _ as exn -> Format.eprintf "cannot handle file %s: %s" file_name (Printexc.to_string exn) -(** [fill_list] takes a file containing data which is - as "element_name/type/comment/" if (has_type=true) or - "element_name" if (has_type=false). It fills the list [li] - with all the element names and alphabetically sorts them. *) -let fill_list li name ~has_type = - let fill_list_no_sorting l file_name = - try let c = open_in file_name in - try - while true do - let s = input_line c in - if not (Str.string_match - (Str.regexp "Command.Line") s 0)&& not ( List.mem s !l) - then begin - if has_type then - try let t =(Str.string_before s - (String.index_from s 0 '/' )) in - match t with - |"" -> () - | _ -> if not( List.mem t !l) - then l := t::!l - with Not_found ->() - else l := s::!l - end - done - with End_of_file -> close_in c - with Sys_error _ as exn -> - Format.eprintf "cannot handle file %s: %s" file_name - (Printexc.to_string exn) in - fill_list_no_sorting li name ; - li := List.sort String.compare !li - (** [run_oracle] takes two hashtables [t1] and [t2] when called. It first tests if the file "run.oracle" is already existing. If this file exists, it uses the function [w_tbl] and creates @@ -180,6 +151,9 @@ let compare t1 t2 name1 name2 = name2 name1; List.iter (compare_aux t1) t2 +let sort_keys tbl = + let l = Hashtbl.fold (fun k _ l -> k :: l) tbl [] in + List.sort String.compare l (** here are used the lexer and parser "check_index_lexer" and "check_index_grammar" to create the file "index_file". @@ -187,8 +161,6 @@ let compare t1 t2 name1 name2 = let () = let index_hstbl: (string,string list) Hashtbl.t = Hashtbl.create 197 in let code_hstbl: (string,string list) Hashtbl.t = Hashtbl.create 197 in - let index_list = ref [] in - let code_list = ref [] in try let chan_out = open_out ( "index_file") in try @@ -205,9 +177,9 @@ let () = close_out chan_out ; close_in chan_in; fill_tbl code_hstbl "code_file"; fill_tbl index_hstbl "index_file"; - fill_list code_list "code_file" ~has_type:true; - fill_list index_list "index_file" ~has_type:false; - compare !index_list !code_list "THE INDEX \ + let code_list = sort_keys code_hstbl in + let index_list = sort_keys index_hstbl in + compare index_list code_list "THE INDEX \ OF THE DEVELOPER GUIDE" "THE CODE"; run_oracle index_hstbl code_hstbl ; with Sys_error _ as exn ->