diff options
Diffstat (limited to 'cask/src/cask/internal/Util.scala')
-rw-r--r-- | cask/src/cask/internal/Util.scala | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/cask/src/cask/internal/Util.scala b/cask/src/cask/internal/Util.scala index b4f33a8..7da343e 100644 --- a/cask/src/cask/internal/Util.scala +++ b/cask/src/cask/internal/Util.scala @@ -6,7 +6,39 @@ import scala.collection.generic.CanBuildFrom import scala.collection.mutable import java.io.OutputStream +import scala.annotation.switch + object Util { + + /** + * Convert a string to a C&P-able literal. Basically + * copied verbatim from the uPickle source code. + */ + def literalize(s: IndexedSeq[Char], unicode: Boolean = true) = { + val sb = new StringBuilder + sb.append('"') + var i = 0 + val len = s.length + while (i < len) { + (s(i): @switch) match { + case '"' => sb.append("\\\"") + case '\\' => sb.append("\\\\") + case '\b' => sb.append("\\b") + case '\f' => sb.append("\\f") + case '\n' => sb.append("\\n") + case '\r' => sb.append("\\r") + case '\t' => sb.append("\\t") + case c => + if (c < ' ' || (c > '~' && unicode)) sb.append("\\u%04x" format c.toInt) + else sb.append(c) + } + i += 1 + } + sb.append('"') + + sb.result() + } + def transferTo(in: InputStream, out: OutputStream) = { val buffer = new Array[Byte](8192) |