txt publish <id>; file and convert to standard dirs
git-svn-id: file:///srv/svn/repo/kosuzu/trunk@6 eb64cd80-c68d-6f47-b6a3-0ada418499da
This commit is contained in:
@@ -3,7 +3,12 @@ type item_t = t list
|
||||
type record_t = Text.t * item_t
|
||||
|
||||
let extension = ".txt"
|
||||
let def_dir = try Sys.getenv "LOGARION_DIR" with Not_found -> "."
|
||||
let def_dir () =
|
||||
let share = Sys.getenv "HOME" ^ "/.local/share/texts/" in
|
||||
try Sys.getenv "txtdir" with Not_found ->
|
||||
match Sys.is_directory share with
|
||||
| true -> share
|
||||
| false | exception (Sys_error _) -> "."
|
||||
|
||||
let to_string f =
|
||||
let ic = open_in f in
|
||||
@@ -49,6 +54,11 @@ let fold_valid_text pred it path =
|
||||
(function None -> Some [path] | Some ps -> Some (path::ps)) it
|
||||
) else it
|
||||
|
||||
let split_filetypes files =
|
||||
let acc (dirs, files) x = if Sys.is_directory x
|
||||
then (x::dirs, files) else (dirs, x::files) in
|
||||
List.fold_left acc ([],[]) files
|
||||
|
||||
(* Compare file system nodes to skip reparsing? *)
|
||||
let list_fs ?(r=false) dir =
|
||||
let valid_dir f = r && String.get f 0 <> '.' && Sys.is_directory f in
|
||||
@@ -72,19 +82,19 @@ let fold_sort_take ?(predicate=fun _ -> true) ?(number=None) comp flist =
|
||||
@@ List.fast_sort comp @@ TextMap.bindings
|
||||
@@ List.fold_left (fold_valid_text predicate) new_iteration flist
|
||||
|
||||
let iter ?(r=false) ?(dir=def_dir) ?(predicate=fun _ -> true) ?order ?number fn =
|
||||
let iter ?(r=false) ?(dir=def_dir ()) ?(predicate=fun _ -> true) ?order ?number fn =
|
||||
let flist = list_fs ~r dir in match order with
|
||||
| Some comp -> List.iter fn @@ fold_sort_take ~predicate ~number comp flist
|
||||
| None -> List.iter fn @@ TextMap.bindings @@
|
||||
List.fold_left (fold_valid_text predicate) new_iteration flist
|
||||
|
||||
let fold ?(r=false) ?(dir=def_dir) ?(predicate=fun _ -> true) ?order ?number fn acc =
|
||||
let fold ?(r=false) ?(dir=def_dir ()) ?(predicate=fun _ -> true) ?order ?number fn acc =
|
||||
let flist = list_fs ~r dir in match order with
|
||||
| Some comp -> List.fold_left fn acc @@ fold_sort_take ~predicate ~number comp flist
|
||||
| None -> List.fold_left fn acc @@ TextMap.bindings @@
|
||||
List.fold_left (fold_valid_text predicate) new_iteration flist
|
||||
|
||||
let with_id ?(r=false) ?(dir=def_dir) id =
|
||||
let with_id ?(r=false) ?(dir=def_dir ()) id =
|
||||
let matched acc path =
|
||||
match to_text path with
|
||||
| Error x -> prerr_endline x; acc
|
||||
@@ -125,7 +135,7 @@ let id_filename repo extension text =
|
||||
let candidate = Filename.concat repo (text.id ^ "." ^ basename ^ extension) in
|
||||
if Sys.file_exists candidate then Error "Name clash, try again" else Ok candidate
|
||||
|
||||
let with_text ?(dir=def_dir) new_text =
|
||||
let with_text ?(dir=def_dir ()) new_text =
|
||||
match id_filename dir extension new_text with
|
||||
| Error _ as e -> e
|
||||
| Ok path ->
|
||||
|
||||
Reference in New Issue
Block a user