Merge pull request #378 from asarhaddon/test-macro-not-changing-function
[jackhill/mal.git] / cs / printer.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Text.RegularExpressions;
4 using Mal;
5 using MalVal = Mal.types.MalVal;
6 using MalList = Mal.types.MalList;
7
8 namespace Mal {
9 public class printer {
10 public static string join(List<MalVal> value,
11 string delim, bool print_readably) {
12 List<string> strs = new List<string>();
13 foreach (MalVal mv in value) {
14 strs.Add(mv.ToString(print_readably));
15 }
16 return String.Join(delim, strs.ToArray());
17 }
18
19 public static string join(Dictionary<string,MalVal> value,
20 string delim, bool print_readably) {
21 List<string> strs = new List<string>();
22 foreach (KeyValuePair<string, MalVal> entry in value) {
23 if (entry.Key.Length > 0 && entry.Key[0] == '\u029e') {
24 strs.Add(":" + entry.Key.Substring(1));
25 } else if (print_readably) {
26 strs.Add("\"" + entry.Key.ToString() + "\"");
27 } else {
28 strs.Add(entry.Key.ToString());
29 }
30 strs.Add(entry.Value.ToString(print_readably));
31 }
32 return String.Join(delim, strs.ToArray());
33 }
34
35 public static string _pr_str(MalVal mv, bool print_readably) {
36 return mv.ToString(print_readably);
37 }
38
39 public static string _pr_str_args(MalList args, String sep,
40 bool print_readably) {
41 return join(args.getValue(), sep, print_readably);
42 }
43
44 public static string escapeString(string str) {
45 return Regex.Escape(str);
46 }
47
48 }
49 }