aboutsummaryrefslogtreecommitdiff
path: root/sheet.mli
blob: d3c8151a83c73b2705a6cb4b3b6f7cf29b8c96ff (plain)
1
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
(** This module represent a sheet *)

type cell = int * int
  
module Raw: sig

  exception Cycle
  
  type t
  
  (** Create a new sheet *)
  val create: t
  
  (** Add a new value in the sheet. The previous value is replaced 
    @return All the successors to update and the new sheet.
  *)
  val add: cell -> Expression.t -> t -> Cell.Set.t * t
  
  val remove: cell -> t -> Cell.Set.t * t

  (** Get the value content. 
      @return None if the cell is not defined
   *)
  val get_value: cell -> t -> ScTypes.result option
  
  val get_expr: cell -> t -> Expression.t

  val get_sink: cell -> t -> Cell.Set.t
  
  (** Fold over all the defined values *)
  val fold: ('a -> cell -> (Expression.t * ScTypes.result ) -> 'a) -> 'a -> t -> 'a

end

type yank

type t = {
  selected: Selection.t;    (* The selected cell *)
  data: Raw.t;
  history: t list;          (* Unlimited history *)
  yank: yank list           (* All the selected cells *)
}

type search = [
  | `Pattern of ScTypes.result option
  | `Next
  | `Previous
]

(** Undo the last action and return the previous state, if any *)
val undo: t -> t option

(** Move the cursor in one direction, return the state updated if the move is
    allowed *) 
val move: Actions.direction -> t -> t option

(** Delete the content of selected cells.
    @return The sheet and the number of cells deleted
*)
val delete: t -> t * int

(** Copy the selected cells 
    @return The sheet and the number of cells deleted
*)
val yank: t -> t * int

(** Search for a pattern on the sheet 
    @return The state updated if the pattern has been found. *)
val search: search -> t -> t option

val paste: t -> t * int

val add: Expression.t -> t -> Cell.Set.t * t

(** Create an empty sheet *)
val create: Raw.t -> t