tuned;
authorwenzelm
Tue, 21 Oct 2014 20:45:05 +0200
changeset 58754 0232d43422d6
parent 58753 960bf499ca5d
child 58755 fc822ca2428a
tuned;
src/Tools/jEdit/src/structure_matching.scala
--- a/src/Tools/jEdit/src/structure_matching.scala	Tue Oct 21 20:44:17 2014 +0200
+++ b/src/Tools/jEdit/src/structure_matching.scala	Tue Oct 21 20:45:05 2014 +0200
@@ -16,21 +16,20 @@
 {
   object Isabelle_Matcher extends StructureMatcher
   {
-    def scan_block(
+    def find_block(
       open: Token => Boolean,
       close: Token => Boolean,
       reset: Token => Boolean,
-      init_range: Text.Range,
-      init_depth: Int,
-      it: Iterator[Text.Info[Token]]): Option[Text.Range] =
+      it: Iterator[Text.Info[Token]]): Option[(Text.Range, Text.Range)] =
     {
-      it.scanLeft((init_range, init_depth))(
+      val range1 = it.next.range
+      it.scanLeft((range1, 1))(
         { case ((r, d), Text.Info(range, tok)) =>
             if (open(tok)) (range, d + 1)
             else if (close(tok)) (range, d - 1)
             else if (reset(tok)) (range, 0)
             else (r, d) }
-      ).collectFirst({ case (r, 0) => r })
+      ).collectFirst({ case (range2, 0) => (range1, range2) })
     }
 
     def find_pair(text_area: TextArea): Option[(Text.Range, Text.Range)] =
@@ -68,16 +67,10 @@
               }
 
             case Some(Text.Info(range1, tok)) if tok.is_begin =>
-              val it = caret_iterator()
-              it.next
-              scan_block(_.is_begin, _.is_end, _ => false, range1, 1, it).
-                map(range2 => (range1, range2))
+              find_block(_.is_begin, _.is_end, _ => false, caret_iterator())
 
             case Some(Text.Info(range1, tok)) if tok.is_end =>
-              val it = rev_caret_iterator()
-              it.next
-              scan_block(_.is_end, _.is_begin, _ => false, range1, 1, it).
-                map(range2 => (range1, range2))
+              find_block(_.is_end, _.is_begin, _ => false, rev_caret_iterator())
 
             case _ => None
           }