equal
deleted
inserted
replaced
33 |
33 |
34 /** document structure **/ |
34 /** document structure **/ |
35 |
35 |
36 /* named nodes -- development graph */ |
36 /* named nodes -- development graph */ |
37 |
37 |
38 type Text_Edit = |
38 type Edit[A] = |
39 (String, // node name |
39 (String, // node name |
40 Option[List[Text.Edit]]) // None: remove, Some: insert/remove text |
40 Option[List[A]]) // None: remove node, Some: edit content |
41 |
41 |
42 type Edit[C] = |
42 type Edit_Text = Edit[Text.Edit] |
43 (String, // node name |
43 type Edit_Command = Edit[(Option[Command], Option[Command])] |
44 Option[List[(Option[C], Option[C])]]) // None: remove, Some: insert/remove commands |
44 type Edit_Command_ID = Edit[(Option[Command_ID], Option[Command_ID])] |
45 |
45 |
46 object Node |
46 object Node |
47 { |
47 { |
48 val empty: Node = new Node(Linear_Set()) |
48 val empty: Node = new Node(Linear_Set()) |
49 |
49 |
134 val init = new Change(Future.value(Version.init), Nil, Future.value(Nil, Version.init)) |
134 val init = new Change(Future.value(Version.init), Nil, Future.value(Nil, Version.init)) |
135 } |
135 } |
136 |
136 |
137 class Change( |
137 class Change( |
138 val previous: Future[Version], |
138 val previous: Future[Version], |
139 val edits: List[Text_Edit], |
139 val edits: List[Edit_Text], |
140 val result: Future[(List[Edit[Command]], Version)]) |
140 val result: Future[(List[Edit_Command], Version)]) |
141 { |
141 { |
142 val version: Future[Version] = result.map(_._2) |
142 val version: Future[Version] = result.map(_._2) |
143 def is_finished: Boolean = previous.is_finished && version.is_finished |
143 def is_finished: Boolean = previous.is_finished && version.is_finished |
144 } |
144 } |
145 |
145 |
268 case Some(assgn) => assgn.is_finished |
268 case Some(assgn) => assgn.is_finished |
269 case None => false |
269 case None => false |
270 } |
270 } |
271 |
271 |
272 def extend_history(previous: Future[Version], |
272 def extend_history(previous: Future[Version], |
273 edits: List[Text_Edit], |
273 edits: List[Edit_Text], |
274 result: Future[(List[Edit[Command]], Version)]): (Change, State) = |
274 result: Future[(List[Edit_Command], Version)]): (Change, State) = |
275 { |
275 { |
276 val change = new Change(previous, edits, result) |
276 val change = new Change(previous, edits, result) |
277 (change, copy(history = history + change)) |
277 (change, copy(history = history + change)) |
278 } |
278 } |
279 |
279 |