gettextUtils.ml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53(**************************************************************************) (* ocaml-gettext: a library to translate messages *) (* *) (* Copyright (C) 2003-2008 Sylvain Le Gall <sylvain@le-gall.net> *) (* *) (* This library is free software; you can redistribute it and/or *) (* modify it under the terms of the GNU Lesser General Public *) (* License as published by the Free Software Foundation; either *) (* version 2.1 of the License, or (at your option) any later version; *) (* with the OCaml static compilation exception. *) (* *) (* This library is distributed in the hope that it will be useful, *) (* but WITHOUT ANY WARRANTY; without even the implied warranty of *) (* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *) (* Lesser General Public License for more details. *) (* *) (* You should have received a copy of the GNU Lesser General Public *) (* License along with this library; if not, write to the Free Software *) (* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *) (* USA *) (**************************************************************************) (** Misc. utilities. @author Sylvain Le Gall *) open GettextTypes let string_of_list lst = "[ " ^ String.concat "; " (List.map (fun str -> Printf.sprintf "%S" str) lst) ^ " ]" let split_plural str = let rec split_plural_one start = let next_sep = try String.index_from str start '\000' with Not_found -> String.length str in let new_plural = String.sub str start (next_sep - start) in if next_sep + 1 >= String.length str then [ new_plural ] else new_plural :: split_plural_one (next_sep + 1) in split_plural_one 0 let fail_or_continue failsafe exc cont_value = match failsafe with | Ignore -> cont_value | InformStderr exc_printer -> prerr_string (exc_printer exc); prerr_newline (); cont_value | RaiseException -> raise exc