more iterators;
authorwenzelm
Wed, 29 Oct 2014 09:42:46 +0100
changeset 58809 3c34490ccd4c
parent 58806 bb5ab5fce93a
child 58810 922a233805d2
more iterators;
src/Tools/jEdit/src/token_markup.scala
--- a/src/Tools/jEdit/src/token_markup.scala	Tue Oct 28 17:16:22 2014 +0100
+++ b/src/Tools/jEdit/src/token_markup.scala	Wed Oct 29 09:42:46 2014 +0100
@@ -254,7 +254,7 @@
     } yield Text.Info(Text.Range(i - tok.source.length, i), tok)
 
 
-  /* command span */
+  /* command spans */
 
   def command_span(syntax: Outer_Syntax, buffer: JEditBuffer, offset: Text.Offset)
     : Option[Text.Info[Command_Span.Span]] =
@@ -282,6 +282,32 @@
     else None
   }
 
+  private def _command_span_iterator(
+      syntax: Outer_Syntax,
+      buffer: JEditBuffer,
+      offset: Text.Offset,
+      next_offset: Text.Range => Text.Offset): Iterator[Text.Info[Command_Span.Span]] =
+    new Iterator[Text.Info[Command_Span.Span]]
+    {
+      private var next_span = command_span(syntax, buffer, offset)
+      def hasNext: Boolean = next_span.isDefined
+      def next: Text.Info[Command_Span.Span] =
+      {
+        val span = next_span.getOrElse(Iterator.empty.next)
+        next_span = command_span(syntax, buffer, next_offset(span.range))
+        span
+      }
+    }
+
+  def command_span_iterator(syntax: Outer_Syntax, buffer: JEditBuffer, offset: Text.Offset)
+      : Iterator[Text.Info[Command_Span.Span]] =
+    _command_span_iterator(syntax, buffer, offset max 0, range => range.stop)
+
+  def command_span_reverse_iterator(syntax: Outer_Syntax, buffer: JEditBuffer, offset: Text.Offset)
+      : Iterator[Text.Info[Command_Span.Span]] =
+    _command_span_iterator(syntax, buffer,
+      (offset min buffer.getLength) - 1, range => range.start - 1)
+
 
   /* token marker */