アルゴリズムのためのクラスです。改行の位置を探し、きれいなインデントを施します。デフォルトでは、このクラスは文字列を扱います。文字1バイトが出力幅の中で1カラムを占めると仮定しています。以下のメソッドに対して適切な引数を与えることで、そうでない場合にも利用できます。出力バッファ、空白の生成をするブロックや改行オブジェクトを設定できます。PrettyPrint#breakableですので、このクラスは以下のようなことにも応用が可能です。オブジェクトを生成し、それを引数としてブロックを実行します。以下と同じ働きをするもので簡便のために用意されています。output:出力先を指定します。メソッドを持っていなければなりません。maxwidth:行の最大幅を指定します。越えることがあります。newline:改行に使われます。オブジェクトを指定します。生成したい空白の幅を表す整数を引数として呼ばれます。ためのバッファを生成します。メソッドを持っていなければなりません。与えたブロックを評価した結果のどれかひとつが引数として与えられます。ブロックが指定された場合は、空白を生成するために使われます。ブロックは、生成したい空白の幅を表す整数を引数として呼ばれます。output:出力先を指定します。メソッドを持っていなければなりません。maxwidth:行の最大幅を指定します。越えることがあります。newline:改行に使われます。オブジェクトを生成し、それを引数としてブロックを実行します。似ていますが、改行しません。実行であるかのように扱います。output:出力先を指定します。メソッドを持っていなければなりません。maxwidth:無視されます。newline:無視されます。genspace:無視されます。()「必要ならここで改行出来る」ということを自身に通知します。出力の際にそこに挿入されます。sep:改行が起きなかった場合に挿入されるテキストを文字列で指定します。カラムであると仮定されます。多バイト文字の際に指定する必要があるかも知れません。()[permalink][rdoc]バッファされたデータを出力します。()[permalink][rdoc]与えられたブロックを実行します。ブロック内で自身に追加される文字列やオブジェクトは、1行にまとめて表示してもよい同じグループに属すると仮定されます。アルゴリズムはインデントと改行を、ツリー構造を作ることによって決定します。メソッドは子ノードの作成と子ノードのインデントの深さの決定を担当します。改行するならば全て同時に改行します。indent:グループのインデントの深さを指定します。ブロックが実行される前に呼ばれます。開き括弧などを出力するのに使用されます。ブロックが実行された後に呼ばれます。閉じ括弧などを出力するのに使用されます。