IsabelleSideKickParser: incorporate former MarkupNode.markup2default_node, observe stopped flag;
authorwenzelm
Thu, 03 Sep 2009 17:48:02 +0200
changeset 34701 80b0add08eef
parent 34700 0e1d098940a7
child 34702 efa196219dd3
IsabelleSideKickParser: incorporate former MarkupNode.markup2default_node, observe stopped flag; tuned;
src/Tools/jEdit/src/jedit/IsabelleSideKickParser.scala
src/Tools/jEdit/src/prover/MarkupNode.scala
--- a/src/Tools/jEdit/src/jedit/IsabelleSideKickParser.scala	Thu Sep 03 17:26:25 2009 +0200
+++ b/src/Tools/jEdit/src/jedit/IsabelleSideKickParser.scala	Thu Sep 03 17:48:02 2009 +0200
@@ -11,10 +11,15 @@
 import scala.collection.immutable.TreeSet
 
 import javax.swing.tree.DefaultMutableTreeNode
+import javax.swing.text.Position
+import javax.swing.Icon
 
 import org.gjt.sp.jedit.{Buffer, EditPane, TextUtilities, View}
 import errorlist.DefaultErrorSource
-import sidekick.{SideKickParser, SideKickParsedData, SideKickCompletion}
+import sidekick.{SideKickParser, SideKickParsedData, SideKickCompletion, IAsset}
+
+import isabelle.prover.{Command, MarkupNode}
+import isabelle.proofdocument.ProofDocument
 
 
 class IsabelleSideKickParser extends SideKickParser("isabelle")
@@ -33,9 +38,28 @@
     val prover_setup = Isabelle.prover_setup(buffer)
     if (prover_setup.isDefined) {
       val document = prover_setup.get.theory_view.current_document()
-      for (command <- document.commands)
-        data.root.add(command.markup_root(document).swing_node(document))
+      for (command <- document.commands if !stopped) {
+        data.root.add(command.markup_root(document).
+          swing_tree(document)((node: MarkupNode, cmd: Command, doc: ProofDocument) =>
+            {
+              implicit def int2pos(offset: Int): Position =
+                new Position { def getOffset = offset; override def toString = offset.toString }
 
+              new DefaultMutableTreeNode(new IAsset {
+                override def getIcon: Icon = null
+                override def getShortString: String = node.content
+                override def getLongString: String = node.info.toString
+                override def getName: String = node.id
+                override def setName(name: String) = ()
+                override def setStart(start: Position) = ()
+                override def getStart: Position = node.abs_start(doc)
+                override def setEnd(end: Position) = ()
+                override def getEnd: Position = node.abs_stop(doc)
+                override def toString =
+                  node.id + ": " + node.content + "[" + getStart + " - " + getEnd + "]"
+              })
+            }))
+      }
       if (stopped) data.root.add(new DefaultMutableTreeNode("<parser stopped>"))
     }
     else data.root.add(new DefaultMutableTreeNode("<buffer inactive>"))
--- a/src/Tools/jEdit/src/prover/MarkupNode.scala	Thu Sep 03 17:26:25 2009 +0200
+++ b/src/Tools/jEdit/src/prover/MarkupNode.scala	Thu Sep 03 17:48:02 2009 +0200
@@ -6,12 +6,11 @@
 
 package isabelle.prover
 
+
+import javax.swing.tree.DefaultMutableTreeNode
+
 import isabelle.proofdocument.ProofDocument
 
-import sidekick.IAsset
-import javax.swing._
-import javax.swing.text.Position
-import javax.swing.tree._
 
 abstract class MarkupInfo
 case class RootInfo() extends MarkupInfo
@@ -24,49 +23,28 @@
     override def toString = (file, line, command_id, offset).toString
   }
 
-object MarkupNode {
-
-  def markup2default_node(node: MarkupNode, cmd: Command, doc: ProofDocument)
-      : DefaultMutableTreeNode = {
-
-    implicit def int2pos(offset: Int): Position =
-      new Position { def getOffset = offset; override def toString = offset.toString }
-
-    object RelativeAsset extends IAsset {
-      override def getIcon: Icon = null
-      override def getShortString: String = node.content
-      override def getLongString: String = node.info.toString
-      override def getName: String = node.id
-      override def setName(name: String) = ()
-      override def setStart(start: Position) = ()
-      override def getStart: Position = node.abs_start(doc)
-      override def setEnd(end: Position) = ()
-      override def getEnd: Position = node.abs_stop(doc)
-      override def toString = node.id + ": " + node.content + "[" + getStart + " - " + getEnd + "]"
-    }
-
-    new DefaultMutableTreeNode(RelativeAsset)
-  }
-}
 
 class MarkupNode(val base: Command, val start: Int, val stop: Int,
   val children: List[MarkupNode],
   val id: String, val content: String, val info: MarkupInfo)
 {
 
-  def swing_node(doc: ProofDocument): DefaultMutableTreeNode = {
-    val node = MarkupNode.markup2default_node (this, base, doc)
-    children.map(node add _.swing_node(doc))
+  def swing_tree(doc: ProofDocument)
+    (make_node: (MarkupNode, Command, ProofDocument) => DefaultMutableTreeNode):
+      DefaultMutableTreeNode =
+  {
+    val node = make_node(this, base, doc)
+    children.foreach(node add _.swing_tree(doc)(make_node))
     node
   }
 
   def abs_start(doc: ProofDocument) = base.start(doc) + start
   def abs_stop(doc: ProofDocument) = base.start(doc) + stop
 
-  def set_children(newchildren: List[MarkupNode]): MarkupNode =
-    new MarkupNode(base, start, stop, newchildren, id, content, info)
+  def set_children(new_children: List[MarkupNode]): MarkupNode =
+    new MarkupNode(base, start, stop, new_children, id, content, info)
 
-  private def add(child: MarkupNode) =
+  private def add(child: MarkupNode) =   // FIXME avoid sort?
     set_children ((child :: children) sort ((a, b) => a.start < b.start))
 
   def remove(nodes: List[MarkupNode]) = set_children(children diff nodes)
@@ -79,7 +57,8 @@
     all
   }
 
-  def leafs: List[MarkupNode] = {
+  def leafs: List[MarkupNode] =
+  {
     if (children == Nil) return List(this)
     else return children flatMap (_.leafs)
   }
@@ -103,13 +82,15 @@
     }
   }
 
-  def filter(p: MarkupNode => Boolean): List[MarkupNode] = {
+  def filter(p: MarkupNode => Boolean): List[MarkupNode] =
+  {
     val filtered = children.flatMap(_.filter(p))
     if (p(this)) List(this set_children(filtered))
     else filtered
   }
 
-  def +(new_child: MarkupNode): MarkupNode = {
+  def + (new_child: MarkupNode): MarkupNode =
+  {
     if (new_child fitting_into this) {
       var inserted = false
       val new_children =
@@ -123,7 +104,8 @@
         (this remove fitting) add ((new_child /: fitting) (_ + _))
       }
       else this set_children new_children
-    } else {
+    }
+    else {
       System.err.println("ignored nonfitting markup: " + new_child)
       this
     }