+ | `Results results ->
+ let page = try int_of_string (req#param "page") with _ -> 1 in
+ let results_no = List.length results in
+ let results_per_page =
+ Helm_registry.get_int "search_engine.results_per_page"
+ in
+ let pages =
+ if results_no mod results_per_page = 0 then
+ results_no / results_per_page
+ else
+ results_no / results_per_page + 1
+ in
+ let pages = if pages = 0 then 1 else pages in
+ let additional_pages = 3 in
+ let (summary, results) = MooglePp.theory_of_result page results in
+ [ tag "PAGE", string_of_int page;
+ tag "PAGES", string_of_int pages ^ " Pages";
+ tag "PAGELIST",
+ (let inf = page - additional_pages in
+ let sup = page + additional_pages in
+ let superinf = inf - (sup - pages) in
+ let supersup = sup + (1 - inf) in
+ let n,m =
+ if inf >= 1 && sup <= pages then
+ inf,sup
+ else if inf < 1 then
+ 1, (if supersup <= pages then supersup else pages)
+ else (* sup > pages *)
+ (if superinf >= 1 then superinf else 1),pages
+ in
+ fold_n_to_m
+ (fun n acc -> acc ^ " " ^
+ (if n = page then string_of_int n
+ else page_link (string_of_int n) n))
+ n m "");
+ tag "PREV_LINK", (if page > 1 then page_link "Prev" (page-1) else "");
+ tag "NEXT_LINK",
+ (if page < pages then page_link "Next" (page+1) else "");
+ tag "QUERY_KIND", query_kind;
+ tag "QUERY_SUMMARY", summary;
+ tag "RESULTS", results ]
+ | `Error msg ->
+ [ tag "PAGE", "1";
+ tag "PAGES", "1 Page";
+ tag "PAGELIST", "";
+ tag "PREV_LINK", "";
+ tag "NEXT_LINK", "";
+ tag "QUERY_KIND", query_kind;
+ tag "QUERY_SUMMARY", "error";
+ tag "RESULTS", msg ]
+ in
+ let advanced =
+ try
+ req#param "advanced"
+ with Http_types.Param_not_found _ -> "no"