BTOOL_FAQ(1) btparse BTOOL_FAQ(1)

btool_faq - پرسش‌های متداول درباره btparse و Text::BibTeX

این سند تلاش می‌کند به پرسش‌هایی پاسخ دهد که بارها از من پرسیده شده‌اند و پاسخ به آن‌ها آسان است -- اما نه صرفاً با مرور مستندات. به دلایل مختلف، پاسخ‌ها به طور پراکنده در چندین صفحه راهنما توزیع شده‌اند و همین امر درک جریان کار را دشوار می‌سازد. از این رو، این صفحه راهنما سعی دارد رشته‌های مختلف فکری را به یکدیگر پیوند زند و به جای ارائه توضیحات طولانی درباره قابلیت‌ها و قواعد کتابخانه‌های btOOL، پاسخ‌هایی سریع و متمرکز به شکل «چگونه فلان کار را انجام دهم؟» ارائه دهد.

این بخش به پرسش‌هایی می‌پردازد که کاربران "Text::BibTeX"، مؤلفه پرلِ btOOL، مطرح کرده‌اند.

زیرا آن‌ها مختص به کتاب‌شناسی هستند و "Text::BibTeX" به‌طور پیش‌فرض هیچ فرضی در مورد نوع خاصی از پایگاه‌داده یا حوزه پردازش داده بر ورودی‌های شما تحمیل نمی‌کند. مشکل زمانی رخ می‌دهد که ورودی‌ها را از فایلی مانند foo.bib تجزیه (parse) می‌کنید که کاملاً معقولانه از ماکروهای ماه ("jan"، "feb" و غیره) ارائه‌شده توسط فایل‌های شیوه (style) استاندارد BibTeX استفاده می‌کند:

$bibfile = Text::BibTeX::File->new('foo.bib')    # open file
   or die "foo.bib: $!\n";
$entry = Text::BibTeX::Entry->new($bibfile);     # parse first entry

با استفاده از این کد، ممکن است برای هر ورودیِ تجزیه‌شده از foo.bib یک هشدار «ماکروی تعریف‌نشده» (undefined macro) دریافت کنید. گذشته از آزاردهنده بودن ظاهری این پیام‌های هشدار، ماکروهای تعریف‌نشده به عنوان رشته‌های خالی بسط داده می‌شوند؛ یعنی شما هرگونه اطلاعات مربوط به آن‌ها را از دست می‌دهید --- که اصلاً خوب نیست.

شما همواره می‌توانید با سرهم‌بندی، ماکروهای ماه را خودتان به اجبار تعریف کنید. قبل از نسخه 0.30، این کار باید با تجزیه مجموعه‌ای از ورودی‌های ساختگی انجام می‌شد، اما اکنون "Text::BibTeX" یک رابط مستقیم با جدول ماکروهای زیربنایی فراهم می‌کند. شما می‌توانید قبل از تجزیه هر ورودی، صرفاً این کار را انجام دهید:

use Text::BibTeX qw(:macrosubs);
# ...
my %month = (jan => 'January', feb => 'February', ... );
add_macro_text ($macro, $value) 
   while (($macro, $value) = each %month);

اما راه بهتری نیز وجود دارد که با نحوه کارها در BibTeX (جایی که ماکروهای پیش‌فرض در فایل شیوه تعریف می‌شوند) هم‌خوانی بیشتری دارد: استفاده از معادل شیءگرای فایل‌های شیوه در "Text::BibTeX" که ماژول‌های ساختار (structure modules) نامیده می‌شوند. "Text::BibTeX" یک ماژول ساختار به نام "Text::BibTeX::Bib" ارائه می‌دهد که فایل‌های شیوه استاندارد BibTeX 0.99 را (تا حدی) شبیه‌سازی می‌کند، از جمله تعریف ماکروهای ماه. ماژول‌های ساختار برای هر فایل به صورت مجزا با استفاده از متد "set_structure" بر روی شیء "Text::BibTeX::File" مشخص می‌شوند. بسیار ساده است که به "Text::BibTeX" اعلام کنید ورودی‌های حاصل از $bibfile باید با ساختار "Bib" مطابقت داشته باشند (که توسط ماژول "Text::BibTeX::Bib" پیاده‌سازی شده است، هرچند واقعاً نیازی به دانستن آن ندارید):

$bibfile = Text::BibTeX::File->new('foo.bib')
   or die "foo.bib: $!\n";
$bibfile->set_structure ('Bib');

با این حال، احتمالاً نباید نام یک ساختار خاص را در برنامه‌های خود به صورت ثابت (hardcode) قرار دهید، زیرا در نهایت ماژول‌های ساختار متعددی برای انتخاب وجود خواهند داشت (همان‌طور که فایل‌های شیوه BibTeX متعددی برای انتخاب وجود دارند). رویکرد ترجیحی من این است که ساختار را به یک گزینه خط فرمان تبدیل کنید که مقدار پیش‌فرض آن "Bib" باشد (زیرا تا زمان نگارش این متن، این تنها ساختاری است که در عمل پیاده‌سازی شده است).

فقط آن را در حالت الحاق باز کنید و ورودی‌ها را طبق معمول در آن بنویسید. به یاد داشته باشید که یک شیء "Text::BibTeX::File" اساساً یک پوشش (wrapper) بر روی یک شیء "IO::File" است، و متد "Text::BibTeX::File::open" (و در نتیجه "new" نیز) صرفاً یک پیشانه برای "IO::File::open" است. "IO::File::open" نیز به نوبه خود یک پیشانه برای تابع توکار "open" در پرل (در صورت فراخوانی با یک آرگومان) یا "sysopen" (دو یا سه آرگومان) است. برای اینکه از زحمت مطالعه تمام آن صفحات راهنما رها شوید، ترفند کار این است: اگر فقط نام فایل را به متد "new" در "Text::BibTeX::File" ارسال کنید، با آن درست مانند نام فایلی که به دستور توکار "open" پرل ارسال شده رفتار می‌شود:

my $append_file = Text::BibTeX::File->new(">>$filename")
   or die "couldn't open $filename for appending: $!\n";

فایل $filename را برای الحاق به انتها باز می‌کند. اگر بعداً ورودی دیگری از یک فایل دیگر (مثلاً $entry) داشتید، می‌توانید آن را با نوشتن عادی، به انتهای $append_file اضافه کنید:

$entry->write ($append_file);

برای یک مثال کامل، به "append_entries" در زیرشاخه examples/ از توزیع "Text::BibTeX" مراجعه کنید.

این بخش به پرسش‌های متداول درباره btparse، مؤلفه C از btOOL، می‌پردازد.

تا جایی که من می‌دانم، خیر. من چیزی ننوشته‌ام. اگر شما این کار را انجام دادید، لطفاً به من اطلاع دهید.

btparse, Text::BibTeX

Greg Ward <gward@python.net>

حق نشر 1997-2000 متعلق به Gregory P. Ward است. کلیه حقوق محفوظ است. این فایل بخشی از کتابخانه Text::BibTeX است. این کتابخانه نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت همان شرایط خود Perl بازتوزیع نموده و/یا تغییر دهید.

2025-07-14 btparse, version 0.91