src/Tools/jEdit/src/document_model.scala
changeset 55783 da0513d95155
parent 55781 b3a4207fb9a6
child 55784 9b243afbbe83
--- a/src/Tools/jEdit/src/document_model.scala	Thu Feb 27 12:48:59 2014 +0100
+++ b/src/Tools/jEdit/src/document_model.scala	Thu Feb 27 14:07:04 2014 +0100
@@ -99,8 +99,7 @@
   val empty_perspective: Document.Node.Perspective_Text =
     Document.Node.Perspective(false, Text.Perspective.empty, Document.Node.Overlays.empty)
 
-  def node_perspective(changed_blobs: Set[Document.Node.Name])
-    : (Boolean, Document.Node.Perspective_Text) =
+  def node_perspective(doc_blobs: Document.Blobs): (Boolean, Document.Node.Perspective_Text) =
   {
     Swing_Thread.require()
 
@@ -127,7 +126,7 @@
         } yield range
 
       val reparse =
-        snapshot.node.thy_load_commands.exists(cmd => cmd.blobs_names.exists(changed_blobs(_)))
+        snapshot.node.thy_load_commands.exists(cmd => cmd.blobs_names.exists(doc_blobs.changed))
 
       (reparse,
         Document.Node.Perspective(node_required,
@@ -144,15 +143,21 @@
 
   private def reset_blob(): Unit = Swing_Thread.require { _blob = None }
 
-  def blob(): (Bytes, Command.File) =
+  def get_blob(): Option[Document.Blob] =
     Swing_Thread.require {
-      _blob match {
-        case Some(x) => x
-        case None =>
-          val b = PIDE.thy_load.file_content(buffer)
-          val file = new Command.File(node_name.node, buffer.getSegment(0, buffer.getLength))
-          _blob = Some((b, file))
-          (b, file)
+      if (is_theory) None
+      else {
+        val (bytes, file) =
+          _blob match {
+            case Some(x) => x
+            case None =>
+              val bytes = PIDE.thy_load.file_content(buffer)
+              val file = new Command.File(node_name.node, buffer.getSegment(0, buffer.getLength))
+              _blob = Some((bytes, file))
+              (bytes, file)
+          }
+        val changed = pending_edits.is_pending()
+        Some(Document.Blob(bytes, file, changed))
       }
     }
 
@@ -165,7 +170,7 @@
 
     val header = node_header()
     val text = JEdit_Lib.buffer_text(buffer)
-    val (_, perspective) = node_perspective(Set.empty)
+    val (_, perspective) = node_perspective(Document.Blobs.empty)
 
     if (is_theory)
       List(session.header_edit(node_name, header),
@@ -213,11 +218,11 @@
     def is_pending(): Boolean = pending_clear || !pending.isEmpty
     def snapshot(): List[Text.Edit] = pending.toList
 
-    def flushed_edits(changed_blobs: Set[Document.Node.Name]): List[Document.Edit_Text] =
+    def flushed_edits(doc_blobs: Document.Blobs): List[Document.Edit_Text] =
     {
       val clear = pending_clear
       val edits = snapshot()
-      val (reparse, perspective) = node_perspective(changed_blobs)
+      val (reparse, perspective) = node_perspective(doc_blobs)
       if (clear || reparse || !edits.isEmpty || last_perspective != perspective) {
         pending_clear = false
         pending.clear
@@ -240,14 +245,11 @@
     }
   }
 
-  def has_pending_edits(): Boolean =
-    Swing_Thread.require { pending_edits.is_pending() }
-
   def snapshot(): Document.Snapshot =
     Swing_Thread.require { session.snapshot(node_name, pending_edits.snapshot()) }
 
-  def flushed_edits(changed_blobs: Set[Document.Node.Name]): List[Document.Edit_Text] =
-    Swing_Thread.require { pending_edits.flushed_edits(changed_blobs) }
+  def flushed_edits(doc_blobs: Document.Blobs): List[Document.Edit_Text] =
+    Swing_Thread.require { pending_edits.flushed_edits(doc_blobs) }
 
 
   /* buffer listener */