src/Tools/jEdit/src/proofdocument/Token.scala
changeset 34483 0923926022d7
parent 34482 0f4b34445f40
child 34492 2268cbe29fca
equal deleted inserted replaced
34482:0f4b34445f40 34483:0923926022d7
     4  * @author Johannes Hölzl, TU Munich
     4  * @author Johannes Hölzl, TU Munich
     5  * @author Fabian Immler, TU Munich
     5  * @author Fabian Immler, TU Munich
     6  */
     6  */
     7 
     7 
     8 package isabelle.proofdocument
     8 package isabelle.proofdocument
       
     9 
       
    10 
     9 import isabelle.prover.Command
    11 import isabelle.prover.Command
       
    12 
    10 
    13 
    11 object Token {
    14 object Token {
    12   object Kind extends Enumeration {
    15   object Kind extends Enumeration {
    13     val COMMAND_START = Value("COMMAND_START")
    16     val COMMAND_START = Value("COMMAND_START")
    14     val COMMENT = Value("COMMENT")
    17     val COMMENT = Value("COMMENT")
    15     val OTHER = Value("OTHER")
    18     val OTHER = Value("OTHER")
    16   }
    19   }
    17 
    20 
    18   def checkStart(t : Token, P : (Int) => Boolean)
    21   def check_start(t: Token, P: Int => Boolean) = { t != null && P(t.start) }
    19   = t != null && P(t.start)
    22   def check_stop(t: Token, P: Int => Boolean) = { t != null && P(t.stop) }
    20 
    23 
    21   def checkStop(t : Token, P : (Int) => Boolean)
    24   def scan(s: Token, f: Token => Boolean): Token =
    22   = t != null && P(t.stop)
    25   {
    23 
       
    24   def scan(s : Token, f : Token => Boolean) : Token = {
       
    25     var current = s
    26     var current = s
    26     while (current != null) {
    27     while (current != null) {
    27       val next = current.next
    28       val next = current.next
    28       if (next == null || f(next))
    29       if (next == null || f(next)) return current
    29       return current
       
    30       current = next
    30       current = next
    31     }
    31     }
    32     return null
    32     return null
    33   }
    33   }
    34 
       
    35 }
    34 }
    36 
    35 
    37 class Token(var start : Int, var stop : Int, var kind : Token.Kind.Value) {
    36 class Token(var start: Int, var stop: Int, var kind: Token.Kind.Value)
    38   var next : Token = null
    37 {
    39   var previous : Token = null
    38   var next: Token = null
    40   var command : Command = null
    39   var prev: Token = null
       
    40   var command: Command = null
    41   
    41   
    42   def length = stop - start
    42   def length = stop - start
    43 
    43 
    44   def shift(offset : Int, bottomClamp : Int) {
    44   def shift(offset: Int, bottom_clamp: Int) {
    45     start = bottomClamp max (start + offset)
    45     start = bottom_clamp max (start + offset)
    46     stop = bottomClamp max (stop + offset)
    46     stop = bottom_clamp max (stop + offset)
    47   }
    47   }
    48   
    48   
    49   override def hashCode() : Int = (31 + start) * 31 + stop
    49   override def hashCode: Int = (31 + start) * 31 + stop
    50 
    50 
    51   override def equals(obj : Any) : Boolean = {
    51   override def equals(obj: Any): Boolean =
    52     if (super.equals(obj))
    52   {
    53     return true;
    53     if (super.equals(obj)) return true
    54     
    54     if (null == obj) return false
    55     if (null == obj)
       
    56     return false;
       
    57     
       
    58     obj match {
    55     obj match {
    59       case other: Token => 
    56       case other: Token => (start == other.start) && (stop == other.stop)
    60         (start == other.start) && (stop == other.stop)
    57       case other: Any => false
    61       case other: Any => false  
       
    62     }
    58     }
    63   }
    59   }
    64 }
    60 }