open Http_types;;
exception Emphasized_error of string
-exception Ambiguous of string
+exception Disamb_error of string
module Stack = Continuationals.Stack
String.sub unparsed_text byte_parsed_text_len
(String.length unparsed_text - byte_parsed_text_len)
in
+ prerr_endline (Printf.sprintf "ustring_sub caso 1: lstart=%d, parsed=%s" lstart parsed_text);
let pre = Netconversion.ustring_sub `Enc_utf8 0 lstart parsed_text in
let mk_univ trace =
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
+ prerr_endline (Printf.sprintf "ustring_sub caso 2: (%d,%d) parsed=%s" 0 x text);
let pre = Netconversion.ustring_sub `Enc_utf8 0 x text in
+ prerr_endline (Printf.sprintf "ustring_sub caso 3: (%d,%d) parsed=%s" x (y-x) text);
let err = Netconversion.ustring_sub `Enc_utf8 x (y-x) text in
+ prerr_endline (Printf.sprintf "ustring_sub caso 4: (%d,%d) parsed=%s" y (Netconversion.ustring_length `Enc_utf8 text - y) text);
let post = Netconversion.ustring_sub `Enc_utf8 y
(Netconversion.ustring_length `Enc_utf8 text - y) text in
let _,title = MatitaExcPp.to_string exn 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 gotoBottom (cgi : Netcgi1_compat.Netcgi_types.cgi_activation) =
let cgi = Netcgi1_compat.Netcgi_types.of_compat_activation cgi in
let env = cgi#environment in
- let char_to_parse = cgi#a
(* (try *)
let sid = Uuidm.of_string (Netcgi.Cookie.value (env#cookie "session")) in
let sid = HExtlib.unopt sid in
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()