X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FsearchEngine%2FmooglePp.ml;h=3af0afb4051f882f5251d44891ecc787c93cc232;hb=4167cea65ca58897d1a3dbb81ff95de5074700cc;hp=807fcc219180dc68989c88a6082b4d9c486a74c0;hpb=ffb569818f6e4d9723dbd2c1721bbe80e75278e9;p=helm.git diff --git a/helm/searchEngine/mooglePp.ml b/helm/searchEngine/mooglePp.ml index 807fcc219..3af0afb40 100644 --- a/helm/searchEngine/mooglePp.ml +++ b/helm/searchEngine/mooglePp.ml @@ -1,80 +1,83 @@ open Printf -let pp_request (req: Http_types.request) = - match req#path with - | "/elim" -> "Elim" - | "/match" -> "Match" - | "/hint" -> "Hint" - | "/locate" -> "Locate" - | _ -> assert false - let pp_error title msg = - sprintf "
%s: %s
" title msg + sprintf "
%s: %s

" title msg + +let paginate ~size ~page l = + let min = 1 + (page-1) * size in + let max = page * size in + let rec aux i l = + match (i, l) with + | _, [] -> [] + | i, hd :: tl when i < min -> aux (i+1) tl + | i, hd :: tl when i >= min && i <= max -> hd :: aux (i+1) tl + | i, hd :: tl -> [] + in + assert (size > 0 && page > 0); + aux 1 l (** pretty print a list of URIs to an HELM theory file *) -let theory_of_result req result = - let max_results_no = - Helm_registry.get_opt_default Helm_registry.get_int 10 - "search_engine.max_results_no" +let theory_of_result page result = + let results_per_page = + Helm_registry.get_int "search_engine.results_per_page" in - let results_no = List.length result in - let query_kind = pp_request req in - let template query_kind summary results = - sprintf - "
- - - - - -
%s%s
-
-
-
- %s -
" - query_kind summary results - in + let results_no = List.length result in + let buffer = Buffer.create (200 * results_no) in + let result = paginate ~size:results_per_page ~page result in if results_no > 0 then - let mode = if results_no > max_results_no then "linkonly" else "typeonly" in - let results = - let idx = ref (results_no + 1) in - List.fold_right - (fun uri i -> - decr idx ; - sprintf - " - %d. - - %s" - !idx uri mode i) - result "" + let mode = "typeonly" in + let output_results () = + let idx = ref ((page - 1) * results_per_page) in + List.iter + (fun uri -> + incr idx; + Printf.bprintf buffer + " + %d. + %s + + + + + " + !idx uri uri mode) result ; in - template query_kind - (sprintf "%d result%s found" - results_no (if results_no > 1 then "s" else "")) - (sprintf - " - %s -
" - results) + let summary = + sprintf "%d result%s found" + results_no (if results_no > 1 then "s" else "") + in + begin + Buffer.add_string buffer + ""; + output_results (); + Buffer.add_string buffer "
"; + (summary, Buffer.contents buffer) + end else - template query_kind "no results found" "" + ("no results found", "") let html_of_interpretations interps = - let radio_button n = - sprintf "" n - in - let text interp = - String.concat "
" - (List.map - (fun (id, value) -> sprintf "%s = %s" id value) - interp) - in - let rec aux n = function - | [] -> [] - | interp::tl -> ((radio_button n)^(text interp))::(aux (n+1) tl) + let choice_of_interp interp = + sprintf "\n%s\n
" + (String.concat "\n" + (List.map + (fun (k, v) -> + sprintf "%s%s" k v) + interp)) in - String.concat "
" (aux 0 interps) + let interp_no = ref ~-1 in + sprintf "\n%s\n
" + (String.concat "\n" + (List.map + (fun interp -> + sprintf " + + + + %s + " + (incr interp_no; !interp_no) + (choice_of_interp interp)) + interps))