1 /* Title: lib/jedit/plugin/isabelle_parser.scala |
|
2 ID: $Id$ |
|
3 Author: Makarius |
|
4 |
|
5 Isabelle parser setup for Sidekick plugin. |
|
6 */ |
|
7 |
|
8 package isabelle.jedit |
|
9 |
|
10 import javax.swing.text.Position |
|
11 import javax.swing.tree.DefaultMutableTreeNode |
|
12 import javax.swing.tree.DefaultTreeModel |
|
13 |
|
14 import org.gjt.sp.jedit.{Buffer, EditPane} |
|
15 import org.gjt.sp.util.Log |
|
16 |
|
17 import errorlist.DefaultErrorSource |
|
18 import sidekick.{Asset, SideKickParser, SideKickParsedData, SideKickCompletion} |
|
19 |
|
20 |
|
21 private class IsabelleAsset(name: String, content: String) extends Asset(name) |
|
22 { |
|
23 override def getShortString() = { name } |
|
24 override def getLongString() = { content } |
|
25 override def getIcon() = { null } |
|
26 } |
|
27 |
|
28 |
|
29 class IsabelleParser extends SideKickParser("isabelle") { |
|
30 |
|
31 /* parsing */ |
|
32 |
|
33 private var stopped = false |
|
34 |
|
35 override def stop () { stopped = true } |
|
36 |
|
37 def parse(buffer: Buffer, e: DefaultErrorSource): SideKickParsedData = { |
|
38 stopped = false |
|
39 |
|
40 var text: String = null |
|
41 var data: SideKickParsedData = null |
|
42 |
|
43 try { |
|
44 buffer.readLock() |
|
45 text = buffer.getText(0, buffer.getLength) |
|
46 data = new SideKickParsedData(buffer.getName) |
|
47 |
|
48 val asset = new IsabelleAsset("theory", null) |
|
49 asset.setStart(buffer.createPosition(0)) |
|
50 asset.setEnd(buffer.createPosition(buffer.getLength)) |
|
51 |
|
52 val node = new DefaultMutableTreeNode(asset) |
|
53 data.root.insert(node, node.getChildCount) |
|
54 |
|
55 } |
|
56 finally { |
|
57 buffer.readUnlock() |
|
58 } |
|
59 |
|
60 data |
|
61 } |
|
62 |
|
63 |
|
64 /* completion */ |
|
65 |
|
66 override def supportsCompletion = true |
|
67 override def canCompleteAnywhere = true |
|
68 |
|
69 override def complete(pane: EditPane, caret: Int): SideKickCompletion = null |
|
70 |
|
71 } |
|
72 |
|