1 package isabelle.jedit |
1 package isabelle.jedit |
2 |
2 |
3 import java.io.{ ByteArrayInputStream, FileInputStream, InputStream } |
|
4 |
3 |
5 import java.awt.GridLayout |
4 import java.awt.GridLayout |
6 import javax.swing.{ JPanel, JTextArea, JScrollPane } |
5 import javax.swing.{ JPanel, JScrollPane } |
7 |
6 |
8 import isabelle.IsabelleSystem.getenv |
7 import isabelle.IsabelleSystem.getenv |
9 |
|
10 import org.xml.sax.InputSource; |
|
11 |
8 |
12 import org.w3c.dom.Document |
9 import org.w3c.dom.Document |
13 |
10 |
14 import org.xhtmlrenderer.simple.XHTMLPanel |
11 import org.xhtmlrenderer.simple.XHTMLPanel |
15 import org.xhtmlrenderer.context.AWTFontResolver |
12 import org.xhtmlrenderer.context.AWTFontResolver |
16 import org.xhtmlrenderer.swing.NaiveUserAgent |
|
17 import org.xhtmlrenderer.resource.CSSResource |
|
18 |
13 |
19 import org.gjt.sp.jedit.View |
14 import org.gjt.sp.jedit.View |
20 |
|
21 object StateViewDockable { |
|
22 val baseURL = "file://localhost" + getenv("ISABELLE_HOME") + "/lib/html/" |
|
23 val userStylesheet = |
|
24 "file://localhost" + getenv("ISABELLE_HOME_USER") + "/etc/user.css"; |
|
25 val stylesheet = """ |
|
26 |
|
27 @import "isabelle.css"; |
|
28 |
|
29 @import '""" + userStylesheet + """'; |
|
30 |
|
31 messages, message { |
|
32 display: block; |
|
33 white-space: pre-wrap; |
|
34 font-family: Isabelle; |
|
35 } |
|
36 """ |
|
37 } |
|
38 |
|
39 class UserAgent extends NaiveUserAgent { |
|
40 override def getCSSResource(uri : String) : CSSResource = { |
|
41 if (uri == StateViewDockable.baseURL + "style") |
|
42 new CSSResource( |
|
43 new ByteArrayInputStream(StateViewDockable.stylesheet.getBytes())) |
|
44 else { |
|
45 val stream = resolveAndOpenStream(uri) |
|
46 val resource = new CSSResource(stream) |
|
47 if (stream == null) |
|
48 resource.getResourceInputSource().setByteStream( |
|
49 new ByteArrayInputStream(new Array[Byte](0))) |
|
50 resource |
|
51 } |
|
52 } |
|
53 } |
|
54 |
15 |
55 class StateViewDockable(view : View, position : String) extends JPanel { |
16 class StateViewDockable(view : View, position : String) extends JPanel { |
56 { |
17 { |
57 val panel = new XHTMLPanel(new UserAgent()) |
18 val panel = new XHTMLPanel(new UserAgent()) |
58 setLayout(new GridLayout(1, 1)) |
19 setLayout(new GridLayout(1, 1)) |