X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FsearchEngine%2FsearchEngine.ml;h=87bcad36a42bc9b42d4985bdb7c4368410f7e0b3;hb=e76b78d1d80796de1b8f6a469741cbd26cd4d822;hp=4a5c2e1b5df82414056e8dabc71042c0f7988807;hpb=01a159421d87064d2e5397bfc90630a671e7824a;p=helm.git diff --git a/helm/searchEngine/searchEngine.ml b/helm/searchEngine/searchEngine.ml index 4a5c2e1b5..87bcad36a 100644 --- a/helm/searchEngine/searchEngine.ml +++ b/helm/searchEngine/searchEngine.ml @@ -59,9 +59,11 @@ let final_results_TPL = pages_dir ^ "/templateambigpdq3.html";; exception Chat_unfinished -let javascript_quote = +let javascript_quote s = let rex = Pcre.regexp "'" in + let rex' = Pcre.regexp "\"" in Pcre.replace ~rex ~templ:"\\'" + (Pcre.replace ~rex:rex' ~templ:"\\\"" s) ;; (* build a bool from a 1-character-string *) @@ -164,7 +166,8 @@ let port = Helm_registry.get_int "search_engine.port";; let pp_error = sprintf "

Error: %s

";; let bad_request body outchan = - Http_daemon.respond_error ~status:(`Client_error `Bad_request) ~body outchan + Http_daemon.respond_error ~code:(`Status (`Client_error `Bad_request)) ~body + outchan ;; let contype = "Content-Type", "text/html";; @@ -271,6 +274,7 @@ let callback mqi_handle (req: Http_types.request) outchan = try debug_print (sprintf "Received request: %s" req#path); (match req#path with + | "/help" -> Http_daemon.respond ~body:"HELM Search Engine" outchan | "/execute" -> let query_string = req#param "query" in let lexbuf = Lexing.from_string query_string in @@ -302,7 +306,7 @@ let callback mqi_handle (req: Http_types.request) outchan = (match page with | page when is_permitted page -> (let fname = sprintf "%s/%s" pages_dir (remove_fragment page) in - Http_daemon.send_basic_headers ~code:200 outchan; + Http_daemon.send_basic_headers ~code:(`Code 200) outchan; Http_daemon.send_header "Content-Type" "text/html" outchan; Http_daemon.send_CRLF outchan; if preprocess then begin @@ -347,6 +351,8 @@ let callback mqi_handle (req: Http_types.request) outchan = let term_string = req#param "term" in let (context, metasenv) = ([], []) in let id_to_uris_raw = req#param "aliases" in + let parse_interpretation_choices choices = + List.map int_of_string (Pcre.split ~pat:" " choices) in let parse_choices choices_raw = let choices = Pcre.split ~pat:";" choices_raw in List.fold_left @@ -365,14 +371,18 @@ let callback mqi_handle (req: Http_types.request) outchan = in let id_to_uris = DisambiguatingParser.EnvironmentP3.of_string id_to_uris_raw in -print_endline ("id_to_uris_raw: " ^ id_to_uris_raw) ; -print_endline ("id_to_uris: " ^ (DisambiguatingParser.EnvironmentP3.to_string id_to_uris)) ; let id_to_choices = try let choices_raw = req#param "choices" in parse_choices choices_raw with Http_types.Param_not_found _ -> (fun _ -> None) in + let interpretation_choices = + try + let choices_raw = req#param "interpretation_choices" in + Some (parse_interpretation_choices choices_raw) + with Http_types.Param_not_found _ -> None + in let module Chat: DisambiguateTypes.Callbacks = struct @@ -388,13 +398,14 @@ print_endline ("id_to_uris: " ^ (DisambiguatingParser.EnvironmentP3.to_string id (match selection_mode with | `SINGLE -> assert false | `MULTIPLE -> - Http_daemon.send_basic_headers ~code:200 outchan ; + Http_daemon.send_basic_headers ~code:(`Code 200) outchan; Http_daemon.send_CRLF outchan ; iter_file (fun line -> let formatted_choices = String.concat "," - (List.map (fun uri -> sprintf "\'%s\'" uri) choices) + (List.map (fun uri -> sprintf "\'%s\'" uri) + choices) in let processed_line = apply_substs @@ -410,55 +421,48 @@ print_endline ("id_to_uris: " ^ (DisambiguatingParser.EnvironmentP3.to_string id raise Chat_unfinished)) let interactive_interpretation_choice interpretations = - let html_interpretations_labels = - String.concat ", " - (List.map - (fun l -> - "\'" ^ - (String.concat "
" - (List.map - (fun (id, value) -> - let id = javascript_quote id in - let value = javascript_quote value in - sprintf "alias id %s = %s" id value) - l)) ^ - "\'") - interpretations) - in - let html_interpretations = - String.concat ", " - (List.map - (fun l -> - "\'" ^ - (String.concat " " - (List.map - (fun (id, value) -> - let id = javascript_quote id in - let value = javascript_quote value in - sprintf "alias id %s = %s" - id - (MQueryMisc.wrong_xpointer_format_from_wrong_xpointer_format' - value)) - l)) ^ - "\'") + match interpretation_choices with + Some l -> prerr_endline "CARRAMBA" ; l + | None -> + let html_interpretations_labels = + String.concat ", " + (List.map + (fun l -> + "\'" ^ + (String.concat "
" + (List.map + (fun (id, value) -> + let id = javascript_quote id in + let value = javascript_quote value in + sprintf "%s = %s" id value) + l)) ^ + "\'") interpretations) - in - Http_daemon.send_basic_headers ~code:200 outchan ; - Http_daemon.send_CRLF outchan ; - iter_file - (fun line -> - let processed_line = - apply_substs - [interpretations_RE, html_interpretations; - interpretations_labels_RE, html_interpretations_labels] - line - in - output_string outchan (processed_line ^ "\n")) - interactive_interpretation_choice_TPL; - raise Chat_unfinished - - let input_or_locate_uri ~title = - UriManager.uri_of_string "cic:/Coq/Init/DataTypes/nat_ind.con" + in + let html_interpretations = + let rec aux n = + function + [] -> [] + | _::tl -> ("'" ^ string_of_int n ^ "'")::(aux (n+1) tl) + in + String.concat ", " (aux 0 interpretations) + in + Http_daemon.send_basic_headers ~code:(`Code 200) outchan ; + Http_daemon.send_CRLF outchan ; + iter_file + (fun line -> + let processed_line = + apply_substs + [interpretations_RE, html_interpretations; + interpretations_labels_RE, html_interpretations_labels] + line + in + output_string outchan (processed_line ^ "\n")) + interactive_interpretation_choice_TPL; + raise Chat_unfinished + + let input_or_locate_uri ~title ?id () = + assert false end in @@ -524,15 +528,18 @@ print_endline ("id_to_uris: " ^ (DisambiguatingParser.EnvironmentP3.to_string id "

Only constraints

" ^ "Enforce Only constraints for objects: " ^ "
" ^ + (if only_obj = None then "" else " checked='yes'") ^ + " />
" ^ "Enforce Rel constraints for objects: " ^ "
" ^ + (if only_rel = None then "" else " checked='yes'") ^ + " />
" ^ "Enforce Sort constraints for objects: " ^ "
" + (if only_sort = None then "" else " checked='yes'") ^ + " />
" in - Http_daemon.send_basic_headers ~code:200 outchan ; + Http_daemon.send_basic_headers ~code:(`Code 200) outchan ; Http_daemon.send_CRLF outchan ; iter_file (fun line -> @@ -549,7 +556,7 @@ print_endline ("id_to_uris: " ^ (DisambiguatingParser.EnvironmentP3.to_string id G.query_of_constraints universe must'' only' in let results = MQueryInterpreter.execute mqi_handle query in - Http_daemon.send_basic_headers ~code:200 outchan ; + Http_daemon.send_basic_headers ~code:(`Code 200) outchan ; Http_daemon.send_CRLF outchan ; iter_file (fun line -> @@ -558,13 +565,15 @@ print_endline ("id_to_uris: " ^ (DisambiguatingParser.EnvironmentP3.to_string id let processed_line = apply_substs [results_RE, theory_of_result results ; - new_aliases_RE, new_aliases] + (* CSC: Bug here: this is a string, not an array! *) + new_aliases_RE, "'" ^ javascript_quote new_aliases ^ "'"] line in output_string outchan (processed_line ^ "\n")) final_results_TPL | invalid_request -> - Http_daemon.respond_error ~status:(`Client_error `Bad_request) outchan); + Http_daemon.respond_error ~code:(`Status (`Client_error `Bad_request)) + outchan); debug_print (sprintf "%s done!" req#path) with | Chat_unfinished -> prerr_endline "Chat unfinished, Try again!"