src/Tools/jEdit/src/renderer/UserAgent.scala
author wenzelm
Fri, 26 Jun 2009 23:28:46 +0200
changeset 34632 f044d8446ae9
parent 34442 9e6d80c387e0
child 34633 42ab7ad9b07e
permissions -rw-r--r--
more robust handling of Isabelle CSS files;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34407
aad6834ba380 added some headers and comments;
wenzelm
parents: 34353
diff changeset
     1
/*
aad6834ba380 added some headers and comments;
wenzelm
parents: 34353
diff changeset
     2
 * XML/CSS rendering -- user agent
aad6834ba380 added some headers and comments;
wenzelm
parents: 34353
diff changeset
     3
 *
aad6834ba380 added some headers and comments;
wenzelm
parents: 34353
diff changeset
     4
 * @author Fabian Immler, TU Munich
aad6834ba380 added some headers and comments;
wenzelm
parents: 34353
diff changeset
     5
 * @author Johannes Hölzl, TU Munich
aad6834ba380 added some headers and comments;
wenzelm
parents: 34353
diff changeset
     6
 */
aad6834ba380 added some headers and comments;
wenzelm
parents: 34353
diff changeset
     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
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    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
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    12
import java.io.{InputStream, ByteArrayInputStream, FileInputStream}
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    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
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    18
object UserAgent
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    19
{
34407
aad6834ba380 added some headers and comments;
wenzelm
parents: 34353
diff changeset
    20
  // FIXME avoid static getenv
34632
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    21
  val base_URL = "file://localhost/dummy/"
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    22
  val style = base_URL + "style"
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    23
  val isabelle_css = base_URL + "isabelle.css"
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    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
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    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
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    37
class UserAgent extends NaiveUserAgent
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    38
{
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    39
  private def empty_stream(): InputStream =
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    40
    new ByteArrayInputStream(new Array[Byte](0))
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    41
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    42
  private def try_file_stream(name: String): InputStream =
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    43
  {
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    44
    val file = Isabelle.system.platform_file(name)
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    45
    if (file.exists) new FileInputStream(file)
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    46
    else empty_stream()
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    47
  }
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    48
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    49
  override def getCSSResource(uri: String): CSSResource =
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    50
  {
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    51
    uri match {
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    52
      case UserAgent.style =>
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    53
        new CSSResource(
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    54
          new ByteArrayInputStream(UserAgent.stylesheet.getBytes(Isabelle_System.charset)))
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    55
      case UserAgent.isabelle_css =>
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    56
        new CSSResource(try_file_stream("~~/lib/html/isabelle.css"))
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    57
      case UserAgent.isabelle_user_css =>
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    58
        new CSSResource(try_file_stream("$ISABELLE_HOME_USER/etc/isabelle.css"))
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    59
      case _ =>
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    60
        val stream = resolveAndOpenStream(uri)
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    61
        val resource = new CSSResource(stream)
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    62
        if (stream == null)
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    63
          resource.getResourceInputSource().setByteStream(empty_stream())
f044d8446ae9 more robust handling of Isabelle CSS files;
wenzelm
parents: 34442
diff changeset
    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
}