A pretty-printer for Ruby objects.
Standard output by p returns this:
#<PP:0x81fedf0 @genspace=#<Proc:0x81feda0>, @group_queue=#<PrettyPrint::GroupQueue:0x81fed3c @queue=[[#<PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false>], []]>, @buffer=[], @newline="\n", @group_stack=[#<PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false>], @buffer_width=0, @indent=0, @maxwidth=79, @output_width=2, @output=#<IO:0x8114ee4>>
Pretty-printed output returns this:
#<PP:0x81fedf0 @buffer=[], @buffer_width=0, @genspace=#<Proc:0x81feda0>, @group_queue= #<PrettyPrint::GroupQueue:0x81fed3c @queue= [[#<PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0>], []]>, @group_stack= [#<PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0>], @indent=0, @maxwidth=79, @newline="\n", @output=#<IO:0x8114ee4>, @output_width=2>
pp(obj) #=> obj pp obj #=> obj pp(obj1, obj2, ...) #=> [obj1, obj2, ...] pp() #=> nil
Output obj(s)
to $>
in pretty printed format.
It returns obj(s)
.
To define a customized pretty printing function for your classes, redefine
method #pretty_print(pp)
in the class.
#pretty_print
takes the pp
argument, which is an
instance of the PP class. The method uses text,
breakable, nest, group and pp
to print the object.
To pretty-print JSON refer to JSON#pretty_generate.
Tanaka Akira <akr@fsij.org>
Outputs obj
to out
in pretty printed format of
width
columns in width.
If out
is omitted, $>
is assumed. If
width
is omitted, the width of out
is assumed
(see ::width_for).
::pp returns out
.
# File pp.rb, line 90 def PP.pp(obj, out=$>, width=width_for(out)) q = PP.new(out, width) q.guard_inspect_key {q.pp obj} q.flush #$pp = q out << "\n" end
Outputs obj
to out
like ::pp but with no indent and newline.
::singleline_pp returns
out
.
# File pp.rb, line 102 def PP.singleline_pp(obj, out=$>) q = SingleLine.new(out) q.guard_inspect_key {q.pp obj} q.flush out end
Returns the usable width for out
. As the width of
out
:
If out
is assigned to a tty device, its width is used.
Otherwise, or it could not get the value, the COLUMN
environment variable is assumed to be set to the width.
If COLUMN
is not set to a non-zero number, 80 is assumed.
And finally, returns the above width value - 1.
This -1 is for Windows command prompt, which moves the cursor to the next line if it reaches the last column.
# File pp.rb, line 73 def PP.width_for(out) begin require 'io/console' _, width = out.winsize rescue LoadError, NoMethodError, SystemCallError end (width || ENV['COLUMNS']&.to_i&.nonzero? || 80) - 1 end