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
|