diff options
| author | Joel Martin <github@martintribe.org> | 2014-12-18 23:21:39 -0600 |
|---|---|---|
| committer | Joel Martin <github@martintribe.org> | 2015-01-09 16:16:51 -0600 |
| commit | 821930dbd9febf45fad25aefa9bc64e8ace4c737 (patch) | |
| tree | 8afc5c6c99b5d670fefc75dbcc1b71acda1e2e35 /scala/printer.scala | |
| parent | b8ee29b22fbaa7a01f2754b4d6dd9af52e02017c (diff) | |
| download | mal-821930dbd9febf45fad25aefa9bc64e8ace4c737.tar.gz mal-821930dbd9febf45fad25aefa9bc64e8ace4c737.zip | |
Scala: all steps 0-9 but no metadata.
Diffstat (limited to 'scala/printer.scala')
| -rw-r--r-- | scala/printer.scala | 45 |
1 files changed, 45 insertions, 0 deletions
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] + "<function (fn* " + _pr_str(f.params) + " " + _pr_str(f.ast) + ")>" + } 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 |
