Blame support/support.ml

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