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 } |