equal
deleted
inserted
replaced
58 { |
58 { |
59 /* changes vs. edits */ |
59 /* changes vs. edits */ |
60 |
60 |
61 private val document_0 = session.begin_document(buffer.getName) |
61 private val document_0 = session.begin_document(buffer.getName) |
62 |
62 |
63 private val change_0 = new Change(document_0.id, None, Nil, Future.value(document_0, Nil)) |
63 private val change_0 = new Change(None, Nil, Future.value(document_0, Nil)) |
64 private var _changes = List(change_0) // owned by Swing thread |
64 private var _changes = List(change_0) // owned by Swing thread |
65 def changes = _changes |
65 def changes = _changes |
66 private var current_change = change_0 |
66 private var current_change = change_0 |
67 |
67 |
68 private val edits = new mutable.ListBuffer[Edit] // owned by Swing thread |
68 private val edits = new mutable.ListBuffer[Edit] // owned by Swing thread |
74 val change1 = current_change |
74 val change1 = current_change |
75 val result: Future[Document.Result] = Future.fork { |
75 val result: Future[Document.Result] = Future.fork { |
76 val old_doc = change1.document |
76 val old_doc = change1.document |
77 Document.text_edits(session, old_doc, new_id, eds) |
77 Document.text_edits(session, old_doc, new_id, eds) |
78 } |
78 } |
79 val change2 = new Change(new_id, Some(change1), eds, result) |
79 val change2 = new Change(Some(change1), eds, result) |
80 _changes ::= change2 |
80 _changes ::= change2 |
81 session.input(change2) |
81 session.input(change2) |
82 current_change = change2 |
82 current_change = change2 |
83 edits.clear |
83 edits.clear |
84 } |
84 } |
117 |
117 |
118 |
118 |
119 /* transforming offsets */ |
119 /* transforming offsets */ |
120 |
120 |
121 private def changes_from(doc: Document): List[Edit] = |
121 private def changes_from(doc: Document): List[Edit] = |
122 List.flatten(current_change.ancestors(_.id == doc.id).reverse.map(_.edits)) ::: |
122 List.flatten(current_change.ancestors(_.document.id == doc.id).reverse.map(_.edits)) ::: |
123 edits.toList |
123 edits.toList |
124 |
124 |
125 def from_current(doc: Document, offset: Int): Int = |
125 def from_current(doc: Document, offset: Int): Int = |
126 (offset /: changes_from(doc).reverse) ((i, change) => change before i) |
126 (offset /: changes_from(doc).reverse) ((i, change) => change before i) |
127 |
127 |