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
|