src/Tools/jEdit/src/jedit_editor.scala
author wenzelm
Mon, 12 Aug 2013 12:06:48 +0200
changeset 52974 908e8a36e975
parent 52973 d5f7fa1498b7
child 52977 15254e32d299
permissions -rw-r--r--
tuned signature;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
52971
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
     1
/*  Title:      Tools/jEdit/src/jedit_editor.scala
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
     3
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
     4
PIDE editor operations for jEdit.
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
     5
*/
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
     6
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
     7
package isabelle.jedit
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
     8
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
     9
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    10
import isabelle._
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    11
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    12
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    13
import org.gjt.sp.jedit.{jEdit, View}
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    14
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    15
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    16
class JEdit_Editor extends Editor[View]
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    17
{
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    18
  def session: Session = PIDE.session
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    19
52974
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    20
  def flush()
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    21
  {
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    22
    Swing_Thread.require()
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    23
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    24
    session.update(
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    25
      (List.empty[Document.Edit_Text] /: JEdit_Lib.jedit_buffers().toList) {
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    26
        case (edits, buffer) =>
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    27
          JEdit_Lib.buffer_lock(buffer) {
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    28
            PIDE.document_model(buffer) match {
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    29
              case Some(model) => model.flushed_edits() ::: edits
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    30
              case None => edits
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    31
            }
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    32
          }
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    33
      }
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    34
    )
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    35
  }
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    36
52971
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    37
  def current_context: View =
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    38
    Swing_Thread.require { jEdit.getActiveView() }
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    39
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    40
  def current_node(view: View): Option[Document.Node.Name] =
52973
d5f7fa1498b7 tuned signature;
wenzelm
parents: 52971
diff changeset
    41
    Swing_Thread.require { PIDE.document_model(view.getBuffer).map(_.node_name) }
52971
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    42
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    43
  def current_snapshot(view: View): Option[Document.Snapshot] =
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    44
    Swing_Thread.require { PIDE.document_model(view.getBuffer).map(_.snapshot()) }
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    45
52974
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    46
  def node_snapshot(name: Document.Node.Name): Document.Snapshot =
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    47
  {
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    48
    Swing_Thread.require()
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    49
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    50
    JEdit_Lib.jedit_buffer(name.node) match {
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    51
      case Some(buffer) =>
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    52
        PIDE.document_model(buffer) match {
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    53
          case Some(model) => model.snapshot
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    54
          case None => session.snapshot(name)
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    55
        }
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    56
      case None => session.snapshot(name)
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    57
    }
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    58
  }
908e8a36e975 tuned signature;
wenzelm
parents: 52973
diff changeset
    59
52971
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    60
  def current_command(view: View, snapshot: Document.Snapshot): Option[(Command, Text.Offset)] =
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    61
  {
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    62
    Swing_Thread.require()
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    63
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    64
    if (snapshot.is_outdated) None
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    65
    else {
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    66
      val text_area = view.getTextArea
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    67
      PIDE.document_view(text_area) match {
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    68
        case Some(doc_view) =>
52973
d5f7fa1498b7 tuned signature;
wenzelm
parents: 52971
diff changeset
    69
          val node = snapshot.version.nodes(doc_view.model.node_name)
52971
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    70
          node.command_at(text_area.getCaretPosition)
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    71
        case None => None
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    72
      }
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    73
    }
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    74
  }
31926d2c04ee tuned signature -- more abstract PIDE editor operations;
wenzelm
parents:
diff changeset
    75
}