124 jedit_buffer(name.node) |
124 jedit_buffer(name.node) |
125 |
125 |
126 def jedit_views(): Iterator[View] = jEdit.getViews().iterator |
126 def jedit_views(): Iterator[View] = jEdit.getViews().iterator |
127 |
127 |
128 def jedit_text_areas(view: View): Iterator[JEditTextArea] = |
128 def jedit_text_areas(view: View): Iterator[JEditTextArea] = |
129 view.getEditPanes().iterator.map(_.getTextArea) |
129 if (view == null) Iterator.empty |
|
130 else view.getEditPanes().iterator.filter(_ != null).map(_.getTextArea).filter(_ != null) |
130 |
131 |
131 def jedit_text_areas(): Iterator[JEditTextArea] = |
132 def jedit_text_areas(): Iterator[JEditTextArea] = |
132 jedit_views().flatMap(jedit_text_areas(_)) |
133 jedit_views().flatMap(jedit_text_areas(_)) |
133 |
134 |
134 def jedit_text_areas(buffer: JEditBuffer): Iterator[JEditTextArea] = |
135 def jedit_text_areas(buffer: JEditBuffer): Iterator[JEditTextArea] = |
174 } |
175 } |
175 catch { case _: ArrayIndexOutOfBoundsException => Text.Range(offset, offset + 1) } |
176 catch { case _: ArrayIndexOutOfBoundsException => Text.Range(offset, offset + 1) } |
176 } |
177 } |
177 |
178 |
178 |
179 |
179 /* caret */ |
180 /* text ranges */ |
180 |
181 |
181 def before_caret_range(text_area: TextArea, rendering: Rendering): Text.Range = |
182 def buffer_range(buffer: JEditBuffer): Text.Range = |
182 { |
183 Text.Range(0, buffer.getLength) |
|
184 |
|
185 def line_range(buffer: JEditBuffer, line: Int): Text.Range = |
|
186 Text.Range(buffer.getLineStartOffset(line), buffer.getLineEndOffset(line)) |
|
187 |
|
188 def before_caret_range(text_area: TextArea, rendering: Rendering): Option[Text.Range] = |
|
189 { |
|
190 val range = line_range(text_area.getBuffer, text_area.getCaretLine) |
183 val snapshot = rendering.snapshot |
191 val snapshot = rendering.snapshot |
184 val former_caret = snapshot.revert(text_area.getCaretPosition) |
192 val former_caret = snapshot.revert(text_area.getCaretPosition) |
185 snapshot.convert(Text.Range(former_caret - 1, former_caret)) |
193 snapshot.convert(Text.Range(former_caret - 1, former_caret)).try_restrict(range) |
186 } |
194 } |
187 |
|
188 |
|
189 /* text ranges */ |
|
190 |
|
191 def buffer_range(buffer: JEditBuffer): Text.Range = |
|
192 Text.Range(0, buffer.getLength) |
|
193 |
195 |
194 def visible_range(text_area: TextArea): Option[Text.Range] = |
196 def visible_range(text_area: TextArea): Option[Text.Range] = |
195 { |
197 { |
196 val buffer = text_area.getBuffer |
198 val buffer = text_area.getBuffer |
197 val n = text_area.getVisibleLines |
199 val n = text_area.getVisibleLines |