Provided by: manpages-ja_0.5.0.0.20110915-1_all bug

indent の起動
       バージョン 1.3 からは、indent コマンドの書式は 以下のようになっている:

            indent [options] [input-files]

            indent [options] [single-input-file] [-o output-file]

       この書式は古いバージョンや他バージョンの indent と異なる。

       最初の書式では 1 つ以上の入力ファイルを指定する。 indent は、各ファイル
       のバックアップコピーを作成してから、 オリジナルのファイルをインデント付
       けしたものに置き換える。  バックアップの作り方については、 「バックアッ
       プファイル」セクションを参照すること。

       2 番目の書式では入力ファイルを 1 つだけ指定する。  この場合、または標準
       入力を使う場合には、  `-o´ オプションの後に出力ファイルを指定することが
       できる。

       indent に標準出力へ出力させるには `-st´ オプションを使う。 これが許され
       るのは、入力ファイルが  1  つだけの場合か、  標準入力を使う場合だけであ
       る。

       入力ファイルを指定しなければ入力は標準入力から読み込まれる。  また、`-´
       というファイル名が指定された場合にも標準入力が読み込まれる。

       使用例としては、以下のコマンドは いずれもプログラム `slithy_toves.c´ を
       読み込み、 インデント付けしたテキストを `slithy_toves.out´ に書き込む:

            indent slithy_toves.c -o slithy_toves.out

            indent -st slithy_toves.c > slithy_toves.out

            cat slithy_toves.c | indent -o slithy_toves.out

       indent の他のオプションのほとんどは、  プログラムをどのように整形するか
       を制御するためのものである。  バージョン  1.2  からは、indent は 各オプ
       ション名として長い名前も認識する。 長いオプションの前には `--´  か  `+´
       が置かれる。  [POSIX 標準と一貫性を持たせるため、 現在は `+´ を `--´ に
       置き換えようとしているところである。]
       本ドキュメントの大部分では、 簡潔に表現するために伝統的な短い名前を使っ
       ている。  長いオプション名と短いオプション名のリストは、 「オプションの
       概要」を参照すること。

       別の使用例を挙げる:

            indent -br test/metabolism.c -l85

       これにより、プログラム `test/metabolism.c´ が `-br´ オプションと `-l85´
       オプションを用いてインデント付けされ、  その出力が  `test/metabolism.c´
       に重ね書きされ、 元の `test/metabolism.c´ の内容は `test´  ディレクトリ
       にバックアップファイルとして書き込まれる。

       この例と同じ指定を長いオプション名を用いて行うと以下のようになる:

            indent --braces-on-if-line --line-length185 test/metabolism.c

            indent +braces-on-if-line +line-length185 test/metabolism.c

       indent を頻繁に同じオプションで使うならば、 これらを `.indent.pro´ とい
       うファイルに書いておくとよい。 indent は 3 つの場所でプロファイルファイ
       ルを探す。  最初に環境変数 INDENT_PROFILE があるかをチェックする。 この
       環境変数がある場合、その値を使用するファイルの名前として解釈する。 この
       環境変数がない場合、indent  はカレントディレクトリの `.indent.pro´ を探
       し、もし存在すればこれを使う。   indent    は最後にホームディレクトリの
       `.indent.pro´  を探し、 もし存在すればこれを使う。 この動作は従来のバー
       ジョンや別バージョンの indent と異なる。 これらは、両方のディレクトリに
       `.indent.pro´ ファイルがあれば、 両方とも使用する。

       `.indent.pro´  の書式は、コマンドラインに指定するのと同じく、  空白 (タ
       ブ、スペース、改行)        で区切られた単なるオプションのリストである。
       `.indent.pro´  のオプションは、 C または C++ のコメントで囲むことができ
       る。 コメントで囲んだオプションは無視される。

       コマンドラインオプションが処理されるのは、 `.indent.pro´ を処理したで
       ある。  後から指定したオプションは、前に指定した引き数を上書きする。 こ
       れには例外が 1 つある: 明示的に指定したオプションは  暗黙のオプションを
       必ず上書きする(「一般的なスタイル」を参照)。 `-npro´ オプションを指定す
       ることにより、 indent が `.indent.pro´ ファイルを読み込まないようにする
       ことができる。

バックアップファイル
       バージョン 1.3 からは、GNU indent は GNU 形式、 すなわち GNU Emacs と同
       様の方法でバックアップファイルを作成する。   つまり、バックアップ
       ファイルと バックアップファイルをどちらも作成できる。

       単純なバックアップファイルの名前は、 元のファイル名にサフィックスを追加
       して生成される。 このサフィックスのデフォルト値は、 1  文字からなる文字
       列 `~´ (チルダ)である。 したがって、`python.c´ のバックアップファイルは
       `python.c~´ となる。

       環境変数 SIMPLE_BACKUP_SUFFIX  に好きな文字列を設定することにより、  デ
       フォルト値以外の任意の文字列をサフィックスとして使用できる。

       ファイル `momeraths.c´ の番号付きバックアップは、 `momeraths.c.~23~´ の
       ようになる。  ここで、23   はこのファイルのバックアップのバージョンであ
       る。  ファイル  `src/momeraths.c´ のバックアップを作成するとき、 バック
       アップファイルの名前は `src/momeraths.c.~V~´  のようになる。  ここで、V
       はディレクトリ `src´ に現在ある 最も大きいバージョンより 1 大きい数字で
       ある。 環境変数 VERSION_WIDTH は、 必要に応じて左側に 0  を追加すること
       により、数字の桁数を制御する。 例えばこの変数を "2" に設定すると、 バッ
       クアップファイルの名前は `momeraths.c.~04~´ のようになる。

       どちらの方法でバックアップファイルを作るかは、 環境変数 VERSION_CONTROL
       で制御する。 この文字列が `simple´ ならば、単純なバックアップだけが作成
       される。 この値が `numbered´ ならば、番号付きバックアップが作成される。
       この値が  `numbered-existing´ ならば、 インデント付けするファイルの番号
       付きのバックアップが場合に、 番号付きバックアップが作成される。
       それ以外の場合には、単純なバックアップが作成される。 VERSION_CONTROL が
       設定されていなければ、 indent は `numbered-existing´ が指定されているも
       のとして動作する。

       別バージョンの indent は、 サフィックス `.BAK´ を使ってバックアップファ
       イルの名前を生成する。 この動作は、SIMPLE_BACKUP_SUFFIX に `.BAK´ を 設
       定することによりエミュレートすることができる。

       別バージョンの indent は、現在の GNU indent が行うように ソースファイル
       があるディレクトリにバックアップを作成するのではなく、 カレントディレク
       トリにバックアップを作成する点にも注意すること。

一般的なスタイル
       C     言語には一般的なスタイルがいくつかある。    例えば、GNU    スタイ
       ル、Kernighan & Ritchie スタイル、 オリジナルの Berkeley スタイル等であ
       る。  スタイルはオプション 1 つを使って選択することがで
       きる。 このオプションは、他のオプション全ての値を指定する。  ただし、明
       示的に指定したオプションは、 暗黙的に指定されたオプションよりも必ず優先
       される。

       バージョン 1.2 からは、GNU indent のデフォルトのスタイルは GNU スタイル
       である。 したがって、このフォーマットで出力するために `-gnu´ オプション
       を指定する必要はなくなった。 ただし、このオプションを指定してもエラーに
       はならない。 GNU スタイルに対応するオプション設定は以下である:

            -nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2
            -ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -nprs -psl -saf -sai
            -saw -nsc -nsob

       GNU  コーディングスタイルは  GNU  プロジェクトで推奨されている。 これは
       GNU Emacs の C モードが適用しようとするスタイルであり、 GNU Emacs の  C
       で記述された部分で使われているスタイルである。  (GNU プロジェクトのため
       にプログラムを書くことに興味がある方は、  「GNU  コーディング規約  (The
       GNU  Coding Standards)」を入手されたい。 この文書では、メモリの使い方や
       整数のサイズ等、 セマンティックや移植性についても説明されている。)

       Kernighan & Ritchie スタイルは有名な書籍 「プログラミング言語 C (The  C
       Programming Language)」で使われている。 これは `-kr´ オプションで有効と
       なる。 Kernighan & Ritchie スタイルは、以下のオプションの組合せと同等で
       ある:

            -nbad -bap -bbo -nbc -br -brs -c33 -cd33 -ncdb -ce -ci4 -cli0
            -cp33 -cs -d0 -di1 -nfc1 -nfca -hnl -i4 -ip0 -l75 -lp -npcs
            -nprs -npsl -saf -sai -saw -nsc -nsob -nss

       Kernighan  & Ritchie スタイルでは、コードがある行の右の部分にコメントが
       入れられることはない (コードの右に空白を 1 つだけ入れることもない)。 し
       たがって、このスタイルのカラム数  33 というのは indent が勝手に決めたも
       のである:

       オリジナルの Berkeley 版 indent のスタイルは、 `-orig´  (または長いオプ
       ション名 `--original´)を指定すれば得られる。 このスタイルは、以下の設定
       と同じ意味である:

            -nbad -nbap -bbo -bc -br -brs -c33 -cd33 -cdb -ce -ci4 -cli0
            -cp33 -di16 -fc1 -fca -hnl -i4 -ip4 -l75 -lp -npcs -nprs -psl
            -saf -sai -saw -sc -nsob -nss -ts8

空行
       各種プログラミングスタイルごとに、空白は異なる場所に置かれる。 indentに
       は、特定の場所に空白行を挿入・削除するための オプションがたくさんある。

       `-bad´ オプションを指定すると、 indent は宣言ブロック全ての後に必ず空行
       を置く。 `-nbad´ オプションを指定すると、このような空白行は置かれない。

       `-bap´ オプションを指定すると、手続き本体全ての後に必ず空行が置かれる。
       `-nbap´ オプションを指定すると、このような空行は置かれない。

       `-bbb´  オプションを指定すると、 箱形コメント全ての前に必ず空行が置かれ
       る       (箱形コメントについては「コメント」セクションを参照すること)。
       `-nbbb´ オプションを指定すると、このような空行は置かれない。

       `-sob´  を指定すると、indent  は省略できる空行を飲み込んでしまう  (つま
       り、入力行に含まれる省略できる空行が出力から全て削除される)。   `-nsob´
       を指定すると、 入力行に含まれる空行は出力ファイルにも全てコピーされる。

--blank-lines-after-declarations

       `-bad´   オプションを指定すると、宣言ブロックの後に必ず空行が置かれる。
       `-nbad´ オプションを指定すると、このような空行は追加されない。

       例えば、以下の入力を与えると
            char *foo;
            char *bar;
            /* このコメントは宣言のブロックを分けている */
            int baz;

       indent -bad の出力は以下のようになる。

            char *foo;
            char *bar;

            /* このコメントは宣言のブロックを分けている */
            int baz;

       また、indent -nbad の出力は以下のようになる。

            char *foo;
            char *bar;
            /* このコメントは宣言のブロックを分けている */
            int baz;

--blank-lines-after-procedures

       `-bap´ オプションを指定すると、それぞれの宣言本体の後に必ず空行が置かれ
       る。

       例えば、以下の入力を与えると

            int
            foo ()
            {
              puts("Hi");
            }
            /* この手続き bar には意味はない  */
            char *
            bar ()
            {
              puts("Hello");
            }

       indent -bap の出力は以下となる。

            int
            foo ()
            {
              puts ("Hi");
            }

            /* この手続き bar には意味はない  */
            char *
            bar ()
            {
              puts ("Hello");
            }

       また、indent -nbap の出力は以下となる。

            int
            foo ()
            {
              puts ("Hi");
            }
            /* この手続き bar には意味はない  */
            char *
            bar ()
            {
              puts ("Hello");
            }

       手続き foo の後には空行は追加されない。

コメント
       indent  は C と C++ のコメントを整形する。 C のコメントは `/*´ で始まっ
       て `*/´ で終り、  改行文字を含んでもよい。  C++  のコメントは区切り文字
       `//´ で始まり改行で終る。

       indent はコメントの文脈によって別々の扱い方をする。 indent は文・宣言・
       プリプロセッサディレクティブが後に続くコメントと どのコードの前にも置か
       れていないコメントを区別する。 どのコードの前にも置かれていないコメント
       とは、 行が開始されるコメントのことである (カラム 1  から始まっている必
       要はない)。

       さらに indent は手続きや集合体の外側にあるコメントと 内側にあるコメント
       を区別する。 特に手続きの内側で行の最初にあるコメントは、  コードが現在
       インデントされているカラムにインデントされる。 最も左側のカラムから始ま
       るコメントは例外であり、 コメントはそのカラムから出力される。

       indentコメントを変更しない。 `*´ や `-´ で四角形や「箱形」に囲ん
       だコメントは、 他から視覚的に区別したいという一般的な意図があるためであ
       る。  もっと正確に言うと、箱形コメントは次のように定義される。   最初の
       `/*´  の直後に文字 `*´, `=´, `_´, `-´ が続いているか、 コメント開始区切
       り文字 (`/*´) だけの行があり、  以降の行はコメント開始区切り文字の  `*´
       と同じカラムから `*´ で行が開始される。

       箱形コメントの例を示す:

            /**********************
             * 箱の中のコメント!! *
             **********************/

                   /*
                    * 別な種類のコメントには、
                    * 別な形式を使う。
                    */

       indent  は箱形のコメントを ソースファイルの中に見つかった場所に残してお
       く。 よってコメントのインデント付けは変わらず、  その長さもどちらにして
       も変わらない。 別なモードでは、埋め込まれたタブ文字が適切な数の空白に変
       換されるだけである。

       `-bbb´ オプションが指定された場合、  箱形コメントがコードの前に置かれて
       いないときは、 箱形コメントの後に空行を置く。

       箱形でないコメントは整形される。   これは、行が右端に合うように折り返さ
       れ、 左側は空白で埋められるという意味である。 1  つの改行文字は空白と同
       じであるが、  (1 行に 2 つ以上の改行文字がある) 空行は パラグラフの切れ
       目として解釈される。       最初のカラムの後から始まるコメントの整形は、
       `-fca´ オプションで有効になる。 カラム 1 から始まるコメントを整形するに
       は、`-fc1´ を指定する。  このような整形は、デフォルトでは無効にされてい
       る。

       整形する際の右端は、デフォルトでは 78 であるが、 `-lc´ オプションで変更
       できる。 指定された右端まででコメントが表示できない場合、  コメントの終
       りまで右端が自動的に拡張される。 コメントが整形されない場合、右端の位置
       は守られない。

       コメントで行が開始される場合  (つまり、コメントの左側にプログラムの文字
       列がない場合)、 コメントがコードのブロック中になければ、 そのコメントが
       あったカラムにインデントされる。  この場合、(最初のカラムからコメントが
       開始されていなければ)  そのブロックのインデントされたコードにコメントの
       左端を揃える。 揃える位置は `-d´ オプションで変更可能で、  何カラムへ
       移動するかを指定する。   指定されない場合は、インデントされない。  例え
       ば、`-d2´ ではコードから左へ空白 2 個の位置にコメントを置く。  デフォル
       トではコードにコメントの左端を揃える。 ただし、コメントが最初のカラムか
       ら開始されている場合、 デフォルトではインデントされない。  最初のカラム
       から始まるコメントをコードに左揃えしたい場合は、   `-fc1´  を指定するこ
       と。

       コードの右側にあるコメントは、デフォルトではカラム 33  にインデントされ
       る。  これは次の 3 つのオプションのいずれかで変更できる。 `-c´ はコード
       の後のコメントのカラムを指定する。 `-cd´ は宣言の後のコメントのカラムを
       指定する。  `-cp´ はプリプロセッサディレクティブ #else#endif の後の
       コメントのカラムを指定する。

       コメントの左側にあるコードが最初のカラムから開始されていない場合、 コー
       ドの終りの次のタブストップの位置からコメントカラムが開始される。 プリプ
       ロセッサディレクティブが最初のカラムから開始されていない場合、 ディレク
       ティブの終りの  1 カラム後からコメントカラムが開始される。 この拡張はこ
       のような特定のカラムの出力に対してのみ適応される。

       `-cdb´ オプションを指定すると、コメント区切り文字を空行に置く。  よって
       /* Loving hug */ のような 1 行のコメントは、 以下のように変換される。

            /*
               Loving hug
             */

       `-sc´  オプションを指定すると、 複数行コメントの始めに `*´ を置くことが
       できる。 上記の 1 行のコメントは (`-cdb -sc´ により) 以下のように変換さ
       れる。

            /*
             * Loving hug
             */

文
       `-br´ または `-bl´ オプションは、ブレースをどのように整形するかを指定す
       る。

       `-br´ オプションを指定するとブレースは以下のように整形される:

            if (x > 0) {
              x--;
            }

       `-bl´ オプションを指定するとブレースは以下のように整形される:

            if (x > 0)
              {
                x--;
              }

       `-bl´ オプションを使う場合には `-bli´ オプションも使うとよい。 このオプ
       ションはブレースのインデント付けに使う空白の数を指定する。  `-bli2´ (デ
       フォルト値)を指定すると、先に示した結果となる。 `-bli0´  を指定した場合
       の結果は以下である:

            if (x > 0)
            {
              x--;
            }

       `-br´  オプションを使う場合には、多分 `-ce´ も使いたくなるだろう。 この
       オプションは if-then-else 構文の else を直前の `}´ に隣に置く。  例えば
       `-br -ce´ を指定すると、出力は以下のようになる:

            if (x > 0) {
              x--;
            } else {
              fprintf (stderr, "...something wrong?\n");
            }

       同じコードで `-br -nce´ を指定すると以下のようになる:

            if (x > 0) {
              x--;
            }
            else {
              fprintf (stderr, "...something wrong?\n");
            }

       これにより do-while ループの while は直前の `}´ と同じ行に置かれる。 例
       えば `-cdw´ により以下のような出力が得られる。

            do {
              x--;
            } while (x);

       同じコードで `-ncdw´ を指定すると以下のようになる:

            do {
              x--;
            }
            while (x);

       `-cli´ オプションは、case 構文のラベルを switch 文から 右にインデントす
       る際に空白をいくつ入れるかを指定する。

       デフォルトでは以下のようなコードが得られる。

            switch (i)
              {
              case 0:
                break;
              case 1:
                {
                  ++i;
                }
              default:
                break;
              }

       `-cli2´ を使うと以下のようになる。

            switch (i)
              {
                case 0:
                  break;
                case 1:
                  {
                    ++i;
                  }
                default:
                  break;
              }

       case  文の後のブレースのインデントは、 `-cbin´ オプションで制御できる。
       例えば `-cli2 -cbi0´ を使うと次のような結果になる。

            switch (i)
              {
                case 0:
                  break;
                case 1:
                {
                  ++i;
                }
                default:
                  break;
              }

       セミコロンが for または while 文と同じ行にある場合に  `-ss´  を指定する
       と、空白がセミコロンの前に置かれる。   これによりセミコロンが強調され、
       forwhile 文の本体が空の文であることがはっきりする。 `-nss´ を指定す
       ると、この機能は無効になる。

       `-pcs´  オプションを指定すると、呼び出される手続きの名前と `(´ の間に空
       白が置かれる (例えば、puts ("Hi"); となる。 また、`-npcs´  オプションを
       指定している場合には puts("Hi");) となる。)

       `-cs´  オプションを指定すると、  indent  はキャスト演算子の後に空白を置
       く。

       `-bs´ オプションを指定すると、 キーワード sizeof とその引き数の間に必ず
       空白が置かれる。  バージョンによっては、 この機能は `Bill_Shannon´ オプ
       ションとして知られている。

       `-saf´ オプションは for とその後の括弧の間に空白を入れる。 これがデフォ
       ルトである。

       `-sai´  オプションは if とその後の括弧の間に空白を入れる。 これがデフォ
       ルトである。

       `-saw´ オプションは while  とその後の括弧の間に空白を入れる。  これがデ
       フォルトである。

       `-prs´  オプションは全ての括弧とその間にあるものの間に空白を置く。 例え
       ば `-prs´ を使うと以下のようなコードになる。

              while ( ( e_code - s_code ) < ( dec_ind - 1 ) )
                {
                  set_buf_break ( bb_dec_ind );
                  *e_code++ = ´ ´;
                }

宣言
       デフォルトでは、indent は `-di´ オプションで指定した カラムで識別子を揃
       える。 例えば、`-di16´ を指定すると以下のようになる:

            int             foo;
            char           *bar;

       `-di´  オプションに小さい値 (1 や 2 など) を使うと、 置くことが可能な最
       初の場所に識別子を置くことができる。 例を以下に示す:

            int foo;
            char *bar;

       この場合でも、`-di´ オプションに指定した値は 型指定と異なる行に置いた変
       数には影響を与える。 例えば、`-di2´ を指定すると以下のようになる:

            int
              foo;

       `-bc´ オプションを指定すると、宣言中のコンマの後に改行が置かれる。 例を
       以下に示す:

            int a,
              b,
              c;

       同じコードで `-nbc´ オプションを指定した場合は以下のようになる:

            int a, b, c;

       `-bfda´ オプションを指定すると、 関数宣言の引き数のコンマの後で改行を入
       れる。 引き数は関数宣言より 1 段深くインデントされる。 これは引き数のリ
       ストが長い場合に特に役立つ。 `-bfde´ オプションを指定すると、  関数宣言
       の閉括弧の前に改行を入れる。 2 つのオプションとも ´n´ を設定した -nbdfa
       と -nbdfe がデフォルトになる。

       例えば、

            void foo (int arg1, char arg2, int *arg3, long arg4, char arg5);

       は、`-bfda´ オプションを指定すると次のようになり、

            void foo (
                int arg1,
                char arg2,
                int *arg3,
                long arg4,
                char arg5);

       更に `-bfde´ オプションを指定すると次のようになる。

            void foo (
                int arg1,
                char arg2,
                int *arg3,
                long arg4,
                char arg5
                );

       `-psl´ オプションを指定すると、  定義される手続きの型は手続きの名前の前
       の行に置かれる。  このスタイルは、etags プログラムや Emacs の c-mode の
       一部の機能を正しく動作させるために必要である。

       プログラム中で typedef で定義された型の名前を全て、  `-T´  オプションを
       使って  indent  に教えなければならない。  `-T´ は複数個指定することがで
       き、指定された全ての名前を使うことができる。 例えば、プログラムに

            typedef unsigned long CODE_ADDR;
            typedef enum {red, blue, green} COLOR;

       という記述がある場合には、 オプション `-T CODE_ADDR -T COLOR´  を使うこ
       とになるだろう。

       `-brs´  や `-bls´ オプションは struct 宣言の ブレースをどのように整形す
       るかを指定する。 `-brs´ オプションはブレースを次のように整形する。

            struct foo {
              int x;
            };

       `-bls´ オプションはブレースを次のように整形する。

            struct foo
            {
              int x;
            };

インデント付け
       コードを整形する時の問題の 1 つは、  各行をどれだけ左端からインデントさ
       せるかである。  iffor 等の文の先頭部分があると、 インデントの深さは
       `-i´ オプションで指定した値だけ増える。 例えば、レベルごとに 8 文字分の
       インデントさせるには `-i8´ を使う。 文が 2 行に折り返されている場合、 2
       行目は `-ci´ オプションで指定した追加のスペース分だけインデントされる。
       `-ci´  のデフォルト値は 0 である。 しかし、`-lp´ オプションが指定されて
       おり、かつ同じ行で閉じられていない 左括弧がある場合、その続きの行が始ま
       る文字は左括弧の直後の位置に揃えられる。  この処理は `[´ および初期化リ
       ストに現われる `{´ にも適用される。 例えば、`-nlp -ci3´  が有効になって
       いると、 行をまたがるコードは以下のようになる:

              p1 = first_procedure (second_procedure (p2, p3),
                 third_procedure (p4, p5));

       `-lp´ を有効にすると、コードはいくらか見やすくなる:

              p1 = first_procedure (second_procedure (p2, p3),
                                    third_procedure (p4, p5));

       文が 2 つ以上の括弧の組 (...) にわかれている場合、 追加された括弧の組ご
       とに 1 段深くインデントされる。

            if ((((i < 2 &&
                    k > 0) || p == 0) &&
                q == 1) ||
              n = 0)

       オプション `-ipN´ は、括弧ごとの追加オフセットを設定するのに使う。 例え
       ば `-ip0´ は上記のコードを次のように整形する。

            if ((((i < 2 &&
              k > 0) || p == 0) &&
              q == 1) ||
              n = 0)

       indent  はタブが入力と出力のストリームの両方で 一定の間隔で置かれること
       を想定している。 この間隔はデフォルトでは  8  カラム幅であるが、  (バー
       ジョン  1.2 からは) `-ts´ オプションで変更することができる。 タブは複数
       個の空白と同じ意味である。

       古い形式の関数定義における型宣言のインデント付けは、 `-ip´ パラメータで
       制御することができる。 これは、型宣言では空白何個分のインデントを行うか
       を 指定する数値パラメータである。 例えばデフォルトの `-ip5´  では、定義
       は以下のように整形される:

            char *
            create_world (x, y, scale)
                 int x;
                 int y;
                 float scale;
            {
              . . .
            }

       他のバージョンの indent との互換性のために オプション `-nip´ が用意され
       ている。 これは `-ip0´ と同じである。

       ANSI C ではプリプロセッサコマンドラインの文字 `#´ とコマンド名の間に 空
       白を入れることが許可されている。 デフォルトでは indent はこの空白を削除
       するが、 `-lps´ オプションを指定することで indent  にこの空白を変更しな
       いように指示できる。  オプション `-ppi´ は  `-nlps´ と  `-lps´ を上書き
       する。

       このオプションにより、 プリプロセッサ条件文を指定された空白数でインデン
       トできる。 例えばオプション `-ppi 3´ は

            #if X
            #if Y
            #define Z 1
            #else
            #define Z 0
            #endif
            #endif
       を次のように整形する。
            #if X
            #   if Y
            #      define Z 1
            #   else
            #      define Z 0
            #   endif
            #endif

長い行の折り返し
       オプション  `-ln´ または `--line-lengthn´ により、 C 言語コードの行の最
       大長を指定することができる。 ただしコードの後のコメントは含まない。

       指定された行の長さより長い場合、 GNU indent  は行を論理的な位置で折り返
       す。 これはバージョン 2.1 の新機能であるが、 まだそれほど賢くはなく柔軟
       でもない。

       どこで行を折り返すかを決定するアルゴリズムに干渉するためのオプション
       が、 現在のところ 2 つある。

       `-bbo´  オプションを指定すると、GNU  indent は 長い行をブーリアン演算子
       &&|| の前で折り返す。 `-nbbo´ オプションを指定すると、GNU indent は
       長い行をブーリアン演算子の前で折り返さない。 例えば、(`--line-length60´
       と `--ignore-newlines´と一緒に) デフォルトのオプション `-bbo´  を指定す
       ることにより、 コードは以下のようになる。

              if (mask
                  && ((mask[0] == ´\0´)
                      || (mask[1] == ´\0´
                          && ((mask[0] == ´0´) || (mask[0] == ´*´)))))

       オプション `-nbbo´ を使うと、次のようになる。

              if (mask &&
                  ((mask[0] == ´\0´) ||
                   (mask[1] == ´\0´ &&
                    ((mask[0] == ´0´) || (mask[0] == ´*´)))))

       しかしデフォルトの  `-hnl´  では、 入力ファイルにおける改行を重視して、
       そこで改行するように可能な限りの優先度を与える。 例えば入力ファイルが以
       下のような場合、

              if (mask
                  && ((mask[0] == ´\0´)
                  || (mask[1] == ´\0´ && ((mask[0] == ´0´) || (mask[0] == ´*´)))))

       オプション  `-hnl´  または  `--honour-newlines´  を  上述の  `-nbbo´ と
       `--line-length60´  と一緒に使うと、  前の例で示したような出力ではなく、
       入力ファイルのコードで改行されている位置でなるべく折り返される。

              if (mask
                  && ((mask[0] == ´\0´)
                      || (mask[1] == ´\0´ &&
                          ((mask[0] == ´0´) || (mask[0] == ´*´)))))

       このオプションの背景となる考え方は、   既に折り返されている長すぎる行は
       GNU indent で変更しないというものである。 しかし本当に汚いコードは、 少
       なくとも  1 回は `--ignore-newlines´ オプションを付けて indent に通して
       おくべきである。

整形の無効化
       特別なをプログラムに埋め込むことにより、 C 言語コードを部
       分的に整形しないようにすることができる。 プログラムのあるセクションを整
       形しないようにするためには、 無効化制御用コメント /* *INDENT-OFF* */ だ
       けの行を  セクションの直前に置けばよい。 この制御用コメントの後でスキャ
       ンされたプログラムテキストは、 有効化コメントだけの行がスキャンされるま
       で、    入力の通りに変更されず出力される。    有効化制御コメントは   /*
       *INDENT-ON* */ であり、  このコメントと同じ行で後に続くテキストも整形さ
       れずに出力される。 有効化制御コメントの後に続く行から整形が再開される。

       もっと正確に言うと、indent は C 言語コメントの 終了区切り文字 (*/) を検
       証せず、 その行の空白は存在が意識されない。

       これらの制御コメントは、 C++ の書式、 つまり   //  *INDENT-OFF*//
       *INDENT-ON* でも機能する。

       indent  の内部状態は整形しないセクションでも変更されない、 という点に注
       意すべきである。 よって、例えば関数の途中で整形を無効にして  関数の終り
       まで無効にし続けた場合、変な結果になる。 したがって、コードを整形しない
       ことを選択する場合は、 モジュールにしておくのがよい。

       歴史的な注意点: 以前のバージョンの indent では *INDENT** で始まるエラー
       メッセージを生成するものがあった。  これらのバージョンの indent は、 こ
       のようなエラーメッセージで始まる入力テキスト行を 無視するように書かれて
       いた。 私はこの閉鎖的な機能を GNU indent から削除した。

その他のオプション
       使っている  indent のバージョンを知るには、 コマンド indent -version を
       用いること。 これを用いると、通常の処理は全く行われず、  indent  のバー
       ジョン番号が表示される。

       `-v´  オプションを用いると、詳細表示モードを有効にすることができる。 詳
       細表示モードでは、indent は 1 つの行を出力で複数行にする時には報告を 行
       い、実行終了時にサイズに関する情報を出力する。

       `-pmt´ オプションを指定すると、indent は 出力ファイルのアクセス時刻と修
       正時刻を保存する。 このオプションを使うと、全てのソースファイルとヘッダ
       ファイルに  indent を実行しても、make はターゲットを再構築しない。 この
       オプションは POSIX utime(2) 関数がある オペレーティングシステムでのみ利
       用可能である。

バグ
       バグは bug-indent@gnu.org に報告してほしい。

       同じプロファイルで 1 つのファイルに indent を 2 回実行した場合、 2 回目
       はファイルを変更しないべきである。 indent  の現在の設計では、それは
       保証できず、 詳細にはテストされていない。

       indent  が C を理解しない。 このため、行を結合できない場合もある。 指定
       されたプロファイル (`.indent.pro´) で indent を実行した結果のファイルを
       入力として使った場合でも、 indent を通したファイルがになる。

       C++ に対して indent を動作させることを試みたが、 とても簡単なものでない
       限り、 C++ のソースに対しては良い結果が得られない。

       出力ファイルにコメントを書き出している場合、    indent     は指定された
       `--line-length´ オプションを参照しない。 そのため、たびたびコメントがか
       なり右に置かれる。 コメントが末尾にある折り返された行を indent が結合し
       ないようにするため、 コメントが折り返しの最初の行から始まっていることを
       確認すること。

       /* *INDENT-OFF* */ によって indent が無効にされている場合、 indent は行
       数やコメント数を数えない (`-v´ オプションを参照)。

       /*UPPERCASE*/ という形式のコメントは、 コメントとして扱われないが、次の
       行と結合する識別子として扱われる。 この動作によって、コードの最初に埋め
       込まれない限り、 このタイプのコメントを無用なものにしてしまう。

著作権表示
       以下の著作権表示は indent プログラムに適用される。 このマニュアルに関す
       る著作権と複製許可については、 `indent.texinfo´ と `indent.info´ の先頭
       近くと `indent.1´ の末尾近くに記述されている。

       Copyright (c) 2001 David Ingamells.
       Copyright (c) 1999 Carlo Wood.
       Copyright (c) 1995, 1996 Joseph Arceneaux.
       Copyright (c) 1989, 1992, 1993, 1994, 1995, 1996 Free Software Foundation
       Copyright (c) 1985 Sun Microsystems, Inc.
       Copyright (c) 1980 The Regents of the University of California.
       Copyright (c) 1976 Board of Trustees of the University of Illinois.
       All rights reserved.

       Redistribution and use in source and binary forms are permitted
       provided that the above copyright notice and this paragraph are
       duplicated in all such forms and that any documentation,
       advertising materials, and other materials related to such
       distribution and use acknowledge that the software was developed
       by the University of California, Berkeley, the University of Illinois,
       Urbana, and Sun Microsystems, Inc.  The name of either University
       or Sun Microsystems may not be used to endorse or promote products
       derived from this software without specific prior written permission.
       THIS SOFTWARE IS PROVIDED ``AS IS´´ AND WITHOUT ANY EXPRESS OR
       IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
       WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
       PURPOSE.

オプションの相互参照キー
       長い名前についてアルファベット順に並べたオプションのリストを示す。 これ
       を使えば対応する短いオプション名が簡単に分かる。

            --blank-lines-after-commas                      -bc
            --blank-lines-after-declarations                -bad
            --blank-lines-after-procedures                  -bap
            --blank-lines-before-block-comments             -bbb
            --braces-after-if-line                          -bl
            --brace-indent                                  -bli
            --braces-after-struct-decl-line                 -bls
            --braces-on-if-line                             -br
            --braces-on-struct-decl-line                    -brs
            --break-after-boolean-operator                  -nbbo
            --break-before-boolean-operator                 -bbo
            --break-function-decl-args                      -bfda
            --break-function-decl-args-end                  -bfde
            --case-indentation                              -clin
            --case-brace-indentation                        -cbin
            --comment-delimiters-on-blank-lines             -cdb
            --comment-indentation                           -cn
            --continuation-indentation                      -cin
            --continue-at-parentheses                       -lp
            --cuddle-do-while                               -cdw
            --cuddle-else                                   -ce
            --declaration-comment-column                    -cdn
            --declaration-indentation                       -din
            --dont-break-function-decl-args                 -nbfda
            --dont-break-function-decl-args-end             -nbfde
            --dont-break-procedure-type                     -npsl
            --dont-cuddle-do-while                          -ncdw
            --dont-cuddle-else                              -nce
            --dont-format-comments                          -nfca
            --dont-format-first-column-comments             -nfc1
            --dont-line-up-parentheses                      -nlp
            --dont-space-special-semicolon                  -nss
            --dont-star-comments                            -nsc
            --else-endif-column                             -cpn
            --format-all-comments                           -fca
            --format-first-column-comments                  -fc1
            --gnu-style                                     -gnu
            --honour-newlines                               -hnl
            --ignore-newlines                               -nhnl
            --ignore-profile                                -npro
            --indent-level                                  -in
            --k-and-r-style                                 -kr
            --leave-optional-blank-lines                    -nsob
            --leave-preprocessor-space                      -lps
            --line-comments-indentation                     -dn
            --line-length                                   -ln
            --no-blank-lines-after-commas                   -nbc
            --no-blank-lines-after-declarations             -nbad
            --no-blank-lines-after-procedures               -nbap
            --no-blank-lines-before-block-comments          -nbbb
            --no-comment-delimiters-on-blank-lines          -ncdb
            --no-space-after-casts                          -ncs
            --no-parameter-indentation                      -nip
            --no-space-after-for                            -nsaf
            --no-space-after-function-call-names            -npcs
            --no-space-after-if                             -nsai
            --no-space-after-parentheses                    -nprs
            --no-space-after-while                          -nsaw
            --no-tabs                                       -nut
            --no-verbosity                                  -nv
            --original                                      -orig
            --parameter-indentation                         -ipn
            --paren-indentation                             -pin
            --preserve-mtime                                -pmt
            --procnames-start-lines                         -psl
            --space-after-cast                              -cs
            --space-after-for                               -saf
            --space-after-if                                -sai
            --space-after-parentheses                       -prs
            --space-after-procedure-calls                   -pcs
            --space-after-while                             -saw
            --space-special-semicolon                       -ss
            --standard-output                               -st
            --start-left-side-of-comments                   -sc
            --struct-brace-indentation                      -sbin
            --swallow-optional-blank-lines                  -sob
            --tab-size                                      -tsn
            --use-tabs                                      -ut
            --verbose                                       -v

返り値
       不明。

ファイル
       $HOME/.indent.pro   indent のデフォルトのオプションを設定する

著者
       Carlo Wood
       Joseph Arceneaux
       Jim Kingdon
       David Ingamells

履歴
       UCB の "indent" プログラムが起源である。

著作権
       Copyright  (C)  1989,  1992,  1993,  1994,  1995,  1996  Free  Software
       Foundation, Inc.  Copyright (C) 1995, 1996 Joseph Arceneaux.  Copyright
       (C) 1999 Carlo Wood.  Copyright (C) 2001 David Ingamells.

       Permission is granted to make and distribute verbatim  copies  of  this
       manual  provided  the  copyright  notice and this permission notice are
       preserved on all copies.

                                                                    INDENT(1L)