| ctags(1) | Universal Ctags | ctags(1) |
نام (NAME)
ctags - تولید فایلهای برچسب (tag) برای کد منبع
خلاصه دستور (SYNOPSIS)
ctags [<options>] [<source_file(s)>] etags [<options>] [<source_file(s)>]
توضیحات (DESCRIPTION)
برنامههای ctags و etags (گزینه -e را ببینید) (که از این پس در اینجا، به جز موارد تمایز، در مجموع با عنوان ctags نامیده میشوند) یک فایل نمایه (یا "tag") برای انواع گوناگونی از اشیاء زبان موجود در فایل(های) منبع تولید میکنند. این فایل برچسب امکان میدهد این موارد به سرعت و آسانی توسط یک ویرایشگر متنی یا سایر ابزارها (ابزارهای کلاینت) مکانیابی شوند. یک برچسب (tag) نمایانگر یک شیء زبانی است که مدخلی در نمایه برای آن در دسترس است (یا از نگاه دیگر، مدخل نمایهای است که برای آن شیء ایجاد شده است).
همچنین، ctags میتواند یک فایل ارجاع متقابل (cross reference) تولید کند که اطلاعات مربوط به اشیاء زبانی مختلف موجود در مجموعهای از فایلهای منبع را در قالبی خوانا برای انسان فهرست میکند.
فایلهای نمایه برچسب توسط ویرایشگرهای متعددی پشتیبانی میشوند، که به کاربر امکان میدهند شیء مرتبط با یک نام ظاهر شده در یک فایل منبع را مکانیابی کرده و به فایل و خطی که آن نام را تعریف میکند بپرد. برای چگونگی استفاده از دستور ctags و فایلهای نمایه برچسب در ویرایشگر، راهنمای ویرایشگر مورد علاقه خود را ببینید.
ابزار ctags قادر به تولید انواع (kinds) متفاوتی از برچسبها برای هر یک از زبانهای مختلف بسیار است. برای فهرست کاملی از زبانهای پشتیبانیشده، نامهایی که با آنها شناخته میشوند، و انواع برچسبهایی که برای هر کدام تولید میشود، گزینههای --list-languages و --list-kinds-full را ببینید.
این صفحه راهنما Universal Ctags را شرح میدهد، پیادهسازیای از ctags که از Exuberant Ctags مشتق شده است. تغییرات ناسازگار عمده میان Universal Ctags و Exuberant Ctags در ctags-incompatibilities(7) برشمرده شدهاند.
یکی از مزایای Exuberant Ctags این است که به کاربر اجازه میدهد تجزیهکننده (parser) جدیدی را از خط فرمان تعریف کند. گسترش این قابلیت یکی از ویژگیهای عمده Universal Ctags است. سند ctags-optlib(7) چگونگی گسترش این قابلیت را شرح میدهد.
قابلیتهای آزمایشی بهتازگی معرفیشده در اینجا توضیح داده نشدهاند. اگر به چنین ویژگیهایی و سازوکارهای داخلی ctags علاقهمند هستید، از https://docs.ctags.io/ دیدن کنید.
رابط خط فرمان (COMMAND LINE INTERFACE)
با وجود انبوه گزینههای موجود، پیشفرضها به گونهای تنظیم شدهاند که ctags اغلب بدون هیچ گزینهای اجرا میشود (مانند "ctags *" یا "ctags -R")، که یک فایل برچسب در شاخه فعلی برای تمام فایلهای منبع شناختهشده ایجاد خواهد کرد. گزینههای شرحدادهشده در زیر صرفاً برای ایجاد امکان سفارشیسازی بر اساس نیازهای ویژه ارائه شدهاند.
توجه داشته باشید که فاصلههای جداکننده گزینههای تکحرفی از پارامترهایشان اختیاری هستند.
همچنین توجه داشته باشید که پارامترهای بولی گزینههای طولانی (گزینههایی که با -- شروع میشوند و پارامتر [=(yes|no)] میگیرند) میتوانند حذف شوند، که در این صورت مقدار =yes لحاظ میشود (مثلاً --sort معادل --sort=yes است). علاوه بر این توجه داشته باشید که مقادیر =1، =on و =true به عنوان مترادفهای =yes، و مقادیر =0، =off و =false به عنوان مترادفهای =no در نظر گرفته میشوند.
برخی گزینهها نادیده گرفته میشوند یا تنها هنگام اجرا در حالت etags (گزینه -e را ببینید) مفید هستند. به این گونه گزینهها اشاره خواهد شد.
طبق قرارداد استاندارد POSIX، مقدار <options> باید پیش از <source_file(s)> بیاید.
گزینههایی که نام زبانها را میپذیرند، آن نامها را با حروف بزرگ یا کوچک دریافت میکنند. برای فهرستی کامل از نام زبانهای توکار، گزینه --list-languages را ببینید.
حروف و نامها (Letters and names)
برخی گزینهها پرچمهای تکحرفی را به عنوان پارامتر میپذیرند (مانند گزینه --kinds-<LANG>). تعیین صرفاً حروف به کاربر کمک میکند یک خط فرمان پیچیده را سریعاً ایجاد کند. با این حال، یک خط فرمان شامل توالی پرچمهای تکحرفی به سختی قابل درک خواهد بود.
ابزار Universal Ctags علاوه بر پرچمهای تکحرفی، پرچمهای نامکامل را نیز میپذیرد. پرچمهای نامکامل و تکحرفی را میتوان با احاطه کردن هر نامکامل با آکولاد، در یک پارامتر گزینه ترکیب کرد. بدین ترتیب، برای مثال، سه نگارش زیر برای گزینه --kinds-C معنای یکسانی دارند:
--kinds-C=+pLl
--kinds-C=+{prototype}{label}{local}
--kinds-C=+{prototype}L{local}
توجه داشته باشید که آکولادها ممکن است در پوسته (shell) شما نویسههای متا باشند. در چنین حالتی از نقلقول تکی استفاده کنید.
گزینههای --list-... پرچمهای تکحرفی و پرچمهای نامکامل مرتبط با آنها را نمایش میدهند.
گزینههای فهرستگیری (List options)
ابزار Universal Ctags گزینههای --list-... متعددی را معرفی میکند که دادههای درونی Universal Ctags را فراهم میسازند ("Listing Options" را ببینید). هم کاربران و هم ابزارهای کلاینت میتوانند از این دادهها استفاده کنند. گزینههای --with-list-header و --machinable خروجی اکثر گزینههای --list-... را تنظیم میکنند.
تنظیمات پیشفرض (--with-list-header=yes و --machinable=no) برای استفاده تعاملی از طریق ترمینال است. سرآیندی که معنای ستونها را توضیح میدهد به سادگی به خروجی افزوده میشود و هر ستون در تمامی خطوط تراز میگردد. خط سرآیند با یک نویسه هش ('#') آغاز میشود.
برای اسکریپتنویسی در یک ابزار کلاینت، گزینههای --with-list-header=no و --machinable=yes ممکن است مفید باشند. سرآیند به خروجی اضافه نمیشود و هر ستون با نویسههای تب جدا میشود.
توجه داشته باشید که ترتیب ستونها در نگارشهای آینده تغییر خواهد کرد. با این وجود، برچسبها در سرآیند تغییر نخواهند کرد. بنابراین یک ابزار کلاینت با پایش سرآیند میتواند نمایه ستون مورد نظر را بیابد.
گزینهها (OPTIONS)
دستور ctags گزینههای بیشتری نسبت به موارد فهرستشده در اینجا دارد. گزینههایی که با یک نویسه زیرخط (underscore) آغاز میشوند، مانند --_echo=<msg>، در اینجا فهرست نشدهاند. آنها آزمایشی بوده یا برای اهداف اشکالزدایی هستند.
شیوهنگارش: <foo> برای یک رشته متغیر foo، [ ... ] برای موارد اختیاری، | برای انتخاب، و ( ... ) برای گروهبندی به کار میرود. برای نمونه --foo[=(yes|no)] به معنای --foo، --foo=yes، یا --foo=no است.
گزینههای فایل ورودی/خروجی (Input/Output File Options)
- --exclude=<pattern>
- الگوی <pattern>
را به فهرست
فایلها و
شاخههای
مستثنیشده
میافزاید.
این گزینه
را میتوان
به تعداد
دلخواه
مشخص کرد.
برای هر نام
فایلی که
توسط ctags
بررسی
میشود، هر
الگوی
مشخصشده
با استفاده
از این
گزینه هم با
مسیر کامل
(مانند some/path/base.ext)
و هم با نام
پایه (مانند
base.ext) فایل
مقایسه
خواهد شد؛
بنابراین
این امکان
فراهم
میشود که
الگوها
بدون در نظر
گرفتن مسیر
با یک نام
فایل معین
تطبیق
یابند، یا
تنها با یک
مسیر مشخص
تطابق
داشته
باشند.
اگر پشتیبانی مناسب در کتابخانه زمان اجرای کامپایلر C شما موجود باشد، الگو میتواند حاوی نویسههای عام شل (shell wildcards) متداول در یونیکس (و نه عبارات باقاعده / regular expressions) باشد (حتماً پارامتر گزینه را در گیومه قرار دهید تا نویسههای عام پیش از ارسال به ctags توسط شل بسط داده نشوند؛ همچنین توجه داشته باشید که نویسههای عام میتوانند با نویسه اسلش، '/'، نیز تطبیق یابند). میتوانید با بررسی خروجی گزینه --list-features بررسی کنید که آیا نویسههای عام شل در پلتفرم شما در دسترس هستند یا خیر، که در این صورت wildcards در فهرست ویژگیهای کامپایلشده درج خواهد بود؛ در غیر این صورت، الگو با استفاده از مقایسه متنی ساده با نام فایلها تطبیق داده میشود.
اگر <pattern> با نویسه '@' آغاز شود، بقیه رشته به عنوان نام فایلی تفسیر میشود که باید الگوهای استثنا از آن خوانده شوند، در هر سطر یک الگو. اگر الگو خالی باشد، فهرست الگوهای مستثنیشده پاک میشود.
توجه داشته باشید که هنگام شروع برنامه، فهرست پیشفرض استثناها شامل نامهای فایلهای پنهان و سیستمی متداول، الگوهایی برای فایلهای باینری، و شاخههایی است که عموماً مطلوب نیست هنگام پردازش گزینه --recurse به درون آنها وارد شد. برای مشاهده فهرست الگوهای استثنای توکار، از --list-excludes استفاده کنید.
همچنین به توضیحات گزینه --exclude-exception= مراجعه کنید.
- --exclude-exception=<pattern>
- الگوی <pattern>
را به فهرست
فایلها و
شاخههای
مشمول
(مستثنینشده)
اضافه
میکند. این
الگو بر
فایلها و
شاخههایی
اثر
میگذارد
که توسط
الگوی
مشخصشده
با گزینه
--exclude= مستثنی
شدهاند.
برای نمونه، اگر میخواهید ctags همه فایلهای زیر شاخه foo را به جز foo/main.c نادیده بگیرد، از این خط فرمان استفاده کنید: --exclude=foo/* --exclude-exception=foo/main.c.
- --filter[=(yes|no)]
- باعث میشود ctags مانند یک فیلتر رفتار کند؛ به این صورت که نام فایلهای منبع را از ورودی استاندارد میخواند و برچسبهای آنها را به صورت فایلبهفایل در خروجی استاندارد چاپ میکند. اگر --sort فعال باشد، برچسبها تنها در محدوده همان فایل منبعی که در آن تعریف شدهاند مرتب میشوند. نامهای فایل از ورودی استاندارد در حالت ورودی سطرمحور خوانده میشوند (به یادداشت مربوط به گزینه -L مراجعه کنید) و تنها پس از نامهای فایل فهرستشده در خط فرمان یا از هر فایل ارائهشده با استفاده از گزینه -L پردازش میشوند. هنگامی که این گزینه فعال باشد، گزینههای -f، -o و --totals نادیده گرفته میشوند. این گزینه کاملاً تخصصی و کمکاربرد است و به طور پیشفرض غیرفعال است.
- --filter-terminator=<string>
- رشته <string> را
مشخص
میکند تا
در هنگام
فعال بودن
گزینه --filter،
پس از
برچسبهای
مربوط به هر
نام فایل
تجزیهشده،
در خروجی
استاندارد
چاپ شود.
این امر
میتواند
به
برنامهای
که خروجی ctags
را
میخواند
اجازه دهد
تشخیص دهد
چه زمانی
خروجی هر
فایل به
پایان
رسیده است.
توجه داشته باشید که اگر نام فایل خواندهشده یک شاخه باشد و --recurse فعال باشد، این رشته تنها یک بار در انتهای تمام برچسبهای یافتهشده در پیمایش آن شاخه چاپ خواهد شد. این رشته همواره با نویسه خط جدید پایانی خود از آخرین خط برچسب فایل جدا خواهد شد.
این گزینه کاملاً تخصصی و کمکاربرد است و به طور پیشفرض خالی است.
- --links[=(yes|no)]
- مشخص میکند که آیا پیوندهای نمادین (در صورت پشتیبانی) باید دنبال شوند یا خیر. در صورت غیرفعال بودن، پیوندهای نمادین نادیده گرفته میشوند. این گزینه به طور پیشفرض روشن است.
- --maxdepth=<N>
- عمق بازگشت در شاخهها که با گزینه --recurse (-R) فعال شده است را محدود میکند.
- --recurse[=(yes|no)]
- به صورت
بازگشتی
وارد
شاخههای
موجود در
فهرست
فایلهای
ارائهشده
میشود.
اگر فهرست فایلهای ارائهشده خالی باشد و هیچ فهرست فایلی با گزینه -L مشخص نشده باشد، شاخه فعلی (یعنی '.') فرض میشود. پیوندهای نمادین به طور پیشفرض دنبال میشوند (گزینه --links را ببینید). اگر این رفتارها را نمیپسندید، یا فایلها را صریحاً مشخص کنید یا خروجی find(1) را به "ctags -L -" لولهکشی (pipe) کنید. همچنین گزینههای --exclude و --maxdepth را برای محدود کردن بازگشت ببینید.
نکته: این گزینه در حال حاضر روی همه پلتفرمها پشتیبانی نمیشود. اگر خروجی گزینه --help شامل این گزینه باشد، در دسترس خواهد بود.
- -R
- معادل --recurse است.
- -L <file>
- فهرستی از
نامهای
فایل را که
باید
برچسبها
برای آنها
تولید شوند
از <file>
میخواند.
اگر فایل به صورت '-' مشخص شود، نامهای فایل از ورودی استاندارد خوانده میشوند. نامهای فایلی که با استفاده از این گزینه خوانده میشوند، پس از نامهای فایل موجود در خط فرمان پردازش میگردند. گزینهها نیز در این ورودی پذیرفته میشوند. اگر این گزینه بیش از یک بار مشخص شود، تنها آخرین مورد اعمال خواهد شد.
نکته: فایل در حالت سطرمحور خوانده میشود، جایی که خط جدید تنها جداکننده است و فاصلههای خالی غیرپایانی مهم تلقی میشوند، تا بتوان نامهای فایل حاوی فاصله را نیز مشخص کرد (با این حال، فاصلههای خالی پایانی از سطرها حذف میشوند)؛ این امر میتواند بر نحوه تجزیه گزینهها در صورت گنجانده شدن در ورودی اثر بگذارد.
- --append[=(yes|no)]
- مشخص میکند که آیا برچسبهای تولیدشده از فایلهای معین باید به برچسبهای موجود در فایل برچسب اضافه شوند یا جایگزین آنها گردند. این گزینه به طور پیشفرض no است.
- -a
- معادل --append است.
- -f <tagfile>
- از نام
مشخصشده
توسط <tagfile>
برای فایل
برچسب
استفاده
میکند
(پیشفرض
"tags" است، یا
هنگام اجرا
در حالت etags
مقدار آن
"TAGS"
میباشد).
اگر <tagfile> به
صورت '-'
مشخص شود،
برچسبها
به جای آن
در خروجی
استاندارد
نوشته
میشوند.
دستور ctags اگر tagfile از قبل وجود داشته باشد و خط نخست آن حاوی چیزی به جز یک خط برچسب معتبر باشد، سرسختانه از دریافت دستورات سر باز میزند. این کار در صورتی که اشتباهاً عبارت "ctags -f *.c" را تایپ کنید جان شما را نجات خواهد داد، چرا که در غیر این صورت نخستین فایل C شما با برچسبهای تولیدشده از بقیه فایلها بازنویسی میشد! این ابزار همچنین از پذیرفتن نام فایل چندنویسهای که با یک نویسه '-' (خط تیره) آغاز شود امتناع میورزد، چرا که این مورد به احتمال زیاد بدان معناست که نام فایل برچسب را جا انداختهاید و این گزینه سعی کرده گزینه بعدی را به عنوان نام فایل در نظر بگیرد. اگر واقعاً میخواهید نام فایل برچسب خروجی خود را -ugly بگذارید، آن را به صورت "-f ./-ugly" مشخص کنید.
این گزینه باید پیش از نخستین نام فایل درج شود. اگر این گزینه بیش از یک بار مشخص شود، تنها آخرین مورد اعمال خواهد شد.
- -o <tagfile>
- معادل "-f tagfile" است.
گزینههای قالب خروجی (Output Format Options)
- --format=(1|2)
- قالب پرونده برچسب خروجی را تغییر میدهد. در حال حاضر تنها مقادیر معتبر برای سطح، 1 یا 2 هستند. سطح 1 قالب پرونده برچسب اصلی را مشخص میکند و سطح 2 یک قالب توسعهیافته جدید شامل فیلدهای گسترش را تعیین میکند (اما به گونهای که سازگاری با گذشته با پیادهسازیهای اصلی vi(1) حفظ شود). سطح پیشفرض 2 است. [در حالت etags نادیده گرفته میشود]
- --output-format=(u-ctags|e-ctags|etags|xref|json)
- قالب خروجی
را مشخص
میکند.
پیشفرض u-ctags
است. برای u-ctags
و e-ctags به tags(5)
مراجعه
کنید.
شبهبرچسب
TAG_OUTPUT_MODE انتخاب
مورد نظر،
u-ctags یا e-ctags را
مشخص
میکند.
برای
اطلاعات
بیشتر
درباره این
شبهبرچسب،
ctags-client-tools(7) را
ببینید.
برای etags گزینه -e، و برای xref گزینه -x را ببینید. قالب json تنها در صورتی در دسترس است که برنامه اجرایی ctags با libjansson ساخته شده باشد. برای اطلاعات بیشتر درباره قالب json، ctags-json-output(5) را ببینید.
همچنین به --list-output-formats مراجعه کنید.
- -e
- مشابه --output-format=etags است. حالت etags را فعال میکند، که یک پرونده برچسب برای استفاده با ویرایشگر Emacs ایجاد خواهد کرد. همچنین، اگر ctags با نامی فراخوانی شود که حاوی رشته "etags" باشد (خواه با تغییر نام، یا ایجاد پیوند به فایل اجرایی)، حالت etags فعال خواهد شد.
- -x
- مشابه --output-format=xref
است. به جای
تولید
پرونده
برچسب، یک
پرونده
ارجاع
متقابل (xref)
جدولی و
خوانا برای
انسان را در
خروجی
استاندارد
چاپ میکند.
اطلاعات
موجود در
خروجی شامل:
نام برچسب؛
نوع برچسب؛
شماره سطر،
نام
پرونده، و
سطر منبع
(با
فشردهسازی
فاصلههای
خالی اضافی)
از
پروندهای
است که
برچسب را
تعریف
میکند. هیچ
پرونده
برچسبی
نوشته
نمیشود و
تمام
گزینههایی
که بر خروجی
پرونده
برچسب
تأثیر
میگذارند
نادیده
گرفته
خواهند شد.
کاربردهای نمونه برای این قابلیت عبارتند از تولید فهرستی از تمام توابع موجود در یک پرونده منبع (مانند "ctags -x --kinds-c=f file")، یا تولید فهرستی از تمام متغیرهای سراسری با دید بیرونی موجود در یک پرونده منبع (مانند "ctags -x --kinds-c=v --extras=-F file").
- --sort=(yes|no|foldcase)
- مشخص میکند که آیا پرونده برچسب باید بر اساس نام برچسب مرتب شود یا خیر (پیشفرض yes است). توجه داشته باشید که vi(1) اصلی به برچسبهای مرتبشده نیاز داشت. مقدار foldcase مرتبسازی بدون حساسیت به حروف کوچک و بزرگ (case-folded) را مشخص میکند. جستجوهای دودویی سریع در پروندههای برچسب مرتبشده با case-folding نیازمند پشتیبانی ویژه از سوی ابزارهای استفادهکننده از پروندههای برچسب است، مانند آنچه در کتابخانه readtags در ctags یا نسخه 6.2 یا بالاتر Vim (با استفاده از "set ignorecase") یافت میشود. [در حالت etags نادیده گرفته میشود]
- -u
- معادل --sort=no است (یعنی "مرتبنشده" یا unsorted).
- ارجاعی به <file> را در پرونده برچسب میگنجاند. این گزینه میتواند به تعداد دلخواه تکرار شود. این قابلیت از امکان Emacs برای استفاده از پرونده برچسبی که سایر پروندههای برچسب را در بر میگیرد (includes)، پشتیبانی میکند. [تنها در حالت etags در دسترس است]
- --input-encoding=<encoding>
- کدگذاری (<encoding>) پروندههای ورودی را مشخص میکند. در صورت تعیین این گزینه، Universal Ctags ورودی را از این کدگذاری به کدگذاری مشخصشده با --output-encoding=encoding تبدیل میکند.
- --input-encoding-<LANG>=<encoding>
- یک <encoding> ورودی خاص را برای زبان <LANG> مشخص میکند. این مقدار بر مقدار پیشفرض سراسری که با --input-encoding داده شده برتری دارد.
- --output-encoding=<encoding>
- کدگذاری
(<encoding>) پرونده
برچسبها
را مشخص
میکند.
ابزار Universal Ctags
کدگذاری
پروندههای
ورودی را از
کدگذاری
مشخصشده
توسط --input-encoding=<encoding>
به این
کدگذاری
تبدیل
میکند.
علاوه بر این، <encoding> در بالای پرونده برچسبها به عنوان مقدار شبهبرچسب TAG_FILE_ENCODING درج میشود. مقدار پیشفرض <encoding> برابر با UTF-8 است.
گزینههای انتخاب و نگاشت زبان (Language Selection and Mapping Options)
- --language-force=(<language>|auto)
- بهطور
پیشفرض، ctags
زبان
پرونده
منبع را به
صورت
خودکار
انتخاب
میکند، و
پروندههایی
را که
زبانشان
قابل تشخیص
نیست
نادیده
میگیرد (به
بخش "تعیین
زبان
پرونده" یا
Determining file language مراجعه
کنید). این
گزینه
استفاده از
language
مشخصشده
(غیرحساس به
بزرگی و
کوچکی
حروف؛ چه
توکار و چه
تعریفشده
توسط کاربر)
را برای هر
پرونده
دادهشده
تحمیل
میکند، به
جای آنکه
زبان را بر
اساس پسوند
پرونده
بهطور
خودکار
انتخاب کند.
علاوه بر این، مقدار ویژه auto نشان میدهد که زبان باید بهطور خودکار انتخاب شود (که عملاً این گزینه را غیرفعال میکند).
- --languages=[+|-](<list>|all)
- زبانهایی
را مشخص
میکند که
تولید
برچسب برای
آنها فعال
است، به
طوری که <list>
شامل
فهرستی از
نامهای
زبان
جداشده با
کاما است
(غیرحساس به
بزرگی و
کوچکی
حروف؛ چه
توکار و چه
تعریفشده
توسط
کاربر).
اگر زبان نخست در <list> با هیچیک از علامتهای '+' یا '-' شروع نشده باشد، فهرست کنونی (تنظیمات جاری زبانهای فعال/غیرفعال که در درون ctags مدیریت میشوند) پیش از افزودن یا حذف زبانها در <list> پاک خواهد شد. تا زمانی که به یک '-' برخورد نشود، هر زبان در <list> به فهرست کنونی اضافه خواهد شد.
به محض مواجهه با '+' یا '-' در <list>، زبانهای پس از آن به ترتیب به فهرست کنونی افزوده یا از آن حذف میشوند. بنابراین جایگزین کردن فهرست کنونی با فهرستی جدید، یا افزودن و کاستن زبانها از فهرست جاری ساده میشود.
فهرست واقعی پروندههایی که برچسبها برای آنها تولید میشوند به نگاشت پسوند زبانِ در حال اجرا وابسته است (به گزینه --langmap مراجعه کنید). توجه داشته باشید که بیشتر زبانها، از جمله زبانهای تعریفشده توسط کاربر، فعال هستند مگر اینکه صراحتاً با استفاده از این گزینه غیرفعال شده باشند. نامهای زبان گنجاندهشده در فهرست میتوانند هر زبان توکار یا زبانی باشند که پیشتر با --langdef تعریف شده باشد.
مقدار پیشفرض all است که به عنوان یک آرگومان معتبر نیز پذیرفته میشود. برای مشاهده فهرستی از تمام نامهای زبان (توکار و تعریفشده توسط کاربر) به گزینه --list-languages مراجعه کنید.
توجه داشته باشید که گزینه --languages= به شیوه انباشتی عمل میکند؛ این گزینه میتواند چندین بار با آرگومانهای متفاوت در یک خط فرمان مشخص شود.
- --alias-<LANG>=[+|-](<pattern>|default)
- یک الگوی
نام مستعار
<pattern> را به
زبان
مشخصشده
با <LANG>
اضافه ('+') یا
حذف ('-')
میکند.
ابزار ctags در
مرحله
"تعیین
زبان
پرونده" به
الگوی نام
مستعار
مراجعه
میکند.
پارامتر <pattern> یک فهرست نیست. برای افزودن یا حذف چندین الگوی نام مستعار، از این گزینه چندین بار در یک خط فرمان استفاده کنید.
برای بازگردانی نامهای مستعار پیشفرض زبان، default را مشخص کنید.
استفاده از all برای <LANG> در دو حالت زیر معنی دارد:
- --alias-all=
- این کار تنظیمات نامهای مستعار تمام زبانها را پاک میکند.
- --alias-all=default
- این کار نامهای مستعار پیشفرض زبانها را برای تمام زبانها بازیابی میکند.
- --guess-language-eagerly
- محتوای پرونده را برای حدس اکتشافی تجزیهکننده مناسب زبان بررسی میکند. به "تعیین زبان پرونده" مراجعه کنید.
- -G
- معادل --guess-language-eagerly است.
- --langmap=<map>[,<map>[...]]
- چگونگی
نگاشت
نامهای
پرونده به
زبانها را
کنترل
میکند (به
گزینه --list-maps
مراجعه
کنید). هر <map>
جداشده با
کاما شامل
نام زبان
(خواه زبانی
توکار یا
تعریفشده
توسط
کاربر)، یک
دونقطه، و
فهرستی از
پسوندهای
پرونده
و/یا
الگوهای
نام
پرونده
است. یک
پسوند
پرونده با
قرار دادن
یک نقطه پیش
از پسوند
مشخص
میشود
(مانند .c). یک
الگوی نام
پرونده با
محصور کردن
الگو در
پرانتز
مشخص
میشود
(مانند ([Mm]akefile)).
اگر پشتیبانی مناسب در کتابخانه زمان اجرای کامپایلر C شما در دسترس باشد، الگوی نام پرونده میتواند شامل نویسههای عام معمول پوسته (wildcards) رایج در یونیکس باشد (حتماً پارامتر گزینه را نقلقول کنید تا از بسط نویسههای عام توسط پوسته پیش از ارسال به ctags محافظت شود). میتوانید با بررسی خروجی گزینه --list-features مشخص کنید که آیا نویسههای عام پوسته در پلتفرم شما در دسترس هستند یا خیر، که در این صورت wildcards در فهرست ویژگیهای کامپایلشده گنجانده خواهد شد؛ در غیر این صورت، الگوهای نام پرونده با استفاده از مقایسه متنی ساده با نام پروندهها تطبیق داده میشوند.
هنگام نگاشت یک پسوند پرونده با گزینه --langmap، ابتدا نگاشت آن از هر زبان دیگری برداشته میشود. (گزینه --map-<LANG> کنترل دقیقتری فراهم میکند.)
اگر نویسه نخست در یک <map> علامت مثبت ('+') باشد، پسوندها و الگوهای نام پرونده در آن نگاشت به نگاشت کنونی آن زبان اضافه خواهند شد؛ در غیر این صورت، نگاشت جایگزین نگاشت کنونی خواهد شد. برای نمونه، برای تعیین اینکه تنها پروندههایی با پسوندهای .c و .x به عنوان پروندههای زبان C در نظر گرفته شوند، از --langmap=c:.c.x استفاده کنید؛ برای اضافه کردن پروندههای دارای پسوند .j به عنوان پروندههای زبان Java، عبارت --langmap=c:.c.x,java:+.j را مشخص کنید. برای نگاشت makefileها (مانند پروندههایی با نام Makefile، makefile، یا پروندههای با پسوند .mak) به زبانی به نام make، عبارت --langmap=make:([Mm]akefile).mak را مشخص کنید. برای نگاشت پروندههای بدون پسوند، نقطهای را مشخص کنید که پس از آن نویسهای غیر از نقطه نیامده باشد (مانند '.'، ..x، .x.).
برای پاک کردن نگاشت یک زبان خاص (و در نتیجه جلوگیری از تولید خودکار برچسبها برای آن زبان)، یک فهرست پسوند خالی مشخص کنید (مانند --langmap=fortran:). برای بازگرداندن نگاشتهای پیشفرض زبان برای یک زبان خاص، کلیدواژه default را برای نگاشت ارائه دهید. برای بازیابی نگاشتهای پیشفرض زبان برای تمام زبانها، --langmap=default را مشخص کنید.
توجه داشته باشید که هنگام استنتاج زبان یک پرونده، الگوهای نام پرونده پیش از پسوندهای پرونده بررسی میشوند. این ترتیب در Universal Ctags با Exuberant Ctags متفاوت است. برای پیشزمینه این تغییر ناسازگار، ctags-incompatibilities(7) را ببینید.
- --map-<LANG>=[+|-]<extension>|<pattern>
- این گزینه
روشی را
برای کنترل
نگاشت(های)
نامهای
پرونده به
زبانها به
شیوهای
دقیقتر از
گزینه --langmap
فراهم
میکند.
در ctags، بیش از یک زبان میتواند به یک <pattern> (الگو)ی نام پرونده یا <extension> (پسوند) پرونده نگاشت شود (نگاشت N:1). در مقابل، گزینه --langmap تنها نگاشت 1:1 را مدیریت میکند، یعنی تنها یک زبان به یک <pattern> نام پرونده یا <extension> پرونده نگاشت میشود. یک نگاشت معمول N:1 در زبانهای C++ و ObjectiveC دیده میشود؛ هر دو زبان دارای نگاشتی به .h به عنوان پسوند پرونده هستند.
پسوند پرونده با قرار دادن یک نقطه پیش از پسوند مشخص میشود (مانند .c). الگوی نام پرونده با قرار دادن الگو درون پرانتز مشخص میشود (مانند ([Mm]akefile)). علامت مثبت پیشوندی ('+') برای افزودن، و منفی ('-') برای حذف است. نبود پیشوند به معنای جایگزینی نگاشت <LANG> است.
برخلاف --langmap، پارامتر <extension> (یا <pattern>) یک فهرست نیست. گزینه --map-<LANG> یک پسوند (یا الگو) را دریافت میکند. با این حال، میتوان این گزینه را با آرگومانهای متفاوت چندین بار در یک خط فرمان مشخص کرد.
گزینههای محتویات پرونده برچسبها (Tags File Contents Options)
درباره فیلدها، گونهها (kinds)، نقشها (roles) و موارد اضافی (extras) به بخش "مدخلهای برچسب (TAG ENTRIES)" مراجعه کنید.
- --excmd=(number|pattern|mix|combine)
- نوع دستور
EX مورد
استفاده
برای یافتن
محل
برچسبها
در پرونده
مبدأ را
تعیین
میکند. [در
حالت etags
نادیده
گرفته
میشود]
مقادیر معتبر برای نوع (یا کل کلمه یا حرف اول آن پذیرفته میشود) عبارتند از:
- number
- تنها از شماره خطوط در پرونده برچسب برای مکانیابی برچسبها استفاده میکند. این حالت دارای چهار مزیت است:
- 1.
- اندازه پرونده برچسب حاصل را به طور چشمگیری کاهش میدهد.
- 2.
- عدم موفقیت در یافتن برچسبها را به دلیل تغییر سطری که برچسب را تعریف میکند و در نتیجه شکست در تطبیق الگو، حذف میکند (توجه داشته باشید که برخی ویرایشگرها مانند vim قادرند در بسیاری از چنین مواردی بازیابی را انجام دهند).
- 3.
- یافتن سطرهای مبدأ تطبیقیافته یکسان اما نادرست را حذف میکند (به "ایرادها (BUGS)" مراجعه کنید).
- 4.
- مدخلهای جداگانهای را در پرونده برچسب برای سطرهایی که محتوای یکسان دارند نگه میدارد. در حالت الگو (pattern)، مدخلهای تکراری حذف میشوند زیرا الگوهای جستجویی که تولید میکنند یکسان هستند و مدخلهای تکراری را بیفایده میسازد.
با این حال، این گزینه یک اشکال عمده دارد: تغییرات در پروندههای مبدأ میتواند باعث شود شماره خطوط ثبتشده در پرونده برچسب دیگر با سطرهای موجود در پرونده مبدأ مطابقت نداشته باشند، که باعث میشود پرش به برخی برچسبها یک یا چند سطر از تعریف هدف خطا برود. اساساً این گزینه بهترین کاربرد را زمانی دارد که کد مبدأ اعمالشده روی آن در معرض تغییر نباشد. انتخاب این نوع گزینه باعث نادیده گرفته شدن گزینههای زیر میشود: -B، -F.
نوع number در قالبهای خروجی Xref و JSON نادیده گرفته میشود. از --_xformat="...%n" برای قالب خروجی Xref، یا --fields=+n-P برای قالب خروجی JSON استفاده کنید.
- pattern
- تنها از الگوهای جستجو برای همه برچسبها استفاده میکند، به جای شماره خطوطی که معمولاً برای تعاریف ماکرو به کار میروند. این حالت این مزیت را دارد که در صورت افزودن یا حذف سطرها از زمان ایجاد پرونده برچسب، به شماره خطوط منسوخشده ارجاع نمیدهد.
- mixed
- در این
حالت،
الگوها
عموماً با
استثنائاتی
استفاده
میشوند.
برای فرترن
(Fortran)، از
شماره خطوط
برای
بلوکهای
مشترک (common blocks)
استفاده
میشود
زیرا
سطرهای
مبدأ
متناظر
آنها
عموماً
یکسان
هستند و
جستجوی
الگو را
برای یافتن
همه
تطابقها
بیفایده
میسازد.
ابزار Exuberant Ctags یک استثنای دیگر دارد؛ برای C، از شماره خطوط برای برچسبهای تعریف ماکرو استفاده میشود. Universal Ctags این استثنا را برای C ندارد.
این قالب پیشفرض تولیدشده توسط ctags اصلی بود و بنابراین به عنوان پیشفرض برای این گزینه حفظ شده است.
- combine
- شماره سطر و الگو را با قرار دادن یک نقطهویرگول در میان آنها به یکدیگر متصل میکند.
- -n
- معادل با --excmd=number.
- -N
- معادل با --excmd=pattern.
- --extras=[+|-][<flags>|*]
- مشخص
میکند که
آیا
مدخلهای
برچسب
اضافی برای
انواع خاصی
از اطلاعات
گنجانده
شوند یا
خیر. همچنین
برای
دانستن
اینکه
موارد
اضافی چه
هستند،
زیربخش
"موارد
اضافی (Extras)" را
ببینید.
پارامتر <flags> مجموعهای از پرچمهای تکحرفی (و/یا پرچمهای با نام طولانی) است که هر یک نمایانگر یک نوع مدخل برچسب اضافی برای گنجاندن در پرونده برچسب هستند. اگر پرچمها با یکی از نویسههای '+' یا '-' آغاز شوند، اثر هر پرچم به پرچمهای فعال فعلی افزوده شده یا از آنها کاسته میشود؛ در غیر این صورت، پرچمها جایگزین تنظیمات فعلی میشوند. در صورت ارائه '*'، همه مدخلها گنجانده میشوند.
این گزینه --extras= برای کنترل موارد اضافی مشترک در همه زبانها (یا موارد اضافی مستقل از زبان) است. ابزار Universal Ctags همچنین از موارد اضافی ویژهزبان پشتیبانی میکند. (برای این مفهوم به "فیلدها و موارد اضافی ویژهزبان (Language-specific fields and extras)" مراجعه کنید). برای کنترل آنها از گزینه --extras-<LANG>= استفاده کنید.
- --extras-(<LANG>|all)=[+|-][<flags>|*]
- مشخص
میکند که
آیا
مدخلهای
برچسب
اضافی برای
انواع خاصی
از اطلاعات
برای زبان
<LANG>
گنجانده
شوند یا
خیر. Universal Ctags
موارد
اضافی
ویژهزبان
را معرفی
میکند.
برای این
مفهوم به
"فیلدها و
موارد
اضافی
ویژهزبان
(Language-specific fields and extras)"
مراجعه
کنید. این
گزینه برای
کنترل
آنهاست.
مقدار all را به عنوان <LANG> مشخص کنید تا پارامتر <flags> به همه زبانها اعمال شود؛ با مشخص کردن '*' به عنوان پرچمهای پارامتر، همه موارد اضافی فعال میشوند. اگر هیچ چیز به عنوان پرچمهای پارامتر مشخص نشود (--extras-all=)، همه موارد اضافی غیرفعال میشوند. این دو ترکیب برای آزمایش مفید هستند.
برای موارد اضافی زبان خاص <LANG>، خروجی گزینه --list-extras=<LANG> را بررسی کنید.
- --fields=[+|-][<flags>|*]
- مشخص
میکند که
کدام
فیلدهای
مستقل از
زبان باید
در
مدخلهای
برچسب
گنجانده
شوند.
فیلدهای
مستقل از
زبان
فیلدهای
الحاقی
هستند که در
همه
زبانها
مشترکاند.
برای
جزئیات
فیلدهای
الحاقی، به
بخش "قالب
پرونده
برچسب (TAG FILE FORMAT)" و
زیربخش
"فیلدهای
الحاقی (Extension fields)"
مراجعه
کنید.
پارامتر <flags> مجموعهای از پرچمهای تکحرفی یا نامهای طولانی است که هر یک نمایانگر نوعی از فیلد الحاقی برای گنجاندن هستند. هر پرچم یا گروهی از پرچمها ممکن است با '+' برای افزودن به مجموعه پیشفرض، یا '-' برای مستثنی کردن از آن، پیشوندگذاری شود. در صورت عدم وجود هرگونه علامت '+' یا '-' در پیشوند، تنها فیلدهایی که صریحاً در flags فهرست شدهاند در خروجی گنجانده خواهند شد (یعنی بازنویسی مجموعه پیشفرض). اگر '*' داده شود، همه فیلدها گنجانده میشوند.
در صورتی که گزینه --format=1 (قالب قدیمی پرونده برچسب) مشخص شده باشد، این گزینه نادیده گرفته میشود.
برای کنترل فیلدهای ویژهزبان از گزینه --fields-<LANG>= استفاده کنید.
- --fields-(<LANG>|all)=[+|-][<flags>|*]
- مشخص
میکند که
کدام
فیلدهای
ویژهزبان
باید در
مدخلهای
برچسب
گنجانده
شوند. ابزار
Universal Ctags از
فیلدهای
ویژهزبان
پشتیبانی
میکند.
(برای این
مفهوم به
"فیلدها و
موارد
اضافی
ویژهزبان
(Language-specific fields and extras)"
مراجعه
کنید).
مقدار all را به عنوان <LANG> مشخص کنید تا پارامتر <flags> به همه زبانها اعمال شود؛ با مشخص کردن '*' به عنوان پرچمهای پارامتر، همه فیلدها فعال میشوند. اگر هیچ چیز به عنوان پارامتر <flags> مشخص نشود (یعنی --fields-all=)، همه فیلدها غیرفعال میشوند. این دو ترکیب برای آزمایش مفید هستند.
درباره <flags> به توضیحات --fields=[+|-][<flags>|*] مراجعه کنید.
برای کنترل فیلدهای مستقل از زبان از گزینه --fields= استفاده کنید.
- --kinds-(<LANG>|all)=[+|-](<kinds>|*)
- فهرستی از
گونههای
(<kinds>)
برچسبهای
ویژهزبان
(یا
گونهها) را
برای
گنجاندن در
پرونده
خروجی برای
یک زبان خاص
مشخص
میکند، که
در آن <LANG> به
حروف کوچک و
بزرگ حساس
نیست و یکی
از نامهای
داخلی
زبانهاست
(برای فهرست
کامل گزینه
--list-languages را
ببینید).
پارامتر <kinds> گروهی از پرچمهای تکحرفی یا نامهای طولانی است که گونههای برچسبها را (مختص به آن زبان) برای گنجاندن یا حذف از خروجی تعیین میکند. مجموعههای خاصی از پرچمهای شناختهشده برای هر زبان، معانی و مقادیر پیشفرض آنها میتواند با استفاده از گزینه --list-kinds-full فهرست شود.
هر حرف یا گروهی از حروف میتواند با '+' برای افزودن به، یا '-' برای حذف از مجموعه پیشفرض، پیشوندگذاری شود. در صورت عدم وجود هرگونه علامت '+' یا '-' در پیشوند، تنها آن گونههایی که صریحاً در kinds فهرست شدهاند در خروجی گنجانده خواهند شد (یعنی بازنویسی پیشفرض برای زبان مشخصشده).
برای گنجاندن همه گونههای پیادهسازیشده در <LANG> در خروجی، '*' را به عنوان پارامتر مشخص کنید. همچنین اگر all به عنوان <LANG> داده شود، مشخص کردن پارامتر kinds بر همه زبانهای تعریفشده در ctags تأثیر میگذارد. دادن all تنها زمانی معنا دارد که '*' یا 'F' به عنوان پارامتر kinds داده شود.
به عنوان نمونه برای زبان C، به منظور افزودن پیشنمونهها (prototypes) و اعلان متغیرهای خارجی به مجموعه پیشفرض گونههای برچسب، اما مستثنی کردن ماکروها، از --kinds-c=+px-d استفاده کنید؛ برای گنجاندن تنها برچسبهای مربوط به توابع، از --kinds-c=f استفاده کنید.
برخی از گونههای زبانهای C و C++ همگامسازی شدهاند؛ فعالسازی (یا غیرفعالسازی) یک گونه در یک زبان، گونهای را که دارای همان تکحرف و نام طولانی در زبان دیگر است فعال میکند. همچنین به توضیحات ستون MASTER در --list-kinds-full مراجعه کنید.
- --pattern-length-limit=<N>
- الگوهای
مدخلهای
برچسب را پس
از <N> نویسه
کوتاه
میکند. با
تنظیم روی 0
غیرفعال
میشود
(پیشفرض 96
است).
یک پرونده منبع ورودی با خطوط طولانی و چندین تطابق برچسب در هر خط میتواند در صورت نامحدود بودن طول الگو، پرونده برچسبهای بیش از حد بزرگی تولید کند. برای نمونه، اجرای ctags روی یک پرونده منبع فشردهشده (minified) جاوااسکریپت معمولاً چنین رفتاری را نشان میدهد.
کوتاهسازی به منظور جلوگیری از نوشتن توالی بایتهای نامعتبر از پروندههای ورودی معتبر، از بریدن در میانه یک نقطه کد UTF-8 چندبایتی خودداری میکند. این سازوکار در بدترین حالت که یک نقطه کد ۴ بایتی درست پیش از حد نصاب آغاز میشود، اجازه تا ۳ بایت اضافه فراتر از حد تنظیمشده را میدهد. لطفاً توجه داشته باشید که این سازوکار نسبتاً ساده و سریع است، و اگرچه در برابر هر ورودی مقاومت دارد، اما برای عملکرد درست نیازمند یک ورودی معتبر است؛ تضمین نمیشود هنگام کار با ورودی UTF-8 با بخشهای نامعتبر طبق انتظار کاربر عمل کند. این موضوع همچنین ورودیهای غیر UTF-8 را نیز تا حدی تحت تأثیر قرار میدهد، در صورتی که توالی بایت در طول محل کوتاهسازی شبیه یک توالی چندبایتی UTF-8 باشد. با این حال این حالت باید نادر باشد، و در بدترین وضعیت منجر به گنجاندن تا ۳ بایت اضافی بیش از حد نصاب خواهد شد.
- --pseudo-tags=[+|-](<pseudo-tag>|*)
- تولید شبهبرچسبی با نام <pseudo-tag> را فعال/غیرفعال میکند. اگر '*' داده شود، تولید همه شبهبرچسبها را فعال/غیرفعال میکند.
- --put-field-prefix
- عبارت UCTAGS را
به عنوان
پیشوند
برای نام
فیلدهایی
که به تازگی
در Universal Ctags معرفی
شدهاند
قرار
میدهد.
برخی فیلدها به تازگی در Universal Ctags معرفی شدهاند و در آینده موارد بیشتری معرفی خواهند شد. سایر تولیدکنندگان برچسب نیز ممکن است فیلدهای اختصاصی خود را معرفی کنند.
در چنین شرایطی، نگرانی درباره تداخل نامهای فیلد وجود دارد؛ ترکیب پروندههای برچسب تولیدشده توسط چندین تولیدکننده برچسب از جمله Universal Ctags دشوار است. این گزینه راهکاری برای چنین وضعیتی فراهم میکند.
$ ctags --fields='{line}{end}' -o - hello.c
main hello.c /^main(int argc, char **argv)$/;" f line:3 end:6
$ ctags --put-field-prefix --fields='{line}{end}' -o - hello.c
main hello.c /^main(int argc, char **argv)$/;" f line:3 UCTAGSend:6
در مثال بالا، پیشوند به فیلد end که به تازگی در Universal Ctags معرفی شده، اضافه شده است.
- --roles-(<LANG>|all).(<kind>|*)=[+|-][<roles>|*]
- فهرستی از
نقشهای
وابسته به
گونهٔ
برچسبها
را برای
گنجاندن در
پرونده
خروجی برای
زبانی خاص
مشخص
میکند. <kind>
گونهای را
مشخص
میکند که
<roles> در آن
تعریف
شدهاند.
<LANG> زبانی
را مشخص
میکند که
گونه در آن
تعریف شده
است. هر نقش
در <roles> باید
درون
آکولاد
محصور شود
(برای نمونه
{system} برای
نقشی به نام
"system").
همانند گزینه --kinds-<LANG>، نویسه '+' برای افزودن نقش به فهرست، و '-' برای حذف از فهرست است. '*' برای گنجاندن تمام نقشهای آن گونه در فهرست است. گزینه بدون آرگومان فهرست را خالی میکند.
هم پرچم تکنویسهای و هم پرچم نام کامل محصور در آکولاد برای مشخص کردن یک گونه قابل قبول هستند (مانند --roles-C.h=+{system}{local} یا --roles-C.{header}=+{system}{local}). از '*' میتوان برای <KIND> تنها به منظور افزودن/حذف تمام نقشهای همه گونهها در یک زبان به/از فهرست استفاده کرد (مانند --roles-C.*=* یا --roles-C.*=).
از all میتوان برای <LANG> تنها جهت افزودن/حذف تمام نقشهای همه گونهها در تمام زبانها به/از فهرست استفاده کرد (مانند --roles-all.*=* یا --roles-all.*=).
- --tag-relative=(yes|no|always|never)
- نحوه ثبت مسیرهای پرونده را در پرونده برچسب مشخص میکند. مقدار پیشفرض هنگام اجرا در حالت etags (گزینه -e را ببینید) برابر yes، و در غیر این صورت no است.
- yes
- مشخص میکند مسیرهای پرونده ثبتشده در پرونده برچسب باید نسبت به پوشه حاوی پرونده برچسب باشند، مگر اینکه پروندههای ارائهشده در خط فرمان با مسیرهای مطلق مشخص شده باشند.
- no
- مشخص میکند مسیرهای پرونده ثبتشده در پرونده برچسب باید نسبت به پوشه جاری باشند، مگر اینکه پروندههای ارائهشده در خط فرمان با مسیرهای مطلق مشخص شده باشند.
- always
- مشخص میکند مسیرهای پرونده ثبتشده باید نسبی باشند، حتی اگر نام پروندههای منبع با مسیرهای مطلق داده شده باشند.
- never
- مشخص میکند مسیرهای پرونده ثبتشده باید مطلق باشند، حتی اگر نام پروندههای منبع با مسیرهای نسبی داده شده باشند.
- --use-slash-as-filename-separator[=(yes|no)]
- هنگام چاپ
فیلد input: از
نویسه اسلش
('/') به جای
نویسه
بکاسلش ('\')
به عنوان
جداکننده
نام پرونده
استفاده
میکند.
مقدار
پیشفرض
برای قالب
خروجی
پیشفرض
"u-ctags" برابر
yes، و برای
سایر
قالبها no
است.
شبهبرچسب TAG_OUTPUT_FILESEP برای نشان دادن انتخاب جداکننده نام پرونده با این گزینه است. همچنین ctags-client-tools(7) را ببینید.
این گزینه تنها روی MS Windows در دسترس است.
- -B
- استفاده از الگوهای جستجو به سمت عقب (مانند ?pattern?). [در حالت etags نادیده گرفته میشود]
- -F
- استفاده از الگوهای جستجو به سمت جلو (مانند /pattern/) (پیشفرض). [در حالت etags نادیده گرفته میشود]
گزینههای پرونده تنظیمات (Option File Options)
- --options=<pathname>
- خواندن
گزینههای
اضافی از یک
پرونده یا
پوشه.
ctags ابتدا <pathname> را در فهرست مسیرهای optlib جستجو میکند. اگر ctags نتواند پرونده یا پوشهای را در فهرست بیابد، پرونده یا پوشه را در <pathname> مشخصشده میخواند.
اگر پروندهای مشخص شود، باید شامل یک گزینه در هر خط باشد. اگر پوشهای مشخص شود، پروندههای دارای پسوند .ctags در آن پوشه به ترتیب الفبایی خوانده میشوند.
به عنوان یک حالت ویژه، اگر --options=NONE به عنوان نخستین گزینه در خط فرمان مشخص شود، پیشبارگذاری غیرفعال میشود؛ این گزینه خواندن خودکار هرگونه گزینه پیکربندی از یک پرونده را غیرفعال خواهد کرد ("FILES" را ببینید).
- --options-maybe=<pathname>
- مشابه --options است اما در صورت عدم وجود پرونده (یا پوشه) مشخصشده با <pathname>، خطایی ایجاد نمیکند.
- --optlib-dir=[+]<directory>
- افزودن یک <directory> مربوط به optlib به فهرست مسیرهای optlib یا بازنشانی آن. برای عناصر پیشفرض در فهرست مسیرهای optlib به "Default optlib path list" مراجعه کنید.
گزینههای optlib (optlib Options)
برای جزئیات هر گزینه به ctags-optlib(7) مراجعه کنید.
- --kinddef-<LANG>=<letter>,<name>,<description>
- تعریف یک نوع (kind) برای <LANG>. این گزینه را با --kinds-<LANG> اشتباه نگیرید.
- --langdef=<name>
- یک زبان جدید تعریفشده توسط کاربر به نام <name> را تعریف میکند تا با عبارتهای منظم تجزیه شود.
- --mline-regex-<LANG>=/<line_pattern>/<name_pattern>/<kind-spec>/[<flags>]
- تعریف عبارت منظم چندخطی برای یافتن برچسبها در زبانی مشخص.
- --regex-<LANG>=/<line_pattern>/<name_pattern>/<kind-spec>/[<flags>]
- تعریف عبارت منظم تکخطی برای یافتن برچسبها در زبانی مشخص.
گزینههای ویژه زبان (Language Specific Options)
- --if0[=(yes|no)]
- ترجیحی را
مشخص
میکند
مبنی بر
اینکه آیا
کدهای درون
یک شاخه "#if 0"
از شرط
پیشپردازنده
برای
برچسبهای
غیرماکرو
بررسی شوند
یا خیر
(برچسبهای
ماکرو
همواره
لحاظ
میشوند).
از آنجا که
هدف از این
ساختار
غیرفعال
کردن کد
است، مقدار
پیشفرض
این گزینه
no (غیرفعال)
است.
توجه داشته باشید که این گزینه صرفاً یک ترجیح را نشان میدهد و نادیده گرفتن کدهای درون یک شاخه "#if 0" را تضمین نمیکند، چرا که الگوریتم جایگزین (fall-back) که هنگام پیچیده بودن شروط پیشپردازنده برای تولید برچسبها به کار میرود، تمام شاخههای یک شرط را دنبال میکند.
- --line-directives[=(yes|no)]
- مشخص
میکند که
آیا
دستورهای
#line باید
شناسایی
شوند یا
خیر. این
دستورها در
خروجی یک
پیشپردازنده
حضور دارند
و حاوی
شماره خط، و
احتمالاً
نام فایلِ
فایل(های)
منبع اصلی
هستند که
خروجی
پیشپردازنده
از آنها
تولید شده
است. این
گزینه
بهطور
پیشفرض
غیرفعال
است.
در صورت فعال بودن، این گزینه باعث میشود ctags ورودیهای برچسب را به جای مکانهای واقعی آنها در خروجی پیشپردازنده، با نام فایلها و شماره خطهای مکان آنها در فایل(های) منبع اصلی نشانهگذاری و تولید کند. نام فایلهای واقعی قرار گرفته در فایل برچسب، همان بخشهای ابتدایی مسیر فایل خروجی پیشپردازنده را خواهند داشت، زیرا فرض میشود که فایلهای منبع اصلی نسبت به فایل خروجی پیشپردازنده قرار دارند (مگر اینکه، البته، دستور #line یک مسیر مطلق را مشخص کرده باشد).
نکته: این گزینه عموماً تنها زمانی مفید است که همراه با گزینه --excmd=number (-n) استفاده شود. همچنین اگر پسوند فایل خروجی پیشپردازنده برای ctags ناشناخته باشد، ممکن است لازم باشد از گزینه --langmap یا --language-force استفاده کنید.
- -D <macro>=<definition>
- یک <macro> پیشپردازنده C را تعریف میکند. این گزینه رفتار گزینه متناظر در gcc را شبیهسازی میکند. همه انواع ماکروها، از جمله آنهایی که دارای پارامتر و آرگومانهای متغیر هستند، پشتیبانی میشوند. تبدیل به رشته (stringification)، چسباندن توکنها (token pasting) و بسط بازگشتی ماکرو نیز پشتیبانی میشوند. این گزینه عملکرد ارائهشده توسط گزینه -I را گسترش میدهد.
- -h (<list>|default)
- یک <list> از
پسوندهای
فایل،
جداشده با
نقطه، را
مشخص
میکند که
باید به
عنوان
فایلهای include
(یا سرآیند)
تفسیر شوند.
برای مشخص
کردن
فایلهای
فاقد
پسوند، از
نقطهای
استفاده
کنید که به
دنبال آن
نویسهای
غیر از نقطه
نیامده
باشد (مانند
'.'، ..x، .x.).
این گزینه صرفاً بر نحوه تفسیر حوزه دید (scoping) انواع خاصی از برچسبها اثر میگذارد (یعنی اینکه آیا به عنوان برچسب سراسری دیده میشوند یا تنها درون فایلی که در آن تعریف شدهاند قابل مشاهده هستند)؛ این گزینه پسوند را به هیچ زبان خاصی نگاشت نمیکند. هر برچسبی که در فایلی غیر از فایلهای include قرار داشته باشد و نتوان آن را از فایلی دیگر مشاهده کرد (مانند پیوند داده شدن به آن)، دارای حوزه دید محدود به فایل (مانند static) در نظر گرفته میشود. هیچ نوع برچسبی که در یک فایل include ظاهر شود، دارای حوزه دید محدود به فایل در نظر گرفته نخواهد شد.
اگر اولین نویسه در فهرست '+' باشد، پسوندهای موجود در فهرست به فهرست کنونی اضافه خواهند شد؛ در غیر این صورت، این فهرست جایگزین فهرست کنونی میشود. همچنین پرچم fileScope/F از گزینه --extras را ببینید.
فهرست پیشفرض .h.H.hh.hpp.hxx.h++.inc.def است. برای بازگردانی فهرست پیشفرض، "-h default" را مشخص کنید.
توجه داشته باشید که اگر پسوندی که به این گزینه داده میشود قبلاً به زبانی خاص نگاشت نشده باشد (به بخش "Determining file language" در بالا مراجعه کنید)، باید از گزینه --map-<LANG>، --langmap یا --language-force نیز استفاده کنید.
- -I <identifier-list>
- یک <identifier-list> از
شناسههایی
را مشخص
میکند که
هنگام
تجزیه
فایلهای
منبع C و C++
باید
بهطور
ویژه
پردازش
شوند. این
گزینه
بهطور خاص
برای
رسیدگی به
موارد
ویژهای که
ناشی از
استفاده از
ماکروهای
پیشپردازنده
هستند در
نظر گرفته
شده است.
هنگامی که
شناسههای
فهرستشده
شناسههای
ساده
باشند، در
طول تجزیه
فایلهای
منبع
نادیده
گرفته
میشوند.
اگر شناسه با یک نویسه '+' پسوندگذاری شود (مانند "-I FOO+")، ابزار ctags همچنین هر فهرست آرگومانی محصور در پرانتز را که بلافاصله پس از شناسه در فایلهای منبع آمده باشد نادیده خواهد گرفت. به مثال "-I MODULE_VERSION+" در زیر مراجعه کنید.
اگر دو شناسه با نویسه '=' از هم جدا شده باشند (مانند -I FOO=BAR)، شناسه اول برای اهداف تجزیه با شناسه دوم جایگزین میشود. فهرست شناسهها میتواند مستقیماً در خط فرمان داده شود یا از یک فایل جداگانه خوانده شود. به مثال "-I CLASS=class" در زیر مراجعه کنید.
اگر اولین نویسه <identifier-list> برابر '@'، '.' یا یک جداکننده مسیر ('/' یا '\') باشد، یا دو نویسه اول نام یک درایو را مشخص کنند (مانند C:)، پارامتر <identifier-list> به عنوان نام فایلی تفسیر خواهد شد که فهرستی از شناسهها، هر کدام در یک سطر ورودی، از آن خوانده میشود.
در غیر این صورت، <identifier-list> فهرستی از شناسهها (یا جفتهای شناسه) برای رسیدگی ویژه است که هر کدام با کاما یا فاصله خالی جدا شدهاند (در این حالت برای نگه داشتن کل فهرست به عنوان یک آرگومان خط فرمان، فهرست باید درون نقلقول قرار گیرد).
میتوان چندین گزینه -I را مشخص کرد. برای پاک کردن فهرست شناسههای نادیدهگرفتهشده، یک خط تیره منفرد ('-') برای <identifier-list> بدهید.
این قابلیت زمانی مفید است که ماکروهای پیشپردازنده به گونهای استفاده شوند که حضور آنها باعث سردرگمی نحوی شود. در واقع، این بهترین روش برای دور زدن تعدادی از مشکلاتی است که به دلیل حضور ماکروهای برهمزننده نحو در فایلهای منبع ایجاد میشوند (به "CAVEATS" مراجعه کنید). چند مثال این موضوع را روشن خواهد کرد.
int foo ARGDECL4(void *, ptr, long int, nbytes)
در مثال بالا، ماکروی ARGDECL4 به اشتباه به جای نام درست تابع یعنی foo، به عنوان نام تابع تفسیر میشود. مشخص کردن "-I ARGDECL4" منجر به رفتار درست میشود.
/* creates an RCS version string in module */
MODULE_VERSION("$Revision$")
در مثال بالا فراخوانی ماکرو بسیار شبیه به یک تعریف تابع به نظر میرسد، زیرا نقطهویرگول به دنبال آن نیامده است (در واقع، حتی میتواند پس از آن تعریف متغیر سراسری بیاید که بسیار شبیه به اعلان پارامتر تابع به سبک K&R باشد). در حقیقت، این تعریف ظاهری تابع حتی ممکن است باعث نادیده گرفته شدن باقی فایل هنگام تلاش برای تکمیل تعریف شود. مشخص کردن "-I MODULE_VERSION+" از چنین مشکلی جلوگیری میکند.
CLASS Example {
// your content here
};
مثال بالا از CLASS به عنوان یک ماکروی پیشپردازنده استفاده میکند که برای هر پلتفرم به چیزی متفاوت بسط مییابد. به عنوان مثال، CLASS ممکن است در پلتفرمهای Win32 به صورت class __declspec(dllexport) و در UNIX صرفاً به صورت class تعریف شود. در حالت عادی، عدم وجود کلیدواژه C++ یعنی class باعث میشود فایل منبع به نادرستی تجزیه شود. رفتار درست را میتوان با تعیین "-I CLASS=class" بازیابی کرد.
- --param-<LANG>.<name>=<argument>
- تنظیم یک
پارامتر
ویژه <LANG>،
پارامتری
که مختص به
<LANG> است.
پارامترهای موجود را میتوان با --list-params فهرست کرد.
گزینههای فهرستبندی (Listing Options)
- --list-aliases[=(<language>|all)]
- نامهای مستعار (aliases) را برای <language> مشخصشده یا all (همه) زبانها فهرست میکند و سپس خارج میشود. در صورت حذف آرگومان گزینه، all به عنوان مقدار پیشفرض استفاده میشود. نامهای مستعار هنگام آزمایش اکتشافیِ یک تجزیهکننده زبان برای یک فایل منبع استفاده میشوند.
- --list-excludes
- الگوهای استثناسازی فعلی مورد استفاده برای نادیده گرفتن فایلها را فهرست میکند.
- --list-extras[=(<language>|NONE|all)]
- موارد
اضافی (extras)
شناساییشده
را برای <language>
مشخصشده
یا all (همه)
زبانها
فهرست
میکند. اگر
NONE مشخص
شود، تنها
موارد
اضافی
مشترک در
تمام
زبانها را
فهرست
میکند.
برای
دانستن
اینکه
موارد
اضافی چه
هستند به
زیربخش "Extras"
مراجعه
کنید. در
صورت حذف
آرگومان
گزینه، all
به عنوان
مقدار
پیشفرض
استفاده
میشود.
یک مورد اضافی میتواند با --extras= برای موارد اضافی مشترک در تمام زبانها، یا با --extras-<LANG>= برای زبان مشخصشده فعال یا غیرفعال شود. این گزینهها یک پرچم تکحرفی یا پرچم نامکامل را به عنوان پارامتر برای مشخص کردن یک مورد اضافی دریافت میکنند.
معنای ستونها در خروجی به شرح زیر است:
- LETTER
- پرچم تکحرفی. علامت '-' به این معنی است که مورد اضافی پرچم تکحرفی ندارد.
- NAME
- پرچم نامکامل (long-name). نامکامل در فیلد extras استفاده میشود.
- ENABLED
- فعال بودن یا نبودن مورد اضافی. مقدار yes یا no میگیرد.
- LANGUAGE
- نام زبان، در صورتی که مورد اضافی متعلق به یک تجزیهکننده باشد. مقدار NONE یعنی مورد اضافی میان تجزیهکنندهها مشترک است.
- DESCRIPTION
- توضیحات خوانا برای انسان درباره مورد اضافی.
- --list-features
- ویژگیهای کامپایلشده را فهرست میکند.
- --list-fields[=(<language>|NONE|all)]
- فیلدهای
شناختهشده
را برای <language>
مشخصشده
یا all (همه)
زبانها
فهرست
میکند. اگر
NONE مشخص
شود، تنها
فیلدهای
مشترک در
تمام
زبانها را
فهرست
میکند.
برای
دانستن
اینکه
فیلدها چه
هستند به
زیربخش "Extension
fields" مراجعه
کنید. در
صورت حذف
آرگومان
گزینه، all
به عنوان
مقدار
پیشفرض
استفاده
میشود.
معنای ستونها به شرح زیر است:
- LETTER
- پرچم تکحرفی. علامت '-' به این معنی است که فیلد پرچم تکحرفی ندارد.
- NAME
- نامکامل فیلد.
- ENABLED
- فعال بودن یا نبودن فیلد. مقدار yes یا no میگیرد.
- LANGUAGE
- نام زبان، در صورتی که فیلد متعلق به یک تجزیهکننده باشد. مقدار NONE به این معنی است که فیلد مستقل از زبان بوده و میان تمام زبانها مشترک است.
- JSTYPE
- نوع JSON که هنگام مشخص شدن --output-format=json برای چاپ مقدار فیلد استفاده میشود. به ctags-client-tools(7) مراجعه کنید.
- FIXED
- آیا این
فیلد در
خروجی tags
قابل
غیرفعالسازی
است یا خیر.
برخی فیلدها همیشه در خروجی tags چاپ میشوند. مقدار این ستون برای آنها yes است.
برخلاف حالت خروجی tag، حالت خروجی JSON اجازه غیرفعال کردن هر فیلدی را میدهد.
- OP
- نحوه دسترسی به این فیلد از طریق کد optscript. این فیلد برای توسعهدهندگان Universal Ctags است.
- DESCRIPTION
- توضیحات خوانا برای انسان درباره فیلد.
- --list-kinds[=(<language>|all)]
- زیرمجموعهای
از --list-kinds-full است.
این گزینه
برای
سازگاری
عقبرو با
Exuberant Ctags حفظ شده
است.
این گزینه تنها فیلدهای LETTER و DESCRIPTION و ENABLED از خروجی --list-kinds-full را چاپ میکند. با این حال، نحوه نمایش ستون ENABLED با گزینه --list-kinds-full متفاوت است؛ در صورتی که گونه (kind) غیرفعال باشد [off] پس از توضیحات میآید، و در صورت فعال بودن چیزی درج نمیشود. بیشتر گونهها به طور پیشفرض فعال هستند.
نقطه ضعف اساسی این گزینه عدم چاپ نام گونه است. Universal Ctags گزینه --list-kinds-full را معرفی کرد زیرا نامها را مهم میداند.
این گزینه با --machinable یا --with-list-header کار نمیکند.
- --list-kinds-full[=(<language>|all)]
- گونههای
برچسب (tag kinds)
شناختهشده
را برای <language>
مشخصشده
یا all (همه)
زبانها
فهرست کرده
و سپس خارج
میشود.
برای
یادگیری
مفهوم
گونهها به
زیربخش "Kinds"
مراجعه
کنید. در
صورت حذف
آرگومان
گزینه، all
به عنوان
مقدار
پیشفرض
استفاده
میشود.
هر گونه از برچسب ثبتشده در فایل برچسب، با یک پرچم تکحرفی یا پرچم نامکامل نشان داده میشود. آنها همچنین برای فیلتر کردن برچسبهای قرارگرفته در خروجی با استفاده از گزینه --kinds-<LANG> به کار میروند.
معنای ستونها به شرح زیر است:
- LANGUAGE
- نام زبانی که گونه را دارد.
- LETTER
- پرچم تکحرفی. این مقدار در هر زبان باید یکتا باشد.
- NAME
- پرچم نامکامل گونه. میتواند به عنوان جایگزینی برای پرچم تکحرفیِ ذکرشده در بالا استفاده شود. در صورت فعال کردن فیلد K با --fields=+K، ابزار ctags در خروجی برچسبها به جای تکحرفها از نامهای کامل استفاده میکند. برای فعال/غیرفعال کردن یک گونه با گزینه --kinds-<LANG>، به جای تکحرف از نامکامل احاطهشده با آکولاد استفاده میشود. برای جزئیات به "Letters and names" مراجعه کنید. این مقدار در هر زبان باید یکتا باشد.
- ENABLED
- فعال بودن یا نبودن گونه. مقدار yes یا no میگیرد.
- REFONLY
- آیا گونه منحصراً برای برچسبگذاری ارجاعی است یا خیر. اگر ستون yes باشد، گونه برای برچسبگذاری ارجاعی است و هرگز برای برچسبگذاری تعاریف استفاده نمیشود. همچنین به "TAG ENTRIES" مراجعه کنید.
- NROLES
- تعداد نقشهایی که این گونه دارد. همچنین به "Roles" مراجعه کنید.
- MASTER
- تجزیهکننده
اصلی (master parser) که
فعالسازی
گونه را
کنترل
میکند. در
Universal Ctags یک گونه
متعلق به یک
زبان (مالک)
است؛ فعال
یا غیرفعال
کردن یک
گونه در یک
زبان هیچ
اثری بر
گونه در
زبانی دیگر
ندارد، حتی
اگر هر دو
گونه پرچم
تکحرفی
و/یا
نامکامل
یکسانی
داشته
باشند. به
بیان دیگر،
فضای نام
گونهها بر
اساس زبان
تفکیک شده
است.
با این حال، Exuberant Ctags گونههای C و ++C را تفکیک نمیکند. فعال/غیرفعال کردن kindX در زبان C سبب فعال/غیرفعال شدن گونهای در زبان ++C با همان پرچم نامکامل میشود. برای شبیهسازی این رفتار در Universal Ctags، مفهومی به نام master parser معرفی شده است. فعال/غیرفعالسازی برخی گونهها تحت کنترل زبان اصلی هماهنگسازی میشود.
$ ctags --kinds-C=+'{local}' --list-kinds-full \
| grep -E '^(#|C\+\+ .* local)'
#LANGUAGE LETTER NAME ENABLED REFONLY NROLES MASTER DESCRIPTION
C++ l local yes no 0 C local variables
$ ctags --kinds-C=-'{local}' --list-kinds-full \
| grep -E '^(#|C\+\+ .* local)'
#LANGUAGE LETTER NAME ENABLED REFONLY NROLES MASTER DESCRIPTION
C++ l local no no 0 C local variables
مشاهده میکنید که فیلد ENABLED برای گونه local در زبان ++C تغییر میکند گرچه گونه local در زبان C فعال/غیرفعال شده است. در صورت جابهجا کردن زبانها نیز نتیجه یکسان خواهد بود.
- DESCRIPTION
- توضیحات خوانا برای انسان درباره گونه.
- --list-languages
- نام
زبانهای
قابل فهم
برای ctags را
فهرست کرده
و سپس خارج
میشود. این
نامهای
زبان به
بزرگی و
کوچکی حروف
حساس
نیستند و
میتوانند
در
گزینههای
متعدد
دیگری
مانند --language-force،
--languages، --kinds-<LANG>،
--regex-<LANG> و غیره
استفاده
شوند.
هر زبان فهرستشده در صورتی که عبارت [disabled] به دنبال آن بیاید غیرفعال است. برای استفاده از تجزیهکننده برای چنین زبانی، زبان را به عنوان آرگومانی برای گزینه --languages=+ مشخص کنید.
گزینههای --machinable و --with-list-header در صورت تعیین همراه با این گزینه نادیده گرفته میشوند.
- --list-map-extensions[=(<language>|all)]
- پسوندهای فایلی را که نام یک فایل را به یک زبان مرتبط میکنند، برای <language> مشخصشده یا all (همه) زبانها فهرست کرده و سپس خارج میشود. در صورت حذف آرگومان گزینه، all به عنوان مقدار پیشفرض استفاده میشود.
- --list-map-patterns[=(<language>|all)]
- الگوهای نام فایلی را که نام یک فایل را به یک زبان مرتبط میکنند، برای <language> مشخصشده یا all (همه) زبانها فهرست کرده و سپس خارج میشود. در صورت حذف آرگومان گزینه، all به عنوان مقدار پیشفرض استفاده میشود.
- --list-maps[=(<language>|all)]
- الگوهای
نام فایل و
پسوندهای
فایلی را که
نام یک فایل
را به یک
زبان مرتبط
میکنند،
برای <language>
مشخصشده
یا all (همه)
زبانها
فهرست کرده
و سپس خارج
میشود. در
صورت حذف
آرگومان
گزینه، all
به عنوان
مقدار
پیشفرض
استفاده
میشود.
برای فهرست کردن پسوندهای فایل یا الگوهای نام فایل بهصورت جداگانه، از گزینه --list-map-extensions یا --list-map-patterns استفاده کنید. گزینه --langmap و بخش "Determining file language" (تعیین زبان فایل) در بالا را ببینید.
این گزینه نه با --machinable و نه با --with-list-header کار نمیکند.
- --list-mline-regex-flags
- فهرستی از پرچمهایی را که میتوان در تعریف یک تجزیهکننده عبارات باقاعده چندخطی استفاده کرد، خروجی میدهد. سند ctags-optlib(7) را ببینید.
- --list-output-formats
- قالبهای
خروجی قابل
استفاده در
گزینه --output-format
را فهرست
میکند.
ستون NULLTAG نشان میدهد که آیا قالب از null tags (برچسبهای پوچ) پشتیبانی میکند یا خیر. درباره برچسبهای پوچ، nulltag/z در بخش "Extras" را ببینید.
(از نسخه 6.2.0 به بعد)
- --list-params[=(<language>|all)]
- پارامترها را برای <language> مشخصشده یا all (همه) زبانها فهرست کرده و سپس خارج میشود. در صورت حذف آرگومان گزینه، all به عنوان مقدار پیشفرض استفاده میشود.
- --list-pseudo-tags
- فهرست شبهبرچسبها را خروجی میدهد.
- --list-regex-flags
- پرچمهایی را که میتوان در گزینه --regex-<LANG> به کار برد فهرست میکند. سند ctags-optlib(7) را ببینید.
- --list-roles[=(<language>|all)[.(<kind-specs>|*)]]
- نقشها را
برای <language>
مشخصشده
یا all (همه)
زبانها
فهرست
میکند. در
صورت حذف
آرگومان
گزینه، all
به عنوان
مقدار
پیشفرض
استفاده
میشود.
اگر پارامتر <kindspecs> پس از پارامتر <language> یا all همراه با الحاق '.' داده شود، تنها نقشهای تعریفشده در آن انواع (kinds) را فهرست میکند. هر دو مورد پرچمهای تکحرفی و پرچمهای نامطولانی احاطهشده با آکولاد به عنوان پارامتر <kindspecs> پذیرفته میشوند.
معنی ستونها به شرح زیر است:
- LANGUAGE
- نام زبانی که نقش را دربردارد.
- KIND(L/N)
- پرچم تکحرفی و پرچم نامطولانی نوعی که این نقش را دارد.
- NAME
- پرچم نامطولانی نقش.
- ENABLED
- اینکه نوع فعال است یا خیر. مقادیر yes یا no میپذیرد.
- DESCRIPTION
- توضیحات خوانا برای انسان برای نقش.
- --list-subparsers[=(<baselang>|all)]
- زیرتجزیهکنندهها را برای یک زبان پایه برای <baselang> مشخصشده یا all (همه) زبانها فهرست کرده و سپس خارج میشود. در صورت حذف آرگومان گزینه، all به عنوان مقدار پیشفرض استفاده میشود.
- --machinable[=(yes|no)]
- از نویسه تب به عنوان جداکننده برای خروجی گزینه --list- استفاده میکند. این ممکن است برای اسکریپتنویسی مناسب باشد. برای موارد کاربرد در نظر گرفتهشده، بخش "List options" را ببینید. بهطور پیشفرض غیرفعال است.
- --with-list-header[=(yes|no)]
- سرآیندهای توصیفکننده ستونها را در خروجی گزینه --list- چاپ میکند. همچنین بخش "List options" را ببینید.
گزینههای متفرقه (Miscellaneous Options)
- --help
- شرح مفصلی از نحوه استفاده را در خروجی استاندارد چاپ کرده و سپس خارج میشود.
- -?
- معادل --help.
- --help-full
- شرح مفصلی از نحوه استفاده شامل ویژگیهای آزمایشی را در خروجی استاندارد چاپ کرده و سپس خارج میشود. برای اطلاعات درباره جدیدترین ویژگیهای آزمایشی، از https://docs.ctags.io/ دیدن کنید.
- --license
- خلاصهای از مجوز نرمافزار را در خروجی استاندارد چاپ کرده و سپس خارج میشود.
- --print-language
- تنها تجزیهکنندههای زبان را برای فایلهای منبع مشخصشده چاپ کرده و سپس خارج میشود.
- --quiet[=(yes|no)]
- پیامهای کمتری مینویسد (پیشفرض no است).
- --totals[=(yes|no|extra)]
- آماری
درباره
فایلهای
منبع
خواندهشده
و فایل
برچسب
نوشتهشده
در طول
اجرای جاری
ctags چاپ
میکند. این
گزینه
بهطور
پیشفرض no
است.
مقدار extra آمارهای خاص تجزیهکننده را برای تجزیهکنندههایی که چنین اطلاعاتی جمعآوری میکنند، چاپ میکند.
- --verbose[=(yes|no)]
- حالت پرحرف (verbose) را فعال میکند. این حالت اطلاعاتی درباره پردازش گزینهها و پیامی کوتاه در توصیف اقدامی که برای هر فایل بررسیشده توسط ctags انجام میشود چاپ میکند. بهطور معمول، ctags آرگومانهای خط فرمان را تا پس از خواندن گزینهها از فایلهای پیکربندی (بخش "FILES" در زیر را ببینید) نمیخواند. با این حال، اگر این گزینه نخستین آرگومان در خط فرمان باشد، پیش از خوانده شدن هر گزینهای از این منابع اثر خواهد کرد. مقدار پیشفرض no است.
- -V
- معادل --verbose.
- --version[=<language>|NONE]
- شناسه نسخه
ctags را در
خروجی
استاندارد
چاپ کرده و
سپس خارج
میشود.
تضمین
میشود که
همیشه حاوی
رشته "Universal Ctags"
است. همچنین
توضیحات
TAG_PROGRAM_VERSION و TAG_OUTPUT_VERSION
در ctags-client-tools(7) را
ببینید.
اگر NONE داده شود، شناسه نسخه را به شیوهای سادهشده چاپ میکند.
اگر <language> داده شود، شناسه نسخه را برای تجزیهکننده <language> چاپ میکند. همچنین توضیحات TAG_PARSER_VERSION در ctags-client-tools(7) را ببینید.
گزینههای منسوخشده (Obsoleted Options)
این گزینهها برای سازگاری عقبروی با Exuberant Ctags نگهداشته شدهاند.
- -w
- این گزینه برای سازگاری عقبروی با ctags در SVR4 Unix بیصدا نادیده گرفته میشود.
- --file-scope[=(yes|no)]
- این گزینه حذف شده است. به جای آن از --extras=[+|-]F یا --extras=[+|-]{fileScope} استفاده کنید.
- --extra=[+|-][<flags>|*]
- معادل --extras=[+|-][<flags>|*] است که برای هماهنگسازی شیوه نامگذاری گزینه با گزینههای دیگر مانند --kinds-<LANG>= و --fields= معرفی شد.
- --<LANG>-kinds=[+|-](<kinds>|*)
- این گزینه منسوخ شده است. به جای آن از --kinds-<LANG>=... استفاده کنید.
جزئیات عملیاتی (OPERATIONAL DETAILS)
هنگامی که ctags هر یک از نامهای فایلهای منبع را به نوبت بررسی میکند، تلاش مینماید با اعمال آزمونهای شرحدادهشده در بخش "تشخیص زبان فایل" (Determining file language)، زبان فایل را تعیین کند.
اگر زبانی شناسایی شود، فایل باز شده و سپس تجزیهکننده زبان مربوطه برای پردازش روی فایلِ در حال حاضر باز، فراخوانی میشود. تجزیهکننده فایل را پیمایش کرده و بهازای هر شیء زبانی که برای مدیریت آن نوشته شده است، مدخلی به فایل برچسب میافزاید. برای مشاهده جزئیات این مدخلها، به بخش "قالب فایل برچسب" (TAG FILE FORMAT) در ادامه مراجعه کنید.
نکاتی برای تجزیهکننده C/C++ (Notes for C/C++ Parser)
این پیادهسازی ctags برخلاف پیادهسازیهای موروثی، هیچ الزامی برای قالببندی کد C تحمیل نمیکند. پیادهسازیهای قدیمیتر ctags تمایل داشتند بر مفروضات قالببندی معینی تکیه کنند تا بتوانند دوراهیهای کدنویسی ناشی از شرطهای پیشپردازنده را حل نمایند.
بهطور کلی، ctags تلاش میکند در مورد دستورهای شرطی پیشپردازنده هوشمندانه رفتار کند. اگر یک شرط پیشپردازنده درون عبارتی دیده شود که برچسبی را تعریف میکند، ctags تنها نخستین شاخه آن شرط را دنبال میکند (مگر در حالت خاص #if 0، که در آن فقط آخرین شاخه را دنبال میکند). دلیل این امر آن است که دنبال نکردن تنها یک شاخه میتواند منجر به نحو مبهمی گردد، مانند مثال زیر:
#ifdef TWO_ALTERNATIVES
struct {
#else
union {
#endif
short a;
long b;
}
نمیتوان هر دو شاخه را دنبال کرد، زیرا در این صورت آکولادها نامتعادل شده و ctags قادر به درک نحو نخواهد بود.
اگر اعمال این روش اکتشافی در تجزیه درست فایل با شکست مواجه شود (که عموماً به دلیل جفتشدنهای پیچیده و ناسازگار در شرطها رخ میدهد)، ctags تجزیه فایل را با روش اکتشافی متفاوتی دوباره امتحان میکند؛ روشی که شاخههای شرطی پیشپردازنده را به شکل گزینشی دنبال نمیکند، بلکه در صورت بروز هرگونه عدم تعادل آکولادها در پی دنبال کردن یک شاخه شرطی #if، به تکیه بر آکولاد بسته ('}') در ستون ۱ به عنوان نشانه پایان بلوک بازمیگردد.
همچنین ctags تلاش خواهد کرد فهرستهای آرگومان محصور در دو جفت پرانتز را به طور ویژه مدیریت کند تا ساختار شرطی زیر را بپذیرد:
extern void foo __ARGS((int one, char two));
هر نامی که بلافاصله پیش از '((' قرار گیرد بهطور خودکار نادیده گرفته شده و از نام پیشین استفاده خواهد شد.
تعاریف عملگر در ++C به طور ویژه مدیریت میشوند. به منظور حفظ سازگاری با تمام انواع عملگرها (سربارگذاریشده و تبدیل نوع)، نام عملگر در فایل برچسب همواره با رشته "operator " پیشونددهی خواهد شد (یعنی حتی اگر تعریف واقعی عملگر به صورت "operator<<" نوشته شده باشد).
پس از ساخت یا الحاق به فایل برچسب، فایل بر پایه نام برچسب مرتب شده و سطرهای برچسبِ یکسان حذف میشوند.
تشخیص زبان فایل (Determining file language)
نگاشت نام فایل (File name mapping)
مگر اینکه گزینه --language-force تعیین شده باشد، زبان هر فایل منبع بهطور خودکار بر پایه یک نگاشت از نامهای فایل به زبانها انتخاب میشود. نگاشتهای فعال برای هر زبان را میتوان با استفاده از گزینه --list-maps نمایش داد و با استفاده از گزینههای --langmap یا --map-<LANG> تغییر داد.
اگر نام یک فایل به زبانی نگاشت نشده باشد، ctags تلاش میکند با بررسی محتوای فایل، زبان آن را به شیوه اکتشافی حدس بزند.
همه فایلهایی که فاقد نگاشت نام فایل و فاقد تجزیهکننده حدسزدهشده هستند، نادیده گرفته میشوند. این قابلیت اجازه میدهد ctags را روی تمام فایلهای موجود در یک شاخه تنها (مانند "ctags *")، یا روی همه فایلها در کل درخت شاخههای منبع (مانند "ctags -R") اجرا کرد، زیرا تنها فایلهایی که نامشان به زبانها نگاشت شده باشد پویش خواهند شد.
یک پسوند میتواند به چند تجزیهکننده نگاشت شود. برای نمونه، .h به C++، C و ObjectiveC نگاشت شده است. این نگاشتها میتوانند موجب بروز مشکلاتی شوند. ctags با اعمال روشهای اکتشافی روی محتوای فایل منبع، سعی میکند تجزیهکننده مناسب را انتخاب نماید، با این وجود بینقص نیست. در صورت بروز مشکل میتوان از گزینههای --language-force=<language>، --langmap=<map>[,<map>[...]]، یا --map-<LANG>=[+|-]<extension>|<pattern> استفاده کرد. (برخی از این روشهای اکتشافی صرفنظر از اینکه --guess-language-eagerly داده شده باشد یا خیر اعمال میشوند.)
حدس اکتشافی (Heuristically guessing)
اگر ctags نتواند تجزیهکنندهای را بر پایه نگاشت نامهای فایل انتخاب کند، آزمونهای اکتشافی گوناگونی برای تعیین زبان انجام میگیرند:
- آزمون نام فایل الگو (template file name testing)
- اگر نام فایل دارای پسوند .in باشد، ctags نگاشت را روی نام فایل بدون پسوند اعمال میکند. برای نمونه، برای فایلی با نام config.h.in، نگاشت config.h آزموده میشود.
- آزمون "مفسر" ("interpreter" testing)
- سطر نخست
فایل بررسی
میشود تا
مشخص گردد
آیا فایل یک
اسکریپت #!
برای زبانی
شناختهشده
هست یا خیر. ctags
به دنبال
تجزیهکنندهای
با همان نام
میگردد.
اگر ctags چنین تجزیهکنندهای نیابد، به دنبال آن نام در فهرستهای نام مستعار میگردد. برای نمونه، فرض کنید سطر نخست #!/bin/sh باشد. اگرچه ctags یک تجزیهکننده "shell" دارد، اما فاقد تجزیهکننده "sh" است. با این حال، از آنجا که sh به عنوان نام مستعار shell فهرست شده است، ctags تجزیهکننده "shell" را برای فایل برمیگزیند.
یک استثنا env است. اگر env مشخص شده باشد (برای نمونه "#!/usr/bin/env python")، ctags سطرهای بیشتری را میخواند تا مشخصات مفسر واقعی را بیابد.
برای نمایش فهرست نامهای مستعار، از گزینه --list-aliases استفاده کنید. برای افزودن یک مورد به فهرست یا حذف یک مورد از فهرست، به ترتیب از گزینه --alias-<LANG>=+<pattern> یا --alias-<LANG>=-<pattern> استفاده نمایید.
- آزمون "برچسب بارگذاری خودکار zsh" ("zsh autoload tag" testing)
- اگر سطر نخست با #compdef یا #autoload آغاز شود، ctags آن سطر را به منزله "zsh" در نظر میگیرد.
- آزمون "حالت emacs در سطر نخست" ("emacs mode at the first line" testing)
- ویرایشگر Emacs
چندین حالت
ویرایشی
ویژه
زبانهای
برنامهنویسی
دارد. Emacs
میتواند
نشانگری
موسوم به modeline
را در یک
فایل
شناسایی
کند و از آن
نشانگر
برای
انتخاب
حالت بهره
ببرد. این
آزمون
اکتشافی
دقیقاً
همان کاری
را انجام
میدهد که Emacs
انجام
میدهد.
اگر سطر نخست یکی از الگوهای زیر را داشته باشد، ctags با MODE به عنوان نام مفسر رفتار کرده و همان قاعده آزمون "مفسر" را اعمال مینماید:
-*- mode: MODE -*-
یا
-*- MODE -*-
- آزمون "حالت emacs در پایان فایل" ("emacs mode at the EOF" testing)
- ویرایشگر Emacs
نشانگر
دیگری را در
پایان فایل
به عنوان
مشخصکننده
حالت تشخیص
میدهد. این
آزمون
اکتشافی
نیز مانند Emacs
عمل میکند.
اگر سطرهای انتهای فایل دارای الگوی زیر باشند، ctags با MODE به عنوان نام یک مفسر رفتار کرده و همان قاعده آزمون اکتشافی "مفسر" را اعمال میکند:
Local Variables: ... mode: MODE ... End:
برای یافتن این الگو، ۳۰۰۰ نویسه از انتهای فایل جستجو میشود.
- آزمون "modeline در vim" ("vim modeline" testing)
- همانند modeline در ویرایشگر Emacs، ویرایشگر Vim نیز مفهوم یکسانی دارد. اگر ۵ سطر نخست یا ۵ سطر پایانی فایل یکی از الگوهای زیر را داشته باشند، ctags با TYPE به عنوان نام مفسر رفتار کرده و همان قاعده آزمون اکتشافی "مفسر" را اعمال مینماید:
filetype=TYPE
یا
ft=TYPE
- آزمودن "نشانگر PHP" ("PHP marker" testing)
- اگر خط نخست با <?php آغاز شده باشد، ctags آن خط را به عنوان "php" در نظر میگیرد.
بررسی محتویات فایل نسبت به تطبیق نام فایل عملیات پرهزینهتری است. بنابراین ctags این آزمونها را در شرایط محدودی اجرا میکند. آزمودن "interpreter" تنها زمانی فعال است که فایل یک فایل اجرایی باشد یا گزینهٔ --guess-language-eagerly (به اختصار -G) داده شده باشد. سایر آزمونهای اکتشافی تنها زمانی فعال میشوند که گزینهٔ -G داده شده باشد.
گزینهٔ --print-language میتواند صرفاً برای چاپ نتایج انتخاب تجزیهکننده برای فایلهای دادهشده، به جای تولید فایل برچسبها، استفاده شود.
مثالها:
$ ctags --print-language config.h.in input.m input.unknown config.h.in: C++ input.m: MatLab input.unknown: NONE
مقدار NONE به این معنی است که ctags هیچ تجزیهکنندهای را برای آن فایل انتخاب نمیکند.
قالب فایل برچسب (TAG FILE FORMAT)
این بخش قالب فایل برچسب را به طور خلاصه شرح میدهد. برای جزئیات بیشتر tags(5) و ctags-client-tools(7) را ببینید.
هنگامی که در حالت etags اجرا نمیشود، هر مدخل در فایل برچسب شامل یک خط مجزا است که در عمومیترین حالت، هر کدام به این شکل بوده و برچسبهای عادی (regular tags) نامیده میشوند:
<tag_name><TAB><file_name><TAB><ex_cmd>;"<TAB><extension_fields>
فیلدها و جداکنندههای این خطوط به صورت زیر مشخص میشوند:
- 1.
- <tag_name>: نام برچسب
- 2.
- <TAB>: نویسهٔ تب منفرد
- 3.
- <file_name>: نام فایلی که شیء مرتبط با برچسب در آن قرار دارد
- 4.
- <TAB>: نویسهٔ تب منفرد
- 5.
- <ex_cmd>: دستور EX که برای مکانیابی برچسب درون فایل استفاده میشود؛ عموماً یک الگوی جستجو (یا /pattern/ یا ?pattern?) یا شمارهٔ خط (گزینهٔ --excmd=<type> را ببینید).
- 6.
- ;"<TAB><extension_fields>:
مجموعهای
از فیلدهای
افزونه.
برای
جزئیات
بیشتر "Extension fields"
را ببینید.
قالب ۲ فایل برچسب (گزینهٔ --format را ببینید) دستور EX را گسترش میدهد تا فیلدهای افزونه را که درون یک توضیح EX بلافاصله متصلشده به دستور EX قرار دارند شامل شود، که این امر سازگاری رو به عقب آن را با پیادهسازیهای اصلی vi(1) حفظ میکند.
تعداد اندکی برچسب ویژه، موسوم به برچسبهای شبه (pseudo tags)، برای اهداف داخلی درون فایل برچسب نوشته میشوند.
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ !_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ ...
گزینهٔ --pseudo-tags=[+|-](<pseudo-tag>|*) صدور برچسبهای شبه را فعال یا غیرفعال میکند.
برای دیدن فهرست انواع، خروجی "ctags --list-pseudo-tags" را ببینید. همچنین برای جزئیات بیشتر دربارهٔ برچسبهای شبه به tags(5) و ctags-client-tools(7) مراجعه کنید.
این برچسبها به گونهای مرتب میشوند که همیشه به ابتدای فایل منتقل گردند. بنابراین، دو نویسهٔ اول این برچسبها به عنوان یک عدد جادویی (magic number) جهت شناسایی فایل برچسب برای تعیین این که آیا به جای یک فایل منبع، یک فایل برچسب معتبر بازنویسی میشود، مورد استفاده قرار میگیرد.
توجه داشته باشید که نام هر فایل منبع دقیقاً همانطور که در خط فرمان ظاهر شده است در فایل برچسب ثبت خواهد شد. بنابراین، اگر مسیری که در خط فرمان مشخص کردهاید نسبت به شاخهٔ جاری بوده باشد، در فایل برچسب نیز به همان صورت ثبت خواهد شد. با این حال، گزینهٔ --tag-relative=(yes|no|always|never) را ببینید تا بدانید چگونه این رفتار را میتوان تغییر داد.
مدخلهای برچسب (TAG ENTRIES)
یک برچسب نمایهای برای یک شیء زبانی است. مفهوم برچسب و موارد مرتبط با آن در Exuberant Ctags در Universal Ctags پالایش و گسترش یافته است.
یک برچسب به برچسبهای تعریف (definition tags) یا برچسبهای ارجاع (reference tags) دستهبندی میشود. به طور کلی، Exuberant Ctags فقط تعاریف اشیاء زبانی را برچسبگذاری میکند: مکانهایی که در آنها اشیاء زبانی نامگذاریشدهٔ جدید معرفی میشوند. از سوی دیگر، Universal Ctags میتواند ارجاعات به اشیاء زبانی را نیز برچسبگذاری کند: مکانهایی که در آنها اشیاء زبانی نامگذاریشده استفاده میشوند. با این حال، پشتیبانی از تولید برچسبهای ارجاع در نسخهٔ جاری جدید بوده و به بخشهای خاصی از زبانهای خاص محدود است.
فیلدهای افزونه (Extension fields)
یک برچسب میتواند اطلاعات گوناگونی را ثبت کند که فیلدهای افزونه (extension fields) نامیده میشوند.
فیلدهای افزونه جفتهای کلید-مقداری هستند که با تب جدا شده و همانطور که در بالا توضیح داده شد، به عنوان یک نظر/توضیح به انتهای دستور EX پیوست میشوند. این جفتهای کلید-مقدار به فرم کلی key:value ظاهر میشوند.
علاوه بر این، ممکن است اطلاعات مربوط به حوزهٔ (scope) تعریف برچسب نیز در دسترس باشد، به طوری که بخش کلید برابر با نام یک ساختار وابسته به زبان بوده و مقدار آن، نام اعلانشده برای آن ساختار در برنامه باشد. این مدخل حوزه نشاندهندهٔ حوزهای است که برچسب در آن یافت شده است. برای مثال، برچسب تولیدشده برای یک عضو ساختار C دارای حوزهای شبیه به struct:myStruct خواهد بود.
گزینههای --fields=[+|-][<flags>|*] و --fields-(<LANG>|all)=[+|-][<flags>|*] مشخص میکنند کدام فیلدهای افزونهٔ موجود باید در مدخلهای برچسب گنجانده شوند.
برای فهرست فیلدهای افزونه، خروجی "ctags --list-fields" را ببینید. فیلدهای اساسی عبارتاند از name، input، pattern، و line. معنای فیلدهای اصلی به صورت زیر است (پرچم نامبلند/پرچم تکحرفی):
- access/a
- سطح دسترسی و دید این عضو کلاس را مشخص میکند، که در آن مقدار وابسته به زبان است.
- end/e
- شماره خطوط پایانی شیء زبانی را مشخص میکند.
- extras/E
- اطلاعات نوع برچسب اضافی. برای جزئیات بیشتر "Extras" را ببینید.
- file/f
- نشان میدهد که برچسب دارای دید محدود به فایل است. این کلید هیچ مقدار متناظری ندارد. به طور پیشفرض فعال است.
- implementation/m
- در صورت وجود، نشاندهندهٔ یک پیادهسازی محدود (انتزاعی در برابر عینی) از یک روال یا کلاس است، که در آن مقدار وابسته به زبان میباشد (virtual یا pure virtual برای ++C؛ abstract برای Java).
- inherits/i
- در صورت وجود، مقدار آن فهرستی جداشده با ویرگول از کلاسهایی است که این کلاس از آنها مشتق شده است (یعنی از آنها ارثبری میکند).
- input/F
- نام فایل منبعی که name در آن تعریف یا به آن ارجاع داده شده است.
- k
- نوع <Kinds> برچسب به عنوان تکحرف. به طور پیشفرض فعال است. این فیلد نامبلند ندارد. همچنین پرچم kind/z را ببینید.
- K
- نوع <Kinds> برچسب به عنوان نامبلند. این فیلد نامبلند ندارد. همچنین پرچم kind/z را ببینید.
- kind/z
- کلید kind: در فیلد kind <Kinds> گنجانده شود. همچنین پرچمهای k و K را ببینید.
- language/l
- زبان فایل منبع حاوی برچسب.
- line/n
- شماره خطی که در آن name در input تعریف یا ارجاع داده شده است.
- name/N
- نام اشیاء زبانی.
- nth/o
- ترتیب در حوزهٔ والد. (برای مثال چهارمین پارامتر در تابع).
- pattern/P
- میتواند برای جستجوی name در input استفاده شود.
- roles/r
- نقشهای اختصاصیافته به برچسب. برای جزئیات بیشتر "Roles" را ببینید.
- s
- حوزهٔ تعریف برچسب. به طور پیشفرض فعال است. این فیلد نامبلند ندارد. همچنین پرچم scope/Z را ببینید.
- scope/Z
- کلید scope: را به ابتدای فیلد حوزه (s) اضافه میکند. پرچم s را نیز ببینید.
- scopeKind/p
- نوع حوزه به صورت نام طولانی (long-name).
- signature/S
- در صورت وجود، مقدار آن نمایشی وابسته به زبان از امضای یک روال (مانند پیشنمونه یا فهرست پارامترها) است. امضای یک روال در شکل کامل خود نوع بازگشتی یک روال و فهرست آرگومانهای صوری آن را مشخص میکند. این فیلد افزونه در حال حاضر تنها برای زبانهای مبتنی بر C پشتیبانی میشود و شامل نوع بازگشتی نمیباشد.
- typeref/t
- نوع و نام یک متغیر، typedef یا نوع بازگشتی یک شیء قابل فراخوانی مانند تابع به عنوان فیلد typeref:. بهطور پیشفرض فعال است.
انواع (Kinds)
kind فیلدی است که نوعِ شیء زبان مشخصشده توسط یک برچسب را نشان میدهد. انواع مورد استفاده و تعریفشده میان تجزیهکنندهها بسیار متفاوت هستند. برای نمونه، زبان C مواردی چون macro، function، variable، typedef و غیره را تعریف میکند.
گزینه --kinds-(<LANG>|all)=[+|-](<kinds>|*) فهرستی از انواع برچسبهای وابسته به زبان (یا انواع) را برای گنجاندن در فایل خروجی برای زبانی خاص مشخص میکند.
برای فهرست کامل انواع، خروجی دستور "ctags --list-kinds-full" را مشاهده کنید.
مقدار آن یا یکی از پرچمهای تکحرفی متناظر یا یک پرچم با نام طولانی است. حذف بخش کلید (key) در این فیلد مجاز (و در واقع پیشفرض) است. رفتارهای اختیاری با گزینه --fields به شرح زیر کنترل میشوند.
$ ctags -o - kinds.c
foo kinds.c /^int foo() {$/;" f typeref:typename:int
$ ctags --fields=+k -o - kinds.c
foo kinds.c /^int foo() {$/;" f typeref:typename:int
$ ctags --fields=+K -o - kinds.c
foo kinds.c /^int foo() {$/;" function typeref:typename:int
$ ctags --fields=+z -o - kinds.c
foo kinds.c /^int foo() {$/;" kind:f typeref:typename:int
$ ctags --fields=+zK -o - kinds.c
foo kinds.c /^int foo() {$/;" kind:function typeref:typename:int
نقشها (Roles)
مفهوم Role (نقش) مفهومی تازه معرفیشده در Universal Ctags است. نقش مفهومی مرتبط با برچسبهای ارجاعی است و هنوز بهطور گسترده پیادهسازی نشده است.
همانطور که پیشتر در بخش "انواع (Kinds)" شرح داده شد، فیلد kind نشاندهنده نوع شیء زبان مشخصشده با یک برچسب است، مانند تابع در برابر متغیر. انواع خاصی برای برچسبهای ارجاعی تعریف شدهاند، مانند نوع header در C++ برای فایلهای سرآیند، یا نوع package در Java برای عبارات package. برای چنین انواع ارجاعی، یک فیلد roles میتواند برای متمایز ساختن نقشِ نوع ارجاعی اضافه شود. به بیان دیگر، فیلد kind مشخص میکند که شیء زبان چه چیزی است، در حالی که فیلد roles مشخص میکند شیء زبان ارجاعشده چگونه است. نقشها تنها با انواع خاصی استفاده میشوند.
برای یک برچسب تعریف، این فیلد مقدار def را میگیرد.
برای نمونه، در کد زیر Baz به عنوان یک برچسب ارجاعی با نوع package و نقش imported برچسبگذاری میشود.
package Bar;
import Baz;
class Foo {
// ...
}
$ ctags --fields=+KEr -uo - roles.java
Bar roles.java /^package Bar;$/;" package roles:def
Foo roles.java /^class Foo {$/;" class roles:def
$ ctags --fields=+EKr --extras=+r -uo - roles.java
Bar roles.java /^package Bar;$/;" package roles:def
Baz roles.java /^import Baz;$/;" package roles:imported extras:reference
Foo roles.java /^class Foo {$/;" class roles:def
گزینه --roles-(<LANG>|all).(<kind>|all)=[+|-][<roles>|*] فهرستی از نقشهای خاص هر نوع برچسب را برای گنجاندن در فایل خروجی برای زبانی مشخص تعیین میکند.
برای فهرست نقشها خروجی "ctags --list-roles" را بررسی کنید.
موارد اضافی (Extras)
بهطور کلی، ctags تنها اشیاء زبانی ظاهرشده در فایلهای منبع را همانگونه که هستند برچسبگذاری میکند. به عبارت دیگر، مقدار یک فیلد name: باید در فایل منبع مرتبط با آن name: یافت شود. برچسبی از نوع extra (extra) برای برچسبگذاری یک شیء زبان با نامی پردازششده، یا برچسبگذاری چیزی است که با یک شیء زبان مرتبط نیست. یک برچسب اضافی متداول qualified است که یک شیء زبان را با نام واجد شرایط کلاس یا حوزه (scope-qualified) برچسبگذاری میکند.
گزینه --extras-(<LANG>|all)=[+|-][<flags>|*] مشخص میکند آیا مدخلهای برچسب اضافی برای انواع خاصی از اطلاعات گنجانده شوند یا خیر.
برای فهرست موارد اضافی خروجی ctags --list-extras را بررسی کنید. معنای موارد اضافی اصلی به این شرح است (پرچم نام طولانی/پرچم تکحرفی):
- anonymous/none
- گنجاندن یک
مدخل برای
شیء زبانی
که نام
ندارد،
مانند تابع
لامبدا. این
مورد اضافی
فاقد پرچم
تکحرفی
است و
بهطور
پیشفرض
فعال است.
این برچسب اضافی به عنوان یک جاینگهدار برای پر کردن فیلدهای حوزه برای اشیاء زبانیِ تعریفشده در یک شیء زبانی فاقد نام مفید است.
struct {
double x, y;
} p = { .x = 0.0, .y = 0.0 };
'x' و 'y' اعضای یک ساختار هستند. هنگام پر کردن فیلدهای حوزه برای آنها، ctags دچار مشکل میشود چرا که ساختارِ دربرگیرنده 'x' و 'y' نامی ندارد. برای حل این مشکل، ctags یک برچسب اضافی ناشناس (anonymous) برای ساختار تولید میکند و فیلدهای حوزه را با نام این برچسب اضافی پر مینماید.
$ ctags --fields=-f -uo - input.c
__anon9f26d2460108 input.c /^struct {$/;" s
x input.c /^ double x, y;$/;" m struct:__anon9f26d2460108
y input.c /^ double x, y;$/;" m struct:__anon9f26d2460108
p input.c /^} p = { .x = 0.0, .y = 0.0 };$/;" v typeref:struct:__anon9f26d2460108
خروجی برچسب فوق حاوی __anon9f26d2460108 به عنوان برچسب اضافی ناشناس است. فیلد typeref برای 'p' نیز از مزیت آن بهرهمند میشود.
- fileScope/F
- نشان
میدهد آیا
برچسبهای
منحصر به
حوزه
تکفایل
(یعنی
برچسبهایی
که بیرون از
فایلی که در
آن تعریف
شدهاند
دیده
نمیشوند،
مانند
اشیاء
زبانی با
اصلاحکننده
static در زبان C)
باید در
خروجی
گنجانده
شوند یا
خیر. گزینه
-h را نیز
ببینید.
این برچسب اضافی بهطور پیشفرض فعال است. برای عدم درج برچسبهای منحصر به حوزه تکفایل، گزینه --extras=-F را اضافه کنید. این گزینه جایگزین گزینه --file-scope در Exuberant Ctags است.
static int f() {
return 0;
}
int g() {
return 0;
}
$ ctags -uo - filescope.c
f filescope.c /^static int f() {$/;" f typeref:typename:int file:
g filescope.c /^int g() {$/;" f typeref:typename:int
$ ctags --extras=-F -uo - filescope.c
g filescope.c /^int g() {$/;" f typeref:typename:int
- inputFile/f
- گنجاندن یک
مدخل برای
نام پایه هر
فایل منبع
(مانند example.c)
که به خط
اول فایل
اشاره دارد.
این پرچم
جایگزین
گزینه
پنهان --file-tags
در Exuberant Ctags است.
اگر فیلد end: فعال باشد، شماره خط پایانی فایل میتواند به برچسب پیوست شود. (با این حال، اگر فاقد خط جدید باشد مانند یک فایل خالی، ctags فیلد end: را حذف میکند.)
بهطور پیشفرض، اگر ctags تجزیهکنندهای برای فایل منبع نیابد، برچسب اضافی inputFile/f را برای آن ایجاد نمیکند. فعالسازی تجزیهکننده Unknown با --languages=+Unknown، ابزار ctags را وادار میکند برچسبهای اضافی را برای هر فایل منبعی بسازد.
حالت etags تجزیهکننده Unknown را به شکل ضمنی فعال میکند.
- nulltag/z
- شامل کردن
برچسبهایی
(برچسبهای
پوچ یا null tags)
که
رشتههای
خالی را به
عنوان نام
خود دارند.
به طور کلی،
تلاش برای
ایجاد یک
برچسب پوچ
نشانهای
از اشکال
تجزیهکننده
(parser bug) یا ورودی
خراب است. ctags
در مورد
چنین تلاشی
هشدار
میدهد یا
برچسب پوچ
را دور
میاندازد.
برای سرکوب
هشدارها،
از گزینه --quiet
استفاده
کنید.
از سوی دیگر، برچسبهای پوچ در برخی زبانها معتبر هستند. کد منبع JavaScript به شکل {"": val} را در نظر بگیرید؛ رشته خالی به عنوان یک کلید معتبر است. اگر یک تجزیهکننده عمداً یک برچسب پوچ (یک برچسب پوچ معتبر) ایجاد کند، ctags هشداری نمیدهد اما به طور پیشفرض آن را کنار میگذارد.
این کنار گذاشتن به این دلیل است که ممکن است برخی قالبهای خروجی برچسبهای پوچ را پشتیبانی نکنند یا در نظر نگیرند.
با مورد اضافی nulltag/z، میتوانید ctags را مجبور کنید که برچسبهای پوچ را صادر کند. این مورد اضافی تنها در صورتی مؤثر است که قالب خروجی از برچسبهای پوچ پشتیبانی کند. گزینه --list-output-formats مشخص میکند که کدام قالبهای خروجی از برچسبهای پوچ پشتیبانی میکنند.
(از نسخه 6.2.0)
- pseudo/p
- شامل کردن شبهبرچسبها (pseudo-tags). به طور پیشفرض فعال است مگر اینکه فایل برچسب در خروجی استاندارد نوشته شود. برای جزئیات مربوط به شبهبرچسبها، ctags-client-tools(7) را ببینید.
- qualified/q
- شامل کردن
یک مدخل
برچسب
اضافی با
نام واجد
شرایط کلاس
(class-qualified) یا فضای
نام (namespace-qualified) به
ازای هر
برچسبی که
عضوی از یک
کلاس یا یک
فضای نام
است.
این گزینه ممکن است مکانیابی آسانتر برچسبهای خاص را در زمانی که چندین رخداد از یک نام برچسب در فایل برچسب وجود دارد امکانپذیر کند. با این حال، توجه داشته باشید که این کار میتواند به طور بالقوه اندازه فایل برچسب را بیش از دو برابر کند.
شکل واقعی برچسب واجد شرایط به زبانی بستگی دارد که برچسب از آن مشتق شده است (با استفاده از قالبی که طبیعیترین حالت برای نحوه تعیین فراخوانیهای واجد شرایط در آن زبان است). برای C++ و Perl، به شکل class::member است؛ برای Eiffel و Java، به شکل class.member است.
نکته: در PHP از نویسههای بکاسلش (backslash) به عنوان جداکننده برای ساخت نام واجد شرایط استفاده میشود. با این حال، در خروجی برچسبهای Universal Ctags، یک نویسه بکاسلش در یک نام با یک نویسه بکاسلش دیگر گریز داده میشود (escaped). درباره گریز دادن، tags(5) را ببینید.
مثال زیر برچسب اضافی qualified را نشان میدهد.
class point {
double x;
};
برای فایل منبع بالا، ctags به طور پیشفرض point و x را برچسبگذاری میکند. اگر مورد اضافی qualified از خط فرمان فعال شود (--extras=+q)، آنگاه point.x نیز برچسبگذاری میشود حتی با اینکه رشته "point.x" در کد منبع وجود ندارد.
$ ctags --fields=+K -uo - qualified.java
point qualified.java /^class point {$/;" class
x qualified.java /^ double x;$/;" field class:point
$ ctags --fields=+K --extras=+q -uo - qualified.java
point qualified.java /^class point {$/;" class
x qualified.java /^ double x;$/;" field class:point
point.x qualified.java /^ double x;$/;" field class:point
- reference/r
- شامل کردن
برچسبهای
مرجع (reference tags).
بخش
"مدخلهای
برچسب (TAG ENTRIES)"
را درباره
برچسبهای
مرجع
ببینید.
مثال زیر برچسب اضافی reference را نشان میدهد.
#include <stdio.h> #include "utils.h" #define X #undef X
فیلدهای roles:system یا roles:local بسته به اینکه نام فایل گنجاندهشده با '<' آغاز شود یا نه، اضافه خواهند شد.
عبارت "#define X" یک برچسب تعریف صادر میکند. از سوی دیگر "#undef X" یک برچسب مرجع صادر میکند.
$ ctags --fields=+EKr -uo - inc.c X inc.c /^#define X$/;" macro file: roles:def extras:fileScope $ ctags --fields=+EKr --extras=+r -uo - inc.c stdio.h inc.c /^#include <stdio.h>/;" header roles:system extras:reference utils.h inc.c /^#include "utils.h"/;" header roles:local extras:reference X inc.c /^#define X$/;" macro file: roles:def extras:fileScope X inc.c /^#undef X$/;" macro file: roles:undef extras:fileScope,reference
فیلدها و موارد اضافی مختص زبان (Language-specific fields and extras)
ابزار Exuberant Ctags دارای مفهوم فیلدها (fields) و موارد اضافی (extras) است. آنها بین تجزیهکنندههای زبانهای مختلف مشترک هستند. Universal Ctags این مفهوم را با ارائه فیلدها و موارد اضافی مختص زبان گسترش میدهد.
نحوه استفاده با VI (HOW TO USE WITH VI)
برنامه vi(1) بهطور پیشفرض انتظار فایلی از برچسبها با نام tags را در دایرکتوری جاری دارد. پس از ساخته شدن فایل برچسب، دستورهای زیر قابلیت نمایهسازی برچسب را به کار میگیرند:
نحوه استفاده با GNU EMACS (HOW TO USE WITH GNU EMACS)
برنامه emacs(1) بهطور پیشفرض انتظار فایلی از برچسبها با نام TAGS را در دایرکتوری جاری دارد. پس از ساخته شدن فایل برچسب، دستورهای زیر قابلیت نمایهسازی برچسب را به کار میگیرند:
- M-x visit-tags-table <RET> FILE <RET>
- انتخاب فایل برچسب، FILE، برای استفاده.
- M-. [TAG] <RET>
- یافتن اولین تعریف TAG. برچسب پیشفرض همان شناسه زیر مکاننما است.
- M-*
- بازگشت به مکانی که قبلاً در آن M-. فراخوانی شده بود.
- C-u M-.
- یافتن تعریف بعدی برای آخرین برچسب.
برای دستورهای بیشتر، مبحث Tags را در سند info برنامه Emacs ببینید.
نحوه استفاده با NEDIT (HOW TO USE WITH NEDIT)
برنامه NEdit نسخه 5.1 و بالاتر میتواند قالب گسترشیافته جدید فایل برچسب را مدیریت کند (گزینه --format را ببینید).
- برای استفاده NEdit از فایل برچسب، گزینه "File->Load Tags File" را انتخاب کنید.
- برای پرش به تعریف یک برچسب، کلمه را مشخص کرده (highlight)، سپس Ctrl-D را فشار دهید.
برنامه NEdit 5.1 میتواند چندین فایل برچسب را از دایرکتوریهای مختلف بخواند. مقداردهی منبع سامانه X یعنی nedit.tagFile با نام یک فایل برچسب، به NEdit دستور میدهد تا آن فایل برچسب را هنگام راهاندازی بهطور خودکار بارگذاری کند.
هشدارها (CAVEATS)
از آنجا که ctags نه پیشپردازنده است و نه کامپایلر، استفاده از ماکروهای پیشپردازنده میتواند ctags را بفریبد تا برچسبها را نادیده بگیرد یا برچسبهای نامناسبی تولید کند. اگرچه ctags برای رسیدگی به موارد رایج خاصی طراحی شده است، این موضوع بزرگترین عامل مشکلات گزارششده است. بهویژه، استفاده از ساختارهای پیشپردازندهای که نحو متنی C را دگرگون میکنند میتواند ctags را گمراه کند. با استفاده از گزینه -I میتوانید بسیاری از این مشکلات را برطرف سازید.
توجه داشته باشید از آنجا که ctags برای مکانیابی برچسبها الگو تولید میکند (گزینه --excmd را ببینید)، اگر سطر سورس دیگری عیناً مشابه سطر حاوی برچسب باشد، کاملاً ممکن است ویرایشگر شما سطر اشتباهی را بیابد. مثال زیر این وضعیت را نشان میدهد:
int variable;
/* ... */
void foo(variable)
int variable;
{
/* ... */
}
بسته به ویرایشگر مورد استفاده و موقعیت فعلی در کد، ممکن است الگوی جستجو پیش از یافتن تعریف واقعی متغیر سراسری، اعلان پارامتر محلی را بیابد؛ چرا که این سطرها (و در نتیجه الگوهای جستجوی آنها) یکسان هستند.
میتوان با استفاده از گزینه --excmd=n از این مشکل جلوگیری کرد.
تغییرات ناسازگار (INCOMPATIBLE CHANGES)
برای اطلاعات درباره ناسازگاریهای میان Universal Ctags و Exuberant Ctags، مستند ctags-incompatibilities(7) را ببینید.
این بخش ناسازگاریهای عمده بین نسخههای Universal Ctags را شرح میدهد.
- یکسانسازی حرف گونه (kind Letter) برای گونههای unknown
- برخی تجزیهکنندهها از حروف گونه متفاوتی برای گونههای unknown استفاده میکردند. EmacsLisp از u استفاده میکرد. Go از u استفاده میکرد. Julian از x استفاده میکرد. Lisp از u استفاده میکرد. Lua از X استفاده میکرد و Python از x استفاده میکرد. این موارد در طول توسعه نسخه 5.9.x روی Y یکسانسازی شدند.
ایرادات (BUGS)
برنامه ctags گزینههای بیشتری نسبت به ls(1) دارد.
برنامه ctags فرض میکند فایل ورودی با گرامر صحیح نوشته شده است. در غیر این صورت، خروجی ctags تعریفنشده است. به عبارت دیگر دارای ویژگی «ورودی نامعتبر، خروجی نامعتبر» (GIGO) است.
هنگام تجزیه تعریف یک تابع عضو C++ (مانند className::function)، برنامه ctags نمیتواند تشخیص دهد مشخصکننده دامنه (scope specifier) نام یک کلاس است یا نام یک namespace و همیشه آن را به عنوان نام کلاس در بخش scope از فیلدهای الحاقی فهرست میکند. همچنین اگر یک تابع C++ بیرون از اعلان کلاس تعریف شده باشد (که حالت معمول است)، مشخصه دسترسی (یعنی public، protected یا private) و اطلاعات پیادهسازی (مانند virtual یا pure virtual) موجود در اعلان تابع، هنگام تولید برچسب برای تعریف تابع مشخص نیستند. با این حال این اطلاعات برای پیشنمونهها (مانند --kinds-c++=+p) در دسترس خواهند بود.
هیچ برچسب واجد شرایطی (qualified tags) برای اشیاء زبانی که در یک کلاس به ارث برده شدهاند تولید نمیشود.
متغیرهای محیطی (ENVIRONMENT VARIABLES)
- TMPDIR
- در
میزبانهای
شبهیونیکس
که mkstemp(3) در
دسترس است،
مقدار این
متغیر
پوشهای را
مشخص
میکند که
فایلهای
موقت در آن
قرار
میگیرند.
این متغیر
زمانی
میتواند
مفید باشد
که اندازه
یک فایل
موقت بیش از
حد بزرگ شود
و در
پارتیشن
حاوی پوشه
موقت
پیشفرض
(تعریفشده
در زمان
کامپایل)
جای نگیرد.
ctags فایلهای موقت را فقط در صورتی ایجاد میکند که (۱) یک فایل برچسب به سبک emacs در حال تولید باشد، (۲) فایل برچسب به خروجی استاندارد ارسال شود، یا (۳) برنامه به گونهای کامپایل شده باشد که از الگوریتم مرتبسازی داخلی برای مرتبسازی فایلهای برچسب به جای ابزار sort(1) سیستمعامل استفاده کند. اگر از ابزار sort(1) سیستمعامل استفاده شود، معمولاً این متغیر را نیز رعایت خواهد کرد.
توجه داشته باشید که اگر ctags دارای بیت setuid باشد، مقدار TMPDIR نادیده گرفته خواهد شد.
فایلها (FILES)
فایلهای خروجی (Output files)
- فایل برچسب پیشفرض ایجادشده توسط ctags.
- TAGS
- فایل برچسب پیشفرض ایجادشده توسط etags.
پیشبارگذاری فایلهای تنظیمات (Preloading option files)
$XDG_CONFIG_HOME/ctags/*.ctags، یا $HOME/.config/ctags/*.ctags اگر $XDG_CONFIG_HOME تعریف نشده باشد
$HOME/.ctags.d/*.ctags
$HOMEDRIVE$HOMEPATH/ctags.d/*.ctags (فقط در MS Windows)
.ctags.d/*.ctags
ctags.d/*.ctags
میتوان ctags را طوری کامپایل کرد که یک فایل پیکربندی اضافی را قبل از هر یک از موارد نشاندادهشده در بالا بخواند؛ این موضوع در صورتی مشخص میشود که خروجی تولیدشده توسط گزینه --version ویژگی custom-conf را فهرست کند.
گزینههای ارائهشده در خط فرمان بر گزینههای مشخصشده در این فایلها اولویت خواهند داشت (override میکنند). فقط گزینهها از این فایلها خوانده میشوند.
توجه داشته باشید که فایلهای گزینهها در حالت خطمحور خوانده میشوند که در آن فاصلهها معنادار هستند (زیرا نقلقول پوسته ممکن نیست) اما فاصلههای ابتدای یک خط نادیده گرفته میشوند. هر خط فایل به عنوان یک پارامتر خط فرمان خوانده میشود (گویی با نقلقول تکی نقل شده است). بنابراین، برای مشخص کردن آرگومانهای خط فرمان جداگانه از خطوط جدید استفاده کنید.
خطی که با '#' آغاز شود به عنوان کامنت در نظر گرفته میشود.
فایلهای *.ctags در یک پوشه به ترتیب الفبایی بارگذاری میشوند.
فهرست مسیر پیشفرض optlib (Default optlib path list)
$XDG_CONFIG_HOME/ctags، یا $HOME/.config/ctags اگر $XDG_CONFIG_HOME تعریف نشده باشد
$HOME/.ctags.d
$HOMEDRIVE$HOMEPATH/ctags.d (فقط در MS Windows)
اگر مجموعهای از گزینهها را دارید که میخواهید به صورت شرطی فعال شوند، پوشهای در مسیر فهرست مسیر optlib بسازید و گزینهها را در فایلهایی با پسوند .ctags زیر آن پوشه قرار دهید. --options=<the-directory-name> برای فعال کردن گزینهها است.
به عنوان مثال، فرض کنید گزینههایی دارید که میخواهید فقط هنگام برچسبگذاری درخت کد منبع هسته لینوکس فعال شوند. در این حالت، پوشه $HOME/.ctags.d/linux را ایجاد کنید، گزینهها را در $HOME/.ctags.d/linux/my.ctags قرار دهید. اگر گزینههای زیادی دارید، میتوانید آنها را در چندین فایل مانند $HOME/.ctags.d/linux/device-driver.ctags و $HOME/.ctags.d/linux/network-stack.ctags تقسیم کنید. در هر صورت، میتوانید گزینهها را در فایل(های) .ctags زیر آن پوشه با افزودن --options=linux به خط فرمان ctags خود فعال کنید.
همچنین ببینید (SEE ALSO)
برای تعریف (یا گسترش) یک تجزیهکننده در یک فایل پیکربندی، ctags-optlib(7) را ببینید.
برای ساختار و قالب فایلهای برچسب، tags(5) را ببینید.
درباره ناسازگاریهای شناختهشده با Exuberant Ctags، ctags-incompatibilities(7) را ببینید.
اگر به نوشتن ابزاری برای پردازش فایلهای برچسب علاقهمندید، ctags-client-tools(7) را ببینید.
درباره نکات اختصاصی ورودی پایتون، ctags-lang-python(7) را ببینید.
درباره یک ابزار کلاینت برای جستجوی دودویی یک نام در فایل برچسب مرتبشده، readtags(1) را ببینید.
وبسایت رسمی Universal Ctags در: https://ctags.io/
همچنین ex(1)، vi(1)، elvis(1)، یا بهتر از همه، vim(1)، ویرایشگر رسمی ctags. برای اطلاعات بیشتر درباره vim(1)، وبسایت Vim را ببینید در: https://www.vim.org/
درباره قالب فایل TAGS، مخزن گیت emacs را ببینید: https://git.savannah.gnu.org/cgit/emacs.git/tree/etc/ETAGS.EBNF.
نویسنده (AUTHOR)
پروژهٔ Universal Ctags https://ctags.io/
Darren Hiebert <<dhiebert@users.sourceforge.net>> http://DarrenHiebert.com/
انگیزه (MOTIVATION)
"همواره در اندیشهٔ خدمت به یکایک افراد نوع بشر باشید."
"هر تلاش و کوششی که انسان از صمیم قلب مبذول دارد، عبادت است؛ اگر برخاسته از والاترین انگیزهها و ارادهٔ خدمت به بشریت باشد."
-- برگرفته از آثار بهائی
دستاندرکاران و قدردانی (CREDITS)
این نسخه از ctags (Universal Ctags) از مخزنی موسوم به fishman-ctags که توسط Reza Jelveh (رضا جلوه) آغاز شده بود، مشتق شده است.
مخزن fishman-ctags خود از Exuberant Ctags برگرفته شده بود.
برخی از تجزیهکنندهها از tagmanager پروژهٔ Geany (https://www.geany.org/) گرفته شدهاند.
نرمافزار Exuberant Ctags در اصل از برنامهٔ ctags نوشتهٔ Steve Kirkendall <<kirkenda@cs.pdx.edu>> که همراه با شبیهساز Elvis vi عرضه میشد، مشتق شده و الهام گرفته بود (هرچند عملاً هیچ کدی از نسخهٔ اولیه باقی نمانده است).
همچنین قدردانی ویژه شایستهٔ Bram Moolenaar <<Bram@vim.org>>، نویسندهٔ vim است، که بخش عمدهای از وقت و انرژی خود را چه در راه توسعهٔ این ویرایشگر به عنوان خدمتی به دیگران و چه در یاری رساندن به کودکان یتیم اوگاندا صرف کرد.
بخش با عنوان "HOW TO USE WITH GNU EMACS" بیشرمانه از صفحهٔ info برنامهٔ GNU etags به سرقت رفته است.
| 6.2.1 |