open Http_types;;
exception Emphasized_error of string
-exception Ambiguous of string
+exception Disamb_error of string
module Stack = Continuationals.Stack
cgi#out_channel#commit_work()
;;
+let xml_of_disamb_error l =
+ let mk_alias = function
+ | GrafiteAst.Ident_alias (_,uri) -> "href=\"" ^ uri ^ "\""
+ | GrafiteAst.Symbol_alias (_,uri,desc)
+ | GrafiteAst.Number_alias (uri,desc) ->
+ let uri = try HExtlib.unopt uri with _ -> "cic:/fakeuri.def(1)" in
+ "href=\"" ^ uri ^ "\" title=\"" ^
+ (Netencoding.Html.encode ~in_enc:`Enc_utf8 ~prefer_name:false () desc)
+ ^ "\""
+ in
+
+ let mk_interpr (loc,a) =
+ let x,y = HExtlib.loc_of_floc loc in
+ Printf.sprintf "<interpretation start=\"%d\" stop=\"%d\" %s />"
+ x y (mk_alias a)
+ in
+
+ let mk_failure (il,loc,msg) =
+ let x,y = HExtlib.loc_of_floc loc in
+ Printf.sprintf "<failure start=\"%d\" stop=\"%d\" title=\"%s\">%s</failure>"
+ x y (Netencoding.Html.encode ~in_enc:`Enc_utf8 ~prefer_name:false () msg)
+ (String.concat "" (List.map mk_interpr il))
+ in
+
+ let mk_choice (a,fl) =
+ let fl' = String.concat "" (List.map mk_failure fl) in
+ match a with
+ | None -> "<choice>" ^ fl' ^ "</choice>"
+ | Some a -> Printf.sprintf "<choice %s>%s</choice>" (mk_alias a) fl'
+ in
+
+ let mk_located (loc,cl) =
+ let x,y = HExtlib.loc_of_floc loc in
+ Printf.sprintf "<choicepoint start=\"%d\" stop=\"%d\">%s</choicepoint>"
+ x y (String.concat "" (List.map mk_choice cl))
+ in
+ "<disamberror>" ^ (String.concat "" (List.map mk_located l)) ^ "</disamberror>"
+;;
+
let advance0 sid text =
let status = MatitaAuthentication.get_status sid in
let history = MatitaAuthentication.get_history sid in
let status = status#reset_disambiguate_db () in
let (st,new_statements,new_unparsed),parsed_len =
try
- eval_statement !include_paths (*buffer*) status (`Raw text)
+ eval_statement !include_paths (*buffer*) status (`Raw text)
with
| HExtlib.Localized (floc,e) as exn ->
let x, y = HExtlib.loc_of_floc floc in
*)
let strchoices = Printf.sprintf
"<ambiguity start=\"%d\" stop=\"%d\">%s</ambiguity>" x y strchoices
- in raise (Ambiguous strchoices)
+ in raise (Disamb_error strchoices)
+ | GrafiteDisambiguate.Error l -> raise (Disamb_error (xml_of_disamb_error l))
(* | End_of_file -> ... *)
in
MatitaAuthentication.set_status sid st;
~content_type:"text/xml; charset=\"utf-8\""
();
cgi#out_channel#output_string body
- | Ambiguous text ->
+ | Disamb_error text ->
let body = "<response>" ^ text ^ "</response>" in
cgi # set_header
~cache:`No_cache
~status:`Internal_server_error
~cache:`No_cache
~content_type:"text/xml; charset=\"utf-8\""
- ());
+ ()
+ );
cgi#out_channel#commit_work()
;;
let error_msg = function
| Emphasized_error text -> "<localized>" ^ text ^ "</localized>"
- | Ambiguous text -> (* <ambiguity> *) text
+ | Disamb_error text -> text
| End_of_file _ -> (* not an error *) ""
| e -> (* unmanaged error *)
"<error>" ^
let baseuri = status#baseuri in
let new_status = new MatitaEngine.status (Some uid) baseuri in
prerr_endline "gototop prima della time travel";
- NCicLibrary.time_travel new_status;
+ (* NCicLibrary.time_travel new_status; *)
prerr_endline "gototop dopo della time travel";
let new_history = [new_status] in
MatitaAuthentication.set_history sid new_history;
MatitaAuthentication.set_status sid new_status;
- NCicLibrary.time_travel new_status;
+ (* NCicLibrary.time_travel new_status; *)
cgi # set_header
~cache:`No_cache
~content_type:"text/xml; charset=\"utf-8\""
~content_type:"text/xml; charset=\"utf-8\""
();
cgi#out_channel#output_string body
- with _ -> cgi#set_header ~status:`Internal_server_error
+ with e ->
+ prerr_endline ("error in retract: " ^ Printexc.to_string e);
+ cgi#set_header ~status:`Internal_server_error
~cache:`No_cache
~content_type:"text/xml; charset=\"utf-8\"" ());
cgi#out_channel#commit_work()