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