src/Tools/jEdit/src/jedit_lib.scala
changeset 56587 83777a91f5de
parent 56574 2b38472a4695
child 56589 71c5d1f516c0
equal deleted inserted replaced
56586:5ef60881681d 56587:83777a91f5de
   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