|
Packit |
bd2e5d |
(***********************************************************************)
|
|
Packit |
bd2e5d |
(* *)
|
|
Packit |
bd2e5d |
(* MLTk, Tcl/Tk interface of OCaml *)
|
|
Packit |
bd2e5d |
(* *)
|
|
Packit |
bd2e5d |
(* Francois Rouaix, Francois Pessaux, Jun Furuse and Pierre Weis *)
|
|
Packit |
bd2e5d |
(* projet Cristal, INRIA Rocquencourt *)
|
|
Packit |
bd2e5d |
(* Jacques Garrigue, Kyoto University RIMS *)
|
|
Packit |
bd2e5d |
(* *)
|
|
Packit |
bd2e5d |
(* Copyright 2002 Institut National de Recherche en Informatique et *)
|
|
Packit |
bd2e5d |
(* en Automatique and Kyoto University. All rights reserved. *)
|
|
Packit |
bd2e5d |
(* This file is distributed under the terms of the GNU Library *)
|
|
Packit |
bd2e5d |
(* General Public License, with the special exception on linking *)
|
|
Packit |
bd2e5d |
(* described in file LICENSE found in the OCaml source tree. *)
|
|
Packit |
bd2e5d |
(* *)
|
|
Packit |
bd2e5d |
(***********************************************************************)
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
(* $Id$ *)
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
(* Parsing results of Tcl *)
|
|
Packit |
bd2e5d |
(* List.split a string according to char_sep predicate *)
|
|
Packit |
bd2e5d |
let split_str ~pred:char_sep str =
|
|
Packit |
bd2e5d |
let len = String.length str in
|
|
Packit |
bd2e5d |
let rec skip_sep cur =
|
|
Packit |
bd2e5d |
if cur >= len then cur
|
|
Packit |
bd2e5d |
else if char_sep str.[cur] then skip_sep (succ cur)
|
|
Packit |
bd2e5d |
else cur in
|
|
Packit |
bd2e5d |
let rec split beg cur =
|
|
Packit |
bd2e5d |
if cur >= len then
|
|
Packit |
bd2e5d |
if beg = cur then []
|
|
Packit |
bd2e5d |
else [String.sub str beg (len - beg)]
|
|
Packit |
bd2e5d |
else if char_sep str.[cur]
|
|
Packit |
bd2e5d |
then
|
|
Packit |
bd2e5d |
let nextw = skip_sep cur in
|
|
Packit |
bd2e5d |
(String.sub str beg (cur - beg))
|
|
Packit |
bd2e5d |
::(split nextw nextw)
|
|
Packit |
bd2e5d |
else split beg (succ cur) in
|
|
Packit |
bd2e5d |
let wstart = skip_sep 0 in
|
|
Packit |
bd2e5d |
split wstart wstart
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
(* Very easy hack for option type *)
|
|
Packit |
bd2e5d |
let may f = function
|
|
Packit |
bd2e5d |
Some x -> Some (f x)
|
|
Packit |
bd2e5d |
| None -> None
|
|
Packit |
bd2e5d |
|
|
Packit |
bd2e5d |
let maycons f x l =
|
|
Packit |
bd2e5d |
match x with
|
|
Packit |
bd2e5d |
Some x -> f x :: l
|
|
Packit |
bd2e5d |
| None -> l
|