let pp_error title msg =
sprintf "<hr size='1' /><div><b class='error'>%s:</b> %s</div>" 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 (req: Http_types.request) page result =
+ let results_per_page =
+ Helm_registry.get_int "search_engine.results_per_page"
+ in
+ let results_no = List.length result in
+ let result = paginate ~size:results_per_page ~page result in
+ let query_kind = pp_request req in
+ let template query_kind summary results =
+ sprintf
+ "<div class='resultsbar'>
+ <table width='100%%'>
+ <tr>
+ <td class='left'><b class='query_kind'>%s</b></td>
+ <td class='right'>%s</td>
+ </tr>
+ </table>
+ </div>
+ <br />
+ <div>
+ %s
+ </div>"
+ query_kind summary results
in
- let results_no = List.length result in
- let query_kind = pp_request req in
- let template query_kind summary results =
- sprintf
- "<div class='resultsbar'>
- <table width='100%%'>
- <tr>
- <td class='left'><b class='query_kind'>%s</b></td>
- <td class='right'>%s</td>
- </tr>
- </table>
- </div>
- <br />
- <div>
- %s
- </div>"
- query_kind summary results
- in
if results_no > 0 then
- let mode = if results_no > max_results_no then "linkonly" else "typeonly" in
+ let mode = "typeonly" in
let results =
- let idx = ref (results_no + 1) in
+ let idx = ref ((page - 1) * results_per_page + List.length result + 1) in
List.fold_right
(fun uri i ->
decr idx ;