Blame browser/jg_completion.ml

Packit bd2e5d
(*************************************************************************)
Packit bd2e5d
(*                                                                       *)
Packit bd2e5d
(*                         OCaml LablTk library                          *)
Packit bd2e5d
(*                                                                       *)
Packit bd2e5d
(*            Jacques Garrigue, Kyoto University RIMS                    *)
Packit bd2e5d
(*                                                                       *)
Packit bd2e5d
(*   Copyright 1999 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.                                 *)
Packit bd2e5d
(*                                                                       *)
Packit bd2e5d
(*************************************************************************)
Packit bd2e5d
Packit bd2e5d
(* $Id$ *)
Packit bd2e5d
Packit bd2e5d
let compare_string ?(nocase=false) s1 s2 =
Packit bd2e5d
  if nocase then compare (String.lowercase_ascii s1) (String.lowercase_ascii s2)
Packit bd2e5d
  else compare s1 s2
Packit bd2e5d
Packit bd2e5d
class completion ?nocase texts = object
Packit bd2e5d
  val mutable texts = texts
Packit bd2e5d
  val nocase = nocase
Packit bd2e5d
  val mutable prefix = ""
Packit bd2e5d
  val mutable current = 0
Packit bd2e5d
  method add c =
Packit bd2e5d
    prefix <- prefix ^ c;
Packit bd2e5d
    while current < List.length texts - 1 &&
Packit bd2e5d
      compare_string (List.nth texts current) prefix ?nocase < 0
Packit bd2e5d
    do
Packit bd2e5d
      current <- current + 1
Packit bd2e5d
    done;
Packit bd2e5d
    current
Packit bd2e5d
  method current = current
Packit bd2e5d
  method get_current = List.nth texts current
Packit bd2e5d
  method reset =
Packit bd2e5d
    prefix <- "";
Packit bd2e5d
    current <- 0
Packit bd2e5d
end
Packit bd2e5d
Packit bd2e5d
class timed ?nocase ?wait texts = object (self)
Packit bd2e5d
  inherit completion texts ?nocase as super
Packit bd2e5d
  val wait = match wait with None -> 500 | Some n -> n
Packit bd2e5d
  val mutable timer = None
Packit bd2e5d
  method! add c =
Packit bd2e5d
    begin match timer with
Packit bd2e5d
      None -> self#reset
Packit bd2e5d
    | Some t -> Timer.remove t
Packit bd2e5d
    end;
Packit bd2e5d
    timer <- Some (Timer.add ~ms:wait ~callback:(fun () -> self#reset));
Packit bd2e5d
    super#add c
Packit bd2e5d
  method! reset =
Packit bd2e5d
    timer <- None; super#reset
Packit bd2e5d
end