src/Tools/jEdit/src/prover/Command.scala
changeset 34451 3b9d0074ed44
parent 34410 f2644d2a3e8e
child 34458 e2aa32bb73c0
equal deleted inserted replaced
34450:db45b50cd361 34451:3b9d0074ed44
     5  * @author Fabian Immler, TU Munich
     5  * @author Fabian Immler, TU Munich
     6  */
     6  */
     7 
     7 
     8 package isabelle.prover
     8 package isabelle.prover
     9 
     9 
    10 import isabelle.proofdocument.Token
    10 
    11 import isabelle.jedit.Plugin
       
    12 import isabelle.{ YXML, XML }
       
    13 import sidekick.{SideKickParsedData, IAsset}
       
    14 import javax.swing.text.Position
    11 import javax.swing.text.Position
    15 import javax.swing.tree.DefaultMutableTreeNode
    12 import javax.swing.tree.DefaultMutableTreeNode
       
    13 
       
    14 import isabelle.proofdocument.Token
       
    15 import isabelle.jedit.{Isabelle, Plugin}
       
    16 import isabelle.{YXML, XML}
       
    17 
       
    18 import sidekick.{SideKickParsedData, IAsset}
       
    19 
    16 
    20 
    17 object Command {
    21 object Command {
    18   object Phase extends Enumeration {
    22   object Phase extends Enumeration {
    19     val UNPROCESSED = Value("UNPROCESSED")
    23     val UNPROCESSED = Value("UNPROCESSED")
    20     val FINISHED = Value("FINISHED")
    24     val FINISHED = Value("FINISHED")
    21     val REMOVE = Value("REMOVE")
    25     val REMOVE = Value("REMOVE")
    22     val REMOVED = Value("REMOVED")
    26     val REMOVED = Value("REMOVED")
    23     val FAILED = Value("FAILED")
    27     val FAILED = Value("FAILED")
    24   }
    28   }
    25 
       
    26   private var nextId : Long = 0
       
    27   def generateId : Long = {
       
    28     nextId = nextId + 1
       
    29     return nextId
       
    30   }
       
    31   
       
    32   def idFromString(id : String) = Long.unbox(java.lang.Long.valueOf(id, 36))
       
    33 }
    29 }
    34 
    30 
    35 class Command(val document : Document, val first : Token[Command], val last : Token[Command]) {
    31 
    36   import Command._
    32 class Command(val document: Document, val first: Token[Command], val last: Token[Command])
       
    33 {
       
    34   val id = Isabelle.plugin.id()
    37   
    35   
    38   {
    36   {
    39     var t = first
    37     var t = first
    40     while(t != null) {
    38     while (t != null) {
    41       t.command = this
    39       t.command = this
    42       t = if (t == last) null else t.next
    40       t = if (t == last) null else t.next
    43     }
    41     }
    44   }
    42   }
    45   
       
    46   val id : Long = generateId
       
    47 
    43 
    48   private var p = Phase.UNPROCESSED
    44 
       
    45   /* command phase */
       
    46 
       
    47   private var p = Command.Phase.UNPROCESSED
    49   def phase = p
    48   def phase = p
    50   def phase_=(p_new : Phase.Value) = {
    49   def phase_=(p_new: Command.Phase.Value) = {
    51     if(p_new == Phase.UNPROCESSED){
    50     if (p_new == Command.Phase.UNPROCESSED) {
    52       //delete inner syntax
    51       // delete markup
    53       for(child <- root_node.children){
    52       for (child <- root_node.children) {
    54         child.children = Nil
    53         child.children = Nil
    55       }
    54       }
    56     }
    55     }
    57     p = p_new
    56     p = p_new
    58   }
    57   }
    59 	
       
    60   var results = Nil : List[XML.Tree]
       
    61 
    58 
    62   def idString = java.lang.Long.toString(id, 36)
    59 
       
    60   /* accumulated results */
       
    61 
       
    62   var results: List[XML.Tree] = Nil
       
    63 
    63   def results_xml = XML.document(
    64   def results_xml = XML.document(
    64     results match {
    65     results match {
    65       case Nil => XML.Elem("message", Nil, Nil)
    66       case Nil => XML.Elem("message", Nil, Nil)
    66       case List(elem) => elem
    67       case List(elem) => elem
    67       case _ =>
    68       case _ => XML.Elem("messages", Nil, List(results.first, results.last))
    68         XML.Elem("messages", List(), List(results.first, results.last))
       
    69     }, "style")
    69     }, "style")
    70   def addResult(tree : XML.Tree) {
    70   def add_result(tree: XML.Tree) {
    71     results = results ::: List(tree)    // FIXME canonical reverse order
    71     results = results ::: List(tree)    // FIXME canonical reverse order
    72   }
    72   }
    73   
       
    74   val root_node = 
       
    75     new MarkupNode(this, 0, stop - start, idString, "Command", document.getContent(this))
       
    76 
    73 
    77   def node_from(kind : String, begin : Int, end : Int) : MarkupNode = {
       
    78     val markup_content = /*content.substring(begin, end)*/ ""
       
    79     new MarkupNode(this, begin, end, idString, kind, markup_content)
       
    80   }
       
    81 
    74 
    82   def content = document.getContent(this)
    75   /* content */
       
    76 
       
    77   def content(): String = document.getContent(this)
    83 
    78 
    84   def next = if (last.next != null) last.next.command else null
    79   def next = if (last.next != null) last.next.command else null
    85   def previous = if (first.previous != null) first.previous.command else null
    80   def previous = if (first.previous != null) first.previous.command else null
    86 
    81 
    87   def start = first start
    82   def start = first.start
    88   def stop = last stop
    83   def stop = last.stop
    89   
    84 
    90   def properStart = start
    85   def proper_start = start
    91   def properStop = {
    86   def proper_stop = {
    92     var i = last
    87     var i = last
    93     while (i != first && i.kind.equals(Token.Kind.COMMENT))
    88     while (i != first && i.kind.equals(Token.Kind.COMMENT))
    94       i = i.previous
    89       i = i.previous
    95     i.stop
    90     i.stop
    96   }  	
    91   }
       
    92 
       
    93 
       
    94   /* markup tree */
       
    95 
       
    96   val root_node =
       
    97     new MarkupNode(this, 0, stop - start, id, Markup.COMMAND_SPAN, content())
       
    98 
       
    99   def node_from(kind: String, begin: Int, end: Int) = {
       
   100     val markup_content = /*content.substring(begin, end)*/ ""
       
   101     new MarkupNode(this, begin, end, id, kind, markup_content)
       
   102   }
    97 }
   103 }