lib/jedit/plugin/isabelle_parser.scala
changeset 33694 f06fe9c2152d
parent 33693 9d76c8080aea
parent 33690 889d06128608
child 33695 bec342db1bf4
equal deleted inserted replaced
33693:9d76c8080aea 33694:f06fe9c2152d
     1 /*  Title:      lib/jedit/plugin/isabelle_parser.scala
       
     2     ID:         $Id$
       
     3     Author:     Makarius
       
     4 
       
     5 Isabelle parser setup for Sidekick plugin.
       
     6 */
       
     7 
       
     8 package isabelle.jedit
       
     9 
       
    10 import javax.swing.text.Position
       
    11 import javax.swing.tree.DefaultMutableTreeNode
       
    12 import javax.swing.tree.DefaultTreeModel
       
    13 
       
    14 import org.gjt.sp.jedit.{Buffer, EditPane}
       
    15 import org.gjt.sp.util.Log
       
    16 
       
    17 import errorlist.DefaultErrorSource
       
    18 import sidekick.{Asset, SideKickParser, SideKickParsedData, SideKickCompletion}
       
    19 
       
    20 
       
    21 private class IsabelleAsset(name: String, content: String) extends Asset(name)
       
    22 {
       
    23   override def getShortString() = { name }
       
    24   override def getLongString() = { content }
       
    25   override def getIcon() = { null }
       
    26 }
       
    27 
       
    28 
       
    29 class IsabelleParser extends SideKickParser("isabelle") {
       
    30 
       
    31   /* parsing */
       
    32 
       
    33   private var stopped = false
       
    34 
       
    35   override def stop () { stopped = true }
       
    36 
       
    37   def parse(buffer: Buffer, e: DefaultErrorSource): SideKickParsedData = {
       
    38     stopped = false
       
    39 
       
    40     var text: String = null
       
    41     var data: SideKickParsedData = null
       
    42 
       
    43     try {
       
    44       buffer.readLock()
       
    45       text = buffer.getText(0, buffer.getLength)
       
    46       data = new SideKickParsedData(buffer.getName)
       
    47 
       
    48       val asset = new IsabelleAsset("theory", null)
       
    49       asset.setStart(buffer.createPosition(0))
       
    50       asset.setEnd(buffer.createPosition(buffer.getLength))
       
    51 
       
    52       val node = new DefaultMutableTreeNode(asset)
       
    53       data.root.insert(node, node.getChildCount)
       
    54 
       
    55     }
       
    56     finally {
       
    57       buffer.readUnlock()
       
    58     }
       
    59 
       
    60     data
       
    61   }
       
    62 
       
    63 
       
    64   /* completion */
       
    65 
       
    66   override def supportsCompletion = true
       
    67   override def canCompleteAnywhere = true
       
    68 
       
    69   override def complete(pane: EditPane, caret: Int): SideKickCompletion = null
       
    70 
       
    71 }
       
    72