]> matita.cs.unibo.it Git - helm.git/blobdiff - matitaB/matita/matitaFilesystem.ml
Added generation of HTML representation of the library.
[helm.git] / matitaB / matita / matitaFilesystem.ml
index 1809627ca0a2543c607daaa0479f68b7ae434aa1..fe67b256b714dcebfdc66eae1ab404125b7f3979 100644 (file)
@@ -23,6 +23,8 @@
  * http://helm.cs.unibo.it/
  *)
 
+exception SvnError of string;;
+
 let exec_process cmd =
   let (stdout, stdin, stderr) as chs = Unix.open_process_full cmd [||] in
   let outlines = ref [] in
@@ -50,8 +52,49 @@ let checkout user =
   let rt_dir = Helm_registry.get "matita.rt_base_dir" in
   let repo = Helm_registry.get "matita.weblib" in
 
-  let errno, outstr = 
-    exec_process ("svn co " ^ repo ^ " " ^ rt_dir ^ "/" ^ user ^ "/scripts")
+  let errno, outstr = exec_process 
+    ("svn co " ^ repo ^ " " ^ rt_dir ^ "/users/" ^ user ^ "/scripts")
+  in
+  if errno = 0 then ()
+  else raise (SvnError outstr)
+
+let html_of_library uid =
+  let i = ref 0 in
+  let newid () = incr i; ("node" ^ string_of_int !i) in
+
+  let branch text acc =
+    let id = newid () in
+    "<span class=\"trigger\" onClick=\"showBranch(" ^ id ^ ")\">\n" ^
+    "<img src=\"treeview/closed.gif\" id=\"I" ^ id ^ "\"/>\n" ^
+    text ^ "<br/></span>\n" ^
+    "<span class=\"branch\" id=\"" ^ id ^ "\">\n" ^
+    acc ^ "\n</span>"
   in
-  if errno = 0 then "checkout successful!"
-  else "checkout error!\n\n" ^ outstr
+  let leaf text link =
+    "<img src=\"treeview/doc.gif\"/>\n" ^
+    "<a href=\"" ^ link ^ "\">" ^ text ^ "</a><br/>"
+  in
+
+  let rec aux path =
+    let dirlist = Array.to_list (Sys.readdir path) in
+    let subdirs = List.filter Sys.is_directory dirlist in
+    let scripts = 
+      List.filter (fun x -> 
+        try
+          let i = String.rindex x '.' in
+          not (Sys.is_directory x) && (String.sub x i 3 = ".ma")
+        with Not_found | Invalid_argument _ -> false) dirlist in
+    let subdirtags = 
+      String.concat "\n" (List.map (fun x -> aux (path ^ "/" ^ x)) subdirs) in
+    let scripttags =
+      String.concat "\n" 
+       (List.map (fun x -> leaf x (path ^ "/" ^ x)) scripts)
+    in
+    branch (Filename.basename path) (subdirtags ^ "\n" ^ scripttags)
+  in
+
+  let basedir = (Helm_registry.get "matita.rt_base_dir") ^ "/lib/" ^ uid ^ "/" in
+  let res = aux basedir in
+  prerr_endline "BEGIN TREE";prerr_endline res;prerr_endline "END TREE";
+  res
+;;