.\" .\" States manual page. .\" Copyright (c) 1997-1998 Markku Rossi. .\" Author: Markku Rossi .\" .\" This file is part of GNU Enscript. .\" .\" Enscript is free software: you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation, either version 3 of the License, or .\" (at your option) any later version. .\" .\" Enscript is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with Enscript. If not, see . .\" .TH STATES 1 "Oct 23, 1998" "STATES" "STATES" .SH "نام (NAME)" states \- ابزار پردازش متن مشابه awk .SH "خلاصه دستور (SYNOPSIS)" .B states [\f3\-hvV\f1] [\f3\-D \f2var\f3=\f2val\f1] [\f3\-f \f2file\f1] [\f3\-o \f2outputfile\f1] [\f3\-p \f2path\f1] [\f3\-s \f2startstate\f1] [\f3\-W \f2level\f1] [\f2filename\f1 ...] .SH "توضیحات (DESCRIPTION)" برنامه \f3States\f1 یک ابزار پردازش متن مشابه awk به‌همراه افزونه‌های ماشین حالت (state machine) است. این ابزار برای برجسته‌سازی نحوی کد منبع برنامه‌ها و وظایف مشابهی طراحی شده است که در آن‌ها اطلاعات حالت به پردازش ورودی کمک می‌کند. در هر لحظه، \f3States\f1 در یک وضعیت (حالت) قرار دارد؛ هر یک از این حالت‌ها شباهت زیادی به محیط کاری awk دارند، بدین معنا که دارای عبارات باقاعده‌ای (regular expressions) هستند که با ورودی مطابقت داده می‌شوند و اقداماتی که هنگام یافتن یک تطابق به اجرا درمی‌آیند. \f3states\f1 می‌تواند از درون بلوک‌های اقدام، انتقال حالت انجام دهد؛ یعنی می‌تواند به حالت دیگری برود و پردازش را از آنجا ادامه دهد. انتقال‌های حالت ثبت می‌شوند تا \f3states\f1 بتواند پس از پایان حالت فعلی، به حالت فراخواننده بازگردد. بزرگ‌ترین تفاوت بین \f3states\f1 و awk، علاوه بر افزونه‌های ماشین حالت، این است که \f3states\f1 خط‌محور (line-oriented) نیست. این ابزار توکن‌های عبارات باقاعده را از ورودی تطبیق می‌دهد و پس از پردازش هر تطابق، پردازش را از همان موقعیت فعلی ادامه می‌دهد، نه از ابتدای خط ورودی بعدی. .SH "گزینه‌ها (OPTIONS)" .TP 8 .B \-D \f2var\f3=\f2val\f3, \-\-define=\f2var\f3=\f2val\f3 متغیر \f2var\f1 را با مقدار رشته‌ای \f2val\f1 تعریف می‌کند. تعاریف خط فرمان بر تعاریف متغیرهای موجود در فایل پیکربندی اولویت دارند و آن‌ها را بازنویسی می‌کنند. .TP 8 .B \-f \f2file\f3, \-\-file=\f2file\f3 تعاریف حالت را از فایل \f2file\f1 می‌خواند. به‌طور پیش‌فرض، \f3states\f1 تلاش می‌کند تعاریف حالت را از فایل \f3states.st\f1 در دایرکتوری کاری فعلی بخواند. .TP 8 .B \-h, \-\-help پیام راهنمای کوتاهی را نمایش داده و خارج می‌شود. .TP 8 .B \-o \f2file\f3, \-\-output=\f2file\f3 خروجی را به جای چاپ در \f3stdout\f1، در فایل \f2file\f1 ذخیره می‌کند. .TP 8 .B \-p \f2path\f3, \-\-path=\f2path\f3 مسیر بارگذاری را روی \f2path\f1 تنظیم می‌کند. مسیر بارگذاری به‌طور پیش‌فرض همان دایرکتوری است که فایل تعاریف حالت از آن بارگذاری شده است. .TP 8 .B \-s \f2state\f3, \-\-state=\f2state\f3 اجرا را از حالت \f3state\f1 آغاز می‌کند. این تعریف، حالت آغازینی را که از بلوک \f3start\f1 تعیین شده است بازنویسی می‌کند. .TP 8 .B \-v, \-\-verbose میزان جزئیات پیام‌های خروجی برنامه را افزایش می‌دهد. .TP 8 .B \-V, \-\-version نسخهٔ \f3states\f1 را نمایش داده و خارج می‌شود. .TP 8 .B \-W \f2level\f3, \-\-warning=\f2level\f3 سطح هشدار را روی \f2level\f1 تنظیم می‌کند. مقادیر ممکن برای \f2level\f1 عبارتند از: .RS 8 .TP 8 .B light هشدارهای سبک (پیش‌فرض) .TP 8 .B all تمام هشدارها .RE.SH "فایل‌های برنامهٔ STATES (STATES PROGRAM FILES)" فایل‌های برنامهٔ \f3States\f1 می‌توانند شامل یک بلوک \f2start\f1، بلوک‌های \f2startrules\f1 و \f2namerules\f1 برای تعیین وضعیت اولیه، تعاریف \f2state\f1 و عبارت‌های \f2expressions\f1 باشند. بلوک \f2start\f1 در واقع ()main برنامهٔ \f3states\f1 است؛ این بلوک هنگام راه‌اندازی اسکریپت برای هر فایل ورودی اجرا می‌شود و می‌تواند هرگونه مقداردهی اولیه‌ای را که اسکریپت نیاز دارد انجام دهد. این بلوک معمولاً توابع اولیهٔ \f3check_startrules()\f1 و \f3check_namerules()\f1 را نیز فراخوانی می‌کند که وضعیت اولیه را از روی نام فایل ورودی یا داده‌های یافت‌شده در ابتدای فایل ورودی تعیین می‌کنند. در اینجا یک نمونه بلوک start آورده شده است که دو متغیر را مقداردهی اولیه کرده و تعیین استاندارد وضعیت اولیه را انجام می‌دهد: .PP .RS .nf start { a = 1; msg = "Hello, world!"; check_startrules (); check_namerules (); } .fi .RE .PP پس از پردازش بلوک start، پردازش ورودی از وضعیت اولیه ادامه می‌یابد. وضعیت اولیه بر اساس اطلاعات یافت‌شده در بلوک‌های \f2startrules\f1 و \f2namerules\f1 تعیین می‌شود. هر دو بلوک شامل جفت‌های «عبارت باقاعده \- نماد» هستند؛ هنگامی که عبارت باقاعده با نام فایل یا ابتدای فایل ورودی مطابقت پیدا کند، وضعیت اولیه با نماد متناظر آن نام‌گذاری می‌شود. برای مثال، قواعد start و name زیر می‌توانند فایل‌های C و Fortran را تشخیص دهند: .PP .RS .nf namerules { /\\.(c|h)$/ c; /\\.[fF]$/ fortran; } startrules { /-\\*- [cC] -\\*-/ c; /-\\*- fortran -\\*-/ fortran; } .fi .RE .PP اگر این قواعد به همراه بلوک start که قبلاً نشان داده شد استفاده شوند، \f3states\f1 ابتدا ابتدای فایل ورودی را بررسی می‌کند. اگر حاوی رشتهٔ \f3-*- c -*-\f1 باشد، فرض می‌شود فایل حاوی کد C است و پردازش از وضعیتی به نام \f3c\f1 آغاز می‌شود. اگر ابتدای فایل ورودی دارای رشتهٔ \f3-*- fortran -*-\f1 باشد، وضعیت اولیه \f3fortran\f1 خواهد بود. اگر هیچ‌یک از قواعد start مطابقت نداشته باشد، نام فایل ورودی با namerules مطابقت داده می‌شود. اگر نام به پسوند \f3c\f1 یا \f3C\f1 ختم شود، به وضعیت \f3c\f1 می‌رویم. اگر پسوند \f3f\f1 یا \f3F\f1 باشد، وضعیت اولیه fortran است. اگر هر دو دسته قواعد start و name در تعیین وضعیت شروع ناموفق باشند، \f3states\f1 صرفاً ورودی خود را بدون تغییر به خروجی کپی می‌کند. وضعیت شروع را می‌توان از خط فرمان نیز با گزینهٔ \f3\-s\f1، \f3\-\-state\f1 مشخص کرد. تعاریف وضعیت نحو دستوری زیر را دارند: .B state { \f2expr\f1 {\f2statements\f1} ... } که در آن \f2expr\f1 عبارت است از: یک عبارت باقاعده، عبارت ویژه یا یک نماد، و \f2statements\f1 فهرستی از دستورات است. هنگامی که عبارت \f2expr\f1 با ورودی مطابقت یابد، بلوک دستورات اجرا می‌شود. بلوک دستورات می‌تواند توابع اولیهٔ \f3states\f1 یا زیرروال‌های تعریف‌شده توسط کاربر را فراخوانی کند، وضعیت‌های دیگر را فراخوانی کند و غیره. پس از اجرای بلوک، پردازش ورودی از موقعیت فعلی ورودی ادامه می‌یابد (که اگر بلوک دستورات وضعیت‌های دیگری را فراخوانی کرده باشد ممکن است تغییر کرده باشد). عبارت‌های ویژهٔ \f3BEGIN\f1 و \f3END\f1 می‌توانند به جای \f2expr\f1 استفاده شوند. عبارت \f3BEGIN\f1 با ابتدای وضعیت مطابقت دارد و بلوک آن هنگام ورود به وضعیت فراخوانی می‌شود. عبارت \f3END\f1 با پایان وضعیت مطابقت دارد و بلوک آن زمانی که \f3states\f1 از وضعیت خارج می‌شود اجرا می‌گردد. اگر \f2expr\f1 یک نماد باشد، مقدار آن از محیط سراسری جستجو می‌شود و در صورتی که یک عبارت باقاعده باشد، با ورودی مطابقت داده می‌شود؛ در غیر این صورت، آن قاعده نادیده گرفته می‌شود. فایل برنامهٔ \f3states\f1 همچنین می‌تواند دارای عبارت‌های سطح بالا (top-level expressions) باشد؛ این عبارت‌ها پس از تجزیهٔ فایل برنامه اما پیش از پردازش هرگونه فایل ورودی یا ارزیابی بلوک \f2start\f1، ارزیابی می‌شوند..SH "توابع پایه (PRIMITIVE FUNCTIONS)" .TP 8 .B call (\f2symbol\f3) به وضعیت \f2symbol\f1 رفته و پردازش فایل ورودی را از آن وضعیت ادامه می‌دهد. این تابع هر آنچه را که دستور پایانی \f3return\f1 وضعیت \f3symbol\f1 بازگردانده است، بازمی‌گرداند. .TP 8 .B calln (\f2name\f3) مانند \f3call\f1 عمل می‌کند، اما آرگومان \f2name\f1 ارزیابی می‌شود و مقدار آن باید رشته باشد. برای مثال، از این تابع می‌توان برای فراخوانی وضعیتی که نام آن در یک متغیر ذخیره شده است استفاده کرد. .TP 8 .B check_namerules () تلاش می‌کند تا وضعیت شروع را از قواعد \f3namerules\f1 تشخیص دهد. این تابع در صورت تشخیص وضعیت شروع مقدار \f31\f1 و در غیر این صورت مقدار \f30\f1 را بازمی‌گرداند. .TP 8 .B check_startrules () تلاش می‌کند تا وضعیت شروع را از قواعد \f3startrules\f1 تشخیص دهد. این تابع در صورت تشخیص وضعیت شروع مقدار \f31\f1 و در غیر این صورت مقدار \f30\f1 را بازمی‌گرداند. .TP 8 .B concat (\f2str\f3, ...) رشته‌های آرگومان را الحاق کرده و نتیجه را به عنوان یک رشته جدید بازمی‌گرداند. .TP 8 .B float (\f2any\f3) آرگومان را به یک عدد ممیز شناور تبدیل می‌کند. .TP 8 .B getenv (\f2str\f3) مقدار متغیر محیطی \f2str\f1 را دریافت می‌کند. اگر متغیر \f2var\f1 تعریف نشده باشد، یک رشته خالی بازمی‌گرداند. .TP 8 .B int (\f2any\f3) آرگومان را به یک عدد صحیح تبدیل می‌کند. .TP 8 .B length (\f2item\f3, ...) طول رشته‌ها یا لیست‌های آرگومان را می‌شمارد. .TP 8 .B list (\f2any\f3, ...) یک لیست جدید شامل آیتم‌های \f2any\f1، ... ایجاد می‌کند. .TP 8 .B panic (\f2any\f3, ...) یک خطای غیرقابل‌بازیابی را گزارش داده و با وضعیت \f31\f1 خارج می‌شود. این تابع هرگز بازنمی‌گردد. .TP 8 .B print (\f2any\f3, ...) آرگومان‌ها را به رشته تبدیل کرده و آن‌ها را در خروجی چاپ می‌کند. .TP 8 .B range (\f2source\f3, \f2start\f3, \f2end\f3) یک زیربازه از \f2source\f1 از موقعیت \f2start\f1 (شامل خود آن) تا \f2end\f1 (غیر شامل) بازمی‌گرداند. آرگومان \f2source\f1 می‌تواند رشته یا لیست باشد. .TP 8 .B regexp (\f2string\f3) رشته \f2string\f1 را به یک عبارت باقاعده جدید تبدیل می‌کند. .TP 8 .B regexp_syntax (\f2char\f3, \f2syntax\f3) نحو نویسه‌های عبارت باقاعده را با انتساب نحو جدید \f2syntax\f1 به نویسه \f2char\f1 تغییر می‌دهد. مقادیر ممکن برای \f2syntax\f1 عبارتند از: .RS 8 .TP 8 .B \(aqw\(aq نویسه بخشی از یک کلمه است .TP 8 .B \(aq \(aq نویسه بخشی از یک کلمه نیست .RE .TP 8 .B regmatch (\f2string\f3, \f2regexp\f3) بررسی می‌کند که آیا رشته \f2string\f1 با عبارت باقاعده \f2regexp\f1 مطابقت دارد یا خیر. تابع یک وضعیت موفقیت بولی بازمی‌گرداند و ثبات‌های زیرعبارت \f3$\f2n\f1 را مقداردهی می‌کند. .TP 8 .B regsub (\f2string\f1, \f2regexp\f3, \f2subst\f3) عبارت باقاعده \f2regexp\f1 را در رشته \f2string\f1 جستجو کرده و زیررشته منطبق را با رشته \f2subst\f1 جایگزین می‌کند. رشته حاصل را بازمی‌گرداند. رشته جایگزین \f2subst\f1 می‌تواند شامل ارجاعات \f3$\f2n\f1 به \f2n\f1‌امین زیرعبارت پرانتزبندی‌شده باشد. .TP 8 .B regsuball (\f2string\f1, \f2regexp\f3, \f2subst\f3) مانند \f3regsub\f1 عمل می‌کند، اما تمام تطابق‌های عبارت باقاعده \f2regexp\f1 در رشته \f2string\f1 را با رشته \f2subst\f1 جایگزین می‌کند. .TP 8 .B require_state (\f2symbol\f3) بررسی می‌کند که وضعیت \f2symbol\f1 تعریف شده باشد. اگر وضعیت مورد نیاز تعریف نشده باشد، تابع تلاش می‌کند آن را به صورت خودکار بارگذاری کند. اگر بارگذاری ناموفق باشد، برنامه با یک پیام خطا خاتمه می‌یابد. .TP 8 .B split (\f2regexp\f3, \f2string\f3) رشته \f2string\f1 را با در نظر گرفتن تطابق‌های عبارت باقاعده \f2regexp\f1 به عنوان جداکننده آیتم‌ها، به یک لیست تقسیم می‌کند. .TP 8 .B sprintf (\f2fmt\f1, ...) آرگومان‌ها را مطابق با \f2fmt\f1 قالب‌بندی کرده و نتیجه را به عنوان یک رشته بازمی‌گرداند. .TP 8 .B strcmp (\f2str1\f3, \f2str2\f3) یک مقایسه حساس به بزرگ و کوچکی حروف برای رشته‌های \f2str1\f1 و \f2str2\f1 انجام می‌دهد. این تابع مقداری را بازمی‌گرداند که بدین صورت است: .RS 8 .TP 8 .B \-1 رشته \f2str1\f1 کوچکتر از \f2str2\f1 است .TP 8 .B 0 رشته‌ها برابر هستند .TP 8 .B 1 رشته \f2str1\f1 بزرگتر از \f2str2\f1 است .RE .TP 8 .B string (\f2any\f3) آرگومان را به رشته تبدیل می‌کند. .TP 8 .B strncmp (\f2str1\f3, \f2str2\f3, \f2num\f3) یک مقایسه حساس به بزرگ و کوچکی حروف برای رشته‌های \f2str1\f1 و \f2str2\f1 انجام می‌دهد و حداکثر \f2num\f3 نویسه را مقایسه می‌کند. .TP 8 .B substring (\f2str\f3, \f2start\f3, \f2end\f3) یک زیررشته از رشته \f2str\f1 را از موقعیت \f2start\f1 (شامل خود آن) تا \f2end\f1 (غیر شامل) بازمی‌گرداند. .RE.SH "متغیرهای توکار (BUILTIN VARIABLES)" .TP 8 .B $. شماره خط ورودی فعلی .TP 8 .B $\f2n\f3 زیرعبارت پرانتزبندی‌شدهٔ \f2n\f1ام عبارت باقاعده از آخرین عبارت باقاعده state یا از دستور اولیهٔ \f3regmatch\f1 .TP 8 .B $` همه چیز پیش از عبارت باقاعدهٔ منطبق‌شده. این متغیر هنگام استفاده به همراه دستور اولیهٔ \f3regmatch\f1 قابل استفاده است؛ محتوای این متغیر در صورت استفاده در بلوک‌های کنش برای ارجاع به داده‌های پیش از عبارت باقاعدهٔ بلوک، تعریف‌نشده است. .TP 8 .B $B یک نام مستعار برای \f3$`\f1 .TP 8 .B argv فهرست نام‌های فایل‌های ورودی .TP 8 .B filename نام فایل ورودی فعلی .TP 8 .B program نام برنامه (معمولاً \f3states\f1) .TP 8 .B version رشتهٔ نسخه برنامه .RE .SH "فایل‌ها (FILES)" .nf .ta 4i /usr/share/enscript/hl/*.st تعاریف states برای enscript .fi .SH "همچنین ببینید (SEE ALSO)" awk(1), enscript(1) .SH "نویسندگان (AUTHORS)" Markku Rossi صفحه خانگی وب GNU Enscript: