|
|
@ -51,7 +51,7 @@ var boringKeys = map[string]bool{ |
|
|
|
|
|
|
|
|
|
|
|
// prettyPrint writes value to standard output.
|
|
|
|
// prettyPrint writes value to standard output.
|
|
|
|
func prettyPrint(vm *otto.Otto, value otto.Value) { |
|
|
|
func prettyPrint(vm *otto.Otto, value otto.Value) { |
|
|
|
ppctx{vm}.printValue(value, 0) |
|
|
|
ppctx{vm}.printValue(value, 0, false) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func prettyPrintJS(call otto.FunctionCall) otto.Value { |
|
|
|
func prettyPrintJS(call otto.FunctionCall) otto.Value { |
|
|
@ -68,10 +68,10 @@ func (ctx ppctx) indent(level int) string { |
|
|
|
return strings.Repeat(indentString, level) |
|
|
|
return strings.Repeat(indentString, level) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (ctx ppctx) printValue(v otto.Value, level int) { |
|
|
|
func (ctx ppctx) printValue(v otto.Value, level int, inArray bool) { |
|
|
|
switch { |
|
|
|
switch { |
|
|
|
case v.IsObject(): |
|
|
|
case v.IsObject(): |
|
|
|
ctx.printObject(v.Object(), level) |
|
|
|
ctx.printObject(v.Object(), level, inArray) |
|
|
|
case v.IsNull(): |
|
|
|
case v.IsNull(): |
|
|
|
specialColor.Print("null") |
|
|
|
specialColor.Print("null") |
|
|
|
case v.IsUndefined(): |
|
|
|
case v.IsUndefined(): |
|
|
@ -92,7 +92,7 @@ func (ctx ppctx) printValue(v otto.Value, level int) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (ctx ppctx) printObject(obj *otto.Object, level int) { |
|
|
|
func (ctx ppctx) printObject(obj *otto.Object, level int, inArray bool) { |
|
|
|
switch obj.Class() { |
|
|
|
switch obj.Class() { |
|
|
|
case "Array": |
|
|
|
case "Array": |
|
|
|
lv, _ := obj.Get("length") |
|
|
|
lv, _ := obj.Get("length") |
|
|
@ -109,7 +109,7 @@ func (ctx ppctx) printObject(obj *otto.Object, level int) { |
|
|
|
for i := int64(0); i < len; i++ { |
|
|
|
for i := int64(0); i < len; i++ { |
|
|
|
el, err := obj.Get(strconv.FormatInt(i, 10)) |
|
|
|
el, err := obj.Get(strconv.FormatInt(i, 10)) |
|
|
|
if err == nil { |
|
|
|
if err == nil { |
|
|
|
ctx.printValue(el, level+1) |
|
|
|
ctx.printValue(el, level+1, true) |
|
|
|
} |
|
|
|
} |
|
|
|
if i < len-1 { |
|
|
|
if i < len-1 { |
|
|
|
fmt.Printf(", ") |
|
|
|
fmt.Printf(", ") |
|
|
@ -137,12 +137,15 @@ func (ctx ppctx) printObject(obj *otto.Object, level int) { |
|
|
|
for i, k := range keys { |
|
|
|
for i, k := range keys { |
|
|
|
v, _ := obj.Get(k) |
|
|
|
v, _ := obj.Get(k) |
|
|
|
fmt.Printf("%s%s: ", ctx.indent(level+1), k) |
|
|
|
fmt.Printf("%s%s: ", ctx.indent(level+1), k) |
|
|
|
ctx.printValue(v, level+1) |
|
|
|
ctx.printValue(v, level+1, false) |
|
|
|
if i < len(keys)-1 { |
|
|
|
if i < len(keys)-1 { |
|
|
|
fmt.Printf(",") |
|
|
|
fmt.Printf(",") |
|
|
|
} |
|
|
|
} |
|
|
|
fmt.Println() |
|
|
|
fmt.Println() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if inArray { |
|
|
|
|
|
|
|
level-- |
|
|
|
|
|
|
|
} |
|
|
|
fmt.Printf("%s}", ctx.indent(level)) |
|
|
|
fmt.Printf("%s}", ctx.indent(level)) |
|
|
|
|
|
|
|
|
|
|
|
case "Function": |
|
|
|
case "Function": |
|
|
|