2 ||M|| This file is part of HELM, an Hypertextual, Electronic
3 ||A|| Library of Mathematics, developed at the Computer Science
4 ||T|| Department, University of Bologna, Italy.
6 ||T|| HELM is free software; you can redistribute it and/or
7 ||A|| modify it under the terms of the GNU General Public License
8 \ / version 2 or (at your option) any later version.
9 \ / This software is distributed as is, NO WARRANTY.
10 V_______________________________________________________________ *)
16 exception Error of string
18 (* interface functions ******************************************************)
20 let rec segments_of_string ss l s =
21 match try Some (S.index s '/') with Not_found -> None with
23 | Some i -> segments_of_string (S.sub s 0 i :: ss) (l-i-1) (S.sub s (i+1) (l-i-1))
25 let rec rev_concat sep r = function
28 if r = "" then rev_concat sep s ss else
29 rev_concat sep (s ^ sep ^ r) ss
31 let fold_string map a s =
34 if i >= l then a else aux (succ i) (map a s.[i])
38 let rec rev_neg_filter filter r = function
41 if filter hd then rev_neg_filter filter r tl else rev_neg_filter filter (hd :: r) tl
43 let rec foldi_left mapi i a = function
45 | hd :: tl -> foldi_left mapi (succ i) (mapi i a hd) tl
47 let rec rev_map_append map l r = match l with
49 | hd :: tl -> rev_map_append map tl (map hd :: r)
51 let error s = raise (Error s)
53 let log s = P.eprintf "MaTeX: %s\n" s