summaryrefslogblamecommitdiff
path: root/src/repl/scala/tools/nsc/interpreter/SimpleReader.scala
blob: 49b8433a8c366a96b1bef6c06752d76139de6b1c (plain) (tree)
1
2
3
4
5
6
7
8
9
                            
                                

                         
 

                 
                   
 
                                 
                        



                                   
                    
                           



                               
 
                  
                       











                                                                                             

   


                             
                                                
 
                                                                                                                        
                                          
 









                                                                     
/* NSC -- new Scala compiler
 * Copyright 2005-2013 LAMP/EPFL
 * @author Stepan Koltsov
 */

package scala
package tools.nsc
package interpreter

import java.io.{ BufferedReader }
import session.NoHistory

/** Reads using standard JDK API */
class SimpleReader(
  in: BufferedReader,
  out: JPrintWriter,
  val interactive: Boolean)
extends InteractiveReader
{
  val history = NoHistory
  val completion = NoCompletion

  def reset() = ()
  def redrawLine() = ()

  // InteractiveReader internals
  protected def readOneLine(prompt: String): String = {
    echo(prompt)
    readOneLine()
  }
  protected def readOneKey(prompt: String) = sys.error("No char-based input in SimpleReader")

  protected def readOneLine(): String = in.readLine()
  protected def echo(s: String): Unit = if (interactive) {
    out.print(s)
    out.flush()
  }
}

object SimpleReader {
  def defaultIn  = Console.in
  def defaultOut = new JPrintWriter(Console.out)

  def apply(in: BufferedReader = defaultIn, out: JPrintWriter = defaultOut, interactive: Boolean = true): SimpleReader =
    new SimpleReader(in, out, interactive)
}

// pretend we are a console for verbose purposes
trait EchoReader extends SimpleReader {
  // if there is more input, then maybe echo the prompt and the input
  override def readOneLine(prompt: String) = {
    val input = readOneLine()
    if (input != null) echo(f"$prompt$input%n")
    input
  }
}