src/Pure/PIDE/markup_tree.scala
changeset 46178 1c5c88f6feb5
parent 46165 0e131ca93a49
child 46712 8650d9a95736
--- a/src/Pure/PIDE/markup_tree.scala	Tue Jan 10 18:12:55 2012 +0100
+++ b/src/Pure/PIDE/markup_tree.scala	Tue Jan 10 23:26:27 2012 +0100
@@ -16,11 +16,6 @@
 
 object Markup_Tree
 {
-  sealed case class Cumulate[A](
-    info: A, result: PartialFunction[(A, Text.Markup), A], elements: Option[Set[String]])
-  sealed case class Select[A](
-    result: PartialFunction[Text.Markup, A], elements: Option[Set[String]])
-
   val empty: Markup_Tree = new Markup_Tree(Branches.empty)
 
   object Entry
@@ -107,18 +102,17 @@
     }
   }
 
-  def cumulate[A](root_range: Text.Range)(body: Cumulate[A]): Stream[Text.Info[A]] =
+  def cumulate[A](root_range: Text.Range, root_info: A, result_elements: Option[Set[String]],
+    result: PartialFunction[(A, Text.Markup), A]): Stream[Text.Info[A]] =
   {
-    val root_info = body.info
-
-    def result(x: A, entry: Entry): Option[A] =
-      if (body.elements match { case Some(es) => es.exists(entry.elements) case None => true }) {
+    def results(x: A, entry: Entry): Option[A] =
+      if (result_elements match { case Some(es) => es.exists(entry.elements) case None => true }) {
         val (y, changed) =
           (entry.markup :\ (x, false))((info, res) =>
             {
               val (y, changed) = res
               val arg = (y, Text.Info(entry.range, info))
-              if (body.result.isDefinedAt(arg)) (body.result(arg), true)
+              if (result.isDefinedAt(arg)) (result(arg), true)
               else res
             })
         if (changed) Some(y) else None
@@ -135,7 +129,7 @@
           val subtree = entry.subtree.overlapping(subrange).toStream
           val start = subrange.start
 
-          result(parent.info, entry) match {
+          results(parent.info, entry) match {
             case Some(res) =>
               val next = Text.Info(subrange, res)
               val nexts = stream(start, (next, subtree) :: (parent, more) :: rest)