aboutsummaryrefslogtreecommitdiff
path: root/scala/printer.scala
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-12-18 23:21:39 -0600
committerJoel Martin <github@martintribe.org>2015-01-09 16:16:51 -0600
commit821930dbd9febf45fad25aefa9bc64e8ace4c737 (patch)
tree8afc5c6c99b5d670fefc75dbcc1b71acda1e2e35 /scala/printer.scala
parentb8ee29b22fbaa7a01f2754b4d6dd9af52e02017c (diff)
downloadmal-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.scala45
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