equal
deleted
inserted
replaced
6 */ |
6 */ |
7 |
7 |
8 package isabelle |
8 package isabelle |
9 |
9 |
10 |
10 |
|
11 object Change |
|
12 { |
|
13 val init = new Change(Document.NO_ID, None, Nil, Future.value(Nil, Document.init)) |
|
14 } |
|
15 |
11 class Change( |
16 class Change( |
12 val id: Isar_Document.Document_ID, |
17 val id: Document.Version_ID, |
13 val parent: Option[Change], |
18 val parent: Option[Change], |
14 val edits: List[Text_Edit], |
19 val edits: List[Document.Node.Text_Edit], |
15 val result: Future[(List[Document.Edit], Document)]) |
20 val result: Future[(List[Document.Edit[Command]], Document)]) |
16 { |
21 { |
17 def ancestors: Iterator[Change] = new Iterator[Change] |
22 def ancestors: Iterator[Change] = new Iterator[Change] |
18 { |
23 { |
19 private var state: Option[Change] = Some(Change.this) |
24 private var state: Option[Change] = Some(Change.this) |
20 def hasNext = state.isDefined |
25 def hasNext = state.isDefined |
26 } |
31 } |
27 |
32 |
28 def join_document: Document = result.join._2 |
33 def join_document: Document = result.join._2 |
29 def is_assigned: Boolean = result.is_finished && join_document.assignment.is_finished |
34 def is_assigned: Boolean = result.is_finished && join_document.assignment.is_finished |
30 |
35 |
31 def edit(session: Session, edits: List[Text_Edit]): Change = |
36 def edit(session: Session, edits: List[Document.Node.Text_Edit]): Change = |
32 { |
37 { |
33 val new_id = session.create_id() |
38 val new_id = session.create_id() |
34 val result: Future[(List[Document.Edit], Document)] = |
39 val result: Future[(List[Document.Edit[Command]], Document)] = |
35 Future.fork { |
40 Future.fork { |
36 val old_doc = join_document |
41 val old_doc = join_document |
37 old_doc.await_assignment |
42 old_doc.await_assignment |
38 Document.text_edits(session, old_doc, new_id, edits) |
43 Document.text_edits(session, old_doc, new_id, edits) |
39 } |
44 } |