let utf8_length = Netconversion.ustring_length `Enc_utf8
-let utf8_parsed_text s floc =
- let start, stop = HExtlib.loc_of_floc floc in
- let len = stop - start in
- let res = Netconversion.ustring_sub `Enc_utf8 start len s in
- res, String.length res
-
(*** from matitaScript.ml ***)
(* let only_dust_RE = Pcre.regexp "^(\\s|\n|%%[^\n]*\n)*$" *)
let _,lend = HExtlib.loc_of_floc floc in
let parsed_text, _parsed_text_len =
- utf8_parsed_text unparsed_text (HExtlib.floc_of_loc (0,lend)) in
+ HExtlib.utf8_parsed_text unparsed_text (HExtlib.floc_of_loc (0,lend)) in
let byte_parsed_text_len = String.length parsed_text in
let unparsed_txt' =
String.sub unparsed_text byte_parsed_text_len
let sid = Uuidm.of_string (Netcgi.Cookie.value (env#cookie "session")) in
let sid = HExtlib.unopt sid in
let uid = MatitaAuthentication.user_of_session sid in
+ (*
cgi # set_header
~cache:`No_cache
~content_type:"text/xml; charset=\"utf-8\""
();
+ *)
let filename = libdir uid ^ "/" ^ (cgi # argument_value "file") in
prerr_endline ("reading file " ^ filename);
let body =
include_paths := incpaths;
let status = MatitaAuthentication.get_status sid in
MatitaAuthentication.set_status sid (status#set_baseuri baseuri);
+ cgi # set_header
+ ~cache:`No_cache
+ ~content_type:"text/xml; charset=\"utf-8\""
+ ();
cgi#out_channel#output_string body;
with
| Not_found _ ->
cgi # set_header
~status:`Internal_server_error
~cache:`No_cache
- ~content_type:"text/xml; charset=\"utf-8\""
+ ~content_type:"text/html; charset=\"utf-8\""
());
cgi#out_channel#commit_work()
;;
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),(* newtext TODO *) _,parsed_len =
try
ignore (SmallLexer.mk_small_printer interpr outstr stringbuf);
prerr_endline ("parser output: " ^ !outstr);
MatitaAuthentication.set_status sid st;
- MatitaAuthentication.set_history sid (st::history);
parsed_len,
Netencoding.Html.encode ~in_enc:`Enc_utf8 ~prefer_name:false
() (html_of_matita !outstr), new_unparsed, st
let text = read_file (rt_path () ^ "/logout.html") in
cgi#out_channel#output_string text
with
+ | Not_found _ ->
+ cgi # set_header
+ ~status:`Internal_server_error
+ ~cache:`No_cache
+ ~content_type:"text/html; charset=\"utf-8\""
+ ());
+ cgi#out_channel#commit_work()
+;;
+
+let save (cgi : Netcgi1_compat.Netcgi_types.cgi_activation) =
+ let cgi = Netcgi1_compat.Netcgi_types.of_compat_activation cgi in
+ let env = cgi#environment in
+ (try
+ let sid = Uuidm.of_string (Netcgi.Cookie.value (env#cookie "session")) in
+ let sid = HExtlib.unopt sid in
+ let status = MatitaAuthentication.get_status sid in
+ let uid = MatitaAuthentication.user_of_session sid in
+ assert (cgi#arguments <> []);
+ let locked = cgi#argument_value "locked" in
+ let unlocked = cgi#argument_value "unlocked" in
+ let filename = libdir uid ^ "/" ^ (cgi # argument_value "file") in
+ prerr_endline ("Matita will save the file for user " ^ uid);
+ let oc = open_out filename in
+ output_string oc (locked ^ unlocked);
+ close_out oc;
+ if MatitaEngine.eos status unlocked then
+ begin
+ prerr_endline ("serializing proof objects...");
+ GrafiteTypes.Serializer.serialize
+ ~baseuri:(NUri.uri_of_string status#baseuri) status;
+ prerr_endline ("adding to the commit queue...");
+ MatitaFilesystem.add_user uid;
+ prerr_endline ("done.");
+ end;
+ cgi # set_header
+ ~cache:`No_cache
+ ~content_type:"text/xml; charset=\"utf-8\""
+ ();
+ cgi#out_channel#output_string "<response>ok</response>"
+ with
+ | Not_found _ ->
+ cgi # set_header
+ ~status:`Internal_server_error
+ ~cache:`No_cache
+ ~content_type:"text/xml; charset=\"utf-8\""
+ ());
+ cgi#out_channel#commit_work()
+;;
+
+let initiate_commit (cgi : Netcgi1_compat.Netcgi_types.cgi_activation) =
+ let cgi = Netcgi1_compat.Netcgi_types.of_compat_activation cgi in
+ let env = cgi#environment in
+ (try
+ let errors = MatitaFilesystem.do_global_commit () in
+ prerr_endline ("commit errors: " ^ (String.concat " " errors));
+ cgi # set_header
+ ~cache:`No_cache
+ ~content_type:"text/xml; charset=\"utf-8\""
+ ();
+ cgi#out_channel#output_string "<response>ok</response>"
+ with
| Not_found _ ->
cgi # set_header
~status:`Internal_server_error
(try
let sid = Uuidm.of_string (Netcgi.Cookie.value (env#cookie "session")) in
let sid = HExtlib.unopt sid in
+ (*
cgi # set_header
~cache:`No_cache
~content_type:"text/xml; charset=\"utf-8\""
();
+ *)
let text = cgi#argument_value "body" in
prerr_endline ("body =\n" ^ text);
+ let history = MatitaAuthentication.get_history sid in
let parsed_len, new_parsed, new_unparsed, new_status = advance0 sid text in
+ MatitaAuthentication.set_history sid (new_status::history);
let txt = output_status new_status in
let body =
"<response><parsed length=\"" ^ (string_of_int parsed_len) ^ "\">" ^
^ "</response>"
in
prerr_endline ("sending advance response:\n" ^ body);
+ cgi # set_header
+ ~cache:`No_cache
+ ~content_type:"text/xml; charset=\"utf-8\""
+ ();
cgi#out_channel#output_string body
with
| Not_found _ ->
(try
let sid = Uuidm.of_string (Netcgi.Cookie.value (env#cookie "session")) in
let sid = HExtlib.unopt sid in
+ let history = MatitaAuthentication.get_history sid in
let rec aux parsed_len parsed_txt text =
try
let status = MatitaAuthentication.get_status sid in
GrafiteTypes.Serializer.serialize
~baseuri:(NUri.uri_of_string status#baseuri) status;
+ if parsed_len > 0 then
+ MatitaAuthentication.set_history sid (status::history);
parsed_len, parsed_txt
| _ -> parsed_len, parsed_txt
- in
+ in
+ (*
cgi # set_header
~cache:`No_cache
~content_type:"text/xml; charset=\"utf-8\""
();
+ *)
let text = cgi#argument_value "body" in
prerr_endline ("body =\n" ^ text);
let parsed_len, new_parsed = aux 0 "" text in
^ "</response>"
in*)
prerr_endline ("sending goto bottom response:\n" ^ body);
+ cgi # set_header
+ ~cache:`No_cache
+ ~content_type:"text/xml; charset=\"utf-8\""
+ ();
cgi#out_channel#output_string body
with Not_found -> cgi#set_header ~status:`Internal_server_error
~cache:`No_cache
let retract (cgi : Netcgi1_compat.Netcgi_types.cgi_activation) =
let cgi = Netcgi1_compat.Netcgi_types.of_compat_activation cgi in
let env = cgi#environment in
+ prerr_endline "executing retract";
(try
let sid = Uuidm.of_string (Netcgi.Cookie.value (env#cookie "session")) in
let sid = HExtlib.unopt sid in
+ (*
cgi # set_header
~cache:`No_cache
~content_type:"text/xml; charset=\"utf-8\""
();
+ *)
let history = MatitaAuthentication.get_history sid in
let new_history,new_status =
match history with
history, status
| [_] -> (prerr_endline "singleton";failwith "retract")
| _ -> (prerr_endline "nil"; assert false) in
+ prerr_endline "before time_travel";
NCicLibrary.time_travel new_status;
+ prerr_endline "after time travel";
MatitaAuthentication.set_history sid new_history;
MatitaAuthentication.set_status sid new_status;
prerr_endline ("after retract history.length = " ^
string_of_int (List.length new_history));
let body = output_status new_status in
+ cgi # set_header
+ ~cache:`No_cache
+ ~content_type:"text/xml; charset=\"utf-8\""
+ ();
cgi#out_channel#output_string body
with _ -> cgi#set_header ~status:`Internal_server_error
~cache:`No_cache
let sid = Uuidm.of_string (Netcgi.Cookie.value (env#cookie "session")) in
let sid = HExtlib.unopt sid in
+ (*
cgi # set_header
~cache:`No_cache
~content_type:"text/html; charset=\"utf-8\""
();
+ *)
let uid = MatitaAuthentication.user_of_session sid in
let html = MatitaFilesystem.html_of_library uid in
+ cgi # set_header
+ ~cache:`No_cache
+ ~content_type:"text/html; charset=\"utf-8\""
+ ();
cgi#out_channel#output_string
((*
"<html><head>\n" ^
dyn_translator = (fun _ -> ""); (* not needed *)
dyn_accept_all_conditionals = false;
} in
+ let do_save =
+ { Nethttpd_services.dyn_handler = (fun _ -> save);
+ dyn_activation = Nethttpd_services.std_activation `Std_activation_buffered;
+ dyn_uri = None; (* not needed *)
+ dyn_translator = (fun _ -> ""); (* not needed *)
+ dyn_accept_all_conditionals = false;
+ } in
+ let do_commit =
+ { Nethttpd_services.dyn_handler = (fun _ -> initiate_commit);
+ dyn_activation = Nethttpd_services.std_activation `Std_activation_buffered;
+ dyn_uri = None; (* not needed *)
+ dyn_translator = (fun _ -> ""); (* not needed *)
+ dyn_accept_all_conditionals = false;
+ } in
let nethttpd_factory =
Nethttpd_plex.nethttpd_factory
; "login", do_login
; "logout", do_logout
; "reset", do_resetlib
- ; "viewlib", do_viewlib]
+ ; "viewlib", do_viewlib
+ ; "save", do_save
+ ; "commit", do_commit]
() in
MatitaInit.initialize_all ();
MatitaAuthentication.deserialize ();