private void StandardTaggedObj(ushort tagId, Obj obj) { writer.Write(Cell.Runtime.SymbObj.IdxToStr(tagId)); if (!obj.IsNeRecord() && (!obj.IsNeSeq() || obj.GetSize() == 1)) { writer.Write('('); if (IsMultiline(obj)) { writer.IndentedNewLine(); obj.Visit(this); writer.UnindentedNewLine(); } else { obj.Visit(this); } writer.Write(')'); } else { obj.Visit(this); } }
public static void Print(Obj obj, DataWriter writer) { // ObjPrinter printer = new ObjPrinter(writer, new HashSet<Obj>(new IdentityEqualityComparer<Obj>())); ObjPrinter printer = new ObjPrinter(writer, new HashSet <Obj>()); obj.Visit(printer); writer.Flush(); }
public static void Print(Obj obj, DataWriter writer, int maxLineLen) { HashSet <Obj> multilineObjs = Multiliner.MultilineObjs(obj, maxLineLen); ObjPrinter printer = new ObjPrinter(writer, multilineObjs); obj.Visit(printer); writer.Flush(); }
private int ObjSize(Obj obj) { if (done) { return(0); } obj.Visit(this); Debug.Assert(lastVisitedObjSize != -1); int size = lastVisitedObjSize; lastVisitedObjSize = -1; if (size > maxLineLen) { if (multilineObjs != null) { //## HACK HACK HACK if (obj is NeTreeMapObj) { multilineObjs.Add(((NeTreeMapObj)obj).Packed()); } else if (obj is NeTreeSetObj) { multilineObjs.Add(((NeTreeSetObj)obj).Packed()); } else { multilineObjs.Add(obj); } } if (bailEarly) { done = true; } } return(size); }
public void NeTernRelObj(NeTernRelObj obj) { Obj[] col1 = obj.Col1(); Obj[] col2 = obj.Col2(); Obj[] col3 = obj.Col3(); int len = col1.Length; writer.Write('['); if (IsMultiline(obj)) { writer.Indent(); if (writer.IsNewLine()) { writer.Write(' '); } else { writer.NewLine(); } for (int i = 0; i < len; i++) { Obj arg1 = col1[i]; Obj arg2 = col2[i]; Obj arg3 = col3[i]; bool multiline = IsMultiline(arg1) || IsMultiline(arg2) || IsMultiline(arg3); arg1.Visit(this); writer.Write(","); if (multiline) { writer.NewLine(); } else { writer.Write(' '); } arg2.Visit(this); writer.Write(","); if (multiline) { writer.NewLine(); } else { writer.Write(' '); } arg3.Visit(this); if (i == 0 | i < len - 1) { writer.Write(";"); } writer.NewLine(); } writer.UnindentedNewLine(); } else { for (int i = 0; i < len; i++) { if (i > 0) { writer.Write("; "); } col1[i].Visit(this); writer.Write(", "); col2[i].Visit(this); writer.Write(", "); col3[i].Visit(this); } if (len == 1) { writer.Write(';'); } } writer.Write(']'); }
private void Map(NeBinRelObj obj) { Obj[] col1 = obj.Col1(); Obj[] col2 = obj.Col2(); int len = col1.Length; writer.Write('['); if (IsMultiline(obj)) { writer.Indent(); if (writer.IsNewLine()) { writer.Write(' '); } else { writer.NewLine(); } for (int i = 0; i < len; i++) { Obj arg1 = col1[i]; Obj arg2 = col2[i]; arg1.Visit(this); writer.Write(" ->"); if (IsMultiline(arg2)) { writer.IndentedNewLine(); arg2.Visit(this); writer.Unindent(); } else { writer.Write(' '); arg2.Visit(this); } if (i < len - 1) { writer.Write(','); } else { writer.Unindent(); } writer.NewLine(); } } else { for (int i = 0; i < len; i++) { if (i > 0) { writer.Write(", "); } col1[i].Visit(this); writer.Write(" -> "); col2[i].Visit(this); } } writer.Write(']'); }
public static void PrintNoFlush(Obj obj, DataWriter writer) { ObjPrinter printer = new ObjPrinter(writer, new HashSet <Obj>()); obj.Visit(printer); }
private void Record(NeBinRelObj obj) { Obj[] values = obj.Col2(); int len = values.Length; ushort[] labels; if (obj is RecordObj) { RecordObj recObj = (RecordObj)obj; labels = recObj.fieldIds; } else { labels = new ushort[len]; Obj[] fields = obj.Col1(); for (int i = 0; i < len; i++) { labels[i] = fields[i].GetSymbId(); } } writer.Write('('); if (IsMultiline(obj)) { int maxLabelLen = 0; for (int i = 0; i < len; i++) { int labelLen = Cell.Runtime.SymbObj.IdxToStr(labels[i]).Length; if (labelLen > maxLabelLen) { maxLabelLen = labelLen; } } int[] idxs = SortedIdxs(labels, values); writer.Indent(); if (writer.IsNewLine()) { writer.Write(' '); } else { writer.NewLine(); } for (int i = 0; i < len; i++) { int idx = idxs[i]; string label = Cell.Runtime.SymbObj.IdxToStr(labels[idx]); writer.Write(label); writer.Write(':'); Obj value = values[idx]; if (IsMultiline(value)) { writer.IndentedNewLine(); value.Visit(this); writer.Unindent(); } else { writer.WriteSpaces(maxLabelLen - label.Length + 1); value.Visit(this); } if (i < len - 1) { writer.Write(','); } else { writer.Unindent(); } writer.NewLine(); } } else { for (int i = 0; i < len; i++) { if (i > 0) { writer.Write(", "); } writer.Write(Cell.Runtime.SymbObj.IdxToStr(labels[i])); writer.Write(": "); values[i].Visit(this); } } writer.Write(')'); }