func prettyPrintObject(o otm.Object, log *testing.T) { parent := "" for x := o.Parent(); !fn.IsNil(x); x = x.Parent() { parent = fmt.Sprint(x.Qualident(), "<-", parent) } log.Log(parent, o.Qualident()) if o.ChildrenCount() > 0 { log.Log(":") for _x := range o.Children() { switch x := _x.(type) { case otm.Object: prettyPrintObject(x, log) case otm.Link: log.Log("@", x.Object().Qualident()) case string, float64, int64, rune, tri.Trit: log.Log(_x) case []uint8: s := zbase32.EncodeToString(x) log.Log("zbase32(", s, ")", x) default: halt.As(100, reflect.TypeOf(x)) } } log.Log(";") } }
func (f *fm) object(o otm.Object) { q := o.Qualident() if q.Template != "" { f.Ident(q.Template) f.Char('~') } f.Ident(q.Class) if q.Identifier != "" { f.Char('(') f.Ident(q.Identifier) f.Char(')') } if o.ChildrenCount() > 0 { f.Char(':') for _x := range o.Children() { f.Char(' ') switch x := _x.(type) { case otm.Object: f.object(x) case string: f.stringValue(x) case int64: i := strconv.Itoa(int(x)) f.RawString(i) case float64: if math.IsInf(x, 1) { f.RawString("inf") } else if math.IsInf(x, -1) { f.RawString("-inf") } else { f_ := strconv.FormatFloat(x, 'f', 8, 64) f.RawString(f_) } case rune: r := strconv.FormatUint(uint64(x), 16) f.RawString("0" + r + "U") case tri.Trit: f.Trinary(x) case []uint8: f.RawString(zbase32.EncodeToString(x)) default: halt.As(100, reflect.TypeOf(x)) } } f.Char(';') } else { f.Char(' ') } }