]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/searchEngine/searchEngine.ml
Added a sort function to decide the order of theorems to try in the tactic "auto".
[helm.git] / helm / searchEngine / searchEngine.ml
index 4a5c2e1b5df82414056e8dabc71042c0f7988807..87bcad36a42bc9b42d4985bdb7c4368410f7e0b3 100644 (file)
@@ -59,9 +59,11 @@ let final_results_TPL = pages_dir ^ "/templateambigpdq3.html";;
 
 exception Chat_unfinished
 
-let javascript_quote =
+let javascript_quote =
  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 "<html><body><h1>Error: %s</h1></body></html>";;
 
 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 "<br />"
-                        (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 "<br />"
+                          (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
                   "<h4>Only constraints</h4>" ^
                   "Enforce Only constraints for objects: " ^
                     "<input type='checkbox' name='only_obj'" ^
-                    (if only_obj = None then "" else " checked='yes'") ^ " /><br />" ^
+                    (if only_obj = None then "" else " checked='yes'") ^
+                    " /><br />" ^
                   "Enforce Rel constraints for objects: " ^
                     "<input type='checkbox' name='only_rel'" ^
-                    (if only_rel = None then "" else " checked='yes'") ^ " /><br />" ^
+                    (if only_rel = None then "" else " checked='yes'") ^
+                    " /><br />" ^
                   "Enforce Sort constraints for objects: " ^
                     "<input type='checkbox' name='only_sort'" ^
-                    (if only_sort = None then "" else " checked='yes'") ^ " /><br />"
+                    (if only_sort = None then "" else " checked='yes'") ^
+                    " /><br />"
               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!"