From 821930dbd9febf45fad25aefa9bc64e8ace4c737 Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Thu, 18 Dec 2014 23:21:39 -0600 Subject: Scala: all steps 0-9 but no metadata. --- scala/printer.scala | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 scala/printer.scala (limited to 'scala/printer.scala') diff --git a/scala/printer.scala b/scala/printer.scala new file mode 100644 index 0000000..74b1433 --- /dev/null +++ b/scala/printer.scala @@ -0,0 +1,45 @@ +import types.Function + +object printer { + def _pr_str(obj: Any, print_readably: Boolean = true): String = { + val _r = print_readably + return obj match { + case l: List[Any] => "(" + l.map(_pr_str(_, _r)).mkString(" ") + ")" + case v: Array[Any] => "[" + v.map(_pr_str(_, _r)).mkString(" ") + "]" + case m: Map[String @unchecked,Any @unchecked] => { + val lst = m.map{case (k,v) => List(k, v)}.flatten + "{" + lst.map(_pr_str(_,_r)).mkString(" ") + "}" + } + case s: String => { + if (s.length > 0 && s(0) == '\u029e') { + ":" + s.substring(1,s.length) + } else if (_r) { + //println("here1: " + s) + "\"" + s.replace("\\", "\\\\") + .replace("\"", "\\\"") + .replace("\n", "\\n") + "\"" + } else { + s + } + } + case Symbol(s) => s + case a: types.Atom => "(atom " + a.value + ")" + case null => "nil" + case _ => { + if (obj.isInstanceOf[Function]) { + val f = obj.asInstanceOf[Function] + "" + } else { + obj.toString + } + } + } + } + + def _pr_list(lst: List[Any], print_readably: Boolean = true, + sep: String = " "): String = { + lst.map{_pr_str(_, print_readably)}.mkString(sep) + } +} + +// vim: ts=2:sw=2 -- cgit v1.2.3