src/Tools/jEdit/src/jedit/StateViewDockable.scala
changeset 34353 aa0d2f0bde83
parent 34318 c13e168a8ae6
child 34361 3e7568e833d9
equal deleted inserted replaced
34352:74ddfd2cf5a5 34353:aa0d2f0bde83
     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))
    72     
    33     
    73     Plugin.plugin.stateUpdate.add(state => {
    34     Plugin.plugin.stateUpdate.add(state => {
    74       if (state == null)
    35       if (state == null)
    75         panel.setDocument(null : Document)
    36         panel.setDocument(null : Document)
    76       else
    37       else
    77         panel.setDocument(state.document, StateViewDockable.baseURL)
    38         panel.setDocument(state.document, UserAgent.baseURL)
    78     })
    39     })
    79   }
    40   }
    80 }
    41 }