.TH INDENT 1 .SH "نام (NAME)" indent \- تغییر ظاهر برنامه C با درج یا حذف فاصله‌ها و فضاهای خالی .SH "خلاصه دستور (SYNOPSIS)" .B "indent " [options] [input\-files] .sp .B "indent " [options] [single\-input\-file] [\-o output\-file] .sp .B "indent " \-\-version .SH "توضیحات (DESCRIPTION)" این صفحه راهنما از فایل \fIindent.texinfo\fR تولید شده است. این ویرایش از "راهنمای \fBindent\fR" است، برای نگارش Indent که اخیراً به‌روزرسانی شده است. برنامه \fBindent\fR می‌تواند برای خواناتر کردن کد مورد استفاده قرار گیرد. همچنین می‌تواند سبک نوشتن کد C را از یک سبک به سبک دیگر تبدیل کند. برنامه .B indent\fR بخش قابل توجهی از نحو (syntax) زبان C را درک می‌کند، اما همچنین تلاش می‌کند با نحو ناقص یا بدشکل نیز سازگاری داشته باشد. در نسخه 1.2 و نگارش‌های جدیدتر، سبک دندانه‌گذاری گنو (GNU) به عنوان پیش‌فرض تعیین شده است. .SH "گزینه‌ها (OPTIONS)" .TP 4 .B -as\fR, \fB--align-with-spaces\fR اگر از تب‌ها برای دندانه‌گذاری استفاده می‌شود، از فاصله برای تراز استفاده کن. .br بخش \fB\ INDENTATION\fR را ببینید. .TP .B -bad\fR, \fB--blank-lines-after-declarations\fR اجبار خطوط خالی پس از اعلان‌ها. .br بخش \fB\ BLANK\ LINES\fR را ببینید. .TP .B -bap\fR, \fB--blank-lines-after-procedures\fR اجبار خطوط خالی پس از بدنه رویه‌ها. .br بخش \fB\ BLANK\ LINES\fR را ببینید. .TP .B -bbb\fR, \fB--blank-lines-before-block-comments\fR اجبار خطوط خالی پیش از توضیحات بلوکی. .br بخش \fB\ BLANK\ LINES\fR را ببینید. .TP .B -bbo\fR, \fB--break-before-boolean-operator\fR ترجیح شکستن خطوط طولانی پیش از عملگرهای بولی. .br بخش \fB\ BREAKING\ LONG\ LINES\fR را ببینید. .TP .B -bc\fR, \fB--blank-lines-after-commas\fR اجبار خط جدید پس از کاما در اعلان. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -bl\fR, \fB--braces-after-if-line\fR قرار دادن آکولاد در خط پس از \fBif\fR و غیره. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -blf\fR, \fB--braces-after-func-def-line\fR قرار دادن آکولاد در خط بعد از خط تعریف تابع. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -bli\fIn\fB\fR, \fB--brace-indent\fIn\fB\fR دندانه‌گذاری آکولادها به میزان \fIn\fR فاصله. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -bls\fR, \fB--braces-after-struct-decl-line\fR قرار دادن آکولاد در خط پس از خطوط اعلان \fBstruct\fR. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -br\fR, \fB--braces-on-if-line\fR قرار دادن آکولاد در خط حاوی \fBif\fR و غیره. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -brf\fR, \fB--braces-on-func-def-line\fR قرار دادن آکولاد در خط تعریف تابع. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -brs\fR, \fB--braces-on-struct-decl-line\fR قرار دادن آکولاد در خط اعلان \fBstruct\fR. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -bs\fR, \fB--Bill-Shannon\fR, \fB--blank-before-sizeof\fR قرار دادن یک فاصله میان \fBsizeof\fR و آرگومان آن. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -c\fIn\fB\fR, \fB--comment-indentation\fIn\fB\fR قرار دادن توضیحات در سمت راست کد در ستون \fIn\fR. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -cbi\fIn\fB\fR, \fB--case-brace-indentation\fIn\fB\fR دندانه‌گذاری آکولادها پس از برچسب case به میزان N فاصله. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -cd\fIn\fB\fR, \fB--declaration-comment-column\fIn\fB\fR قرار دادن توضیحات در سمت راست اعلان‌ها در ستون \fIn\fR. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -cdb\fR, \fB--comment-delimiters-on-blank-lines\fR قرار دادن جداکننده‌های توضیح در خطوط خالی. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -cdw\fR, \fB--cuddle-do-while\fR چسباندن while در دستور \fBdo {} while;\fR به \(oq}\(cq قبلی. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -ce\fR, \fB--cuddle-else\fR چسباندن else به \(oq}\(cq قبلی. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -ci\fIn\fB\fR, \fB--continuation-indentation\fIn\fB\fR دندانه‌گذاری ادامه خط به میزان \fIn\fR فاصله. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -cli\fIn\fB\fR, \fB--case-indentation\fIn\fB\fR دندانه‌گذاری برچسب case به میزان \fIn\fR فاصله. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -cp\fIn\fB\fR, \fB--else-endif-column\fIn\fB\fR قرار دادن توضیحات در سمت راست دستورات \fB#else\fR و \fB #endif\fR در ستون \fIn\fR. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -cs\fR, \fB--space-after-cast\fR قرار دادن یک فاصله پس از عملگر تبدیل نوع (cast). .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -d\fIn\fB\fR, \fB--line-comments-indentation\fIn\fB\fR تنظیم دندانه‌گذاری توضیحاتی که در سمت راست کد نیستند به \fIn\fR فاصله. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -bfda\fR, \fB--break-function-decl-args\fR شکستن خط پیش از تمام آرگومان‌ها در یک اعلان. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -bfde\fR, \fB--break-function-decl-args-end\fR شکستن خط پس از آخرین آرگومان در یک اعلان. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -dj\fR, \fB--left-justify-declarations\fR اگر گزینه -cd 0 استفاده شود، توضیحات پس از اعلان‌ها پشت اعلان چپ‌چین می‌شوند. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -di\fIn\fB\fR, \fB--declaration-indentation\fIn\fB\fR قرار دادن متغیرها در ستون \fIn\fR. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -fc1\fR, \fB--format-first-column-comments\fR قالب‌بندی توضیحات در ستون اول. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -fca\fR, \fB--format-all-comments\fR غیرفعال نکردن تمام قالب‌بندی‌های توضیحات. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -fnc\fR, \fB--fix-nested-comments\fR اصلاح توضیحات تودرتو. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -gnu\fR, \fB--gnu-style\fR استفاده از سبک کدنویسی گنو (GNU). این حالت پیش‌فرض است. .br بخش \fB\ COMMON\ STYLES\fR را ببینید. .TP .B -gts\fR, \fB--gettext-strings\fR رفتار با \fB_("...")\fR و \fBN_("...")\fR در gettext به عنوان رشته به جای تابع. .br بخش \fB\ BREAKING\ LONG\ LINES\fR را ببینید. .TP .B -hnl\fR, \fB--honour-newlines\fR ترجیح شکستن خطوط طولانی در موقعیت خطوط جدید ورودی. .br بخش \fB\ BREAKING\ LONG\ LINES\fR را ببینید. .TP .B -i\fIn\fB\fR, \fB--indent-level\fIn\fB\fR تنظیم سطح دندانه‌گذاری روی \fIn\fR فاصله. .br بخش \fB\ INDENTATION\fR را ببینید. .TP .B -il\fIn\fB\fR, \fB--indent-label\fIn\fB\fR تنظیم آفست برای برچسب‌ها روی ستون \fIn\fR. .br بخش \fB\ INDENTATION\fR را ببینید. .TP .B -ip\fIn\fB\fR, \fB--parameter-indentation\fIn\fB\fR دندانه‌گذاری انواع پارامترها در تعاریف توابع سبک قدیمی به میزان \fIn\fR فاصله. .br بخش \fB\ INDENTATION\fR را ببینید. .TP .B -kr\fR, \fB--k-and-r-style\fR استفاده از سبک کدنویسی کرنیگان و ریچی (K&R). .br بخش \fB\ COMMON\ STYLES\fR را ببینید. .TP .B -l\fIn\fB\fR, \fB--line-length\fIn\fB\fR تنظیم حداکثر طول خط برای خطوط غیرتوضیحی روی \fIn\fR. .br بخش \fB\ BREAKING\ LONG\ LINES\fR را ببینید. .TP .B -lc\fIn\fB\fR, \fB--comment-line-length\fIn\fB\fR تنظیم حداکثر طول خط برای قالب‌بندی توضیحات روی \fIn\fR. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -linux\fR, \fB--linux-style\fR استفاده از سبک کدنویسی لینوکس. .br بخش \fB\ COMMON\ STYLES\fR را ببینید. .TP .B -lp\fR, \fB--continue-at-parentheses\fR تراز کردن خطوط ادامه‌دار در محل پرانتزها. .br بخش \fB\ INDENTATION\fR را ببینید. .TP .B -lps\fR, \fB--leave-preprocessor-space\fR باقی گذاشتن فاصله میان \(oq#\(cq و دستور پیش‌پردازنده. .br بخش \fB\ INDENTATION\fR را ببینید. .TP .B -nlps\fR, \fB--remove-preprocessor-space\fR حذف فاصله میان \(oq#\(cq و دستور پیش‌پردازنده. .br بخش \fB\ INDENTATION\fR را ببینید. .TP .B -nbad\fR, \fB--no-blank-lines-after-declarations\fR اجبار نکردن خطوط خالی پس از اعلان‌ها. .br بخش \fB\ BLANK\ LINES\fR را ببینید. .TP .B -nbap\fR, \fB--no-blank-lines-after-procedures\fR اجبار نکردن خطوط خالی پس از بدنه رویه‌ها. .br بخش \fB\ BLANK\ LINES\fR را ببینید. .TP .B -nbbo\fR, \fB--break-after-boolean-operator\fR ترجیح ندادن شکستن خطوط طولانی پیش از عملگرهای بولی. .br بخش \fB\ BREAKING\ LONG\ LINES\fR را ببینید. .TP .B -nbc\fR, \fB--no-blank-lines-after-commas\fR اجبار نکردن خطوط جدید پس از کاما در اعلان‌ها. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -nbfda\fR, \fB--dont-break-function-decl-args\fR قرار ندادن هر آرگومان اعلان تابع در خط جداگانه. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -ncdb\fR, \fB--no-comment-delimiters-on-blank-lines\fR قرار ندادن جداکننده‌های توضیح در خطوط خالی. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -ncdw\fR, \fB--dont-cuddle-do-while\fR نچسباندن \fB}\fR و \fBwhile\fR در دستور \fBdo {} while;\fR به یکدیگر. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -nce\fR, \fB--dont-cuddle-else\fR نچسباندن \fB}\fR و \fBelse\fR به یکدیگر. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -ncs\fR, \fB--no-space-after-casts\fR قرار ندادن فاصله پس از عملگرهای تبدیل نوع (cast). .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -ndj\fIn\fB\fR, \fB--dont-left-justify-declarations\fR رفتار یکسان با توضیحات پس از اعلان‌ها مشابه توضیحات پس از سایر دستورات. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -nfc1\fR, \fB--dont-format-first-column-comments\fR قالب‌بندی نکردن توضیحات ستون اول به صورت عادی. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -nfca\fR, \fB--dont-format-comments\fR قالب‌بندی نکردن هیچ‌یک از توضیحات. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -ngts\fR, \fB--no-gettext-strings\fR رفتار با \fB_("...")\fR و \fBN_("...")\fR در gettext به عنوان توابع عادی. این حالت پیش‌فرض است. .br بخش \fB\ BREAKING\ LONG\ LINES\fR را ببینید. .TP .B -nhnl\fR, \fB--ignore-newlines\fR ترجیح ندادن شکستن خطوط طولانی در موقعیت خطوط جدید ورودی. .br بخش \fB\ BREAKING\ LONG\ LINES\fR را ببینید. .TP .B -nip\fR, \fB--no-parameter-indentation\fR دندانه‌گذاری با عرض صفر برای پارامترها. .br بخش \fB\ INDENTATION\fR را ببینید. .TP .B -nlp\fR, \fB--dont-line-up-parentheses\fR تراز نکردن پرانتزها. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -npcs\fR, \fB--no-space-after-function-call-names\fR قرار ندادن فاصله پس از نام تابع در فراخوانی‌های تابع. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -nprs\fR, \fB--no-space-after-parentheses\fR قرار ندادن فاصله پس از هر \(cq(\(cq و پیش از هر \(cq)\(cq. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -npsl\fR, \fB--dont-break-procedure-type\fR قرار دادن نوع رویه در همان خط نام آن. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -nsaf\fR, \fB--no-space-after-for\fR قرار ندادن فاصله پس از هر \fBfor\fR. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -nsai\fR, \fB--no-space-after-if\fR قرار ندادن فاصله پس از هر \fBif\fR. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -nsaw\fR, \fB--no-space-after-while\fR قرار ندادن فاصله پس از هر \fBwhile\fR. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -nsc\fR, \fB--dont-star-comments\fR قرار ندادن نویسه \(oq*\(cq در سمت چپ توضیحات. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -nsob\fR, \fB--leave-optional-blank-lines\fR حذف نکردن خطوط خالی اختیاری. .br بخش \fB\ BLANK\ LINES\fR را ببینید. .TP .B -nss\fR, \fB--dont-space-special-semicolon\fR اجبار نکردن فاصله پیش از نقطه‌ویرگول پس از دستورات خاص. غیرفعال‌کننده \(oq-ss\(cq. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -ntac\fR, \fB--dont-tab-align-comments\fR امتداد ندادن توضیحات تا نزدیک‌ترین توقفگاه تب (tabstop). .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -nut\fR, \fB--no-tabs\fR استفاده از فاصله به جای تب. .br بخش \fB\ INDENTATION\fR را ببینید. .TP .B -nv\fR, \fB--no-verbosity\fR غیرفعال‌سازی حالت پرگویی (verbose). .br بخش \fB\ MISCELLANEOUS\ OPTIONS\fR را ببینید. .TP .B -orig\fR, \fB--original\fR استفاده از سبک کدنویسی اصلی برکلی (Berkeley). .br بخش \fB\ COMMON\ STYLES\fR را ببینید. .TP .B -npro\fR, \fB--ignore-profile\fR نخواندن فایل‌های \(oq.indent.pro\(cq. .br بخش \fB\ INVOKING\ INDENT\fR را ببینید. .TP .B -pal\fR, \fB--pointer-align-left\fR قرار دادن ستاره در اعلان اشاره‌گرها در سمت چپ فاصله‌ها، کنار نوع داده: \(oq\(oqchar* p\(cq\(cq. .TP .B -par\fR, \fB--pointer-align-right\fR قرار دادن ستاره در اعلان اشاره‌گرها در سمت راست فاصله‌ها، کنار نام متغیر: \(oq\(oqchar *p\(cq\(cq. این رفتار پیش‌فرض است. .TP .B -pcs\fR, \fB--space-after-procedure-calls\fR درج یک فاصله میان نام رویه فراخوانی‌شده و \(oq(\(cq. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -pi\fIn\fB\fR, \fB--paren-indentation\fIn\fB\fR مشخص کردن دندانه‌گذاری اضافی به ازای هر پرانتز باز \(cq(\(cq هنگام شکستن دستور. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -pmt\fR, \fB--preserve-mtime\fR حفظ زمان‌های دسترسی و تغییر در فایل‌های خروجی. .br بخش \fB\ MISCELLANEOUS\ OPTIONS\fR را ببینید. .TP .B -ppi\fIn\fB\fR, \fB--preprocessor-indentation\fIn\fB\fR مشخص کردن دندانه‌گذاری برای دستورات شرطی پیش‌پردازنده. .br بخش \fB\ INDENTATION\fR را ببینید. .TP .B -prs\fR, \fB--space-after-parentheses\fR قرار دادن یک فاصله پس از هر \(cq(\(cq و پیش از هر \(cq)\(cq. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -psl\fR, \fB--procnames-start-lines\fR قرار دادن نوع رویه در خط قبل از نام آن. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -saf\fR, \fB--space-after-for\fR قرار دادن یک فاصله پس از هر \fBfor\fR. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -sai\fR, \fB--space-after-if\fR قرار دادن یک فاصله پس از هر \fBif\fR. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -sar\fR, \fB--spaces-around-initializers\fR قرار دادن یک فاصله پس از \(oq{\(cq و پیش از \(oq}\(cq در مقدارهای اولیه. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -saw\fR, \fB--space-after-while\fR قرار دادن یک فاصله پس از هر \fBwhile\fR. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -sbi\fIn\fB\fR, \fB--struct-brace-indentation\fIn\fB\fR دندانه‌گذاری آکولادهای struct، union یا enum به میزان N فاصله. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -sc\fR, \fB--start-left-side-of-comments\fR قرار دادن نویسه \(oq*\(cq در سمت چپ توضیحات. .br بخش \fB\ COMMENTS\fR را ببینید. .TP .B -slc\fR, \fB--single-line-conditionals\fR مجاز دانستن قرار گرفتن دستور داخلی در همان خط برای شرط‌های بدون آکولاد (\fBif\fR، \fBelse\fR و غیره). .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -sob\fR, \fB--swallow-optional-blank-lines\fR بلعیدن (حذف) خطوط خالی اختیاری. .br بخش \fB\ BLANK\ LINES\fR را ببینید. .TP .B -ss\fR, \fB--space-special-semicolon\fR در دستورات تک‌خطی \fBfor\fR و \fBwhile\fR، اجبار یک فاصله پیش از نقطه‌ویرگول. .br بخش \fB\ STATEMENTS\fR را ببینید. .TP .B -st\fR, \fB--standard-output\fR نوشتن در خروجی استاندارد. .br بخش \fB\ INVOKING\ INDENT\fR را ببینید. .TP .B -T\fR اعلام نام نوع‌ها (typenames) به \fBindent\fR. .br بخش \fB\ DECLARATIONS\fR را ببینید. .TP .B -ts\fIn\fB\fR, \fB--tab-size\fIn\fB\fR تنظیم اندازه تب روی \fIn\fR فاصله. .br بخش \fB\ INDENTATION\fR را ببینید. .TP .B -ut\fR, \fB--use-tabs\fR استفاده از تب‌ها. این حالت پیش‌فرض است. .br بخش \fB\ INDENTATION\fR را ببینید. .TP .B -v\fR, \fB--verbose\fR فعال‌سازی حالت پرگویی (verbose). .br بخش \fB\ MISCELLANEOUS\ OPTIONS\fR را ببینید. .TP .B -version\fR نمایش شماره نگارش \fBindent\fR. .br بخش \fB\ MISCELLANEOUS\ OPTIONS\fR را ببینید. .SH "فراخوانی INDENT (INVOKING INDENT)" از نگارش 1.3 به بعد، قالب دستور \fBindent\fR به این صورت است: .in +5 .nf .na indent [\fIoptions\fR] [\fIinput-files\fR] indent [\fIoptions\fR] [\fIsingle-input-file\fR] [-o \fIoutput-file\fR] .in -5 .ad .fi این قالب با نگارش‌های پیشین و سایر نسخه‌های .B indent\fR متفاوت است. در حالت اول، یک یا چند فایل ورودی مشخص می‌شوند. برنامه \fBindent\fR یک نسخه پشتیبان از هر فایل تهیه کرده و فایل اصلی با نگارش دندانه‌گذاری‌شده آن جایگزین می‌شود. برای توضیح چگونگی ایجاد نسخه‌های پشتیبان، بخش \fBفایل‌های پشتیبان (BACKUP\ FILES)\fR را ببینید. در حالت دوم، تنها یک فایل ورودی مشخص می‌شود. در این حالت یا هنگامی که از ورودی استاندارد استفاده می‌شود، می‌توانید پس از گزینه \(oq-o\(cq یک فایل خروجی تعیین کنید. برای اینکه \fBindent\fR در خروجی استاندارد بنویسد، از گزینه \(oq-st\(cq استفاده کنید. این کار تنها زمانی مجاز است که فقط یک فایل ورودی وجود داشته باشد یا از ورودی استاندارد استفاده شود. اگر نام هیچ فایل ورودی برده نشود، ورودی استاندارد خوانده می‌شود. همچنین اگر نام فایل به صورت \(oq-\(cq مشخص شود، ورودی استاندارد خوانده خواهد شد. به عنوان مثال، هر یک از دستورهای زیر برنامه \(oqslithy_toves.c\(cq را دریافت کرده و متن دندانه‌گذاری‌شده آن را در \(oqslithy_toves.out\(cq می‌نویسد: .in +5 .nf .na 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 .in -5 .ad .fi بیشتر گزینه‌های دیگر \fBindent\fR چگونگی قالب‌بندی برنامه‌ها را کنترل می‌کنند. از نگارش 1.2 به بعد، \fBindent\fR یک نام طولانی را نیز برای هر گزینه شناسایی می‌کند. گزینه‌های طولانی با پیشوند \(oq--\(cq یا \(oq+\(cq مشخص می‌شوند. [\(oq+\(cq برای حفظ یکپارچگی با استاندارد POSIX با \(oq--\(cq جایگزین شده است.] در بیشتر قسمت‌های این سند، نام‌های کوتاه سنتی به منظور اختصار به کار رفته‌اند. برای فهرستی از گزینه‌ها شامل نام‌های کوتاه و طولانی، بخش \fBگزینه‌ها (OPTIONS)\fR را ببینید. در اینجا مثال دیگری آورده شده است: .in +5 .nf .na indent -br test/metabolism.c -l85 .in -5 .ad .fi این دستور برنامه \(oqtest/metabolism.c\(cq را با استفاده از گزینه‌های \(oq-br\(cq و \(oq-l85\(cq دندانه‌گذاری کرده، خروجی را مجدداً در \(oqtest/metabolism.c\(cq بازنویسی نموده و محتوای اصلی \(oqtest/metabolism.c\(cq را در یک فایل پشتیبان در دایرکتوری \(oqtest\(cq می‌نویسد. فراخوانی‌های معادل با استفاده از نام‌های گزینه‌های طولانی برای این مثال به این صورت خواهد بود: .in +5 .nf .na indent --braces-on-if-line --line-length185 test/metabolism.c indent +braces-on-if-line +line-length185 test/metabolism.c .in -5 .ad .fi اگر دریافتید که اغلب از \fBindent\fR با گزینه‌های یکسانی استفاده می‌کنید، می‌توانید آن گزینه‌ها را در فایلی به نام \(oq.indent.pro\(cq قرار دهید. برنامه .B indent\fR در سه مکان به دنبال فایل پروفایل می‌گردد: ابتدا متغیر محیطی \fBINDENT_PROFILE\fR را بررسی می‌کند. اگر این متغیر وجود داشته باشد، انتظار می‌رود مقدار آن نام فایلی باشد که باید استفاده شود. اگر این متغیر محیطی وجود نداشته باشد، indent در پوشه جاری به دنبال \(oq.indent.pro\(cq می‌گردد و در صورت یافتن از آن استفاده می‌کند. در نهایت \fBindent\fR پوشه خانگی شما را برای یافتن \(oq.indent.pro\(cq جستجو کرده و در صورت یافتن از آن فایل استفاده می‌کند. این رفتار با سایر نگارش‌های .B indent\fR که در صورت وجود هر دو فایل، هر دو را بارگذاری می‌کنند متفاوت است. ساختار \(oq.indent.pro\(cq به سادگی فهرستی از گزینه‌ها است، درست مانند آنچه در خط فرمان می‌آید، که با فاصله خالی (تب‌ها، فاصله‌ها و خطوط جدید) از یکدیگر جدا شده‌اند. گزینه‌ها در \(oq.indent.pro\(cq می‌توانند با توضیحات C یا ++C احاطه شوند که در این صورت نادیده گرفته خواهند شد. سوییچ‌های خط فرمان \fIپس از\fR پردازش \(oq.indent.pro\(cq مدیریت می‌شوند. گزینه‌هایی که دیرتر مشخص شوند گزینه‌های پیشین را بازنویسی می‌کنند، با یک استثنا: گزینه‌هایی که به صراحت مشخص شده‌اند همیشه گزینه‌های سبک پس‌زمینه را بازنویسی می‌نمایند (بخش \fBسبک‌های رایج (COMMON\ STYLES)\fR را ببینید). می‌توانید با تعیین گزینه \(oq-npro\(cq مانع از خواندن فایل \(oq.indent.pro\(cq توسط \fBindent\fR شوید. .SH "فایل‌های پشتیبان (BACKUP FILES)" از نگارش 1.3 به بعد، برنامه GNU \fBindent\fR فایل‌های پشتیبان را به سبک گنو، مشابه روش GNU Emacs ایجاد می‌کند. این بدان معناست که نام فایل‌های پشتیبان می‌تواند به صورت \fIsimple\fR (ساده) یا .I numbered\fR (شماره‌گذاری‌شده) باشد. نام فایل‌های پشتیبان ساده با افزودن یک پسوند به نام فایل اصلی تولید می‌شود. مقدار پیش‌فرض برای این پسوند، نویسه یک‌حرفی \(oq~\(cq (تیلده) است. بنابراین، فایل پشتیبان برای \(oqpython.c\(cq برابر با \(oqpython.c~\(cq خواهد بود. به جای مقدار پیش‌فرض، می‌توانید با تنظیم متغیر محیطی \fBSIMPLE_BACKUP_SUFFIX\fR روی پسوند مورد نظر خود، هر رشته‌ای را به عنوان پسوند تعیین کنید. نسخه‌های پشتیبان شماره‌گذاری‌شده از یک فایل مانند \(oqmomeraths.c\(cq به شکل \(oqmomeraths.c.~23~\(cq خواهند بود که در آن 23 شماره نسخه این پشتیبان ویژه است. هنگام تهیه یک نسخه پشتیبان شماره‌گذاری‌شده از فایل \(oqsrc/momeraths.c\(cq، فایل پشتیبان به نام \(oqsrc/momeraths.c.~\fIV\fR~\(cq نام‌گذاری می‌شود که در آن .I V\fR یک واحد بزرگ‌تر از بالاترین نسخه موجود در دایرکتوری \(oqsrc\(cq است. متغیر محیطی \fBVERSION_WIDTH\fR تعداد ارقام را کنترل می‌کند و در صورت نیاز از پر کردن با صفر در سمت چپ استفاده می‌نماید. برای مثال، تنظیم این متغیر روی "2" منجر به نام‌گذاری فایل پشتیبان به صورت \(oqmomeraths.c.~04~\(cq می‌شود. نوع فایل پشتیبان ایجادشده توسط مقدار متغیر محیطی \fBVERSION_CONTROL\fR کنترل می‌شود. اگر مقدار آن رشته \(oqsimple\(cq باشد، تنها نسخه‌های پشتیبان ساده ایجاد خواهند شد. اگر مقدار آن رشته \(oqnumbered\(cq باشد، نسخه‌های پشتیبان شماره‌گذاری‌شده ایجاد می‌شوند. اگر مقدار آن \(oqnumbered-existing\(cq باشد، در صورتی نسخه‌های پشتیبان شماره‌گذاری‌شده ایجاد می‌شوند که از قبل نسخه‌های پشتیبان شماره‌گذاری‌شده برای فایلی که دندانه‌گذاری می‌شود \fIوجود داشته باشند\fR؛ در غیر این صورت یک پشتیبان ساده تهیه می‌شود. اگر متغیر \fBVERSION_CONTROL\fR تنظیم نشده باشد، \fBindent\fR رفتار \(oqnumbered-existing\(cq را در نظر می‌گیرد. سایر نگارش‌های \fBindent\fR از پسوند \(oq.BAK\(cq در نام‌گذاری فایل‌های پشتیبان استفاده می‌کنند. این رفتار را می‌توان با تنظیم متغیر .B SIMPLE_BACKUP_SUFFIX\fR روی \(oq.BAK\(cq شبیه‌سازی کرد. همچنین توجه داشته باشید که نگارش‌های دیگر \fBindent\fR فایل‌های پشتیبان را در پوشه جاری می‌سازند، نه در پوشه فایل مبدأ، برخلاف کاری که اکنون GNU \fBindent\fR انجام می‌دهد. .SH "سبک‌های رایج (COMMON STYLES)" چندین سبک رایج برای کدنویسی C وجود دارد، از جمله سبک گنو (GNU)، سبک کرنیگان و ریچی (Kernighan & Ritchie) و سبک اصلی برکلی (Berkeley). یک سبک می‌تواند با یک گزینه \fIپس‌زمینه\fR (background) انتخاب شود که مجموعه‌ای از مقادیر را برای تمامی گزینه‌های دیگر تعیین می‌کند. با این حال، گزینه‌هایی که به صراحت مشخص شده‌اند همیشه گزینه‌های ضمنیِ سبک پس‌زمینه را بازنویسی می‌نمایند. از نگارش 1.2 به بعد، سبک پیش‌فرض GNU \fBindent\fR همان سبک GNU است. بنابراین، دیگر نیازی به تعیین گزینه \(oq-gnu\(cq برای دستیابی به این قالب نیست، اگرچه انجام این کار نیز خطایی ایجاد نمی‌کند. تنظیمات گزینه‌های متناظر با سبک GNU به این صورت است: .in +5 .nf .na -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 .in -5 .ad .fi سبک کدنویسی گنو سبکی است که پروژه GNU آن را ترجیح می‌دهد. این سبکی است که حالت C در GNU Emacs آن را ترویج می‌کند و در بخش‌های C از GNU Emacs استفاده شده است. (افرادی که علاقه‌مند به نوشتن برنامه برای پروژه گنو هستند باید نسخه‌ای از "استانداردهای کدنویسی گنو" را تهیه کنند که مسایل معنایی و قابلیت حمل نظیر مصرف حافظه، اندازه اعداد صحیح و غیره را نیز پوشش می‌دهد.) سبک کرنیگان و ریچی در سراسر کتاب نام‌آشنای آنها با عنوان "The C Programming Language" استفاده شده است. این سبک با گزینه \(oq-kr\(cq فعال می‌شود. سبک کرنیگان و ریچی متناظر با مجموعه گزینه‌های زیر است: .in +5 .nf .na -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 -par .in -5 .ad .fi سبک کرنیگان و ریچی توضیحات سمت راست کد را همواره در یک ستون یکسان قرار نمی‌دهد (و همچنین فقط از یک فاصله در سمت راست کد استفاده نمی‌کند)، بنابراین برای این سبک، برنامه \fBindent\fR به دلخواه ستون 33 را انتخاب کرده است. سبک برنامه اصلی Berkeley \fBindent\fR را می‌توان با تعیین \(oq-orig\(cq (یا با استفاده از نام طولانی گزینه یعنی \(oq--original\(cq) به دست آورد. این سبک معادل تنظیمات زیر است: .in +5 .nf .na -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 .in -5 .ad .fi سبک لینوکس در کد هسته لینوکس و درایورها استفاده می‌شود. کدها به طور کلی باید از سبک کدنویسی لینوکس پیروی کنند تا پذیرفته شوند. این سبک معادل تنظیمات زیر است: .in +5 .nf .na -nbad -bap -nbc -bbo -hnl -br -brs -c33 -cd33 -ncdb -ce -ci4 -cli0 -d0 -di1 -nfc1 -i8 -ip0 -l80 -lp -npcs -nprs -npsl -sai -saf -saw -ncs -nsc -sob -nfca -cp33 -ss -ts8 -il1 .in -5 .ad .fi .SH "خطوط خالی (BLANK LINES)" سبک‌های مختلف برنامه‌نویسی در جاهای گوناگونی از خطوط خالی استفاده می‌کنند. برنامه .B indent\fR دارای گزینه‌های متعددی برای درج یا حذف خطوط خالی در مکان‌های خاص است. گزینه \(oq-bad\(cq باعث می‌شود \fBindent\fR بعد از هر بلوک اعلان‌ها یک خط خالی اجباری قرار دهد. گزینه \(oq-nbad\(cq باعث می‌شود .B indent\fR چنین خطوط خالی را اجبار نکند. گزینه \(oq-bap\(cq یک خط خالی را پس از هر بدنه رویه (تابع) اجبار می‌نماید. گزینه \(oq-nbap\(cq چنین خط خالی را اعمال نمی‌کند. گزینه \(oq-bbb\(cq یک خط خالی را پیش از هر توضیح کادربندی‌شده اجبار می‌کند (بخش \fBتوضیحات و کامنت‌ها (COMMENTS)\fR را ببینید). گزینه \(oq-nbbb\(cq چنین خطوط خالی را اجبار نمی‌کند. گزینه \(oq-sob\(cq باعث می‌شود \fBindent\fR خطوط خالی اختیاری را ببلعد (بدین معنا که هر خط خالی اختیاری موجود در ورودی، از خروجی حذف خواهد شد). اگر گزینه \(oq-nsob\(cq مشخص شود، هر خط خالی موجود در فایل ورودی در فایل خروجی کپی می‌شود. .SH "--blank-lines-after-declarations" گزینه \(oq-bad\(cq یک خط خالی را بعد از هر بلوک اعلان‌ها اجبار می‌کند. گزینه \(oq-nbad\(cq هیچ‌گونه خط خالی به این صورت اضافه نمی‌کند. برای مثال، با داشتن ورودی زیر: .in +5 .nf .na char *foo; char *bar; /* This separates blocks of declarations. */ int baz; .in -5 .ad .fi دستور .B indent -bad\fR خروجی زیر را تولید می‌کند: .in +5 .nf .na char *foo; char *bar; /* This separates blocks of declarations. */ int baz; .in -5 .ad .fi و دستور \fBindent -nbad\fR خروجی زیر را ایجاد می‌نماید: .in +5 .nf .na char *foo; char *bar; /* This separates blocks of declarations. */ int baz; .in -5 .ad .fi .SH "--blank-lines-after-procedures" گزینه \(oq-bap\(cq یک خط خالی را پس از هر بدنه رویه اجبار می‌کند. برای مثال با داشتن ورودی زیر: .in +5 .nf .na int foo () { puts("Hi"); } /* The procedure bar is even less interesting. */ char * bar () { puts("Hello"); } .in -5 .ad .fi دستور .B indent -bap\fR خروجی زیر را تولید می‌کند: .in +5 .nf .na int foo () { puts ("Hi"); } /* The procedure bar is even less interesting. */ char * bar () { puts ("Hello"); } .in -5 .ad .fi و دستور \fBindent -nbap\fR این خروجی را تولید می‌نماید: .in +5 .nf .na int foo () { puts ("Hi"); } /* The procedure bar is even less interesting. */ char * bar () { puts ("Hello"); } .in -5 .ad .fi هیچ خط خالی پس از رویه \fBfoo\fR اضافه نخواهد شد. .SH "توضیحات و کامنت‌ها (COMMENTS)" برنامه .B indent\fR هم توضیحات C و هم ++C را قالب‌بندی می‌کند. توضیحات C با \(oq/*\(cq آغاز شده، با \(oq*/\(cq خاتمه می‌یابند و می‌توانند شامل نویسه‌های خط جدید باشند. توضیحات ++C با جداکننده \(oq//\(cq شروع شده و در انتهای خط خاتمه می‌یابند. برنامه .B indent\fR بسته به زمینه (context) توضیحات، با آن‌ها به طور متفاوتی رفتار می‌کند. برنامه .B indent\fR تلاش می‌کند میان توضیحاتی که پس از دستورات می‌آیند، توضیحاتی که پس از اعلان‌ها قرار دارند، توضیحاتی که پس از دستورات پیش‌پردازنده می‌آیند و توضیحاتی که پیش از آنها هیچ‌گونه کدی وجود ندارد (یعنی در ابتدای خط آغاز می‌شوند، هرچند لزوماً در ستون ۱ نیستند) تفاوت قائل شود. برنامه .B indent\fR همچنین میان توضیحاتی که در خارج از رویه‌ها و ساختارها قرار دارند و آن‌هایی که درون آنها هستند تمایز قائل می‌شود. به ویژه، توضیحاتی که خطی را درون یک رویه شروع می‌کنند، به اندازه‌ای دندانه‌گذاری می‌شوند که کد جاری در آن نقطه دندانه‌گذاری شده است. استثنای این قاعده، توضیحی است که در چپ‌ترین ستون (ستون اول) آغاز شده باشد؛ چنین توضیحی در همان ستون خروجی داده می‌شود. برنامه .B indent\fR تلاش می‌کند \fIتوضیحات کادربندی‌شده (boxed comments)\fR را بدون تغییر باقی بگذارد. ایده کلی چنین توضیحی این است که برای تمایز بصری، درون یک مستطیل یا \(oq\(oqجعبه\(cq\(cq از ستاره‌ها یا خط‌تیره‌ها احاطه شده است. به طور دقیق‌تر، توضیحات کادربندی‌شده آن‌هایی هستند که بلافاصله پس از \(oq/*\(cq آغازین، نویسه \(oq*\(cq، \(oq=\(cq، \(oq_\(cq یا \(oq-\(cq آمده باشد، یا آن‌هایی که جداکننده شروع توضیح (\(oq/*\(cq) به تنهایی در یک خط قرار داشته باشد و خط بعدی با یک \(oq*\(cq در همان ستونِ ستاره جداکننده آغازین شروع شود. نمونه‌هایی از توضیحات کادربندی‌شده عبارتند از: .in +5 .nf .na /********************** * Comment in a box!! * **********************/ /* * A different kind of scent, * for a different kind of comment. */ .in -5 .ad .fi برنامه .B indent\fR تلاش می‌کند توضیحات کادربندی‌شده را دقیقاً همان‌گونه که در فایل مبدأ هستند حفظ کند. بنابراین دندانه‌گذاری توضیح بدون تغییر می‌ماند و طول آن به هیچ وجه بررسی نمی‌شود. تنها تغییر اعمال‌شده این است که ممکن است نویسه تب موجود در آن به تعداد مناسبی فاصله تبدیل شود. اگر گزینه \(oq-bbb\(cq مشخص شود، پیش از تمامی این‌گونه توضیحات کادربندی‌شده یک خط خالی قرار می‌گیرد، مگر اینکه قبل از چنین توضیحی کدی قرار گرفته باشد. توضیحاتی که کادربندی‌شده نیستند ممکن است قالب‌بندی شوند، به این معنی که خط شکسته می‌شود تا درون حاشیه سمت راست جای گیرد و از سمت چپ با فاصله‌ها پر می‌شود. خط‌های جدید منفرد معادل یک فاصله هستند، اما خطوط خالی (دو یا چند خط جدید متوالی) به معنای شکستن پاراگراف در نظر گرفته می‌شوند. قالب‌بندی توضیحاتی که بعد از ستون اول شروع می‌شوند با گزینه \(oq-fca\(cq فعال می‌گردد. برای قالب‌بندی آن‌هایی که در ستون اول آغاز می‌شوند، گزینه \(oq-fc1\(cq را تعیین کنید. چنین قالب‌بندی‌هایی به طور پیش‌فرض غیرفعال هستند. حاشیه سمت راست برای قالب‌بندی به طور پیش‌فرض 78 است، اما می‌توان آن را با گزینه \(oq-lc\(cq تغییر داد. اگر حاشیه مشخص‌شده اجازه چاپ توضیح را ندهد، حاشیه به طور خودکار برای مدت آن توضیح افزایش می‌یابد. در صورتی که توضیح در حال قالب‌بندی نباشد، این حاشیه رعایت نمی‌شود. اگر گزینه \(oq-fnc\(cq مشخص شود، در تمامی توضیحاتی که حاوی \(oq/*\(cq تعبیه‌شده هستند، آن توالی با یک فاصله و به دنبال آن نویسه \(oq*\(cq جایگزین می‌شود و بدین ترتیب حالت تودرتو حذف می‌گردد. اگر توضیح در ابتدای خط باشد (یعنی هیچ متن برنامه‌ای در سمت چپ آن وجود نداشته باشد)، در همان ستونی که پیدا شده دندانه‌گذاری می‌شود، مگر اینکه درون یک بلوک کد باشد. در این صورت، چنین توضیحی با کد دندانه‌گذاری‌شده آن بلوک تراز می‌شود (مگر اینکه توضیح در ستون اول آغاز شده باشد). این تراز می‌تواند تحت تأثیر گزینه \(oq-d\(cq قرار گیرد که مقداری را تعیین می‌کند که توضیحات به سمت \fIچپ\fR منتقل شده یا از دندانه‌گذاری کاسته می‌شوند. برای مثال، \(oq-d2\(cq توضیحات را دو فاصله به سمت چپ کد قرار می‌دهد. به طور پیش‌فرض، توضیحات با کد تراز می‌شوند، مگر اینکه در ستون اول آغاز شوند که در این صورت به طور پیش‌فرض در همان‌جا باقی می‌مانند --- برای تراز کردن آن‌ها با کد، گزینه \(oq-fc1\(cq را مشخص کنید. توضیحات سمت راست کد به طور پیش‌فرض در ستون 33 ظاهر می‌شوند. این مقدار را می‌توان با یکی از سه گزینه تغییر داد: گزینه \(oq-c\(cq ستون توضیحات پس از کد را مشخص می‌کند، گزینه \(oq-cd\(cq ستون توضیحات پس از اعلان‌ها را تعیین می‌نماید، و گزینه \(oq-cp\(cq ستون توضیحات پس از دستورات پیش‌پردازنده \fB#else\fR و \fB#endif\fR را معین می‌سازد. گزینه \(oq-dj\(cq همراه با \(oq-cd0\(cq می‌تواند برای جلوگیری از تراز توضیحات در سمت راست اعلان‌ها استفاده شود، که باعث می‌شود توضیح در فاصله یک توقفگاه تب (tabstop) از پایان اعلان قرار گیرد. معمولاً \(oq-cd0\(cq باعث می‌شود \(oq-c\(cq اعمال گردد. اگر کد سمت چپ توضیح از ستون شروع فراتر رود، ستون توضیح به ستون توقفگاه تب بعدی بعد از انتهای کد امتداد می‌یابد، مگر اینکه گزینه \(oq-ntac\(cq مشخص شده باشد. در مورد دستورات پیش‌پردازنده، توضیحات به اندازه یک فاصله فراتر از انتهای دستور امتداد می‌یابند. این امتداد تنها برای خروجی همان توضیح خاص اعمال می‌شود. گزینه \(oq-cdb\(cq جداکننده‌های توضیح را در خطوط خالی قرار می‌دهد. بنابراین یک توضیح تک‌خطی مانند \fB/* Loving hug */\fR می‌تواند تبدیل شود به: .in +5 .nf .na /* Loving hug */ .in -5 .ad .fi با استفاده از گزینه \(oq-sc\(cq می‌توان در ابتدای توضیحات چندخطی ستاره قرار داد. بنابراین توضیح تک‌خطی بالا می‌تواند (با \(oq-cdb -sc\(cq) تبدیل شود به: .in +5 .nf .na /* * Loving hug */ .in -5 .ad .fi .SH "عبارت‌ها و دستورات (STATEMENTS)" گزینه‌های \(oq-br\(cq یا \(oq-bl\(cq نحوه قالب‌بندی آکولادها را مشخص می‌کنند. گزینه \(oq-br\(cq آکولادهای دستورات را به این شکل قالب‌بندی می‌کند: .in +5 .nf .na if (x > 0) { x--; } .in -5 .ad .fi گزینه \(oq-bl\(cq آن‌ها را به این شکل قالب‌بندی می‌کند: .in +5 .nf .na if (x > 0) { x--; } .in -5 .ad .fi اگر از گزینه \(oq-bl\(cq استفاده می‌کنید، ممکن است بخواهید گزینه \(oq-bli\(cq را نیز مشخص نمایید. این گزینه تعداد فاصله‌هایی را تعیین می‌کند که آکولادها دندانه‌گذاری می‌شوند. مقدار پیش‌فرض یعنی \(oq-bli2\(cq نتیجه نشان‌داده‌شده در بالا را حاصل می‌کند. مقدار \(oq-bli0\(cq نتیجه زیر را در پی دارد: .in +5 .nf .na if (x > 0) { x--; } .in -5 .ad .fi اگر از گزینه \(oq-br\(cq استفاده می‌کنید، احتمالاً مایلید از گزینه \(oq-ce\(cq نیز بهره بگیرید. این گزینه باعث می‌شود بخش \fBelse\fR در ساختار if-then-else به \(oq}\(cq بلافاصله قبل از خود بچسبد. برای نمونه، با \(oq-br -ce\(cq نتیجه زیر را دریافت می‌کنید: .in +5 .nf .na if (x > 0) { x--; } else { fprintf (stderr, "...something wrong?\\n"); } .in -5 .ad .fi با گزینه \(oq-br -nce\(cq کد به این شکل خواهد بود: .in +5 .nf .na if (x > 0) { x--; } else { fprintf (stderr, "...something wrong?\\n"); } .in -5 .ad .fi استثنای این رفتار زمانی رخ می‌دهد که توضیحی میان آکولاد راست و دستور else پس از آن قرار گرفته باشد. در حالی که گزینه \(oq-br\(cq باعث می‌شود آکولاد چپ از روی توضیح بپرد، دستور else از روی توضیح نمی‌پرد تا به آکولاد بچسبد، زیرا احتمال بسیار زیادی وجود دارد که معنای توضیح تغییر کند. گزینه \(oq-cdw\(cq باعث می‌شود \fBwhile\fR در یک حلقه do-while به \(oq}\(cq بلافاصله قبل از خود بچسبد. برای مثال، با \(oq-cdw\(cq نتیجه زیر را دریافت می‌کنید: .in +5 .nf .na do { x--; } while (x); .in -5 .ad .fi با گزینه \(oq-ncdw\(cq کد به این شکل ظاهر خواهد شد: .in +5 .nf .na do { x--; } while (x); .in -5 .ad .fi گزینه \(oq-slc\(cq امکان قرارگیری یک شرط بدون آکولاد و دستور داخلی آن را در همان خط فراهم می‌سازد. برای نمونه: .in +5 .nf .na if (x) x--; else x++; .in -5 .ad .fi بدون گزینه \(oq-slc\(cq کد به این صورت خواهد بود: .in +5 .nf .na if (x) x--; else x++; .in -5 .ad .fi گزینه \(oq-cli\(cq تعداد فاصله‌هایی را مشخص می‌کند که برچسب‌های case باید در سمت راست دستور \fBswitch\fR دربرگیرنده دندانه‌گذاری شوند. حالت پیش‌فرض کدی مانند این تولید می‌کند: .in +5 .nf .na switch (i) { case 0: break; case 1: { ++i; } default: break; } .in -5 .ad .fi با استفاده از \(oq-cli2\(cq این کد به این شکل درمی‌آید: .in +5 .nf .na switch (i) { case 0: break; case 1: { ++i; } default: break; } .in -5 .ad .fi دندانه‌گذاری آکولادهای زیر یک دستور case را می‌توان با گزینه \(oq-cbi\fIn\fR\(cq کنترل کرد. برای نمونه، استفاده از \(oq-cli2 -cbi0\(cq نتیجه زیر را در پی دارد: .in +5 .nf .na switch (i) { case 0: break; case 1: { ++i; } default: break; } .in -5 .ad .fi اگر نقطه‌ویرگول در همان خط دستور \fBfor\fR یا \fBwhile\fR باشد، گزینه \(oq-ss\(cq باعث می‌شود یک فاصله قبل از نقطه‌ویرگول قرار گیرد. این امر بر نقطه‌ویرگول تأکید کرده و نشان می‌دهد که بدنه دستور \fBfor\fR یا \fBwhile\fR یک دستور خالی است. گزینه \(oq-nss\(cq این ویژگی را غیرفعال می‌کند. گزینه \(oq-pcs\(cq باعث می‌شود یک فاصله میان نام رویه فراخوانی‌شده و \(oq(\(cq قرار گیرد (برای نمونه، \fBputs\ ("Hi");\fR؛ در حالی که گزینه \(oq-npcs\(cq نتیجه \fBputs("Hi");\fR را می‌دهد). اگر گزینه \(oq-cs\(cq مشخص شود، \fBindent\fR یک فاصله میان عملگر تبدیل نوع (cast) و شیء مورد تبدیل قرار می‌دهد. گزینه \(oq-ncs\(cq تضمین می‌کند که هیچ فاصله‌ای میان عملگر تبدیل نوع و شیء وجود نداشته باشد. به یاد داشته باشید که \fBindent\fR تنها انواع داده استاندارد C را می‌شناسد و از این رو نمی‌تواند انواع تعریف‌شده توسط کاربر را در تبدیل نوع شناسایی کند. بنابراین با \fB(mytype)thing\fR به عنوان تبدیل نوع برخورد نمی‌شود. گزینه \(oq-bs\(cq اطمینان حاصل می‌کند که یک فاصله میان کلمه کلیدی \fBsizeof\fR و آرگومان آن قرار گیرد. در برخی نگارش‌ها، این گزینه به عنوان گزینه \(oqBill_Shannon\(cq شناخته می‌شود. گزینه \(oq-saf\(cq یک فاصله را میان \fBfor\fR و پرانتز پس از آن اجبار می‌کند. این حالت پیش‌فرض است. گزینه \(oq-sai\(cq یک فاصله را میان \fBif\fR و پرانتز پس از آن اجبار می‌کند. این حالت پیش‌فرض است. گزینه \(oq-saw\(cq یک فاصله را میان \fBwhile\fR و پرانتز پس از آن اجبار می‌کند. این حالت پیش‌فرض است. گزینه \(oq-prs\(cq باعث می‌شود تمامی پرانتزها با یک فاصله از هر آنچه درون آنهاست جدا شوند. برای نمونه، استفاده از \(oq-prs\(cq نتیجه‌ای شبیه به این به همراه دارد: .in +5 .nf .na while ( ( e_code - s_code ) < ( dec_ind - 1 ) ) { set_buf_break ( bb_dec_ind ); *e_code++ = \(cq \(cq; } .in -5 .ad .fi .SH "اعلان‌ها (DECLARATIONS)" به‌طور پیش‌فرض، \fBindent\fR شناسه‌ها را در ستون تعیین‌شده توسط گزینه \(oq-di\(cq تراز می‌کند. برای مثال، \(oq-di16\(cq خروجی را شبیه به این می‌سازد: .in +5 .nf .na int foo; char *bar; .in -5 .ad .fi استفاده از مقداری کوچک (مانند یک یا دو) برای گزینه \(oq-di\(cq می‌تواند به کار رود تا شناسه‌ها در اولین موقعیت موجود قرار گیرند؛ برای مثال: .in +5 .nf .na int foo; char *bar; .in -5 .ad .fi مقدار داده‌شده به گزینه \(oq-di\(cq همچنان بر متغیرهایی که در خطوط جداگانه از انواع خود قرار دارند اثرگذار خواهد بود، به عنوان نمونه \(oq-di2\(cq منجر به این حالت می‌شود: .in +5 .nf .na int foo; .in -5 .ad .fi اگر گزینه \(oq-bc\(cq مشخص شود، پس از هر کاما در یک اعلان یک خط جدید اجبار می‌شود. برای مثال: .in +5 .nf .na int a, b, c; .in -5 .ad .fi با گزینه \(oq-nbc\(cq این خروجی به شکل زیر خواهد بود: .in +5 .nf .na int a, b, c; .in -5 .ad .fi گزینه \(oq-bfda\(cq باعث می‌شود پس از کامایی که آرگومان‌های اعلان تابع را از هم جدا می‌کند، یک خط جدید اجبار شود. آرگومان‌ها در یک سطح دندانه‌گذاری عمیق‌تر از اعلان تابع ظاهر خواهند شد. این امر به ویژه برای توابعی با فهرست‌های طولانی آرگومان بسیار سودمند است. گزینه \(oq-bfde\(cq باعث می‌شود پیش از پرانتز بسته اعلان تابع، یک خط جدید اجبار شود. برای هر دو گزینه، تنظیم \(cqn\(cq حالت پیش‌فرض است: ‎-nbfda و ‎-nbfde. برای مثال: .in +5 .nf .na void foo (int arg1, char arg2, int *arg3, long arg4, char arg5); .in -5 .ad .fi با گزینه \(oq-bfda\(cq خروجی شبیه به این خواهد بود: .in +5 .nf .na void foo ( int arg1, char arg2, int *arg3, long arg4, char arg5); .in -5 .ad .fi علاوه بر این، با گزینه \(oq-bfde\(cq خروجی به این صورت خواهد بود: .in +5 .nf .na void foo ( int arg1, char arg2, int *arg3, long arg4, char arg5 ); .in -5 .ad .fi گزینه \(oq-psl\(cq باعث می‌شود نوع رویه‌ای که در حال تعریف است در خط پیش از نام رویه قرار گیرد. این سبک برای کارکرد صحیح برنامه \fBetags\fR و همچنین برخی توابع \fBc-mode\fR در Emacs ضروری است. شما باید از گزینه \(oq-T\(cq استفاده کنید تا نام تمامی نام‌انواع (typenames) در برنامه‌تان را که با \fBtypedef\fR تعریف شده‌اند به \fBindent\fR اعلام نمایید. گزینه \(oq-T\(cq را می‌توان بیش از یک بار مشخص کرد و تمامی نام‌های مشخص‌شده استفاده خواهند شد. برای مثال اگر برنامه شما حاوی موارد زیر باشد: .in +5 .nf .na typedef unsigned long CODE_ADDR; typedef enum {red, blue, green} COLOR; .in -5 .ad .fi از گزینه‌های \(oq-T CODE_ADDR -T COLOR\(cq استفاده خواهید کرد. گزینه‌های \(oq-brs\(cq یا \(oq-bls\(cq نحوه قالب‌بندی آکولادها در اعلان‌های struct را مشخص می‌کنند. گزینه \(oq-brs\(cq آکولادها را به این شکل قالب‌بندی می‌نماید: .in +5 .nf .na struct foo { int x; }; .in -5 .ad .fi گزینه \(oq-bls\(cq آن‌ها را به این صورت قالب‌بندی می‌کند: .in +5 .nf .na struct foo { int x; }; .in -5 .ad .fi مشابه با گزینه‌های آکولاد ساختار یعنی \(oq-brs\(cq و \(oq-bls\(cq، گزینه‌های آکولاد تابع یعنی \(oq-brf\(cq یا \(oq-blf\(cq نحوه قالب‌بندی آکولادها در تعاریف توابع را مشخص می‌سازند. گزینه \(oq-brf\(cq آکولادها را به این شکل قالب‌بندی می‌کند: .in +5 .nf .na int one(void) { return 1; }; .in -5 .ad .fi گزینه \(oq-blf\(cq آن‌ها را به این شکل قالب‌بندی می‌کند: .in +5 .nf .na int one(void) { return 1; }; .in -5 .ad .fi گزینه \(oq-sar\(cq بر چگونگی نمایش فهرست‌های مقادیر اولیه توسط \fBindent\fR اثر می‌گذارد. بدون \(oq-sar\(cq آن‌ها به این شکل قالب‌بندی می‌شوند: .in +5 .nf .na int a[] = {1, 2, 3, 4}; struct s { const char *name; int x; } a[] = { {"name", 0}, {"a", 1} }; .in -5 .ad .fi با گزینه \(oq-sar\(cq آن‌ها به این شکل، با فاصله‌هایی درون آکولادها قالب‌بندی می‌شوند: .in +5 .nf .na int a[] = { 1, 2, 3, 4 }; struct s { const char *name; int x; } a[] = { { "name", 0 }, { "a", 1 } }; .in -5 .ad .fi .SH "دندانه‌گذاری (INDENTATION)" اساسی‌ترین و بحث‌برانگیزترین موضوع در رابطه با قالب‌بندی کد، دقیقاً چگونگی انجام دندانه‌گذاری (indentation) است. خوشبختانه برنامه \fBindent\fR از چندین سبک مختلف دندانه‌گذاری پشتیبانی می‌کند. حالت پیش‌فرض، استفاده از تب‌ها برای دندانه‌گذاری است که با گزینه \(oq-ut\(cq مشخص می‌شود. با فرض اندازه پیش‌فرض تب روی 8، کد به این صورت خواهد بود: .in +5 .nf .na int a(int b) { return b; |------| 1 tab } .in -5 .ad .fi برای کسانی که استفاده از فاصله‌ها را به تب‌ها ترجیح می‌دهند، \(oqindent\(cq گزینه \(oq-nut\(cq را فراهم کرده است. همان کد به این صورت خواهد بود: .in +5 .nf .na int a(int b) { return b; |------| 8 spaces } .in -5 .ad .fi موضوع دیگر در قالب‌بندی کد این است که هر خط چقدر باید از حاشیه چپ دندانه‌گذاری شود. هنگامی که ابتدای دستوری مانند \fBif\fR یا \fBfor\fR دیده می‌شود، سطح دندانه‌گذاری به مقدار مشخص‌شده توسط گزینه \(oq-i\(cq افزایش می‌یابد. برای مثال، از \(oq-i8\(cq برای تعیین هشت نویسه دندانه‌گذاری برای هر سطح استفاده کنید. هنگامی که یک دستور در دو خط شکسته می‌شود، خط دوم به تعداد فاصله‌های اضافی مشخص‌شده توسط گزینه \(oq-ci\(cq دندانه‌گذاری می‌گردد. مقدار پیش‌فرض \(oq-ci\(cq برابر با 0 است. با این حال، اگر گزینه \(oq-lp\(cq مشخص شود و خطی دارای پرانتز چپ باشد که در همان خط بسته نشده باشد، خطوط ادامه‌دار طوری تراز می‌شوند که از موقعیت نویسه بلافاصله پس از پرانتز چپ آغاز گردند. این پردازش برای \(oq[\(cq و همچنین برای \(oq{\(cq زمانی که در فهرست‌های مقداردهی اولیه رخ می‌دهد نیز اعمال می‌شود. برای نمونه، یک قطعه کد ادامه‌دار با فعال بودن \(oq-nlp -ci3\(cq ممکن است شبیه به این باشد: .in +5 .nf .na p1 = first_procedure (second_procedure (p2, p3), third_procedure (p4, p5)); .in -5 .ad .fi با فعال بودن گزینه \(oq-lp\(cq کد تا حدی خواناتر به نظر می‌رسد: .in +5 .nf .na p1 = first_procedure (second_procedure (p2, p3), third_procedure (p4, p5)); .in -5 .ad .fi هنگامی که یک دستور میان دو یا چند جفت پرانتز (...) شکسته می‌شود، هر جفت پرانتز اضافه موجب دندانه‌گذاری اضافی برای سطح دندانه‌گذاری می‌گردد: .in +5 .nf .na if ((((i < 2 && k > 0) || p == 0) && q == 1) || n = 0) .in -5 .ad .fi از گزینه \(oq-ip\fIN\fR\(cq می‌توان برای تنظیم آفست اضافی به ازای هر پرانتز استفاده کرد. برای مثال، \(oq-ip0\(cq کد بالا را به این شکل قالب‌بندی می‌کند: .in +5 .nf .na if ((((i < 2 && k > 0) || p == 0) && q == 1) || n = 0) .in -5 .ad .fi برنامه .B indent\fR فرض می‌کند که تب‌ها در فواصل منظمی از جریان‌های نویسه ورودی و خروجی قرار دارند. این فواصل به‌طور پیش‌فرض به عرض ۸ ستون هستند، اما (از نگارش 1.2 به بعد) می‌توان آن‌ها را با گزینه \(oq-ts\(cq تغییر داد. با تب‌ها مانند تعداد معادل فاصله رفتار می‌شود. به‌طور پیش‌فرض، \fBindent\fR تا جای ممکن از تب‌ها برای دندانه‌گذاری استفاده می‌کند و سپس با فاصله‌ها پر می‌نماید تا به موقعیت دلخواه برسد. با این حال، با گزینه \(oq-as\(cq، از فاصله‌ها برای تراز کردن فراتر از سطح دندانه‌گذاری جاری استفاده خواهد شد. به‌طور پیش‌فرض، با فرض فعال بودن \(oq-lp\(cq، کد به این شکل دندانه‌گذاری می‌شود (\(oqt\(cq نشان‌دهنده تب‌ها و \(oqs\(cq نشان‌دهنده فاصله‌ها است): .in +5 .nf .na unsigned long really_long_proc_name(unsigned long x, unsigned long y, int a) |------||-------||------||-------|__ t t t t ss { p1 = first_procedure (second_procedure (p2, p3), third_procedure (p4, p5)); |------||------||------|_____ t t t sssss } .in -5 .ad .fi این شیوه مناسب است، به شرطی که فرض کنید هر کس که کد را می‌خواند فرض شما بر تب‌های ۸‌فاصله‌ای را رعایت می‌کند. اگر خواننده از تب‌های ۴‌فاصله‌ای استفاده می‌کرد، کد به این شکل دیده می‌شد: .in +5 .nf .na unsigned long really_long_proc_name(unsigned long x, unsigned long y, int a) |---||---||---||---|__ t t t t ss { p1 = first_procedure (second_procedure (p2, p3), third_procedure (p4, p5)); |---||---||---|______ t t t ssssss } .in -5 .ad .fi گزینه \(oq-as\(cq این مسئله را حل می‌کند تا کد صرف‌نظر از اندازه تبی که کاربر برای خواندن استفاده می‌کند، یکدست دیده شود. این حالت شبیه به این است: .in +5 .nf .na unsigned long really_long_proc_name(unsigned long x, unsigned long y, int a) ____________________________________ ssssssssssssssssssssssssssssssssssss { p1 = first_procedure (second_procedure (p2, p3), third_procedure (p4, p5)); |------|______________________ t ssssssssssssssssssssss } .in -5 .ad .fi دندانه‌گذاری اعلان‌های نوع در تعاریف توابع سبک قدیمی توسط پارامتر \(oq-ip\(cq کنترل می‌شود. این یک پارامتر عددی است که مشخص می‌کند اعلان‌های نوع چند فاصله دندانه‌گذاری شوند. برای مثال، مقدار پیش‌فرض \(oq-ip5\(cq تعاریف را به این صورت درمی‌آورد: .in +5 .nf .na char * create_world (x, y, scale) int x; int y; float scale; { . . . } .in -5 .ad .fi برای سازگاری با سایر نگارش‌های indent، گزینه \(oq-nip\(cq ارائه شده است که معادل \(oq-ip0\(cq می‌باشد. استاندارد ANSI C اجازه می‌دهد در خطوط پیش‌پردازنده میان نویسه \(oq#\(cq و نام دستور فاصله خالی قرار گیرد. به‌طور پیش‌فرض، .B indent\fR این فاصله را حذف می‌کند، اما تعیین گزینه \(oq-lps\(cq به \fBindent\fR دستور می‌دهد این فاصله را بدون تغییر باقی بگذارد. گزینه \(oq-ppi\(cq بر گزینه‌های \(oq-nlps\(cq و \(oq-lps\(cq تقدم دارد. از این گزینه می‌توان برای این استفاده کرد که دستورات شرطی پیش‌پردازنده به تعداد مشخصی فاصله دندانه‌گذاری شوند، برای مثال با گزینه \(oq-ppi 3\(cq: .in +5 .nf .na #if X #if Y #define Z 1 #else #define Z 0 #endif #endif .in -5 .ad .fi تبدیل می‌شود به: .in +5 .nf .na #if X # if Y # define Z 1 # else # define Z 0 # endif #endif .in -5 .ad .fi این گزینه آفستی را تنظیم می‌کند که یک برچسب (به جز برچسب‌های case) در آن قرار می‌گیرد. اگر روی صفر یا یک عدد مثبت تنظیم شود، نشان می‌دهد که برچسب چقدر از حاشیه چپ دندانه‌گذاری شود. اگر روی یک عدد منفی تنظیم شود، مشخص می‌سازد که برچسب چقدر عقب‌تر از سطح دندانه‌گذاری جاری قرار گیرد. تنظیم پیش‌فرض ‎-2 است که با رفتار نگارش‌های اولیه indent مطابقت دارد. توجه داشته باشید که این پارامتر بر قرارگیری برچسب‌های case اثر نمی‌گذارد؛ برای آن منظور پارامتر \(oq-cli\(cq را ببینید. برای مثال با گزینه \(oq-il 1\(cq: .in +5 .nf .na group function() { if (do_stuff1() == ERROR) goto cleanup1; if (do_stuff2() == ERROR) goto cleanup2; return SUCCESS; cleanup2: do_cleanup2(); cleanup1: do_cleanup1(); return ERROR; } .in -5 .ad .fi تبدیل می‌شود به: .in +5 .nf .na group function() { if (do_stuff1() == ERROR) goto cleanup1; if (do_stuff2() == ERROR) goto cleanup2; return SUCCESS; cleanup2: do_cleanup2(); cleanup1: do_cleanup1(); return ERROR; } .in -5 .ad .fi .SH "شکستن خطوط طولانی (BREAKING LONG LINES)" با استفاده از گزینه \(oq-l\fIn\fR\(cq یا \(oq--line-length\fIn\fR\(cq، می‌توان حداکثر طول یک خط از کد C را بدون در نظر گرفتن توضیحاتی که ممکن است به دنبال آن بیایند تعیین کرد. هنگامی که خطوط از طول مشخص‌شده طولانی‌تر می‌شوند، GNU \fBindent\fR تلاش می‌کند خط را در یک نقطه منطقی بشکند. با این حال این ویژگی از نگارش 2.1 به بعد اضافه شده و هنوز چندان هوشمند یا منعطف نیست. در حال حاضر سه گزینه وجود دارند که به کاربر اجازه می‌دهند در الگوریتم تعیین محل شکستن خط دخالت کند. گزینه \(oq-bbo\(cq باعث می‌شود GNU \fBindent\fR ترجیح دهد خطوط طولانی را پیش از عملگرهای بولی \fB&&\fR و \fB||\fR بشکند. گزینه \(oq-nbbo\(cq باعث می‌شود GNU \fBindent\fR چنین اولویتی نداشته باشد. برای مثال، گزینه پیش‌فرض \(oq-bbo\(cq (همراه با \(oq--line-length60\(cq و \(oq--ignore-newlines\(cq) کد را به این شکل درمی‌آورد: .in +5 .nf .na if (mask && ((mask[0] == \(cq\\0\(cq) || (mask[1] == \(cq\\0\(cq && ((mask[0] == \(cq0\(cq) || (mask[0] == \(cq*\(cq))))) .in -5 .ad .fi استفاده از گزینه \(oq-nbbo\(cq آن را به این صورت درمی‌آورد: .in +5 .nf .na if (mask && ((mask[0] == \(cq\\0\(cq) || (mask[1] == \(cq\\0\(cq && ((mask[0] == \(cq0\(cq) || (mask[0] == \(cq*\(cq))))) .in -5 .ad .fi با این حال، گزینه پیش‌فرض \(oq-hnl\(cq خطوط جدید موجود در فایل ورودی را محترم شمرده و بالاترین اولویت را برای شکستن خطوط به آن‌ها اختصاص می‌دهد. برای نمونه، هنگامی که فایل ورودی به این صورت باشد: .in +5 .nf .na if (mask && ((mask[0] == \(cq\\0\(cq) || (mask[1] == \(cq\\0\(cq && ((mask[0] == \(cq0\(cq) || (mask[0] == \(cq*\(cq))))) .in -5 .ad .fi در این حالت استفاده از گزینه \(oq-hnl\(cq یا \(oq--honour-newlines\(cq همراه با گزینه‌های ذکرشده قبلی یعنی \(oq-nbbo\(cq و \(oq--line-length60\(cq، باعث می‌شود خروجی مانند مثال قبل نشود، بلکه ترجیح می‌دهد در همان موقعیت‌هایی بشکند که کد در فایل ورودی شکسته شده بود: .in +5 .nf .na if (mask && ((mask[0] == \(cq\\0\(cq) || (mask[1] == \(cq\\0\(cq && ((mask[0] == \(cq0\(cq) || (mask[0] == \(cq*\(cq))))) .in -5 .ad .fi ایده نهفته در این گزینه این است که خطوطی که خیلی طولانی هستند اما قبلاً شکسته شده‌اند، توسط GNU \fBindent\fR دستکاری نشوند. با این حال کدهای واقعاً به‌هم‌ریخته باید حداقل یک بار با استفاده از گزینه \(oq--ignore-newlines\(cq توسط \fBindent\fR پردازش شوند. گزینه \(oq-gts\(cq بر نحوه برخورد با ماکروهای استاندارد gettext یعنی \fB_()\fR و \fBN_()\fR اثر می‌گذارد. رفتار پیش‌فرض (یا استفاده از \(oq-ngts\(cq) باعث می‌شود indent با آن‌ها مانند سایر توابع رفتار کند، به طوری که یک رشته طولانی مانند مثال زیر شکسته می‌شود: .in +5 .nf .na if (mask) { warning (_ ("This is a long string that stays together.")); } .in -5 .ad .fi با گزینه \(oq-gts\(cq، با خط زیرین (underscore) به عنوان بخشی از رشته رفتار می‌شود، آن را به رشته پیوسته نگه می‌دارد و این واقعیت را رعایت می‌کند که gettext به شکلی نامحسوس یک رشته بومی‌سازی‌شده را فراهم می‌کند. این قابلیت تنها در صورتی کار می‌کند که \fB_("\fR به عنوان یک واحد در ابتدای رشته و \fB")\fR به عنوان یک واحد در انتها قرار داشته باشند. .in +5 .nf .na if (mask) { warning (_("This is a long string that stays together.")); } .in -5 .ad .fi .SH "غیرفعال‌سازی قالب‌بندی (DISABLING FORMATTING)" قالب‌بندی کد C را می‌توان برای بخش‌هایی از یک برنامه با تعبیه \fIتوضیحات کنترلی\fR ویژه در برنامه غیرفعال کرد. برای خاموش کردن قالب‌بندی برای بخشی از برنامه، توضیح کنترلی غیرفعال‌کننده \fB/* *INDENT-OFF* */\fR را به تنهایی در یک خط درست پیش از آن بخش قرار دهید. متن برنامه‌ای که پس از این توضیح کنترلی پویش می‌شود دقیقاً مانند ورودی بدون هیچ تغییری در خروجی نوشته می‌شود تا زمانی که توضیح فعال‌کننده مربوطه به تنهایی در یک خط پویش گردد. توضیح کنترلی فعال‌کننده \fB/* *INDENT-ON* */\fR است، و هر متنی پس از توضیح در همان خط نیز بدون قالب‌بندی خروجی داده می‌شود. قالب‌بندی مجدداً با خط ورودی پس از توضیح کنترلی فعال‌کننده آغاز می‌گردد. به طور دقیق‌تر، \fBindent\fR تلاشی برای اعتبارسنجی جداکننده پایانی (\fB*/\fR) برای این توضیحات C نمی‌کند و هرگونه فضای خالی در خط کاملاً نادیده گرفته می‌شود. این توضیحات کنترلی در قالب ++C خود نیز عمل می‌کنند، یعنی .B // *INDENT-OFF*\fR و \fB// *INDENT-ON*\fR. لازم به ذکر است که وضعیت درونی \fBindent\fR در طول بخش قالب‌بندی‌نشده بدون تغییر باقی می‌ماند. بنابراین، برای مثال خاموش کردن قالب‌بندی در میانه یک تابع و ادامه آن پس از پایان تابع ممکن است نتایج عجیبی به همراه داشته باشد. از این رو عاقلانه است در انتخاب کدی که باید بدون قالب‌بندی بماند، به صورت ماژولار عمل کنید. به عنوان یک نکته تاریخی، برخی نگارش‌های پیشین \fBindent\fR پیام‌های خطایی تولید می‌کردند که با \fB*INDENT**\fR شروع می‌شدند. این نسخه‌های .B indent\fR طوری نوشته شده بودند که هر خط متنی ورودی را که با چنین پیام‌های خطایی آغاز می‌شد نادیده بگیرند. این ویژگی نامناسب از GNU \fBindent\fR حذف شده است. .SH "گزینه‌های متفرقه (MISCELLANEOUS OPTIONS)" برای اطلاع از نگارش \fBindent\fR خود، از دستور .B indent -version\fR استفاده کنید. این دستور شماره نگارش .B indent\fR را بدون انجام هیچ‌یک از پردازش‌های عادی گزارش می‌دهد. گزینه \(oq-v\(cq می‌تواند برای فعال کردن حالت پرگویی (verbose) به کار رود. در حالت پرگویی، \fBindent\fR زمانی که یک خط ورودی را به دو یا چند خط خروجی تقسیم می‌کند گزارش داده و در پایان آمار اندازه‌ای را ارائه می‌کند. گزینه \(oq-pmt\(cq باعث می‌شود \fBindent\fR زمان‌های دسترسی و تغییر را روی فایل‌های خروجی حفظ کند. استفاده از این گزینه این مزیت را دارد که اجرای indent روی تمام فایل‌های مبدأ و سرایند در یک پروژه باعث بازسازی تمام اهداف توسط \fBmake\fR نخواهد شد. این گزینه تنها در سیستم‌عامل‌هایی موجود است که دارای تابع پوزیکس \fButime(2)\fR هستند. .SH "اشکالات (BUGS)" لطفاً هرگونه اشکال را به bug-indent@gnu.org گزارش دهید. هنگامی که \fBindent\fR دو بار روی یک فایل با همان پروفایل اجرا می‌شود، در بار دوم \fIهرگز\fR نباید آن فایل را تغییر دهد. با طراحی فعلی \fBindent\fR، این امر قابل تضمین نیست و به طور گسترده آزمایش نشده است. برنامه .B indent\fR نحو زبان C را به طور کامل درک نمی‌کند. در برخی موارد این امر منجر به ناتوانی در پیوستن خطوط می‌شود. نتیجه این است که اجرای یک فایل از طریق \fBindent\fR \fIبرگشت‌ناپذیر\fR است، حتی اگر فایل ورودی استفاده‌شده حاصل اجرای \fBindent\fR با یک پروفایل مشخص (\(oq.indent.pro\(cq) بوده باشد. در حالی که تلاشی برای به کار انداختن \fBindent\fR برای ++C انجام شد، اما روی کدهای ++C به جز ساده‌ترین موارد عملکرد خوبی نخواهد داشت. برنامه .B indent\fR هنگام نوشتن توضیحات در فایل خروجی، به گزینه داده‌شده \(oq--line-length\(cq توجه نمی‌کند. این امر غالباً منجر به قرار گرفتن توضیحات در منتهی‌الیه سمت راست می‌شود. برای جلوگیری از پیوستن یک خط شکسته که در انتهای آن توضیح قرار دارد توسط \fBindent\fR، اطمینان حاصل کنید که توضیحات در اولین خط شکستگی آغاز شوند. هنگامی که \fBindent\fR با .B /* *INDENT-OFF* */\fR خاموش شده باشد، خطوط و توضیحات را نمی‌شمارد (گزینه \(oq-v\(cq را ببینید). با توضیحاتی به صورت \fB/*UPPERCASE*/\fR به عنوان توضیح رفتار نمی‌شود بلکه به عنوان یک شناسه در نظر گرفته می‌شوند، که باعث می‌شود به خط بعدی بپیوندند. این امر توضیحات از این نوع را بی‌فایده می‌سازد، مگر اینکه از ابتدا درون کد قرار گرفته باشند. .SH "حق نشر (COPYRIGHT)" اعلان حق نشر زیر برای برنامه \fBindent\fR اعمال می‌شود. مجوزهای حق نشر و تکثیر این راهنما در نزدیکی ابتدای \(oqindent.texinfo\(cq و \(oqindent.info\(cq، و در نزدیکی انتهای \(oqindent.1\(cq آمده است. .nf .na Copyright (c) 2015 Tim Hentenaar. Copyright (c) 2001 David Ingamells. Copyright (c) 1999 Carlo Wood. Copyright (c) 1995, 1996 Joseph Arceneaux. Copyright (c) 1989, 1992, 1993, 1994, 1995, 1996, 2014 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 \(oq\(oqAS IS\(cq\(cq AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. .ad .fi .SH "کلید ارجاع گزینه‌ها (Options\(cq Cross Key)" در اینجا فهرستی از گزینه‌ها به ترتیب الفبایی بر اساس نام گزینه طولانی آورده شده است تا به شما در یافتن گزینه کوتاه متناظر کمک کند. .in +5 .nf .na --align-with-spaces -as --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 --braces-after-func-def-line -blf --brace-indent -bli --braces-after-struct-decl-line -bls --braces-on-if-line -br --braces-on-func-def-line -brf --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 -cli\fIn\fR --case-brace-indentation -cbi\fIn\fR --comment-delimiters-on-blank-lines -cdb --comment-indentation -c\fIn\fR --continuation-indentation -ci\fIn\fR --continue-at-parentheses -lp --cuddle-do-while -cdw --cuddle-else -ce --declaration-comment-column -cd\fIn\fR --declaration-indentation -di\fIn\fR --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-left-justify-declarations -ndj --dont-space-special-semicolon -nss --dont-star-comments -nsc --dont-tab-align-comments -ntac --else-endif-column -cp\fIn\fR --format-all-comments -fca --format-first-column-comments -fc1 --gnu-style -gnu --honour-newlines -hnl --ignore-newlines -nhnl --ignore-profile -npro --indent-label -il\fIn\fR --indent-level -i\fIn\fR --k-and-r-style -kr --leave-optional-blank-lines -nsob --leave-preprocessor-space -lps --left-justify-declarations -dj --line-comments-indentation -d\fIn\fR --line-length -l\fIn\fR --linux-style -linux --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 -ip\fIn\fR --paren-indentation -pi\fIn\fR --preserve-mtime -pmt --preprocessor-indentation -ppi\fIn\fR --procnames-start-lines -psl --remove-preprocessor-space -nlps --single-line-conditionals -slc --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 --spaces-around-initializers -sar --standard-output -st --start-left-side-of-comments -sc --struct-brace-indentation -sbi\fIn\fR --swallow-optional-blank-lines -sob --tab-size -ts\fIn\fR --use-tabs -ut --verbose -v .in -5 .ad .fi .SH "مقدار بازگشتی (RETURN VALUE)" .IP \(bu 2 0 نشان می‌دهد هیچ خطا یا هشداری در طول اجرای موفق برنامه رخ نداده است. .br .IP \(bu 2 2 زمانی بازگردانده می‌شود که خطاهایی در طول قالب‌بندی رخ دهد که مانع تکمیل قالب‌بندی نشوند، اما ناشی از کد نامعتبر (مانند کدی که کامپایل نمی‌شود) باشند. .br .IP \(bu 2 3 زمانی بازگردانده می‌شود که قالب‌بندی یک فایل به دلیل وجود خطا در فایل که مانع تکمیل کار می‌شود متوقف گردد. اگر بیش از یک فایل ورودی مشخص شده باشد، indent به فایل بعدی ادامه می‌دهد. .br .IP \(bu 2 4 زمانی بازگردانده می‌شود که یک مشکل جدی داخلی رخ داده و کل فرآیند indent متوقف گردد، حتی اگر تمام فایل‌های مشخص‌شده پردازش نشده باشند. .br .IP \(bu 2 64 زمانی بازگردانده می‌شود که یک خطای فراخوانی (مانند گزینه نامعتبر) مانع از انجام هرگونه قالب‌بندی شود. .SH "فایل‌ها (FILES)" .br .nf .\" set tabstop to longest possible filename, plus a wee bit .ta \w'$HOME/.indent.pro 'u \fI$HOME/.indent.pro\fR گزینه‌های پیش‌فرض را برای indent در خود نگه می‌دارد. .SH "نویسندگان (AUTHORS)" .br Tim Hentenaar .br Carlo Wood .br Joseph Arceneaux .br Jim Kingdon .br David Ingamells .SH "تاریخچه (HISTORY)" برگرفته از برنامه "indent" در دانشگاه برکلی (UCB). .SH "کپی‌رایت و تکثیر (COPYING)" Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 2014, 2015 Free Software Foundation, Inc. Copyright (C) 1995, 1996 Joseph Arceneaux. Copyright (C) 1999 Carlo Wood. Copyright (C) 2001 David Ingamells. Copyright (C) 2013 Łukasz Stelmach. Copyright (C) 2015 Tim Hentenaar. اجازه تهیه و توزیع نسخه‌های عین متن این راهنما اعطا می‌شود، به شرطی که اعلان حق نشر و این اعلان اجازه در تمامی نسخه‌ها محفوظ بماند.