src/Tools/jEdit/src/jedit/scala_console.scala
author wenzelm
Fri, 08 Jan 2010 12:26:44 +0100
changeset 34844 92ea2174ea78
parent 34841 2ada58650469
child 34845 6d64de27efa5
permissions -rw-r--r--
more precise prompt etc.;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34841
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
     1
/*
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
     2
 * Scala instance of Console plugin
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
     3
 *
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
     4
 * @author Makarius
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
     5
 */
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
     6
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
     7
package isabelle.jedit
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
     8
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
     9
34844
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    10
import console.{Console, ConsolePane, Shell, Output}
34841
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    11
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    12
import org.gjt.sp.jedit.jEdit
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    13
import org.gjt.sp.jedit.MiscUtilities
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    14
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    15
import java.io.{Writer, PrintWriter}
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    16
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    17
import scala.tools.nsc.{Interpreter, GenericRunnerSettings, NewLinePrintWriter, ConsoleWriter}
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    18
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    19
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    20
class Scala_Console extends Shell("Scala")
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    21
{
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    22
  private var interpreters = Map[Console, Interpreter]()
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    23
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    24
  private var global_console: Console = null
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    25
  private var global_out: Output = null
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    26
  private var global_err: Output = null
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    27
34844
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    28
  private def with_console[A](console: Console, out: Output, err: Output)(e: => A): A =
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    29
  {
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    30
    global_console = console
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    31
    global_out = out
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    32
    global_err = if (err == null) out else err
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    33
    val res = Exn.capture { e }
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    34
    global_console = null
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    35
    global_out = null
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    36
    global_err = null
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    37
    Exn.release(res)
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    38
  }
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    39
34841
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    40
  private def report_error(str: String)
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    41
  {
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    42
    if (global_console == null || global_err == null) System.err.println(str)
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    43
    else global_err.print(global_console.getErrorColor, str)
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    44
  }
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    45
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    46
  private class Console_Writer extends Writer
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    47
  {
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    48
    def close {}
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    49
    def flush {}
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    50
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    51
    def write(cbuf: Array[Char], off: Int, len: Int)
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    52
    {
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    53
      if (len > 0) write(new String(cbuf.subArray(off, off + len)))
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    54
    }
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    55
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    56
    override def write(str: String)
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    57
    {
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    58
      if (global_out == null) System.out.println(str)
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    59
      else global_out.print(null, str)
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    60
    }
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    61
  }
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    62
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    63
  override def openConsole(console: Console)
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    64
  {
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    65
    val settings = new GenericRunnerSettings(report_error)
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    66
    val printer = new PrintWriter(new Console_Writer, true)
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    67
    interpreters += (console -> new Interpreter(settings, printer))
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    68
  }
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    69
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    70
  override def closeConsole(console: Console)
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    71
  {
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    72
    interpreters -= console
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    73
  }
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    74
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    75
  override def printPrompt(console: Console, out: Output)
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    76
	{
34844
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    77
    out.writeAttrs(ConsolePane.colorAttributes(console.getInfoColor), "scala>")
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    78
		out.writeAttrs(null," ")
34841
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    79
	}
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    80
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    81
  override def execute(console: Console, input: String, out: Output, err: Output, command: String)
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    82
  {
34844
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    83
    with_console(console, out, err) {
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    84
      interpreters(console).interpret(command)
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    85
    }
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    86
    if (err != null) err.commandDone()
92ea2174ea78 more precise prompt etc.;
wenzelm
parents: 34841
diff changeset
    87
		out.commandDone()
34841
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    88
  }
2ada58650469 some attempts at Scala console plugin;
wenzelm
parents:
diff changeset
    89
}