OSDN Git Service

Convert release and draft pages to UTF-8.
[linuxjm/jm.git] / manual / GNU_indent / release / man1 / indent.1
1 .\" 
2 .\" Japanese Version
3 .\" Updated & Modified Mon May  3 07:00:19 JST 2004
4 .\"         by Yuichi SATO <ysato444@yahoo.co.jp>
5 .\" 
6 .TH INDENT 1L 
7 .SH 名前
8 indent \- 空白の挿入や削除を行い、C 言語プログラムの見栄えを変える。
9 .SH 書式
10 .B "indent "
11 [options] [input\-files]
12 .sp
13 .B "indent "
14 [options] [single\-input\-file] [\-o output\-file]
15 .sp
16 .B "indent "
17 \-\-version
18 .SH 説明
19 この man ページはファイル \fIindent.texinfo\fR から生成した。
20 これは indent バージョン 2.2.9 用の「The \fBindent\fR Manual」の
21 2.2.9 版 (2002 年 11 月 10 日版) である。
22
23 \fBindent\fR プログラムを使うとコードを読みやすくすることができる。
24 また、C 言語のコード記述を、
25 あるスタイルから別のスタイルに変換することもできる。
26
27 \fBindent\fR はたくさんある C 言語の文法を理解するが、
28 文法が不完全な部分や誤っている部分もできるだけ処理しようとする。
29
30 バージョン 1.2 以降では、GNU スタイルのインデントがデフォルトである。
31 .SH オプション
32
33 .TP 4
34 .B -bad\fR, \fB--blank-lines-after-declarations\fR
35 宣言の後に必ず空行を置く。
36 .br
37 「\fB空行\fR」セクションを参照すること。
38 .TP
39 .B -bap\fR, \fB--blank-lines-after-procedures\fR
40 手続き本体の後に必ず空行を置く。
41 .br
42 「\fB空行\fR」セクションを参照すること。
43 .TP
44 .B -bbb\fR, \fB--blank-lines-before-block-comments\fR
45 ブロックコメントの前に必ず空行を置く。
46 .br
47 「\fB空行\fR」セクションを参照すること。
48 .TP
49 .B -bbo\fR, \fB--break-before-boolean-operator\fR
50 長い行をブーリアン演算子の前で折り返す。
51 .br
52 「\fB長い行の折り返し\fR」セクションを参照すること。
53 .TP
54 .B -bc\fR, \fB--blank-lines-after-commas\fR
55 宣言中のコンマの後に必ず改行を置く。
56 .br
57 「\fB宣言\fR」セクションを参照すること。
58 .TP
59 .B -bl\fR, \fB--braces-after-if-line\fR
60 ブレースは \fBif\fR 等の次の行に置く。
61 .br
62 「\fB文\fR」セクションを参照すること。
63 .TP
64 .B -bli\fIn\fB\fR, \fB--brace-indent\fIn\fB\fR
65 ブレースを \fIn\fR 個のスペースでインデント付けする。
66 .br
67 「\fB文\fR」セクションを参照すること。
68 .TP
69 .B -bls\fR, \fB--braces-after-struct-decl-line\fR
70 ブレースは \fBstruct\fR 宣言行の次の行に置く。
71 .br
72 「\fB宣言\fR」セクションを参照すること。
73 .TP
74 .B -br\fR, \fB--braces-on-if-line\fR
75 ブレースは \fBif\fR 等がある行に置く。
76 .br
77 「\fB文\fR」セクションを参照すること。
78 .TP
79 .B -brs\fR, \fB--braces-on-struct-decl-line\fR
80 ブレースは \fBstruct\fR 宣言行がある行に置く。
81 .br
82 「\fB宣言\fR」セクションを参照すること。
83 .TP
84 .B -bs\fR, \fB--Bill-Shannon\fR, \fB--blank-before-sizeof\fR
85 \fBsizeof\fR とその引き数の間に空白を置く。
86 .br
87 「\fB文\fR」セクションを参照すること。
88 .TP
89 .B -c\fIn\fB\fR, \fB--comment-indentation\fIn\fB\fR
90 コメントをコードの右のカラム \fIn\fR に置く。
91 .br
92 「\fBコメント\fR」セクションを参照すること。
93 .TP
94 .B -cbi\fIn\fB\fR, \fB--case-brace-indentation\fIn\fB\fR
95 case ラベルの後に、ブレースを \fIn\fR 個の空白でインデント付けする。
96 .br
97 「\fB文\fR」セクションを参照すること。
98 .TP
99 .B -cd\fIn\fB\fR, \fB--declaration-comment-column\fIn\fB\fR
100 コメントを宣言の右のカラム \fIn\fR に置く。
101 .br
102 「\fBコメント\fR」セクションを参照すること。
103 .TP
104 .B -cdb\fR, \fB--comment-delimiters-on-blank-lines\fR
105 空行にコメント区切り文字を置く。
106 .br
107 「\fBコメント\fR」セクションを参照すること。
108 .TP
109 .B -cdw\fR, \fB--cuddle-do-while\fR
110 \fBdo {} while;\fR の while とその前の \`}\' を並べる。
111 .br
112 「\fBコメント\fR」セクションを参照すること。
113 .TP
114 .B -ce\fR, \fB--cuddle-else\fR
115 else とその前の \`}\' を並べる。
116 .br
117 「\fBコメント\fR」セクションを参照すること。
118 .TP
119 .B -ci\fIn\fB\fR, \fB--continuation-indentation\fIn\fB\fR
120 前の行から継続している場合には、\fIn\fR 個の空白でインデントする。
121 .br
122 「\fB文\fR」セクションを参照すること。
123 .TP
124 .B -cli\fIn\fB\fR, \fB--case-indentation\fIn\fB\fR
125 case ラベルを N 個の空白でインデントする。
126 .br
127 「\fB文\fR」セクションを参照すること。
128 .TP
129 .B -cp\fIn\fB\fR, \fB--else-endif-column\fIn\fB\fR
130 \fB#else\fR 文と \fB#endif\fR 文の右のカラム \fIn\fR にコメントを置く。
131 .br
132 「\fBコメント\fR」セクションを参照すること。
133 .TP
134 .B -cs\fR, \fB--space-after-cast\fR
135 キャスト演算子の後に空白を置く。
136 .br
137 「\fB文\fR」セクションを参照すること。
138 .TP
139 .B -d\fIn\fB\fR, \fB--line-comments-indentation\fIn\fB\fR
140 コードの右でないコメントは空白 \fIn\fR 個でインデントするように設定する。
141 .br
142 「\fBコメント\fR」セクションを参照すること。
143 .TP
144 .B -bfda\fR, \fB--break-function-decl-args\fR
145 (関数) 宣言の全ての引き数の後で折り返す。
146 .br
147 「\fB宣言\fR」セクションを参照すること。
148 .TP
149 .B -bfde\fR, \fB--break-function-decl-args\fR
150 (関数) 宣言の全ての引き数の前で折り返す。
151 .br
152 「\fB宣言\fR」セクションを参照すること。
153 .TP
154 .B -di\fIn\fB\fR, \fB--declaration-indentation\fIn\fB\fR
155 変数をカラム \fIn\fR に置く。
156 .br
157 「\fB宣言\fR」セクションを参照すること。
158 .TP
159 .B -fc1\fR, \fB--format-first-column-comments\fR
160 最初のカラムから始まるコメントを整形する。
161 .br
162 「\fBコメント\fR」セクションを参照すること。
163 .TP
164 .B -fca\fR, \fB--format-all-comments\fR
165 コメントの整形を全てを無効にしない。
166 .br
167 「\fBコメント\fR」セクションを参照すること。
168 .TP
169 .B -gnu\fR, \fB--gnu-style\fR
170 GNU コーディングスタイルを使用する。これはデフォルトの動作である。
171 .br
172 「\fB一般的なスタイル\fR」セクションを参照すること。
173 .TP
174 .B -hnl\fR, \fB--honour-newlines\fR
175 入力ファイルで改行が入っている位置で
176 長い行を折り返すようにする。
177 .br
178 「\fB長い行の折り返し\fR」セクションを参照すること。
179 .TP
180 .B -i\fIn\fB\fR, \fB--indent-level\fIn\fB\fR
181 インデントのレベルを空白 \fIn\fR 個に設定する。
182 .br
183 「\fBインデント付け\fR」セクションを参照すること。
184 .TP
185 .B -ip\fIn\fB\fR, \fB--parameter-indentation\fIn\fB\fR
186 古い形式の関数定義のパラメータ型を空白 \fIn\fR 個でインデントする。
187 .br
188 「\fBインデント付け\fR」セクションを参照すること。
189 .TP
190 .B -kr\fR, \fB--k-and-r-style\fR
191 Kernighan & Ritchie コーディングスタイルを使用する。
192 .br
193 「\fB一般的なスタイル\fR」セクションを参照すること。
194 .TP
195 .B -l\fIn\fB\fR, \fB--line-length\fIn\fB\fR
196 コメントでない行の最大の長さを \fIn\fR に設定する。
197 .br
198 「\fB長い行の折り返し\fR」セクションを参照すること。
199 .TP
200 .B -lc\fIn\fB\fR, \fB--comment-line-length\fIn\fB\fR
201 コメントを整形する最大の長さを \fIn\fR に設定する。
202 .br
203 「\fBコメント\fR」セクションを参照すること。
204 .TP
205 .B -lp\fR, \fB--continue-at-parentheses\fR
206 前の行に続く行を括弧の位置に揃える。
207 .br
208 「\fBインデント付け\fR」セクションを参照すること。
209 .TP
210 .B -lps\fR, \fB--leave-preprocessor-space\fR
211 \`#\' とプリプロセッサディレクティブの間の空白を残す。
212 .br
213 「\fBインデント付け\fR」セクションを参照すること。
214 .TP
215 .B -nbad\fR, \fB--no-blank-lines-after-declarations\fR
216 宣言の後に空行を置かない。
217 .br
218 「\fB空行\fR」セクションを参照すること。
219 .TP
220 .B -nbap\fR, \fB--no-blank-lines-after-procedures\fR
221 手続き本体の後に空行を置かない。
222 .br
223 「\fB空行\fR」セクションを参照すること。
224 .TP
225 .B -nbbo\fR, \fB--break-after-boolean-operator\fR
226 ブーリアン演算子の前で長い行を折り返さない。
227 .br
228 「\fB長い行の折り返し\fR」セクションを参照すること。
229 .TP
230 .B -nbc\fR, \fB--no-blank-lines-after-commas\fR
231 宣言中のコンマの後に改行を置かない。
232 .br
233 「\fB宣言\fR」セクションを参照すること。
234 .TP
235 .B -nbfda\fR, \fB--dont-break-function-decl-args\fR
236 関数宣言の各引き数を別々の行に置かない。
237 .br
238 「\fB宣言\fR」セクションを参照すること。
239 .TP
240 .B -ncdb\fR, \fB--no-comment-delimiters-on-blank-lines\fR
241 空行にコメント区切り文字を置かない。
242 .br
243 「\fBコメント\fR」セクションを参照すること。
244 .TP
245 .B -ncdw\fR, \fB--dont-cuddle-do-while\fR
246 \fBdo {} while;\fR の \fB}\fR と \fBwhile\fR を同じ行に並べない。
247 .br
248 「\fB文\fR」セクションを参照すること。
249 .TP
250 .B -nce\fR, \fB--dont-cuddle-else\fR
251 \fB}\fR と \fBelse\fR を同じ行に並べない。
252 .br
253 「\fB文\fR」セクションを参照すること。
254 .TP
255 .B -ncs\fR, \fB--no-space-after-casts\fR
256 キャスト演算子の後に空白を置かない。
257 .br
258 「\fB文\fR」セクションを参照すること。
259 .TP
260 .B -nfc1\fR, \fB--dont-format-first-column-comments\fR
261 最初のカラムから始まるコメントを通常のように整形しない。
262 .br
263 「\fBコメント\fR」セクションを参照すること。
264 .TP
265 .B -nfca\fR, \fB--dont-format-comments\fR
266 どのようなコメントも整形しない。
267 .br
268 「\fBコメント\fR」セクションを参照すること。
269 .TP
270 .B -nhnl\fR, \fB--ignore-newlines\fR
271 入力ファイルで改行が入っている位置で
272 長い行を折り返さないようにする。
273 .br
274 「\fB長い行の折り返し\fR」セクションを参照すること。
275 .TP
276 .B -nip\fR, \fB--no-parameter-indentation\fR
277 パラメータのインデント幅を 0 にする。
278 .br
279 「\fBインデント付け\fR」セクションを参照すること。
280 .TP
281 .B -nlp\fR, \fB--dont-line-up-parentheses\fR
282 括弧の位置を揃えない。
283 .br
284 「\fB文\fR」セクションを参照すること。
285 .TP
286 .B -npcs\fR, \fB--no-space-after-function-call-names\fR
287 関数呼び出し内部の関数の後に空白を置かない。
288 .br
289 「\fB文\fR」セクションを参照すること。
290 .TP
291 .B -nprs\fR, \fB--no-space-after-parentheses\fR
292 \'(\' の後と \')\' の前に空白を置かない。
293 .br
294 「\fB文\fR」セクションを参照すること。
295 .TP
296 .B -npsl\fR, \fB--dont-break-procedure-type\fR
297 手続きの型を名前と同じ行に置く。
298 .br
299 「\fB宣言\fR」セクションを参照すること。
300 .TP
301 .B -nsaf\fR, \fB--no-space-after-for\fR
302 \fBfor\fR の後に空白を置かない。
303 .br
304 「\fB文\fR」セクションを参照すること。
305 .TP
306 .B -nsai\fR, \fB--no-space-after-if\fR
307 \fBif\fR の後に空白を置かない。
308 .br
309 「\fB文\fR」セクションを参照すること。
310 .TP
311 .B -nsaw\fR, \fB--no-space-after-while\fR
312 \fBwhile\fR の後に空白を置かない。
313 .br
314 「\fB文\fR」セクションを参照すること。
315 .TP
316 .B -nsc\fR, \fB--dont-star-comments\fR
317 \`*\' 文字をコメントの左に置かない。
318 .br
319 「\fBコメント\fR」セクションを参照すること。
320 .TP
321 .B -nsob\fR, \fB--leave-optional-blank-lines\fR
322 余計な空行を削除しない。
323 .br
324 「\fB空行\fR」セクションを参照すること。
325 .TP
326 .B -nss\fR, \fB--dont-space-special-semicolon\fR
327 特定の文の後のセミコロンの前に空白を置かない。
328 \`-ss\' を無効にする。
329 .br
330 「\fB文\fR」セクションを参照すること。
331 .TP
332 .B -nut\fR, \fB--no-tabs\fR
333 タブではなく空白を使う。
334 .br
335 「\fBインデント付け\fR」セクションを参照すること。
336 .TP
337 .B -nv\fR, \fB--no-verbosity\fR
338 詳細表示モードを無効にする。
339 .br
340 「\fBその他のオプション\fR」セクションを参照すること。
341 .TP
342 .B -orig\fR, \fB--original\fR
343 オリジナルの Berkeley コーディングスタイルを使用する。
344 .br
345 「\fB一般的なスタイル\fR」セクションを参照すること。
346 .TP
347 .B -npro\fR, \fB--ignore-profile\fR
348 \`.indent.pro\' ファイルを読み込まない。
349 .br
350 「\fBindent\ の起動\fR」セクションを参照すること。
351 .TP
352 .B -pcs\fR, \fB--space-after-procedure-calls\fR
353 呼び出される手続きの名前と `(' の間に空白を挿入する。
354 .br
355 「\fB文\fR」セクションを参照すること。
356 .TP
357 .B -pi\fIn\fB\fR, \fB--paren-indentation\fIn\fB\fR
358 文が不完全な場合に使われる
359 開括弧 \'(\' ごとの追加のインデントを指定する。
360 .br
361 「\fB文\fR」セクションを参照すること。
362 .TP
363 .B -pmt\fR, \fB--preserve-mtime\fR
364 出力ファイルのアクセス時刻と修正時刻を保存する。
365 .br
366 「\fBその他のオプション\fR」セクションを参照すること。
367 .TP
368 .B -prs\fR, \fB--space-after-parentheses\fR
369 \'(\' の後と \')\' の前に空白を置く。
370 .br
371 「\fB文\fR」セクションを参照すること。
372 .TP
373 .B -psl\fR, \fB--procnames-start-lines\fR
374 手続きの型を名前と同じ行に置く。
375 .br
376 「\fB宣言\fR」セクションを参照すること。
377 .TP
378 .B -saf\fR, \fB--space-after-for\fR
379 \fBfor\fR の後にスペースを置く。
380 .br
381 「\fB文\fR」セクションを参照すること。
382 .TP
383 .B -sai\fR, \fB--space-after-if\fR
384 \fBif\fR の後にスペースを置く。
385 .br
386 「\fB文\fR」セクションを参照すること。
387 .TP
388 .B -saw\fR, \fB--space-after-while\fR
389 \fBwhile\fR の後にスペースを置く。
390 .br
391 「\fB文\fR」セクションを参照すること。
392 .TP
393 .B -sbi\fIn\fB\fR, \fB--struct-brace-indentation\fIn\fB\fR
394 stract, union, enum のブレースを \fIn\fB 個の空白でインデントする。
395 .br
396 「\fB文\fR」セクションを参照すること。
397 .TP
398 .B -sc\fR, \fB--start-left-side-of-comments\fR
399 \`*\' 文字をコメントの左に置く。
400 .br
401 「\fBコメント\fR」セクションを参照すること。
402 .TP
403 .B -sob\fR, \fB--swallow-optional-blank-lines\fR
404 余計な空行を取り除く。
405 .br
406 「\fB空行\fR」セクションを参照すること。
407 .TP
408 .B -ss\fR, \fB--space-special-semicolon\fR
409 1 行で記述した \fBfor\fR 文と \fBwhile\fR 文において、
410 セミコロンの前に空白を置く。
411 .br
412 「\fB文\fR」セクションを参照すること。
413 .TP
414 .B -st\fR, \fB--standard-output\fR
415 標準出力に書き出す。
416 .br
417 「\fBindent\ の起動\fR」セクションを参照すること。
418 .TP
419 .B -T\fR
420 型名の名前を \fBindent\fR に指定する。
421 .br
422 「\fB宣言\fR」セクションを参照すること。
423 .TP
424 .B -ts\fIn\fB\fR, \fB--tab-size\fIn\fB\fR
425 タブの幅を空白 \fIn\fR 個に設定する。
426 .br
427 「\fBインデント付け\fR」セクションを参照すること。
428 .TP
429 .B -ut\fR, \fB--use-tabs\fR
430 タブを使う。これがデフォルトである。
431 .br
432 「\fBインデント付け\fR」セクションを参照すること。
433 .TP
434 .B -v\fR, \fB--verbose\fR
435 詳細表示モードを有効にする。
436 .br
437 「\fBその他のオプション\fR」セクションを参照すること。
438 .TP
439 .B -version\fR
440 \fBindent\fR のバージョン番号を表示する。
441 .br
442 「\fBその他のオプション\fR」セクションを参照すること。
443
444 .SH "indent の起動"
445
446 バージョン 1.3 からは、\fBindent\fR コマンドの書式は
447 以下のようになっている:
448
449 .in +5
450 .nf
451 .na
452
453 indent [\fIoptions\fR] [\fIinput-files\fR]
454
455 indent [\fIoptions\fR] [\fIsingle-input-file\fR] [-o \fIoutput-file\fR]
456
457 .in -5
458 .ad
459 .fi
460
461 この書式は古いバージョンや他バージョンの \fBindent\fR と異なる。
462
463 最初の書式では 1 つ以上の入力ファイルを指定する。
464 \fBindent\fR は、各ファイルのバックアップコピーを作成してから、
465 オリジナルのファイルをインデント付けしたものに置き換える。
466 バックアップの作り方については、
467 「\fBバックアップファイル\fR」セクションを参照すること。
468
469 2 番目の書式では入力ファイルを 1 つだけ指定する。
470 この場合、または標準入力を使う場合には、
471 \`-o\' オプションの後に出力ファイルを指定することができる。
472
473 \fBindent\fR に標準出力へ出力させるには \`-st\' オプションを使う。
474 これが許されるのは、入力ファイルが 1 つだけの場合か、
475 標準入力を使う場合だけである。
476
477 入力ファイルを指定しなければ入力は標準入力から読み込まれる。
478 また、\`-\' というファイル名が指定された場合にも標準入力が読み込まれる。
479
480 使用例としては、以下のコマンドは
481 いずれもプログラム \`slithy_toves.c\' を読み込み、
482 インデント付けしたテキストを \`slithy_toves.out\' に書き込む:
483
484 .in +5
485 .nf
486 .na
487
488 indent slithy_toves.c -o slithy_toves.out
489
490 indent -st slithy_toves.c > slithy_toves.out
491
492 cat slithy_toves.c | indent -o slithy_toves.out
493
494 .in -5
495 .ad
496 .fi
497
498 \fBindent\fR の他のオプションのほとんどは、
499 プログラムをどのように整形するかを制御するためのものである。
500 バージョン 1.2 からは、\fBindent\fR は
501 各オプション名として長い名前も認識する。
502 長いオプションの前には \`--\' か \`+\' が置かれる。
503 [POSIX 標準と一貫性を持たせるため、
504 現在は \`+\' を \`--\' に置き換えようとしているところである。]
505 .br
506 本ドキュメントの大部分では、
507 簡潔に表現するために伝統的な短い名前を使っている。
508 長いオプション名と短いオプション名のリストは、
509 「\fBオプションの概要\fR」を参照すること。
510
511 別の使用例を挙げる:
512
513 .in +5
514 .nf
515 .na
516 indent -br test/metabolism.c -l85
517 .in -5
518 .ad
519 .fi
520
521 これにより、プログラム \`test/metabolism.c\' が
522 \`-br\' オプションと \`-l85\' オプションを用いてインデント付けされ、
523 その出力が \`test/metabolism.c\' に重ね書きされ、
524 元の \`test/metabolism.c\' の内容は
525 \`test\' ディレクトリにバックアップファイルとして書き込まれる。
526
527 この例と同じ指定を長いオプション名を用いて行うと以下のようになる:
528
529 .in +5
530 .nf
531 .na
532
533 indent --braces-on-if-line --line-length185 test/metabolism.c
534
535 indent +braces-on-if-line +line-length185 test/metabolism.c
536
537 .in -5
538 .ad
539 .fi
540
541 \fBindent\fR を頻繁に同じオプションで使うならば、
542 これらを \`.indent.pro\' というファイルに書いておくとよい。
543 \fBindent\fR は 3 つの場所でプロファイルファイルを探す。
544 最初に環境変数 \fBINDENT_PROFILE\fR があるかをチェックする。
545 この環境変数がある場合、その値を使用するファイルの名前として解釈する。
546 この環境変数がない場合、\fBindent\fR はカレントディレクトリの
547 \`.indent.pro\' を探し、もし存在すればこれを使う。
548 \fBindent\fR は最後にホームディレクトリの \`.indent.pro\' を探し、
549 もし存在すればこれを使う。
550 この動作は従来のバージョンや別バージョンの \fBindent\fR と異なる。
551 これらは、両方のディレクトリに \`.indent.pro\' ファイルがあれば、
552 両方とも使用する。
553
554 \`.indent.pro\' の書式は、コマンドラインに指定するのと同じく、
555 空白 (タブ、スペース、改行) で区切られた単なるオプションのリストである。
556 \`.indent.pro\' のオプションは、
557 C または C++ のコメントで囲むことができる。
558 コメントで囲んだオプションは無視される。
559
560 コマンドラインオプションが処理されるのは、
561 \`.indent.pro\' を処理した\fI後\fRである。
562 後から指定したオプションは、前に指定した引き数を上書きする。
563 これには例外が 1 つある: 明示的に指定したオプションは
564 暗黙のオプションを必ず上書きする(「\fB一般的なスタイル\fR」を参照)。
565 \`-npro\' オプションを指定することにより、
566 \fBindent\fR が \`.indent.pro\' ファイルを読み込まないようにすることができる。
567
568 .SH バックアップファイル
569
570 バージョン 1.3 からは、GNU \fBindent\fR は GNU 形式、
571 すなわち GNU Emacs と同様の方法でバックアップファイルを作成する。
572 つまり、\fI単純な\fRバックアップファイルと
573 \fI番号付きの\fRバックアップファイルをどちらも作成できる。
574
575 単純なバックアップファイルの名前は、
576 元のファイル名にサフィックスを追加して生成される。
577 このサフィックスのデフォルト値は、
578 1 文字からなる文字列 \`~\' (チルダ)である。
579 したがって、\`python.c\' のバックアップファイルは \`python.c~\' となる。
580
581 環境変数 \fBSIMPLE_BACKUP_SUFFIX\fR に好きな文字列を設定することにより、
582 デフォルト値以外の任意の文字列をサフィックスとして使用できる。
583
584 ファイル \`momeraths.c\' の番号付きバックアップは、
585 \`momeraths.c.~23~\' のようになる。
586 ここで、23 はこのファイルのバックアップのバージョンである。
587 ファイル \`src/momeraths.c\' のバックアップを作成するとき、
588 バックアップファイルの名前は \`src/momeraths.c.~\fIV\fR~\' のようになる。
589 ここで、\fIV\fR はディレクトリ \`src\' に現在ある
590 最も大きいバージョンより 1 大きい数字である。
591 環境変数 \fBVERSION_WIDTH\fR は、
592 必要に応じて左側に 0 を追加することにより、数字の桁数を制御する。
593 例えばこの変数を "2" に設定すると、
594 バックアップファイルの名前は \`momeraths.c.~04~\' のようになる。
595
596 どちらの方法でバックアップファイルを作るかは、
597 環境変数 \fBVERSION_CONTROL\fR で制御する。
598 この文字列が \`simple\' ならば、単純なバックアップだけが作成される。
599 この値が \`numbered\' ならば、番号付きバックアップが作成される。
600 この値が \`numbered-existing\' ならば、
601 インデント付けするファイルの番号付きのバックアップが\fI既にある\fR場合に、
602 番号付きバックアップが作成される。
603 それ以外の場合には、単純なバックアップが作成される。
604 \fBVERSION_CONTROL\fR が設定されていなければ、
605 \fBindent\fR は \`numbered-existing\' が指定されているものとして動作する。
606
607 別バージョンの \fBindent\fR は、
608 サフィックス \`.BAK\' を使ってバックアップファイルの名前を生成する。
609 この動作は、\fBSIMPLE_BACKUP_SUFFIX\fR に \`.BAK\' を
610 設定することによりエミュレートすることができる。
611
612 別バージョンの \fBindent\fR は、現在の GNU \fBindent\fR が行うように
613 ソースファイルがあるディレクトリにバックアップを作成するのではなく、
614 カレントディレクトリにバックアップを作成する点にも注意すること。
615
616 .SH 一般的なスタイル
617
618 C 言語には一般的なスタイルがいくつかある。
619 例えば、GNU スタイル、Kernighan & Ritchie スタイル、
620 オリジナルの Berkeley スタイル等である。
621 スタイルは\fIバックグラウンド\fRオプション 1 つを使って選択することができる。
622 このオプションは、他のオプション全ての値を指定する。
623 ただし、明示的に指定したオプションは、
624 暗黙的に指定されたオプションよりも必ず優先される。
625
626 バージョン 1.2 からは、GNU \fBindent\fR のデフォルトのスタイルは
627 GNU スタイルである。
628 したがって、このフォーマットで出力するために
629 \`-gnu\' オプションを指定する必要はなくなった。
630 ただし、このオプションを指定してもエラーにはならない。
631 GNU スタイルに対応するオプション設定は以下である:
632
633 .in +5
634 .nf
635 .na
636 -nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2
637 -ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -nprs -psl -saf -sai
638 -saw -nsc -nsob
639 .in -5
640 .ad
641 .fi
642
643 GNU コーディングスタイルは GNU プロジェクトで推奨されている。
644 これは GNU Emacs の C モードが適用しようとするスタイルであり、
645 GNU Emacs の C で記述された部分で使われているスタイルである。
646 (GNU プロジェクトのためにプログラムを書くことに興味がある方は、
647 「GNU コーディング規約 (The GNU Coding Standards)」を入手されたい。
648 この文書では、メモリの使い方や整数のサイズ等、
649 セマンティックや移植性についても説明されている。)
650
651 Kernighan & Ritchie スタイルは有名な書籍
652 「プログラミング言語 C (The C Programming Language)」で使われている。
653 これは \`-kr\' オプションで有効となる。
654 Kernighan & Ritchie スタイルは、以下のオプションの組合せと同等である:
655
656 .in +5
657 .nf
658 .na
659 -nbad -bap -bbo -nbc -br -brs -c33 -cd33 -ncdb -ce -ci4 -cli0
660 -cp33 -cs -d0 -di1 -nfc1 -nfca -hnl -i4 -ip0 -l75 -lp -npcs
661 -nprs -npsl -saf -sai -saw -nsc -nsob -nss
662 .in -5
663 .ad
664 .fi
665
666 Kernighan & Ritchie スタイルでは、コードがある行の右の部分にコメントが
667 入れられることはない (コードの右に空白を 1 つだけ入れることもない)。
668 したがって、このスタイルのカラム数 33 というのは
669 \fBindent\fR が勝手に決めたものである:
670
671 オリジナルの Berkeley 版 \fBindent\fR のスタイルは、
672 \`-orig\' (または長いオプション名 \`--original\')を指定すれば得られる。
673 このスタイルは、以下の設定と同じ意味である:
674
675 .in +5
676 .nf
677 .na
678 -nbad -nbap -bbo -bc -br -brs -c33 -cd33 -cdb -ce -ci4 -cli0
679 -cp33 -di16 -fc1 -fca -hnl -i4 -ip4 -l75 -lp -npcs -nprs -psl
680 -saf -sai -saw -sc -nsob -nss -ts8
681 .in -5
682 .ad
683 .fi
684
685 .SH 空行
686
687 各種プログラミングスタイルごとに、空白は異なる場所に置かれる。
688 \fBindent\fRには、特定の場所に空白行を挿入・削除するための
689 オプションがたくさんある。
690
691 \`-bad\' オプションを指定すると、
692 \fBindent\fR は宣言ブロック全ての後に必ず空行を置く。
693 \`-nbad\' オプションを指定すると、このような空白行は置かれない。
694
695 \`-bap\' オプションを指定すると、手続き本体全ての後に必ず空行が置かれる。
696 \`-nbap\' オプションを指定すると、このような空行は置かれない。
697
698 \`-bbb\' オプションを指定すると、
699 箱形コメント全ての前に必ず空行が置かれる
700 (箱形コメントについては「\fBコメント\fR」セクションを参照すること)。
701 \`-nbbb\' オプションを指定すると、このような空行は置かれない。
702
703 \`-sob\' を指定すると、\fBindent\fR は省略できる空行を飲み込んでしまう
704 (つまり、入力行に含まれる省略できる空行が出力から全て削除される)。
705 \`-nsob\' を指定すると、
706 入力行に含まれる空行は出力ファイルにも全てコピーされる。
707
708
709 .SH "--blank-lines-after-declarations"
710
711 \`-bad\' オプションを指定すると、宣言ブロックの後に必ず空行が置かれる。
712 \`-nbad\' オプションを指定すると、このような空行は追加されない。
713
714 例えば、以下の入力を与えると
715 .in +5
716 .nf
717 .na
718 char *foo;
719 char *bar;
720 /* このコメントは宣言のブロックを分けている */
721 int baz;
722 .in -5
723 .ad
724 .fi
725
726 \fBindent -bad\fR の出力は以下のようになる。
727
728 .in +5
729 .nf
730 .na
731 char *foo;
732 char *bar;
733
734 /* このコメントは宣言のブロックを分けている */
735 int baz;
736 .in -5
737 .ad
738 .fi
739
740 また、\fBindent -nbad\fR の出力は以下のようになる。
741
742 .in +5
743 .nf
744 .na
745 char *foo;
746 char *bar;
747 /* このコメントは宣言のブロックを分けている */
748 int baz;
749 .in -5
750 .ad
751 .fi
752
753 .SH "--blank-lines-after-procedures"
754
755 \`-bap\' オプションを指定すると、それぞれの宣言本体の後に必ず空行が置かれる。
756
757 例えば、以下の入力を与えると
758
759 .in +5
760 .nf
761 .na
762 int
763 foo ()
764 {
765   puts("Hi");
766 }
767 /* この手続き bar には意味はない  */
768 char *
769 bar ()
770 {
771   puts("Hello");
772 }
773 .in -5
774 .ad
775 .fi
776
777 \fBindent -bap\fR の出力は以下となる。
778
779 .in +5
780 .nf
781 .na
782 int
783 foo ()
784 {
785   puts ("Hi");
786 }
787
788 /* この手続き bar には意味はない  */
789 char *
790 bar ()
791 {
792   puts ("Hello");
793 }
794 .in -5
795 .ad
796 .fi
797
798 また、\fBindent -nbap\fR の出力は以下となる。
799
800 .in +5
801 .nf
802 .na
803 int
804 foo ()
805 {
806   puts ("Hi");
807 }
808 /* この手続き bar には意味はない  */
809 char *
810 bar ()
811 {
812   puts ("Hello");
813 }
814 .in -5
815 .ad
816 .fi
817
818 手続き \fBfoo\fR の後には空行は追加されない。
819
820 .SH コメント
821
822 \fBindent\fR は C と C++ のコメントを整形する。
823 C のコメントは \`/*\' で始まって \`*/\' で終り、
824 改行文字を含んでもよい。
825 C++ のコメントは区切り文字 \`//\' で始まり改行で終る。
826
827 \fBindent\fR はコメントの文脈によって別々の扱い方をする。
828 \fBindent\fR は文・宣言・
829 プリプロセッサディレクティブが後に続くコメントと
830 どのコードの前にも置かれていないコメントを区別する。
831 どのコードの前にも置かれていないコメントとは、
832 行が開始されるコメントのことである
833 (カラム 1 から始まっている必要はない)。
834
835 さらに \fBindent\fR は手続きや集合体の外側にあるコメントと
836 内側にあるコメントを区別する。
837 特に手続きの内側で行の最初にあるコメントは、
838 コードが現在インデントされているカラムにインデントされる。
839 最も左側のカラムから始まるコメントは例外であり、
840 コメントはそのカラムから出力される。
841
842 \fBindent\fR は\fI箱形\fRコメントを変更しない。
843 \`*\' や \`-\' で四角形や「箱形」に囲んだコメントは、
844 他から視覚的に区別したいという一般的な意図があるためである。
845 もっと正確に言うと、箱形コメントは次のように定義される。
846 最初の \`/*\' の直後に文字 \`*\', \`=\', \`_\', \`-\' が続いているか、
847 コメント開始区切り文字 (\`/*\') だけの行があり、
848 以降の行はコメント開始区切り文字の \`*\' と同じカラムから
849 \`*\' で行が開始される。
850
851 箱形コメントの例を示す:
852
853 .in +5
854 .nf
855 .na
856 /**********************
857  * 箱の中のコメント!! *
858  **********************/
859
860        /*
861         * 別な種類のコメントには、
862         * 別な形式を使う。
863         */
864 .in -5
865 .ad
866 .fi
867
868 \fBindent\fR は箱形のコメントを
869 ソースファイルの中に見つかった場所に残しておく。
870 よってコメントのインデント付けは変わらず、
871 その長さもどちらにしても変わらない。
872 別なモードでは、埋め込まれたタブ文字が適切な数の空白に変換されるだけである。
873
874 \`-bbb\' オプションが指定された場合、
875 箱形コメントがコードの前に置かれていないときは、
876 箱形コメントの後に空行を置く。
877
878 箱形でないコメントは整形される。
879 これは、行が右端に合うように折り返され、
880 左側は空白で埋められるという意味である。
881 1 つの改行文字は空白と同じであるが、
882 (1 行に 2 つ以上の改行文字がある) 空行は
883 パラグラフの切れ目として解釈される。
884 最初のカラムの後から始まるコメントの整形は、
885 \`-fca\' オプションで有効になる。
886 カラム 1 から始まるコメントを整形するには、\`-fc1\' を指定する。
887 このような整形は、デフォルトでは無効にされている。
888
889 整形する際の右端は、デフォルトでは 78 であるが、
890 \`-lc\' オプションで変更できる。
891 指定された右端まででコメントが表示できない場合、
892 コメントの終りまで右端が自動的に拡張される。
893 コメントが整形されない場合、右端の位置は守られない。
894
895 コメントで行が開始される場合
896 (つまり、コメントの左側にプログラムの文字列がない場合)、
897 コメントがコードのブロック中になければ、
898 そのコメントがあったカラムにインデントされる。
899 この場合、(最初のカラムからコメントが開始されていなければ)
900 そのブロックのインデントされたコードにコメントの左端を揃える。
901 揃える位置は \`-d\' オプションで変更可能で、
902 何カラム\fI左\fRへ移動するかを指定する。
903 指定されない場合は、インデントされない。
904 例えば、\`-d2\' ではコードから左へ空白 2 個の位置にコメントを置く。
905 デフォルトではコードにコメントの左端を揃える。
906 ただし、コメントが最初のカラムから開始されている場合、
907 デフォルトではインデントされない。
908 最初のカラムから始まるコメントをコードに左揃えしたい場合は、
909 \`-fc1\' を指定すること。
910
911 コードの右側にあるコメントは、デフォルトではカラム 33 にインデントされる。
912 これは次の 3 つのオプションのいずれかで変更できる。
913 \`-c\' はコードの後のコメントのカラムを指定する。
914 \`-cd\' は宣言の後のコメントのカラムを指定する。
915 \`-cp\' はプリプロセッサディレクティブ
916 \fB#else\fR と \fB#endif\fR の後のコメントのカラムを指定する。
917
918 コメントの左側にあるコードが最初のカラムから開始されていない場合、
919 コードの終りの次のタブストップの位置からコメントカラムが開始される。
920 プリプロセッサディレクティブが最初のカラムから開始されていない場合、
921 ディレクティブの終りの 1 カラム後からコメントカラムが開始される。
922 この拡張はこのような特定のカラムの出力に対してのみ適応される。
923
924 \`-cdb\' オプションを指定すると、コメント区切り文字を空行に置く。
925 よって \fB/* Loving hug */\fR のような 1 行のコメントは、
926 以下のように変換される。
927
928 .in +5
929 .nf
930 .na
931 /*
932    Loving hug
933  */
934 .in -5
935 .ad
936 .fi
937
938 \`-sc\' オプションを指定すると、
939 複数行コメントの始めに \`*\' を置くことができる。
940 上記の 1 行のコメントは (\`-cdb -sc\' により) 
941 以下のように変換される。
942
943 .in +5
944 .nf
945 .na
946 /*
947  * Loving hug
948  */
949 .in -5
950 .ad
951 .fi
952
953 .SH 文
954
955 \`-br\' または \`-bl\' オプションは、ブレースをどのように整形するかを指定する。
956
957 \`-br\' オプションを指定するとブレースは以下のように整形される:
958
959 .in +5
960 .nf
961 .na
962 if (x > 0) {
963   x--;
964 }
965 .in -5
966 .ad
967 .fi
968
969 \`-bl\' オプションを指定するとブレースは以下のように整形される:
970
971 .in +5
972 .nf
973 .na
974 if (x > 0)
975   {
976     x--;
977   }
978 .in -5
979 .ad
980 .fi
981
982 \`-bl\' オプションを使う場合には \`-bli\' オプションも使うとよい。
983 このオプションはブレースのインデント付けに使う空白の数を指定する。
984 \`-bli2\' (デフォルト値)を指定すると、先に示した結果となる。
985 \`-bli0\' を指定した場合の結果は以下である:
986
987 .in +5
988 .nf
989 .na
990 if (x > 0)
991 {
992   x--;
993 }
994 .in -5
995 .ad
996 .fi
997
998 \`-br\' オプションを使う場合には、多分 \`-ce\' も使いたくなるだろう。
999 このオプションは if-then-else 構文の \fBelse\fR を直前の \`}\' に隣に置く。
1000 例えば \`-br -ce\' を指定すると、出力は以下のようになる:
1001
1002 .in +5
1003 .nf
1004 .na
1005 if (x > 0) {
1006   x--;
1007 } else {
1008   fprintf (stderr, "...something wrong?\\n");
1009 }
1010 .in -5
1011 .ad
1012 .fi
1013
1014 同じコードで \`-br -nce\' を指定すると以下のようになる:
1015
1016 .in +5
1017 .nf
1018 .na
1019 if (x > 0) {
1020   x--;
1021 }
1022 else {
1023   fprintf (stderr, "...something wrong?\\n");
1024 }
1025 .in -5
1026 .ad
1027 .fi
1028
1029 これにより do-while ループの \fBwhile\fR は直前の \`}\' と同じ行に置かれる。
1030 例えば \`-cdw\' により以下のような出力が得られる。
1031
1032 .in +5
1033 .nf
1034 .na
1035 do {
1036   x--;
1037 } while (x);
1038 .in -5
1039 .ad
1040 .fi
1041
1042 同じコードで \`-ncdw\' を指定すると以下のようになる:
1043
1044 .in +5
1045 .nf
1046 .na
1047 do {
1048   x--;
1049 }
1050 while (x);
1051 .in -5
1052 .ad
1053 .fi
1054
1055 \`-cli\' オプションは、case 構文のラベルを \fBswitch\fR 文から
1056 右にインデントする際に空白をいくつ入れるかを指定する。
1057
1058 デフォルトでは以下のようなコードが得られる。
1059
1060 .in +5
1061 .nf
1062 .na
1063 switch (i)
1064   {
1065   case 0:
1066     break;
1067   case 1:
1068     {
1069       ++i;
1070     }
1071   default:
1072     break;
1073   }
1074 .in -5
1075 .ad
1076 .fi
1077
1078 \`-cli2\' を使うと以下のようになる。
1079
1080 .in +5
1081 .nf
1082 .na
1083 switch (i)
1084   {
1085     case 0:
1086       break;
1087     case 1:
1088       {
1089         ++i;
1090       }
1091     default:
1092       break;
1093   }
1094 .in -5
1095 .ad
1096 .fi
1097
1098 case 文の後のブレースのインデントは、
1099 \`-cbi\fIn\fR\' オプションで制御できる。
1100 例えば \`-cli2 -cbi0\' を使うと次のような結果になる。
1101
1102 .in +5
1103 .nf
1104 .na
1105 switch (i)
1106   {
1107     case 0:
1108       break;
1109     case 1:
1110     {
1111       ++i;
1112     }
1113     default:
1114       break;
1115   }
1116 .in -5
1117 .ad
1118 .fi
1119
1120 セミコロンが \fBfor\fR または \fBwhile\fR 文と同じ行にある場合に
1121 \`-ss\' を指定すると、空白がセミコロンの前に置かれる。
1122 これによりセミコロンが強調され、
1123 \fBfor\fR や \fBwhile\fR 文の本体が空の文であることがはっきりする。
1124 \`-nss\' を指定すると、この機能は無効になる。
1125
1126 \`-pcs\' オプションを指定すると、呼び出される手続きの名前と
1127 \`(\' の間に空白が置かれる (例えば、\fBputs\ ("Hi");\fR となる。
1128 また、\`-npcs\' オプションを指定している場合には \fBputs("Hi");\fR) となる。)
1129
1130
1131 \`-cs\' オプションを指定すると、
1132 \fBindent\fR はキャスト演算子の後に空白を置く。
1133
1134 \`-bs\' オプションを指定すると、
1135 キーワード \fBsizeof\fR とその引き数の間に必ず空白が置かれる。
1136 バージョンによっては、
1137 この機能は \`Bill_Shannon\' オプションとして知られている。
1138
1139 \`-saf\' オプションは \fBfor\fR とその後の括弧の間に空白を入れる。
1140 これがデフォルトである。
1141
1142 \`-sai\' オプションは \fBif\fR とその後の括弧の間に空白を入れる。
1143 これがデフォルトである。
1144
1145 \`-saw\' オプションは \fBwhile\fR とその後の括弧の間に空白を入れる。
1146 これがデフォルトである。
1147
1148 \`-prs\' オプションは全ての括弧とその間にあるものの間に空白を置く。
1149 例えば \`-prs\' を使うと以下のようなコードになる。
1150
1151 .in +5
1152 .nf
1153 .na
1154   while ( ( e_code - s_code ) < ( dec_ind - 1 ) )
1155     {
1156       set_buf_break ( bb_dec_ind );
1157       *e_code++ = \' \';
1158     }
1159 .in -5
1160 .ad
1161 .fi
1162
1163 .SH 宣言
1164
1165 デフォルトでは、\fBindent\fR は \`-di\' オプションで指定した
1166 カラムで識別子を揃える。
1167 例えば、\`-di16\' を指定すると以下のようになる:
1168
1169 .in +5
1170 .nf
1171 .na
1172 int             foo;
1173 char           *bar;
1174 .in -5
1175 .ad
1176 .fi
1177
1178 \`-di\' オプションに小さい値 (1 や 2 など) を使うと、
1179 置くことが可能な最初の場所に識別子を置くことができる。
1180 例を以下に示す:
1181
1182 .in +5
1183 .nf
1184 .na
1185 int foo;
1186 char *bar;
1187 .in -5
1188 .ad
1189 .fi
1190
1191 この場合でも、\`-di\' オプションに指定した値は
1192 型指定と異なる行に置いた変数には影響を与える。
1193 例えば、\`-di2\' を指定すると以下のようになる:
1194
1195 .in +5
1196 .nf
1197 .na
1198 int
1199   foo;
1200 .in -5
1201 .ad
1202 .fi
1203
1204 \`-bc\' オプションを指定すると、宣言中のコンマの後に改行が置かれる。
1205 例を以下に示す:
1206
1207 .in +5
1208 .nf
1209 .na
1210 int a,
1211   b,
1212   c;
1213 .in -5
1214 .ad
1215 .fi
1216
1217 同じコードで \`-nbc\' オプションを指定した場合は以下のようになる:
1218
1219 .in +5
1220 .nf
1221 .na
1222 int a, b, c;
1223 .in -5
1224 .ad
1225 .fi
1226
1227 \`-bfda\' オプションを指定すると、
1228 関数宣言の引き数のコンマの後で改行を入れる。
1229 引き数は関数宣言より 1 段深くインデントされる。
1230 これは引き数のリストが長い場合に特に役立つ。
1231 \`-bfde\' オプションを指定すると、
1232 関数宣言の閉括弧の前に改行を入れる。
1233 2 つのオプションとも \'n\' を設定した -nbdfa と -nbdfe がデフォルトになる。
1234
1235 例えば、
1236
1237 .in +5
1238 .nf
1239 .na
1240 void foo (int arg1, char arg2, int *arg3, long arg4, char arg5);
1241 .in -5
1242 .ad
1243 .fi
1244
1245 は、\`-bfda\' オプションを指定すると次のようになり、
1246
1247 .in +5
1248 .nf
1249 .na
1250 void foo (
1251     int arg1,
1252     char arg2,
1253     int *arg3,
1254     long arg4,
1255     char arg5);
1256 .in -5
1257 .ad
1258 .fi
1259
1260 更に \`-bfde\' オプションを指定すると次のようになる。
1261
1262 .in +5
1263 .nf
1264 .na
1265 void foo (
1266     int arg1,
1267     char arg2,
1268     int *arg3,
1269     long arg4,
1270     char arg5
1271     );
1272 .in -5
1273 .ad
1274 .fi
1275
1276 \`-psl\' オプションを指定すると、
1277 定義される手続きの型は手続きの名前の前の行に置かれる。
1278 このスタイルは、\fBetags\fR プログラムや Emacs の \fBc-mode\fR の
1279 一部の機能を正しく動作させるために必要である。
1280
1281 プログラム中で \fBtypedef\fR で定義された型の名前を全て、
1282 \`-T\' オプションを使って \fBindent\fR に教えなければならない。
1283 \`-T\' は複数個指定することができ、指定された全ての名前を使うことができる。
1284 例えば、プログラムに
1285
1286 .in +5
1287 .nf
1288 .na
1289 typedef unsigned long CODE_ADDR;
1290 typedef enum {red, blue, green} COLOR;
1291 .in -5
1292 .ad
1293 .fi
1294
1295 という記述がある場合には、
1296 オプション \`-T CODE_ADDR -T COLOR\' を使うことになるだろう。
1297
1298 \`-brs\' や \`-bls\' オプションは struct 宣言の
1299 ブレースをどのように整形するかを指定する。
1300 \`-brs\' オプションはブレースを次のように整形する。
1301
1302 .in +5
1303 .nf
1304 .na
1305 struct foo {
1306   int x;
1307 };
1308 .in -5
1309 .ad
1310 .fi
1311
1312 \`-bls\' オプションはブレースを次のように整形する。
1313
1314 .in +5
1315 .nf
1316 .na
1317 struct foo
1318 {
1319   int x;
1320 };
1321 .in -5
1322 .ad
1323 .fi
1324
1325 .SH インデント付け
1326
1327 コードを整形する時の問題の 1 つは、
1328 各行をどれだけ左端からインデントさせるかである。
1329 \fBif\fR や \fBfor\fR 等の文の先頭部分があると、
1330 インデントの深さは \`-i\' オプションで指定した値だけ増える。
1331 例えば、レベルごとに 8 文字分のインデントさせるには \`-i8\' を使う。
1332 文が 2 行に折り返されている場合、
1333 2 行目は \`-ci\' オプションで指定した追加のスペース分だけインデントされる。
1334 \`-ci\' のデフォルト値は 0 である。
1335 しかし、\`-lp\' オプションが指定されており、かつ同じ行で閉じられていない
1336 左括弧がある場合、その続きの行が始まる文字は左括弧の直後の位置に揃えられる。
1337 この処理は \`[\' および初期化リストに現われる \`{\' にも適用される。
1338 例えば、\`-nlp -ci3\' が有効になっていると、
1339 行をまたがるコードは以下のようになる:
1340
1341 .in +5
1342 .nf
1343 .na
1344   p1 = first_procedure (second_procedure (p2, p3),
1345      third_procedure (p4, p5));
1346 .in -5
1347 .ad
1348 .fi
1349
1350 \`-lp\' を有効にすると、コードはいくらか見やすくなる:
1351
1352 .in +5
1353 .nf
1354 .na
1355   p1 = first_procedure (second_procedure (p2, p3),
1356                         third_procedure (p4, p5));
1357 .in -5
1358 .ad
1359 .fi
1360
1361 文が 2 つ以上の括弧の組 (...) にわかれている場合、
1362 追加された括弧の組ごとに 1 段深くインデントされる。
1363
1364 .in +5
1365 .nf
1366 .na
1367 if ((((i < 2 &&
1368         k > 0) || p == 0) &&
1369     q == 1) ||
1370   n = 0)
1371 .in -5
1372 .ad
1373 .fi
1374
1375 オプション \`-ip\fIN\fR\' は、括弧ごとの追加オフセットを設定するのに使う。
1376 例えば \`-ip0\' は上記のコードを次のように整形する。
1377
1378 .in +5
1379 .nf
1380 .na
1381 if ((((i < 2 &&
1382   k > 0) || p == 0) &&
1383   q == 1) ||
1384   n = 0)
1385 .in -5
1386 .ad
1387 .fi
1388
1389 \fBindent\fR はタブが入力と出力のストリームの両方で
1390 一定の間隔で置かれることを想定している。
1391 この間隔はデフォルトでは 8 カラム幅であるが、
1392 (バージョン 1.2 からは) \`-ts\' オプションで変更することができる。
1393 タブは複数個の空白と同じ意味である。
1394
1395 古い形式の関数定義における型宣言のインデント付けは、
1396 \`-ip\' パラメータで制御することができる。
1397 これは、型宣言では空白何個分のインデントを行うかを
1398 指定する数値パラメータである。
1399 例えばデフォルトの \`-ip5\' では、定義は以下のように整形される:
1400
1401 .in +5
1402 .nf
1403 .na
1404 char *
1405 create_world (x, y, scale)
1406      int x;
1407      int y;
1408      float scale;
1409 {
1410   . . .
1411 }
1412 .in -5
1413 .ad
1414 .fi
1415
1416 他のバージョンの indent との互換性のために
1417 オプション \`-nip\' が用意されている。
1418 これは \`-ip0\' と同じである。
1419
1420 ANSI C ではプリプロセッサコマンドラインの文字 \`#\' とコマンド名の間に
1421 空白を入れることが許可されている。
1422 デフォルトでは \fBindent\fR はこの空白を削除するが、
1423 \`-lps\' オプションを指定することで
1424 \fBindent\fR にこの空白を変更しないように指示できる。
1425 オプション \`-ppi\' は  \`-nlps\' と  \`-lps\' を上書きする。
1426
1427 このオプションにより、
1428 プリプロセッサ条件文を指定された空白数でインデントできる。
1429 例えばオプション \`-ppi 3\' は
1430
1431 .in +5
1432 .nf
1433 .na
1434 #if X
1435 #if Y
1436 #define Z 1
1437 #else
1438 #define Z 0
1439 #endif
1440 #endif
1441 .in -5
1442 .ad
1443 .fi
1444 を次のように整形する。
1445 .in +5
1446 .nf
1447 .na
1448 #if X
1449 #   if Y
1450 #      define Z 1
1451 #   else
1452 #      define Z 0
1453 #   endif
1454 #endif
1455 .in -5
1456 .ad
1457 .fi
1458
1459 .SH 長い行の折り返し
1460
1461 オプション \`-l\fIn\fR\' または \`--line-length\fIn\fR\' により、
1462 C 言語コードの行の最大長を指定することができる。
1463 ただしコードの後のコメントは含まない。
1464
1465 指定された行の長さより長い場合、
1466 GNU \fBindent\fR は行を論理的な位置で折り返す。
1467 これはバージョン 2.1 の新機能であるが、
1468 まだそれほど賢くはなく柔軟でもない。
1469
1470 どこで行を折り返すかを決定するアルゴリズムに干渉するためのオプションが、
1471 現在のところ 2 つある。
1472
1473 \`-bbo\' オプションを指定すると、GNU \fBindent\fR は
1474 長い行をブーリアン演算子 \fB&&\fR と \fB||\fR の前で折り返す。
1475 \`-nbbo\' オプションを指定すると、GNU \fBindent\fR は
1476 長い行をブーリアン演算子の前で折り返さない。
1477 例えば、(\`--line-length60\' と \`--ignore-newlines\'と一緒に)
1478 デフォルトのオプション \`-bbo\' を指定することにより、
1479 コードは以下のようになる。
1480
1481 .in +5
1482 .nf
1483 .na
1484   if (mask
1485       && ((mask[0] == \'\\0\')
1486           || (mask[1] == \'\\0\'
1487               && ((mask[0] == \'0\') || (mask[0] == \'*\')))))
1488 .in -5
1489 .ad
1490 .fi
1491
1492 オプション \`-nbbo\' を使うと、次のようになる。
1493
1494 .in +5
1495 .nf
1496 .na
1497   if (mask &&
1498       ((mask[0] == \'\\0\') ||
1499        (mask[1] == \'\\0\' &&
1500         ((mask[0] == \'0\') || (mask[0] == \'*\')))))
1501 .in -5
1502 .ad
1503 .fi
1504
1505 しかしデフォルトの \`-hnl\' では、
1506 入力ファイルにおける改行を重視して、
1507 そこで改行するように可能な限りの優先度を与える。
1508 例えば入力ファイルが以下のような場合、
1509
1510 .in +5
1511 .nf
1512 .na
1513   if (mask
1514       && ((mask[0] == \'\\0\')
1515       || (mask[1] == \'\\0\' && ((mask[0] == \'0\') || (mask[0] == \'*\')))))
1516 .in -5
1517 .ad
1518 .fi
1519
1520 オプション \`-hnl\' または \`--honour-newlines\' を
1521 上述の \`-nbbo\' と \`--line-length60\' と一緒に使うと、
1522 前の例で示したような出力ではなく、
1523 入力ファイルのコードで改行されている位置でなるべく折り返される。
1524
1525 .in +5
1526 .nf
1527 .na
1528   if (mask
1529       && ((mask[0] == \'\\0\')
1530           || (mask[1] == \'\\0\' &&
1531               ((mask[0] == \'0\') || (mask[0] == \'*\')))))
1532 .in -5
1533 .ad
1534 .fi
1535
1536 このオプションの背景となる考え方は、
1537 既に折り返されている長すぎる行は
1538 GNU \fBindent\fR で変更しないというものである。
1539 しかし本当に汚いコードは、
1540 少なくとも 1 回は \`--ignore-newlines\' オプションを付けて
1541 \fBindent\fR に通しておくべきである。
1542
1543 .SH 整形の無効化
1544
1545 特別な\fI制御用コメント\fRをプログラムに埋め込むことにより、
1546 C 言語コードを部分的に整形しないようにすることができる。
1547 プログラムのあるセクションを整形しないようにするためには、
1548 無効化制御用コメント \fB/* *INDENT-OFF* */\fR だけの行を
1549 セクションの直前に置けばよい。
1550 この制御用コメントの後でスキャンされたプログラムテキストは、
1551 有効化コメントだけの行がスキャンされるまで、
1552 入力の通りに変更されず出力される。
1553 有効化制御コメントは \fB/* *INDENT-ON* */\fR であり、
1554 このコメントと同じ行で後に続くテキストも整形されずに出力される。
1555 有効化制御コメントの後に続く行から整形が再開される。
1556
1557 もっと正確に言うと、\fBindent\fR は C 言語コメントの
1558 終了区切り文字 (\fB*/\fR) を検証せず、
1559 その行の空白は存在が意識されない。
1560
1561 これらの制御コメントは、 C++ の書式、
1562 つまり \fB // *INDENT-OFF*\fR と \fB// *INDENT-ON*\fR でも機能する。
1563
1564 \fBindent\fR の内部状態は整形しないセクションでも変更されない、
1565 という点に注意すべきである。
1566 よって、例えば関数の途中で整形を無効にして
1567 関数の終りまで無効にし続けた場合、変な結果になる。
1568 したがって、コードを整形しないことを選択する場合は、
1569 モジュールにしておくのがよい。
1570
1571 歴史的な注意点: 以前のバージョンの \fBindent\fR では
1572 \fB*INDENT**\fR で始まるエラーメッセージを生成するものがあった。
1573 これらのバージョンの \fBindent\fR は、
1574 このようなエラーメッセージで始まる入力テキスト行を
1575 無視するように書かれていた。
1576 私はこの閉鎖的な機能を GNU \fBindent\fR から削除した。
1577
1578 .SH その他のオプション
1579
1580 使っている \fBindent\fR のバージョンを知るには、
1581 コマンド \fBindent -version\fR を用いること。
1582 これを用いると、通常の処理は全く行われず、
1583 \fBindent\fR のバージョン番号が表示される。
1584
1585 \`-v\' オプションを用いると、詳細表示モードを有効にすることができる。
1586 詳細表示モードでは、\fBindent\fR は 1 つの行を出力で複数行にする時には報告を
1587 行い、実行終了時にサイズに関する情報を出力する。
1588
1589 \`-pmt\' オプションを指定すると、\fBindent\fR は
1590 出力ファイルのアクセス時刻と修正時刻を保存する。
1591 このオプションを使うと、全てのソースファイルとヘッダファイルに
1592 \fBindent\fR を実行しても、\fBmake\fR はターゲットを再構築しない。
1593 このオプションは POSIX \fButime(2)\fR 関数がある
1594 オペレーティングシステムでのみ利用可能である。
1595
1596 .SH バグ
1597
1598 バグは bug-indent@gnu.org に報告してほしい。
1599
1600 同じプロファイルで 1 つのファイルに \fBindent\fR を 2 回実行した場合、
1601 2 回目はファイルを\fI全く\fR変更しないべきである。
1602 \fBindent\fR の現在の設計では、それは保証できず、
1603 詳細にはテストされていない。
1604
1605 \fBindent\fR が C を理解しない。
1606 このため、行を結合できない場合もある。
1607 指定されたプロファイル (\`.indent.pro\') で
1608 \fBindent\fR を実行した結果のファイルを入力として使った場合でも、
1609 \fBindent\fR を通したファイルが\fI非可逆\fRになる。
1610
1611 C++ に対して \fBindent\fR を動作させることを試みたが、
1612 とても簡単なものでない限り、
1613 C++ のソースに対しては良い結果が得られない。
1614
1615 出力ファイルにコメントを書き出している場合、
1616 \fBindent\fR は指定された \`--line-length\' オプションを参照しない。
1617 そのため、たびたびコメントがかなり右に置かれる。
1618 コメントが末尾にある折り返された行を
1619 \fBindent\fR が結合しないようにするため、
1620 コメントが折り返しの最初の行から始まっていることを確認すること。
1621
1622 \fB/* *INDENT-OFF* */\fR によって
1623 \fBindent\fR が無効にされている場合、
1624 \fBindent\fR は行数やコメント数を数えない
1625 (\`-v\' オプションを参照)。
1626
1627 \fB/*UPPERCASE*/\fR という形式のコメントは、
1628 コメントとして扱われないが、次の行と結合する識別子として扱われる。
1629 この動作によって、コードの最初に埋め込まれない限り、
1630 このタイプのコメントを無用なものにしてしまう。
1631
1632 .SH 著作権表示
1633
1634 以下の著作権表示は \fBindent\fR プログラムに適用される。
1635 このマニュアルに関する著作権と複製許可については、
1636 \`indent.texinfo\' と \`indent.info\' の先頭近くと
1637 \`indent.1\' の末尾近くに記述されている。
1638
1639 .nf
1640 .na
1641 Copyright (c) 2001 David Ingamells.
1642 Copyright (c) 1999 Carlo Wood.
1643 Copyright (c) 1995, 1996 Joseph Arceneaux.
1644 Copyright (c) 1989, 1992, 1993, 1994, 1995, 1996 Free Software Foundation
1645 Copyright (c) 1985 Sun Microsystems, Inc.
1646 Copyright (c) 1980 The Regents of the University of California.
1647 Copyright (c) 1976 Board of Trustees of the University of Illinois.
1648 All rights reserved.
1649
1650 Redistribution and use in source and binary forms are permitted
1651 provided that the above copyright notice and this paragraph are
1652 duplicated in all such forms and that any documentation,
1653 advertising materials, and other materials related to such
1654 distribution and use acknowledge that the software was developed
1655 by the University of California, Berkeley, the University of Illinois,
1656 Urbana, and Sun Microsystems, Inc.  The name of either University
1657 or Sun Microsystems may not be used to endorse or promote products
1658 derived from this software without specific prior written permission.
1659 THIS SOFTWARE IS PROVIDED \`\`AS IS\'\' AND WITHOUT ANY EXPRESS OR
1660 IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
1661 WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
1662 PURPOSE.
1663 .ad
1664 .fi
1665
1666 .SH オプションの相互参照キー
1667
1668 長い名前についてアルファベット順に並べたオプションのリストを示す。
1669 これを使えば対応する短いオプション名が簡単に分かる。
1670
1671 .in +5
1672 .nf
1673 .na
1674 --blank-lines-after-commas                      -bc             
1675 --blank-lines-after-declarations                -bad            
1676 --blank-lines-after-procedures                  -bap            
1677 --blank-lines-before-block-comments             -bbb            
1678 --braces-after-if-line                          -bl             
1679 --brace-indent                                  -bli
1680 --braces-after-struct-decl-line                 -bls
1681 --braces-on-if-line                             -br             
1682 --braces-on-struct-decl-line                    -brs
1683 --break-after-boolean-operator                  -nbbo
1684 --break-before-boolean-operator                 -bbo
1685 --break-function-decl-args                      -bfda
1686 --break-function-decl-args-end                  -bfde
1687 --case-indentation                              -cli\fIn\fR     
1688 --case-brace-indentation                        -cbi\fIn\fR
1689 --comment-delimiters-on-blank-lines             -cdb            
1690 --comment-indentation                           -c\fIn\fR       
1691 --continuation-indentation                      -ci\fIn\fR      
1692 --continue-at-parentheses                       -lp             
1693 --cuddle-do-while                               -cdw
1694 --cuddle-else                                   -ce             
1695 --declaration-comment-column                    -cd\fIn\fR      
1696 --declaration-indentation                       -di\fIn\fR      
1697 --dont-break-function-decl-args                 -nbfda
1698 --dont-break-function-decl-args-end             -nbfde
1699 --dont-break-procedure-type                     -npsl           
1700 --dont-cuddle-do-while                          -ncdw
1701 --dont-cuddle-else                              -nce            
1702 --dont-format-comments                          -nfca           
1703 --dont-format-first-column-comments             -nfc1           
1704 --dont-line-up-parentheses                      -nlp            
1705 --dont-space-special-semicolon                  -nss
1706 --dont-star-comments                            -nsc            
1707 --else-endif-column                             -cp\fIn\fR
1708 --format-all-comments                           -fca            
1709 --format-first-column-comments                  -fc1            
1710 --gnu-style                                     -gnu            
1711 --honour-newlines                               -hnl
1712 --ignore-newlines                               -nhnl
1713 --ignore-profile                                -npro           
1714 --indent-level                                  -i\fIn\fR       
1715 --k-and-r-style                                 -kr             
1716 --leave-optional-blank-lines                    -nsob           
1717 --leave-preprocessor-space                      -lps
1718 --line-comments-indentation                     -d\fIn\fR       
1719 --line-length                                   -l\fIn\fR       
1720 --no-blank-lines-after-commas                   -nbc            
1721 --no-blank-lines-after-declarations             -nbad           
1722 --no-blank-lines-after-procedures               -nbap           
1723 --no-blank-lines-before-block-comments          -nbbb           
1724 --no-comment-delimiters-on-blank-lines          -ncdb           
1725 --no-space-after-casts                          -ncs            
1726 --no-parameter-indentation                      -nip            
1727 --no-space-after-for                            -nsaf
1728 --no-space-after-function-call-names            -npcs           
1729 --no-space-after-if                             -nsai
1730 --no-space-after-parentheses                    -nprs
1731 --no-space-after-while                          -nsaw
1732 --no-tabs                                       -nut
1733 --no-verbosity                                  -nv             
1734 --original                                      -orig
1735 --parameter-indentation                         -ip\fIn\fR      
1736 --paren-indentation                             -pi\fIn\fR
1737 --preserve-mtime                                -pmt
1738 --procnames-start-lines                         -psl            
1739 --space-after-cast                              -cs             
1740 --space-after-for                               -saf
1741 --space-after-if                                -sai
1742 --space-after-parentheses                       -prs
1743 --space-after-procedure-calls                   -pcs            
1744 --space-after-while                             -saw
1745 --space-special-semicolon                       -ss             
1746 --standard-output                               -st             
1747 --start-left-side-of-comments                   -sc             
1748 --struct-brace-indentation                      -sbi\fIn\fR
1749 --swallow-optional-blank-lines                  -sob            
1750 --tab-size                                      -ts\fIn\fR      
1751 --use-tabs                                      -ut
1752 --verbose                                       -v              
1753 .in -5
1754 .ad
1755 .fi
1756
1757 .SH 返り値
1758 不明。
1759 .SH ファイル
1760 .br
1761 .nf
1762 .\" set tabstop to longest possible filename, plus a wee bit
1763 .ta \w'$HOME/.indent.pro   'u
1764 \fI$HOME/.indent.pro\fR indent のデフォルトのオプションを設定する
1765 .SH 著者
1766 .br
1767 Carlo Wood
1768 .br
1769 Joseph Arceneaux
1770 .br
1771 Jim Kingdon
1772 .br
1773 David Ingamells
1774 .SH 履歴
1775 UCB の "indent" プログラムが起源である。
1776 .SH 著作権
1777 Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
1778 Copyright (C) 1995, 1996 Joseph Arceneaux.
1779 Copyright (C) 1999 Carlo Wood.
1780 Copyright (C) 2001 David Ingamells.
1781
1782 Permission is granted to make and distribute verbatim copies of
1783 this manual provided the copyright notice and this permission notice
1784 are preserved on all copies.