blob: 87ca05600c1fe1ce51286f7f290fb9056d21ca3d (
plain) (
tree)
|
|
/* NSC -- new Scala compiler
* Copyright 2005-2013 LAMP/EPFL
* @author Paul Phillips
*/
package scala.tools.nsc
package interpreter
import scala.reflect.internal.Chars
trait ReplStrings {
/** Convert a string into code that can recreate the string.
* This requires replacing all special characters by escape
* codes. It does not add the surrounding " marks.
*/
def string2code(str: String): String = {
val res = new StringBuilder
for (c <- str) c match {
case '"' => res ++= """\""""
case '\'' => res ++= """\'"""
case '\\' => res ++= """\\"""
case '\b' => res ++= """\b"""
case '\t' => res ++= """\t"""
case '\n' => res ++= """\n"""
case '\f' => res ++= """\f"""
case '\r' => res ++= """\r"""
case _ if c.isControl => res ++= Chars.char2uescape(c)
case _ => res += c
}
res.toString
}
def string2codeQuoted(str: String) =
"\"" + string2code(str) + "\""
def any2stringOf(x: Any, maxlen: Int) =
"_root_.scala.runtime.ScalaRunTime.replStringOf(%s, %s)".format(x, maxlen)
// no escaped or nested quotes
private[this] val inquotes = """(['"])(.*?)\1""".r
def unquoted(s: String) = s match { case inquotes(_, w) => w ; case _ => s }
def words(s: String) = (s.trim split "\\s+" filterNot (_ == "") map unquoted).toList
}
|