equal
deleted
inserted
replaced
6 */ |
6 */ |
7 |
7 |
8 package isabelle.jedit |
8 package isabelle.jedit |
9 |
9 |
10 |
10 |
11 import isabelle.proofdocument.{Change, Command, Edit, Insert, Remove, Document, Session} |
11 import isabelle.proofdocument.{Change, Command, Document, Session} |
12 |
12 |
13 import scala.actors.Actor, Actor._ |
13 import scala.actors.Actor, Actor._ |
14 import scala.collection.mutable |
14 import scala.collection.mutable |
15 |
15 |
16 import org.gjt.sp.jedit.Buffer |
16 import org.gjt.sp.jedit.Buffer |
75 } |
75 } |
76 |
76 |
77 |
77 |
78 /* transforming offsets */ |
78 /* transforming offsets */ |
79 |
79 |
80 private def changes_from(doc: Document): List[Edit] = |
80 private def changes_from(doc: Document): List[Text_Edit] = |
81 { |
81 { |
82 Swing_Thread.assert() |
82 Swing_Thread.assert() |
83 (edits_buffer.toList /: |
83 (edits_buffer.toList /: |
84 current_change.ancestors.takeWhile(_.id != doc.id))((edits, change) => change.edits ::: edits) |
84 current_change.ancestors.takeWhile(_.id != doc.id))((edits, change) => change.edits ::: edits) |
85 } |
85 } |
97 } |
97 } |
98 |
98 |
99 |
99 |
100 /* text edits */ |
100 /* text edits */ |
101 |
101 |
102 private val edits_buffer = new mutable.ListBuffer[Edit] // owned by Swing thread |
102 private val edits_buffer = new mutable.ListBuffer[Text_Edit] // owned by Swing thread |
103 |
103 |
104 private val edits_delay = Swing_Thread.delay_last(300) { |
104 private val edits_delay = Swing_Thread.delay_last(300) { |
105 if (!edits_buffer.isEmpty) { |
105 if (!edits_buffer.isEmpty) { |
106 val edits = edits_buffer.toList |
106 val edits = edits_buffer.toList |
107 val change1 = current_change() |
107 val change1 = current_change() |
122 private val buffer_listener: BufferListener = new BufferAdapter |
122 private val buffer_listener: BufferListener = new BufferAdapter |
123 { |
123 { |
124 override def contentInserted(buffer: JEditBuffer, |
124 override def contentInserted(buffer: JEditBuffer, |
125 start_line: Int, offset: Int, num_lines: Int, length: Int) |
125 start_line: Int, offset: Int, num_lines: Int, length: Int) |
126 { |
126 { |
127 edits_buffer += Insert(offset, buffer.getText(offset, length)) |
127 edits_buffer += Text_Edit.Insert(offset, buffer.getText(offset, length)) |
128 edits_delay() |
128 edits_delay() |
129 } |
129 } |
130 |
130 |
131 override def preContentRemoved(buffer: JEditBuffer, |
131 override def preContentRemoved(buffer: JEditBuffer, |
132 start_line: Int, start: Int, num_lines: Int, removed_length: Int) |
132 start_line: Int, start: Int, num_lines: Int, removed_length: Int) |
133 { |
133 { |
134 edits_buffer += Remove(start, buffer.getText(start, removed_length)) |
134 edits_buffer += Text_Edit.Remove(start, buffer.getText(start, removed_length)) |
135 edits_delay() |
135 edits_delay() |
136 } |
136 } |
137 } |
137 } |
138 |
138 |
139 |
139 |
143 { |
143 { |
144 buffer.setTokenMarker(new Isabelle_Token_Marker(this)) |
144 buffer.setTokenMarker(new Isabelle_Token_Marker(this)) |
145 buffer.addBufferListener(buffer_listener) |
145 buffer.addBufferListener(buffer_listener) |
146 buffer.propertiesChanged() |
146 buffer.propertiesChanged() |
147 |
147 |
148 edits_buffer += Insert(0, buffer.getText(0, buffer.getLength)) |
148 edits_buffer += Text_Edit.Insert(0, buffer.getText(0, buffer.getLength)) |
149 edits_delay() |
149 edits_delay() |
150 } |
150 } |
151 |
151 |
152 def deactivate() |
152 def deactivate() |
153 { |
153 { |