author | wenzelm |
Fri, 26 Jun 2009 23:28:46 +0200 | |
changeset 34632 | f044d8446ae9 |
parent 34442 | 9e6d80c387e0 |
child 34633 | 42ab7ad9b07e |
permissions | -rw-r--r-- |
34407 | 1 |
/* |
2 |
* XML/CSS rendering -- user agent |
|
3 |
* |
|
4 |
* @author Fabian Immler, TU Munich |
|
5 |
* @author Johannes Hölzl, TU Munich |
|
6 |
*/ |
|
7 |
||
34430
ee19d8ef5dc3
renamed isabelle.jedit.UserAgent to isabelle.renderer.UserAgent;
wenzelm
parents:
34407
diff
changeset
|
8 |
package isabelle.renderer |
ee19d8ef5dc3
renamed isabelle.jedit.UserAgent to isabelle.renderer.UserAgent;
wenzelm
parents:
34407
diff
changeset
|
9 |
|
34632 | 10 |
import isabelle.jedit.Isabelle |
34353
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
11 |
|
34632 | 12 |
import java.io.{InputStream, ByteArrayInputStream, FileInputStream} |
13 |
||
34353
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
14 |
import org.xhtmlrenderer.swing.NaiveUserAgent |
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
15 |
import org.xhtmlrenderer.resource.CSSResource |
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
16 |
|
34430
ee19d8ef5dc3
renamed isabelle.jedit.UserAgent to isabelle.renderer.UserAgent;
wenzelm
parents:
34407
diff
changeset
|
17 |
|
34632 | 18 |
object UserAgent |
19 |
{ |
|
34407 | 20 |
// FIXME avoid static getenv |
34632 | 21 |
val base_URL = "file://localhost/dummy/" |
22 |
val style = base_URL + "style" |
|
23 |
val isabelle_css = base_URL + "isabelle.css" |
|
24 |
val isabelle_user_css = base_URL + "isabelle_user.css" |
|
34353
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
25 |
val stylesheet = """ |
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
26 |
@import "isabelle.css"; |
34632 | 27 |
@import 'isabelle_user.css'; |
34353
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
28 |
|
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
29 |
messages, message { |
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
30 |
display: block; |
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
31 |
white-space: pre-wrap; |
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
32 |
font-family: Isabelle; |
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
33 |
} |
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
34 |
""" |
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
35 |
} |
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
36 |
|
34632 | 37 |
class UserAgent extends NaiveUserAgent |
38 |
{ |
|
39 |
private def empty_stream(): InputStream = |
|
40 |
new ByteArrayInputStream(new Array[Byte](0)) |
|
41 |
||
42 |
private def try_file_stream(name: String): InputStream = |
|
43 |
{ |
|
44 |
val file = Isabelle.system.platform_file(name) |
|
45 |
if (file.exists) new FileInputStream(file) |
|
46 |
else empty_stream() |
|
47 |
} |
|
48 |
||
49 |
override def getCSSResource(uri: String): CSSResource = |
|
50 |
{ |
|
51 |
uri match { |
|
52 |
case UserAgent.style => |
|
53 |
new CSSResource( |
|
54 |
new ByteArrayInputStream(UserAgent.stylesheet.getBytes(Isabelle_System.charset))) |
|
55 |
case UserAgent.isabelle_css => |
|
56 |
new CSSResource(try_file_stream("~~/lib/html/isabelle.css")) |
|
57 |
case UserAgent.isabelle_user_css => |
|
58 |
new CSSResource(try_file_stream("$ISABELLE_HOME_USER/etc/isabelle.css")) |
|
59 |
case _ => |
|
60 |
val stream = resolveAndOpenStream(uri) |
|
61 |
val resource = new CSSResource(stream) |
|
62 |
if (stream == null) |
|
63 |
resource.getResourceInputSource().setByteStream(empty_stream()) |
|
64 |
resource |
|
34353
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
65 |
} |
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
66 |
} |
aa0d2f0bde83
UserAgent as seperate class, moved stylesheets, baseURL to UserAgent
immler@in.tum.de
parents:
diff
changeset
|
67 |
} |