7 |
7 |
8 package isabelle.proofdocument |
8 package isabelle.proofdocument |
9 import isabelle.prover.Command |
9 import isabelle.prover.Command |
10 |
10 |
11 object Token { |
11 object Token { |
12 object Kind { |
12 object Kind extends Enumeration { |
13 val COMMAND_START = "COMMAND_START" |
13 val COMMAND_START = Value("COMMAND_START") |
14 val COMMENT = "COMMENT" |
14 val COMMENT = Value("COMMENT") |
|
15 val OTHER = Value("OTHER") |
15 } |
16 } |
16 |
17 |
17 def checkStart(t : Token, P : (Int) => Boolean) |
18 def checkStart(t : Token, P : (Int) => Boolean) |
18 = t != null && P(t.start) |
19 = t != null && P(t.start) |
19 |
20 |
20 def checkStop(t : Token, P : (Int) => Boolean) |
21 def checkStop(t : Token, P : (Int) => Boolean) |
21 = t != null && P(t.stop) |
22 = t != null && P(t.stop) |
22 |
23 |
23 def scan(s : Token, f : Token => Boolean) : Token = { |
24 def scan(s : Token, f : Token => Boolean) : Token = { |
24 var current = s |
25 var current = s |
25 while (current != null) { |
26 while (current != null) { |
26 val next = current.next |
27 val next = current.next |
27 if (next == null || f(next)) |
28 if (next == null || f(next)) |
28 return current |
29 return current |
29 current = next |
30 current = next |
30 } |
31 } |
31 return null |
32 return null |
32 } |
33 } |
33 |
34 |
34 } |
35 } |
35 |
36 |
36 class Token(var start : Int, var stop : Int, var kind : String) { |
37 class Token(var start : Int, var stop : Int, var kind : Token.Kind.Value) { |
37 var next : Token = null |
38 var next : Token = null |
38 var previous : Token = null |
39 var previous : Token = null |
39 var command : Command = null |
40 var command : Command = null |
40 |
41 |
41 def length = stop - start |
42 def length = stop - start |
47 |
48 |
48 override def hashCode() : Int = (31 + start) * 31 + stop |
49 override def hashCode() : Int = (31 + start) * 31 + stop |
49 |
50 |
50 override def equals(obj : Any) : Boolean = { |
51 override def equals(obj : Any) : Boolean = { |
51 if (super.equals(obj)) |
52 if (super.equals(obj)) |
52 return true; |
53 return true; |
53 |
54 |
54 if (null == obj) |
55 if (null == obj) |
55 return false; |
56 return false; |
56 |
57 |
57 obj match { |
58 obj match { |
58 case other: Token => |
59 case other: Token => |
59 (start == other.start) && (stop == other.stop) |
60 (start == other.start) && (stop == other.stop) |
60 case other: Any => false |
61 case other: Any => false |