3 .\" Updated & Modified Mon May 3 07:00:19 JST 2004
4 .\" by Yuichi SATO <ysato444@yahoo.co.jp>
8 indent \- 空白の挿入や削除を行い、C 言語プログラムの見栄えを変える。
11 [options] [input\-files]
14 [options] [single\-input\-file] [\-o output\-file]
19 この man ページはファイル \fIindent.texinfo\fR から生成した。
20 これは indent バージョン 2.2.9 用の「The \fBindent\fR Manual」の
21 2.2.9 版 (2002 年 11 月 10 日版) である。
23 \fBindent\fR プログラムを使うとコードを読みやすくすることができる。
25 あるスタイルから別のスタイルに変換することもできる。
27 \fBindent\fR はたくさんある C 言語の文法を理解するが、
28 文法が不完全な部分や誤っている部分もできるだけ処理しようとする。
30 バージョン 1.2 以降では、GNU スタイルのインデントがデフォルトである。
34 .B -bad\fR, \fB--blank-lines-after-declarations\fR
37 「\fB空行\fR」セクションを参照すること。
39 .B -bap\fR, \fB--blank-lines-after-procedures\fR
42 「\fB空行\fR」セクションを参照すること。
44 .B -bbb\fR, \fB--blank-lines-before-block-comments\fR
47 「\fB空行\fR」セクションを参照すること。
49 .B -bbo\fR, \fB--break-before-boolean-operator\fR
52 「\fB長い行の折り返し\fR」セクションを参照すること。
54 .B -bc\fR, \fB--blank-lines-after-commas\fR
57 「\fB宣言\fR」セクションを参照すること。
59 .B -bl\fR, \fB--braces-after-if-line\fR
60 ブレースは \fBif\fR 等の次の行に置く。
62 「\fB文\fR」セクションを参照すること。
64 .B -bli\fIn\fB\fR, \fB--brace-indent\fIn\fB\fR
65 ブレースを \fIn\fR 個のスペースでインデント付けする。
67 「\fB文\fR」セクションを参照すること。
69 .B -bls\fR, \fB--braces-after-struct-decl-line\fR
70 ブレースは \fBstruct\fR 宣言行の次の行に置く。
72 「\fB宣言\fR」セクションを参照すること。
74 .B -br\fR, \fB--braces-on-if-line\fR
75 ブレースは \fBif\fR 等がある行に置く。
77 「\fB文\fR」セクションを参照すること。
79 .B -brs\fR, \fB--braces-on-struct-decl-line\fR
80 ブレースは \fBstruct\fR 宣言行がある行に置く。
82 「\fB宣言\fR」セクションを参照すること。
84 .B -bs\fR, \fB--Bill-Shannon\fR, \fB--blank-before-sizeof\fR
85 \fBsizeof\fR とその引き数の間に空白を置く。
87 「\fB文\fR」セクションを参照すること。
89 .B -c\fIn\fB\fR, \fB--comment-indentation\fIn\fB\fR
90 コメントをコードの右のカラム \fIn\fR に置く。
92 「\fBコメント\fR」セクションを参照すること。
94 .B -cbi\fIn\fB\fR, \fB--case-brace-indentation\fIn\fB\fR
95 case ラベルの後に、ブレースを \fIn\fR 個の空白でインデント付けする。
97 「\fB文\fR」セクションを参照すること。
99 .B -cd\fIn\fB\fR, \fB--declaration-comment-column\fIn\fB\fR
100 コメントを宣言の右のカラム \fIn\fR に置く。
102 「\fBコメント\fR」セクションを参照すること。
104 .B -cdb\fR, \fB--comment-delimiters-on-blank-lines\fR
107 「\fBコメント\fR」セクションを参照すること。
109 .B -cdw\fR, \fB--cuddle-do-while\fR
110 \fBdo {} while;\fR の while とその前の \`}\' を並べる。
112 「\fBコメント\fR」セクションを参照すること。
114 .B -ce\fR, \fB--cuddle-else\fR
115 else とその前の \`}\' を並べる。
117 「\fBコメント\fR」セクションを参照すること。
119 .B -ci\fIn\fB\fR, \fB--continuation-indentation\fIn\fB\fR
120 前の行から継続している場合には、\fIn\fR 個の空白でインデントする。
122 「\fB文\fR」セクションを参照すること。
124 .B -cli\fIn\fB\fR, \fB--case-indentation\fIn\fB\fR
125 case ラベルを N 個の空白でインデントする。
127 「\fB文\fR」セクションを参照すること。
129 .B -cp\fIn\fB\fR, \fB--else-endif-column\fIn\fB\fR
130 \fB#else\fR 文と \fB#endif\fR 文の右のカラム \fIn\fR にコメントを置く。
132 「\fBコメント\fR」セクションを参照すること。
134 .B -cs\fR, \fB--space-after-cast\fR
137 「\fB文\fR」セクションを参照すること。
139 .B -d\fIn\fB\fR, \fB--line-comments-indentation\fIn\fB\fR
140 コードの右でないコメントは空白 \fIn\fR 個でインデントするように設定する。
142 「\fBコメント\fR」セクションを参照すること。
144 .B -bfda\fR, \fB--break-function-decl-args\fR
145 (関数) 宣言の全ての引き数の後で折り返す。
147 「\fB宣言\fR」セクションを参照すること。
149 .B -bfde\fR, \fB--break-function-decl-args\fR
150 (関数) 宣言の全ての引き数の前で折り返す。
152 「\fB宣言\fR」セクションを参照すること。
154 .B -di\fIn\fB\fR, \fB--declaration-indentation\fIn\fB\fR
157 「\fB宣言\fR」セクションを参照すること。
159 .B -fc1\fR, \fB--format-first-column-comments\fR
160 最初のカラムから始まるコメントを整形する。
162 「\fBコメント\fR」セクションを参照すること。
164 .B -fca\fR, \fB--format-all-comments\fR
167 「\fBコメント\fR」セクションを参照すること。
169 .B -gnu\fR, \fB--gnu-style\fR
170 GNU コーディングスタイルを使用する。これはデフォルトの動作である。
172 「\fB一般的なスタイル\fR」セクションを参照すること。
174 .B -hnl\fR, \fB--honour-newlines\fR
178 「\fB長い行の折り返し\fR」セクションを参照すること。
180 .B -i\fIn\fB\fR, \fB--indent-level\fIn\fB\fR
181 インデントのレベルを空白 \fIn\fR 個に設定する。
183 「\fBインデント付け\fR」セクションを参照すること。
185 .B -ip\fIn\fB\fR, \fB--parameter-indentation\fIn\fB\fR
186 古い形式の関数定義のパラメータ型を空白 \fIn\fR 個でインデントする。
188 「\fBインデント付け\fR」セクションを参照すること。
190 .B -kr\fR, \fB--k-and-r-style\fR
191 Kernighan & Ritchie コーディングスタイルを使用する。
193 「\fB一般的なスタイル\fR」セクションを参照すること。
195 .B -l\fIn\fB\fR, \fB--line-length\fIn\fB\fR
196 コメントでない行の最大の長さを \fIn\fR に設定する。
198 「\fB長い行の折り返し\fR」セクションを参照すること。
200 .B -lc\fIn\fB\fR, \fB--comment-line-length\fIn\fB\fR
201 コメントを整形する最大の長さを \fIn\fR に設定する。
203 「\fBコメント\fR」セクションを参照すること。
205 .B -lp\fR, \fB--continue-at-parentheses\fR
208 「\fBインデント付け\fR」セクションを参照すること。
210 .B -lps\fR, \fB--leave-preprocessor-space\fR
211 \`#\' とプリプロセッサディレクティブの間の空白を残す。
213 「\fBインデント付け\fR」セクションを参照すること。
215 .B -nbad\fR, \fB--no-blank-lines-after-declarations\fR
218 「\fB空行\fR」セクションを参照すること。
220 .B -nbap\fR, \fB--no-blank-lines-after-procedures\fR
223 「\fB空行\fR」セクションを参照すること。
225 .B -nbbo\fR, \fB--break-after-boolean-operator\fR
226 ブーリアン演算子の前で長い行を折り返さない。
228 「\fB長い行の折り返し\fR」セクションを参照すること。
230 .B -nbc\fR, \fB--no-blank-lines-after-commas\fR
233 「\fB宣言\fR」セクションを参照すること。
235 .B -nbfda\fR, \fB--dont-break-function-decl-args\fR
238 「\fB宣言\fR」セクションを参照すること。
240 .B -ncdb\fR, \fB--no-comment-delimiters-on-blank-lines\fR
243 「\fBコメント\fR」セクションを参照すること。
245 .B -ncdw\fR, \fB--dont-cuddle-do-while\fR
246 \fBdo {} while;\fR の \fB}\fR と \fBwhile\fR を同じ行に並べない。
248 「\fB文\fR」セクションを参照すること。
250 .B -nce\fR, \fB--dont-cuddle-else\fR
251 \fB}\fR と \fBelse\fR を同じ行に並べない。
253 「\fB文\fR」セクションを参照すること。
255 .B -ncs\fR, \fB--no-space-after-casts\fR
258 「\fB文\fR」セクションを参照すること。
260 .B -nfc1\fR, \fB--dont-format-first-column-comments\fR
261 最初のカラムから始まるコメントを通常のように整形しない。
263 「\fBコメント\fR」セクションを参照すること。
265 .B -nfca\fR, \fB--dont-format-comments\fR
268 「\fBコメント\fR」セクションを参照すること。
270 .B -nhnl\fR, \fB--ignore-newlines\fR
274 「\fB長い行の折り返し\fR」セクションを参照すること。
276 .B -nip\fR, \fB--no-parameter-indentation\fR
279 「\fBインデント付け\fR」セクションを参照すること。
281 .B -nlp\fR, \fB--dont-line-up-parentheses\fR
284 「\fB文\fR」セクションを参照すること。
286 .B -npcs\fR, \fB--no-space-after-function-call-names\fR
287 関数呼び出し内部の関数の後に空白を置かない。
289 「\fB文\fR」セクションを参照すること。
291 .B -nprs\fR, \fB--no-space-after-parentheses\fR
292 \'(\' の後と \')\' の前に空白を置かない。
294 「\fB文\fR」セクションを参照すること。
296 .B -npsl\fR, \fB--dont-break-procedure-type\fR
299 「\fB宣言\fR」セクションを参照すること。
301 .B -nsaf\fR, \fB--no-space-after-for\fR
302 \fBfor\fR の後に空白を置かない。
304 「\fB文\fR」セクションを参照すること。
306 .B -nsai\fR, \fB--no-space-after-if\fR
309 「\fB文\fR」セクションを参照すること。
311 .B -nsaw\fR, \fB--no-space-after-while\fR
312 \fBwhile\fR の後に空白を置かない。
314 「\fB文\fR」セクションを参照すること。
316 .B -nsc\fR, \fB--dont-star-comments\fR
317 \`*\' 文字をコメントの左に置かない。
319 「\fBコメント\fR」セクションを参照すること。
321 .B -nsob\fR, \fB--leave-optional-blank-lines\fR
324 「\fB空行\fR」セクションを参照すること。
326 .B -nss\fR, \fB--dont-space-special-semicolon\fR
327 特定の文の後のセミコロンの前に空白を置かない。
330 「\fB文\fR」セクションを参照すること。
332 .B -nut\fR, \fB--no-tabs\fR
335 「\fBインデント付け\fR」セクションを参照すること。
337 .B -nv\fR, \fB--no-verbosity\fR
340 「\fBその他のオプション\fR」セクションを参照すること。
342 .B -orig\fR, \fB--original\fR
343 オリジナルの Berkeley コーディングスタイルを使用する。
345 「\fB一般的なスタイル\fR」セクションを参照すること。
347 .B -npro\fR, \fB--ignore-profile\fR
348 \`.indent.pro\' ファイルを読み込まない。
350 「\fBindent\ の起動\fR」セクションを参照すること。
352 .B -pcs\fR, \fB--space-after-procedure-calls\fR
353 呼び出される手続きの名前と `(' の間に空白を挿入する。
355 「\fB文\fR」セクションを参照すること。
357 .B -pi\fIn\fB\fR, \fB--paren-indentation\fIn\fB\fR
359 開括弧 \'(\' ごとの追加のインデントを指定する。
361 「\fB文\fR」セクションを参照すること。
363 .B -pmt\fR, \fB--preserve-mtime\fR
364 出力ファイルのアクセス時刻と修正時刻を保存する。
366 「\fBその他のオプション\fR」セクションを参照すること。
368 .B -prs\fR, \fB--space-after-parentheses\fR
369 \'(\' の後と \')\' の前に空白を置く。
371 「\fB文\fR」セクションを参照すること。
373 .B -psl\fR, \fB--procnames-start-lines\fR
376 「\fB宣言\fR」セクションを参照すること。
378 .B -saf\fR, \fB--space-after-for\fR
379 \fBfor\fR の後にスペースを置く。
381 「\fB文\fR」セクションを参照すること。
383 .B -sai\fR, \fB--space-after-if\fR
386 「\fB文\fR」セクションを参照すること。
388 .B -saw\fR, \fB--space-after-while\fR
389 \fBwhile\fR の後にスペースを置く。
391 「\fB文\fR」セクションを参照すること。
393 .B -sbi\fIn\fB\fR, \fB--struct-brace-indentation\fIn\fB\fR
394 stract, union, enum のブレースを \fIn\fB 個の空白でインデントする。
396 「\fB文\fR」セクションを参照すること。
398 .B -sc\fR, \fB--start-left-side-of-comments\fR
401 「\fBコメント\fR」セクションを参照すること。
403 .B -sob\fR, \fB--swallow-optional-blank-lines\fR
406 「\fB空行\fR」セクションを参照すること。
408 .B -ss\fR, \fB--space-special-semicolon\fR
409 1 行で記述した \fBfor\fR 文と \fBwhile\fR 文において、
412 「\fB文\fR」セクションを参照すること。
414 .B -st\fR, \fB--standard-output\fR
417 「\fBindent\ の起動\fR」セクションを参照すること。
420 型名の名前を \fBindent\fR に指定する。
422 「\fB宣言\fR」セクションを参照すること。
424 .B -ts\fIn\fB\fR, \fB--tab-size\fIn\fB\fR
425 タブの幅を空白 \fIn\fR 個に設定する。
427 「\fBインデント付け\fR」セクションを参照すること。
429 .B -ut\fR, \fB--use-tabs\fR
432 「\fBインデント付け\fR」セクションを参照すること。
434 .B -v\fR, \fB--verbose\fR
437 「\fBその他のオプション\fR」セクションを参照すること。
440 \fBindent\fR のバージョン番号を表示する。
442 「\fBその他のオプション\fR」セクションを参照すること。
446 バージョン 1.3 からは、\fBindent\fR コマンドの書式は
453 indent [\fIoptions\fR] [\fIinput-files\fR]
455 indent [\fIoptions\fR] [\fIsingle-input-file\fR] [-o \fIoutput-file\fR]
461 この書式は古いバージョンや他バージョンの \fBindent\fR と異なる。
463 最初の書式では 1 つ以上の入力ファイルを指定する。
464 \fBindent\fR は、各ファイルのバックアップコピーを作成してから、
465 オリジナルのファイルをインデント付けしたものに置き換える。
467 「\fBバックアップファイル\fR」セクションを参照すること。
469 2 番目の書式では入力ファイルを 1 つだけ指定する。
471 \`-o\' オプションの後に出力ファイルを指定することができる。
473 \fBindent\fR に標準出力へ出力させるには \`-st\' オプションを使う。
474 これが許されるのは、入力ファイルが 1 つだけの場合か、
477 入力ファイルを指定しなければ入力は標準入力から読み込まれる。
478 また、\`-\' というファイル名が指定された場合にも標準入力が読み込まれる。
481 いずれもプログラム \`slithy_toves.c\' を読み込み、
482 インデント付けしたテキストを \`slithy_toves.out\' に書き込む:
488 indent slithy_toves.c -o slithy_toves.out
490 indent -st slithy_toves.c > slithy_toves.out
492 cat slithy_toves.c | indent -o slithy_toves.out
498 \fBindent\fR の他のオプションのほとんどは、
499 プログラムをどのように整形するかを制御するためのものである。
500 バージョン 1.2 からは、\fBindent\fR は
502 長いオプションの前には \`--\' か \`+\' が置かれる。
503 [POSIX 標準と一貫性を持たせるため、
504 現在は \`+\' を \`--\' に置き換えようとしているところである。]
507 簡潔に表現するために伝統的な短い名前を使っている。
508 長いオプション名と短いオプション名のリストは、
509 「\fBオプションの概要\fR」を参照すること。
516 indent -br test/metabolism.c -l85
521 これにより、プログラム \`test/metabolism.c\' が
522 \`-br\' オプションと \`-l85\' オプションを用いてインデント付けされ、
523 その出力が \`test/metabolism.c\' に重ね書きされ、
524 元の \`test/metabolism.c\' の内容は
525 \`test\' ディレクトリにバックアップファイルとして書き込まれる。
527 この例と同じ指定を長いオプション名を用いて行うと以下のようになる:
533 indent --braces-on-if-line --line-length185 test/metabolism.c
535 indent +braces-on-if-line +line-length185 test/metabolism.c
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\' を探し、
550 この動作は従来のバージョンや別バージョンの \fBindent\fR と異なる。
551 これらは、両方のディレクトリに \`.indent.pro\' ファイルがあれば、
554 \`.indent.pro\' の書式は、コマンドラインに指定するのと同じく、
555 空白 (タブ、スペース、改行) で区切られた単なるオプションのリストである。
556 \`.indent.pro\' のオプションは、
557 C または C++ のコメントで囲むことができる。
560 コマンドラインオプションが処理されるのは、
561 \`.indent.pro\' を処理した\fI後\fRである。
562 後から指定したオプションは、前に指定した引き数を上書きする。
563 これには例外が 1 つある: 明示的に指定したオプションは
564 暗黙のオプションを必ず上書きする(「\fB一般的なスタイル\fR」を参照)。
565 \`-npro\' オプションを指定することにより、
566 \fBindent\fR が \`.indent.pro\' ファイルを読み込まないようにすることができる。
570 バージョン 1.3 からは、GNU \fBindent\fR は GNU 形式、
571 すなわち GNU Emacs と同様の方法でバックアップファイルを作成する。
572 つまり、\fI単純な\fRバックアップファイルと
573 \fI番号付きの\fRバックアップファイルをどちらも作成できる。
576 元のファイル名にサフィックスを追加して生成される。
578 1 文字からなる文字列 \`~\' (チルダ)である。
579 したがって、\`python.c\' のバックアップファイルは \`python.c~\' となる。
581 環境変数 \fBSIMPLE_BACKUP_SUFFIX\fR に好きな文字列を設定することにより、
582 デフォルト値以外の任意の文字列をサフィックスとして使用できる。
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 を追加することにより、数字の桁数を制御する。
594 バックアップファイルの名前は \`momeraths.c.~04~\' のようになる。
596 どちらの方法でバックアップファイルを作るかは、
597 環境変数 \fBVERSION_CONTROL\fR で制御する。
598 この文字列が \`simple\' ならば、単純なバックアップだけが作成される。
599 この値が \`numbered\' ならば、番号付きバックアップが作成される。
600 この値が \`numbered-existing\' ならば、
601 インデント付けするファイルの番号付きのバックアップが\fI既にある\fR場合に、
603 それ以外の場合には、単純なバックアップが作成される。
604 \fBVERSION_CONTROL\fR が設定されていなければ、
605 \fBindent\fR は \`numbered-existing\' が指定されているものとして動作する。
607 別バージョンの \fBindent\fR は、
608 サフィックス \`.BAK\' を使ってバックアップファイルの名前を生成する。
609 この動作は、\fBSIMPLE_BACKUP_SUFFIX\fR に \`.BAK\' を
610 設定することによりエミュレートすることができる。
612 別バージョンの \fBindent\fR は、現在の GNU \fBindent\fR が行うように
613 ソースファイルがあるディレクトリにバックアップを作成するのではなく、
614 カレントディレクトリにバックアップを作成する点にも注意すること。
618 C 言語には一般的なスタイルがいくつかある。
619 例えば、GNU スタイル、Kernighan & Ritchie スタイル、
620 オリジナルの Berkeley スタイル等である。
621 スタイルは\fIバックグラウンド\fRオプション 1 つを使って選択することができる。
622 このオプションは、他のオプション全ての値を指定する。
624 暗黙的に指定されたオプションよりも必ず優先される。
626 バージョン 1.2 からは、GNU \fBindent\fR のデフォルトのスタイルは
628 したがって、このフォーマットで出力するために
629 \`-gnu\' オプションを指定する必要はなくなった。
630 ただし、このオプションを指定してもエラーにはならない。
631 GNU スタイルに対応するオプション設定は以下である:
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
643 GNU コーディングスタイルは GNU プロジェクトで推奨されている。
644 これは GNU Emacs の C モードが適用しようとするスタイルであり、
645 GNU Emacs の C で記述された部分で使われているスタイルである。
646 (GNU プロジェクトのためにプログラムを書くことに興味がある方は、
647 「GNU コーディング規約 (The GNU Coding Standards)」を入手されたい。
648 この文書では、メモリの使い方や整数のサイズ等、
649 セマンティックや移植性についても説明されている。)
651 Kernighan & Ritchie スタイルは有名な書籍
652 「プログラミング言語 C (The C Programming Language)」で使われている。
653 これは \`-kr\' オプションで有効となる。
654 Kernighan & Ritchie スタイルは、以下のオプションの組合せと同等である:
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
666 Kernighan & Ritchie スタイルでは、コードがある行の右の部分にコメントが
667 入れられることはない (コードの右に空白を 1 つだけ入れることもない)。
668 したがって、このスタイルのカラム数 33 というのは
669 \fBindent\fR が勝手に決めたものである:
671 オリジナルの Berkeley 版 \fBindent\fR のスタイルは、
672 \`-orig\' (または長いオプション名 \`--original\')を指定すれば得られる。
673 このスタイルは、以下の設定と同じ意味である:
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
687 各種プログラミングスタイルごとに、空白は異なる場所に置かれる。
688 \fBindent\fRには、特定の場所に空白行を挿入・削除するための
691 \`-bad\' オプションを指定すると、
692 \fBindent\fR は宣言ブロック全ての後に必ず空行を置く。
693 \`-nbad\' オプションを指定すると、このような空白行は置かれない。
695 \`-bap\' オプションを指定すると、手続き本体全ての後に必ず空行が置かれる。
696 \`-nbap\' オプションを指定すると、このような空行は置かれない。
698 \`-bbb\' オプションを指定すると、
700 (箱形コメントについては「\fBコメント\fR」セクションを参照すること)。
701 \`-nbbb\' オプションを指定すると、このような空行は置かれない。
703 \`-sob\' を指定すると、\fBindent\fR は省略できる空行を飲み込んでしまう
704 (つまり、入力行に含まれる省略できる空行が出力から全て削除される)。
706 入力行に含まれる空行は出力ファイルにも全てコピーされる。
709 .SH "--blank-lines-after-declarations"
711 \`-bad\' オプションを指定すると、宣言ブロックの後に必ず空行が置かれる。
712 \`-nbad\' オプションを指定すると、このような空行は追加されない。
720 /* このコメントは宣言のブロックを分けている */
726 \fBindent -bad\fR の出力は以下のようになる。
734 /* このコメントは宣言のブロックを分けている */
740 また、\fBindent -nbad\fR の出力は以下のようになる。
747 /* このコメントは宣言のブロックを分けている */
753 .SH "--blank-lines-after-procedures"
755 \`-bap\' オプションを指定すると、それぞれの宣言本体の後に必ず空行が置かれる。
767 /* この手続き bar には意味はない */
777 \fBindent -bap\fR の出力は以下となる。
788 /* この手続き bar には意味はない */
798 また、\fBindent -nbap\fR の出力は以下となる。
808 /* この手続き bar には意味はない */
818 手続き \fBfoo\fR の後には空行は追加されない。
822 \fBindent\fR は C と C++ のコメントを整形する。
823 C のコメントは \`/*\' で始まって \`*/\' で終り、
825 C++ のコメントは区切り文字 \`//\' で始まり改行で終る。
827 \fBindent\fR はコメントの文脈によって別々の扱い方をする。
829 プリプロセッサディレクティブが後に続くコメントと
830 どのコードの前にも置かれていないコメントを区別する。
831 どのコードの前にも置かれていないコメントとは、
833 (カラム 1 から始まっている必要はない)。
835 さらに \fBindent\fR は手続きや集合体の外側にあるコメントと
837 特に手続きの内側で行の最初にあるコメントは、
838 コードが現在インデントされているカラムにインデントされる。
839 最も左側のカラムから始まるコメントは例外であり、
842 \fBindent\fR は\fI箱形\fRコメントを変更しない。
843 \`*\' や \`-\' で四角形や「箱形」に囲んだコメントは、
844 他から視覚的に区別したいという一般的な意図があるためである。
845 もっと正確に言うと、箱形コメントは次のように定義される。
846 最初の \`/*\' の直後に文字 \`*\', \`=\', \`_\', \`-\' が続いているか、
847 コメント開始区切り文字 (\`/*\') だけの行があり、
848 以降の行はコメント開始区切り文字の \`*\' と同じカラムから
856 /**********************
858 **********************/
868 \fBindent\fR は箱形のコメントを
869 ソースファイルの中に見つかった場所に残しておく。
870 よってコメントのインデント付けは変わらず、
872 別なモードでは、埋め込まれたタブ文字が適切な数の空白に変換されるだけである。
874 \`-bbb\' オプションが指定された場合、
875 箱形コメントがコードの前に置かれていないときは、
882 (1 行に 2 つ以上の改行文字がある) 空行は
884 最初のカラムの後から始まるコメントの整形は、
885 \`-fca\' オプションで有効になる。
886 カラム 1 から始まるコメントを整形するには、\`-fc1\' を指定する。
887 このような整形は、デフォルトでは無効にされている。
889 整形する際の右端は、デフォルトでは 78 であるが、
891 指定された右端まででコメントが表示できない場合、
892 コメントの終りまで右端が自動的に拡張される。
893 コメントが整形されない場合、右端の位置は守られない。
896 (つまり、コメントの左側にプログラムの文字列がない場合)、
898 そのコメントがあったカラムにインデントされる。
899 この場合、(最初のカラムからコメントが開始されていなければ)
900 そのブロックのインデントされたコードにコメントの左端を揃える。
901 揃える位置は \`-d\' オプションで変更可能で、
902 何カラム\fI左\fRへ移動するかを指定する。
904 例えば、\`-d2\' ではコードから左へ空白 2 個の位置にコメントを置く。
905 デフォルトではコードにコメントの左端を揃える。
906 ただし、コメントが最初のカラムから開始されている場合、
908 最初のカラムから始まるコメントをコードに左揃えしたい場合は、
911 コードの右側にあるコメントは、デフォルトではカラム 33 にインデントされる。
912 これは次の 3 つのオプションのいずれかで変更できる。
913 \`-c\' はコードの後のコメントのカラムを指定する。
914 \`-cd\' は宣言の後のコメントのカラムを指定する。
915 \`-cp\' はプリプロセッサディレクティブ
916 \fB#else\fR と \fB#endif\fR の後のコメントのカラムを指定する。
918 コメントの左側にあるコードが最初のカラムから開始されていない場合、
919 コードの終りの次のタブストップの位置からコメントカラムが開始される。
920 プリプロセッサディレクティブが最初のカラムから開始されていない場合、
921 ディレクティブの終りの 1 カラム後からコメントカラムが開始される。
922 この拡張はこのような特定のカラムの出力に対してのみ適応される。
924 \`-cdb\' オプションを指定すると、コメント区切り文字を空行に置く。
925 よって \fB/* Loving hug */\fR のような 1 行のコメントは、
939 複数行コメントの始めに \`*\' を置くことができる。
940 上記の 1 行のコメントは (\`-cdb -sc\' により)
955 \`-br\' または \`-bl\' オプションは、ブレースをどのように整形するかを指定する。
957 \`-br\' オプションを指定するとブレースは以下のように整形される:
969 \`-bl\' オプションを指定するとブレースは以下のように整形される:
982 \`-bl\' オプションを使う場合には \`-bli\' オプションも使うとよい。
983 このオプションはブレースのインデント付けに使う空白の数を指定する。
984 \`-bli2\' (デフォルト値)を指定すると、先に示した結果となる。
985 \`-bli0\' を指定した場合の結果は以下である:
998 \`-br\' オプションを使う場合には、多分 \`-ce\' も使いたくなるだろう。
999 このオプションは if-then-else 構文の \fBelse\fR を直前の \`}\' に隣に置く。
1000 例えば \`-br -ce\' を指定すると、出力は以下のようになる:
1008 fprintf (stderr, "...something wrong?\\n");
1014 同じコードで \`-br -nce\' を指定すると以下のようになる:
1023 fprintf (stderr, "...something wrong?\\n");
1029 これにより do-while ループの \fBwhile\fR は直前の \`}\' と同じ行に置かれる。
1030 例えば \`-cdw\' により以下のような出力が得られる。
1042 同じコードで \`-ncdw\' を指定すると以下のようになる:
1055 \`-cli\' オプションは、case 構文のラベルを \fBswitch\fR 文から
1056 右にインデントする際に空白をいくつ入れるかを指定する。
1058 デフォルトでは以下のようなコードが得られる。
1078 \`-cli2\' を使うと以下のようになる。
1098 case 文の後のブレースのインデントは、
1099 \`-cbi\fIn\fR\' オプションで制御できる。
1100 例えば \`-cli2 -cbi0\' を使うと次のような結果になる。
1120 セミコロンが \fBfor\fR または \fBwhile\fR 文と同じ行にある場合に
1121 \`-ss\' を指定すると、空白がセミコロンの前に置かれる。
1123 \fBfor\fR や \fBwhile\fR 文の本体が空の文であることがはっきりする。
1124 \`-nss\' を指定すると、この機能は無効になる。
1126 \`-pcs\' オプションを指定すると、呼び出される手続きの名前と
1127 \`(\' の間に空白が置かれる (例えば、\fBputs\ ("Hi");\fR となる。
1128 また、\`-npcs\' オプションを指定している場合には \fBputs("Hi");\fR) となる。)
1131 \`-cs\' オプションを指定すると、
1132 \fBindent\fR はキャスト演算子の後に空白を置く。
1134 \`-bs\' オプションを指定すると、
1135 キーワード \fBsizeof\fR とその引き数の間に必ず空白が置かれる。
1137 この機能は \`Bill_Shannon\' オプションとして知られている。
1139 \`-saf\' オプションは \fBfor\fR とその後の括弧の間に空白を入れる。
1142 \`-sai\' オプションは \fBif\fR とその後の括弧の間に空白を入れる。
1145 \`-saw\' オプションは \fBwhile\fR とその後の括弧の間に空白を入れる。
1148 \`-prs\' オプションは全ての括弧とその間にあるものの間に空白を置く。
1149 例えば \`-prs\' を使うと以下のようなコードになる。
1154 while ( ( e_code - s_code ) < ( dec_ind - 1 ) )
1156 set_buf_break ( bb_dec_ind );
1165 デフォルトでは、\fBindent\fR は \`-di\' オプションで指定した
1167 例えば、\`-di16\' を指定すると以下のようになる:
1178 \`-di\' オプションに小さい値 (1 や 2 など) を使うと、
1179 置くことが可能な最初の場所に識別子を置くことができる。
1191 この場合でも、\`-di\' オプションに指定した値は
1192 型指定と異なる行に置いた変数には影響を与える。
1193 例えば、\`-di2\' を指定すると以下のようになる:
1204 \`-bc\' オプションを指定すると、宣言中のコンマの後に改行が置かれる。
1217 同じコードで \`-nbc\' オプションを指定した場合は以下のようになる:
1227 \`-bfda\' オプションを指定すると、
1228 関数宣言の引き数のコンマの後で改行を入れる。
1229 引き数は関数宣言より 1 段深くインデントされる。
1230 これは引き数のリストが長い場合に特に役立つ。
1231 \`-bfde\' オプションを指定すると、
1233 2 つのオプションとも \'n\' を設定した -nbdfa と -nbdfe がデフォルトになる。
1240 void foo (int arg1, char arg2, int *arg3, long arg4, char arg5);
1245 は、\`-bfda\' オプションを指定すると次のようになり、
1260 更に \`-bfde\' オプションを指定すると次のようになる。
1276 \`-psl\' オプションを指定すると、
1277 定義される手続きの型は手続きの名前の前の行に置かれる。
1278 このスタイルは、\fBetags\fR プログラムや Emacs の \fBc-mode\fR の
1279 一部の機能を正しく動作させるために必要である。
1281 プログラム中で \fBtypedef\fR で定義された型の名前を全て、
1282 \`-T\' オプションを使って \fBindent\fR に教えなければならない。
1283 \`-T\' は複数個指定することができ、指定された全ての名前を使うことができる。
1289 typedef unsigned long CODE_ADDR;
1290 typedef enum {red, blue, green} COLOR;
1296 オプション \`-T CODE_ADDR -T COLOR\' を使うことになるだろう。
1298 \`-brs\' や \`-bls\' オプションは struct 宣言の
1299 ブレースをどのように整形するかを指定する。
1300 \`-brs\' オプションはブレースを次のように整形する。
1312 \`-bls\' オプションはブレースを次のように整形する。
1328 各行をどれだけ左端からインデントさせるかである。
1329 \fBif\fR や \fBfor\fR 等の文の先頭部分があると、
1330 インデントの深さは \`-i\' オプションで指定した値だけ増える。
1331 例えば、レベルごとに 8 文字分のインデントさせるには \`-i8\' を使う。
1333 2 行目は \`-ci\' オプションで指定した追加のスペース分だけインデントされる。
1334 \`-ci\' のデフォルト値は 0 である。
1335 しかし、\`-lp\' オプションが指定されており、かつ同じ行で閉じられていない
1336 左括弧がある場合、その続きの行が始まる文字は左括弧の直後の位置に揃えられる。
1337 この処理は \`[\' および初期化リストに現われる \`{\' にも適用される。
1338 例えば、\`-nlp -ci3\' が有効になっていると、
1344 p1 = first_procedure (second_procedure (p2, p3),
1345 third_procedure (p4, p5));
1350 \`-lp\' を有効にすると、コードはいくらか見やすくなる:
1355 p1 = first_procedure (second_procedure (p2, p3),
1356 third_procedure (p4, p5));
1361 文が 2 つ以上の括弧の組 (...) にわかれている場合、
1362 追加された括弧の組ごとに 1 段深くインデントされる。
1368 k > 0) || p == 0) &&
1375 オプション \`-ip\fIN\fR\' は、括弧ごとの追加オフセットを設定するのに使う。
1376 例えば \`-ip0\' は上記のコードを次のように整形する。
1382 k > 0) || p == 0) &&
1389 \fBindent\fR はタブが入力と出力のストリームの両方で
1390 一定の間隔で置かれることを想定している。
1391 この間隔はデフォルトでは 8 カラム幅であるが、
1392 (バージョン 1.2 からは) \`-ts\' オプションで変更することができる。
1395 古い形式の関数定義における型宣言のインデント付けは、
1396 \`-ip\' パラメータで制御することができる。
1397 これは、型宣言では空白何個分のインデントを行うかを
1399 例えばデフォルトの \`-ip5\' では、定義は以下のように整形される:
1405 create_world (x, y, scale)
1416 他のバージョンの indent との互換性のために
1417 オプション \`-nip\' が用意されている。
1418 これは \`-ip0\' と同じである。
1420 ANSI C ではプリプロセッサコマンドラインの文字 \`#\' とコマンド名の間に
1422 デフォルトでは \fBindent\fR はこの空白を削除するが、
1423 \`-lps\' オプションを指定することで
1424 \fBindent\fR にこの空白を変更しないように指示できる。
1425 オプション \`-ppi\' は \`-nlps\' と \`-lps\' を上書きする。
1428 プリプロセッサ条件文を指定された空白数でインデントできる。
1429 例えばオプション \`-ppi 3\' は
1461 オプション \`-l\fIn\fR\' または \`--line-length\fIn\fR\' により、
1462 C 言語コードの行の最大長を指定することができる。
1466 GNU \fBindent\fR は行を論理的な位置で折り返す。
1467 これはバージョン 2.1 の新機能であるが、
1470 どこで行を折り返すかを決定するアルゴリズムに干渉するためのオプションが、
1473 \`-bbo\' オプションを指定すると、GNU \fBindent\fR は
1474 長い行をブーリアン演算子 \fB&&\fR と \fB||\fR の前で折り返す。
1475 \`-nbbo\' オプションを指定すると、GNU \fBindent\fR は
1476 長い行をブーリアン演算子の前で折り返さない。
1477 例えば、(\`--line-length60\' と \`--ignore-newlines\'と一緒に)
1478 デフォルトのオプション \`-bbo\' を指定することにより、
1485 && ((mask[0] == \'\\0\')
1486 || (mask[1] == \'\\0\'
1487 && ((mask[0] == \'0\') || (mask[0] == \'*\')))))
1492 オプション \`-nbbo\' を使うと、次のようになる。
1498 ((mask[0] == \'\\0\') ||
1499 (mask[1] == \'\\0\' &&
1500 ((mask[0] == \'0\') || (mask[0] == \'*\')))))
1505 しかしデフォルトの \`-hnl\' では、
1507 そこで改行するように可能な限りの優先度を与える。
1514 && ((mask[0] == \'\\0\')
1515 || (mask[1] == \'\\0\' && ((mask[0] == \'0\') || (mask[0] == \'*\')))))
1520 オプション \`-hnl\' または \`--honour-newlines\' を
1521 上述の \`-nbbo\' と \`--line-length60\' と一緒に使うと、
1523 入力ファイルのコードで改行されている位置でなるべく折り返される。
1529 && ((mask[0] == \'\\0\')
1530 || (mask[1] == \'\\0\' &&
1531 ((mask[0] == \'0\') || (mask[0] == \'*\')))))
1538 GNU \fBindent\fR で変更しないというものである。
1540 少なくとも 1 回は \`--ignore-newlines\' オプションを付けて
1541 \fBindent\fR に通しておくべきである。
1545 特別な\fI制御用コメント\fRをプログラムに埋め込むことにより、
1546 C 言語コードを部分的に整形しないようにすることができる。
1547 プログラムのあるセクションを整形しないようにするためには、
1548 無効化制御用コメント \fB/* *INDENT-OFF* */\fR だけの行を
1550 この制御用コメントの後でスキャンされたプログラムテキストは、
1551 有効化コメントだけの行がスキャンされるまで、
1553 有効化制御コメントは \fB/* *INDENT-ON* */\fR であり、
1554 このコメントと同じ行で後に続くテキストも整形されずに出力される。
1555 有効化制御コメントの後に続く行から整形が再開される。
1557 もっと正確に言うと、\fBindent\fR は C 言語コメントの
1558 終了区切り文字 (\fB*/\fR) を検証せず、
1561 これらの制御コメントは、 C++ の書式、
1562 つまり \fB // *INDENT-OFF*\fR と \fB// *INDENT-ON*\fR でも機能する。
1564 \fBindent\fR の内部状態は整形しないセクションでも変更されない、
1566 よって、例えば関数の途中で整形を無効にして
1567 関数の終りまで無効にし続けた場合、変な結果になる。
1568 したがって、コードを整形しないことを選択する場合は、
1571 歴史的な注意点: 以前のバージョンの \fBindent\fR では
1572 \fB*INDENT**\fR で始まるエラーメッセージを生成するものがあった。
1573 これらのバージョンの \fBindent\fR は、
1574 このようなエラーメッセージで始まる入力テキスト行を
1576 私はこの閉鎖的な機能を GNU \fBindent\fR から削除した。
1580 使っている \fBindent\fR のバージョンを知るには、
1581 コマンド \fBindent -version\fR を用いること。
1582 これを用いると、通常の処理は全く行われず、
1583 \fBindent\fR のバージョン番号が表示される。
1585 \`-v\' オプションを用いると、詳細表示モードを有効にすることができる。
1586 詳細表示モードでは、\fBindent\fR は 1 つの行を出力で複数行にする時には報告を
1587 行い、実行終了時にサイズに関する情報を出力する。
1589 \`-pmt\' オプションを指定すると、\fBindent\fR は
1590 出力ファイルのアクセス時刻と修正時刻を保存する。
1591 このオプションを使うと、全てのソースファイルとヘッダファイルに
1592 \fBindent\fR を実行しても、\fBmake\fR はターゲットを再構築しない。
1593 このオプションは POSIX \fButime(2)\fR 関数がある
1594 オペレーティングシステムでのみ利用可能である。
1598 バグは bug-indent@gnu.org に報告してほしい。
1600 同じプロファイルで 1 つのファイルに \fBindent\fR を 2 回実行した場合、
1601 2 回目はファイルを\fI全く\fR変更しないべきである。
1602 \fBindent\fR の現在の設計では、それは保証できず、
1605 \fBindent\fR が C を理解しない。
1607 指定されたプロファイル (\`.indent.pro\') で
1608 \fBindent\fR を実行した結果のファイルを入力として使った場合でも、
1609 \fBindent\fR を通したファイルが\fI非可逆\fRになる。
1611 C++ に対して \fBindent\fR を動作させることを試みたが、
1613 C++ のソースに対しては良い結果が得られない。
1615 出力ファイルにコメントを書き出している場合、
1616 \fBindent\fR は指定された \`--line-length\' オプションを参照しない。
1617 そのため、たびたびコメントがかなり右に置かれる。
1619 \fBindent\fR が結合しないようにするため、
1620 コメントが折り返しの最初の行から始まっていることを確認すること。
1622 \fB/* *INDENT-OFF* */\fR によって
1623 \fBindent\fR が無効にされている場合、
1624 \fBindent\fR は行数やコメント数を数えない
1627 \fB/*UPPERCASE*/\fR という形式のコメントは、
1628 コメントとして扱われないが、次の行と結合する識別子として扱われる。
1629 この動作によって、コードの最初に埋め込まれない限り、
1630 このタイプのコメントを無用なものにしてしまう。
1634 以下の著作権表示は \fBindent\fR プログラムに適用される。
1635 このマニュアルに関する著作権と複製許可については、
1636 \`indent.texinfo\' と \`indent.info\' の先頭近くと
1637 \`indent.1\' の末尾近くに記述されている。
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.
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
1668 長い名前についてアルファベット順に並べたオプションのリストを示す。
1669 これを使えば対応する短いオプション名が簡単に分かる。
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
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
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
1711 --honour-newlines -hnl
1712 --ignore-newlines -nhnl
1713 --ignore-profile -npro
1714 --indent-level -i\fIn\fR
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
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
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 のデフォルトのオプションを設定する
1775 UCB の "indent" プログラムが起源である。
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.
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.