Ruby 2.1.0 リファレンスマニュアル > ライブラリ一覧 > prettyprintライブラリ > PrettyPrintクラス
クラスの継承リスト: PrettyPrint < Object < Kernel < BasicObject
pretty printing アルゴリズムのためのクラスです。 改行の位置を探し、きれいなインデントを施します。
デフォルトでは、このクラスは文字列を扱います。 また、文字1バイトが出力幅の中で1カラムを占めると仮定しています。 しかし、以下のメソッドに対して適切な引数を与えることで、 そうでない場合にも利用できます。
ですので、このクラスは以下のようなことにも応用が可能です。
format(output = '', maxwidth = 79, newline = "\n", genspace = lambda{|n| ' ' * n}) {|pp| ...} -> object
[permalink][rdoc]PrettyPrint オブジェクトを生成し、それを引数としてブロックを実行します。 与えられた output を返します。
以下と同じ働きをするもので簡便のために用意されています。
begin pp = PrettyPrint.new(output, maxwidth, newline, &genspace) ... pp.flush output end
new(output = '', maxwidth = 79, newline = "\n") -> PrettyPrint
[permalink][rdoc]new(output = '', maxwidth = 79, newline = "\n") {|width| ...} -> PrettyPrint
pretty printing のためのバッファを生成します。 output は出力先です。output は << メソッドを持っていなければなりません。 << メソッドには
のどれかひとつが引数として与えられます。
ブロックが指定された場合は、空白を生成するために使われます。ブロックは、生成したい空白の幅を表す整数を引数として呼ばれます。ブロックが指定されない場合は、空白を生成するために {|width| ' ' * width} が使われます。
singleline_format(output = '', maxwidth = 79, newline = "\n", genspace = lambda{|n| ' ' * n}) {|pp| ...} -> object
[permalink][rdoc]PrettyPrint オブジェクトを生成し、それを引数としてブロックを実行します。 PrettyPrint.format に似ていますが、改行しません。
引数 maxwidth, newline と genspace は無視されます。ブロック中の breakable の実行は、 改行せずに text の実行であるかのように扱います。
breakable(sep = ' ') -> ()
[permalink][rdoc]breakable(sep, width = sep.length) -> ()
「必要ならここで改行出来る」ということを自身に通知します。 もしその位置で改行されなければ、width カラムのテキスト sep が出力の際にそこに挿入されます。
first? -> bool
[permalink][rdoc]このメソッドは obsolete です。
現在のグループで first? に対する最初の呼び出しかどうかを判定する 述語です。これはカンマで区切られた値を整形するのに有用です。
pp.group(1, '[', ']') { xxx.each {|yyy| unless pp.first? pp.text ',' pp.breakable end ... pretty printing yyy ... } }
flush -> ()
[permalink][rdoc]バッファされたデータを出力します。
genspace -> Proc
[permalink][rdoc]空白を生成する Proc を返します。
group(indent = 0, open_obj = '', close_obj = '', open_width = open_obj.length, close_width = close_obj.length) {...} -> ()
[permalink][rdoc]与えられたブロックを実行します。 ブロック内で自身に追加される文字列やオブジェクトは、1行にまとめて表示しても よい同じグループに属すると仮定されます。
もう少し詳しく説明します。pretty printing アルゴリズムはインデントと改行を、 ツリー構造を作ることによって決定します。そして、group メソッドは子ノードの作成と 子ノードのインデントの深さの決定を担当します。
同じノード内で呼ばれた breakable は、改行するならば全て同時に改行します。
indent -> Integer
[permalink][rdoc]現在のインデントの深さを返します。
maxwidth -> Integer
[permalink][rdoc]自身の幅を返します。
nest(indent) {...} -> ()
[permalink][rdoc]自身の現在のインデントを indent だけ増加させてから、ブロックを実行し、元に戻します。
newline -> String
[permalink][rdoc]自身の改行文字を返します。
output -> object
[permalink][rdoc]自身の output を返します。
text(obj) -> ()
[permalink][rdoc]text(obj, width = obj.length) -> ()
obj を width カラムのテキストとして自身に追加します。