\ / This software is distributed as is, NO WARRANTY.
V_______________________________________________________________ *)
-module L = List
+(* module L = List *)
module P = Printf
module S = String
(* interface functions ******************************************************)
+let id x = x
+
+let id2 x y = x, y
+
let rec segments_of_string ss l s =
match try Some (S.index s '/') with Not_found -> None with
| None -> s :: ss
| Some i -> segments_of_string (S.sub s 0 i :: ss) (l-i-1) (S.sub s (i+1) (l-i-1))
-let rec rev_concat sep r = function
+let rec rev_map_concat map sep r = function
| [] -> r
| s :: ss ->
- if r = "" then rev_concat sep s ss else
- rev_concat sep (s ^ sep ^ r) ss
+ if r = "" then rev_map_concat map sep (map s) ss else
+ rev_map_concat map sep (map s ^ sep ^ r) ss
let fold_string map a s =
let l = S.length s in
| [] -> a
| hd :: tl -> foldi_left mapi (succ i) (mapi i a hd) tl
+let rev_mapi mapi i l =
+ let map i a hd = mapi i hd :: a in
+ foldi_left map i [] l
+
let rec rev_map_append map l r = match l with
| [] -> r
| hd :: tl -> rev_map_append map tl (map hd :: r)
+let rec split_at x = function
+ | l when x <= 0 -> [], l
+ | [] -> [], []
+ | hd :: tl ->
+ let l1, l2 = split_at (pred x) tl in
+ hd :: l1, l2
+
let error s = raise (Error s)
-let log s = P.eprintf "MaTeX: %s\n" s
+let log s = P.eprintf "MaTeX: %s\n%!" s