'\" t ...\" UIL.sgm /main/12 1996/09/08 21:23:10 rws $ .de P! .fl \!!1 setgray .fl \\&.\" .fl \!!0 setgray .fl \" force out current output buffer \!!save /psv exch def currentpoint translate 0 0 moveto \!!/showpage{}def .fl \" prolog .sy sed -e 's/^/!/' \\$1\" bring in postscript file \!!psv restore . .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie ! \\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie ! \\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie ! \\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie ! \\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "UIL" "file formats" .SH "نام (NAME)" UIL \- قالب پرونده زبان واسط کاربری (User Interface Language) .iX "user interface language" .iX "UIL" .SH "خلاصه دستور (SYNOPSIS)" .PP .nf MODULE \fImodule_name\fP [ NAMES = CASE_INSENSITIVE | CASE_SENSITIVE ] [ CHARACTER_SET = character_set ] [ OBJECTS = { \fIwidget_name\fP = GADGET | WIDGET; [\&.\&.\&.] } ] { [ [ \fIvalue_section\fP ] | [ \fIprocedure_section\fP ] | [ \fIlist_section\fP ] | [ \fIobject_section\fP ] | [ \fIidentifier_section\fP ] [ \&.\&.\&. ] ] } END MODULE; .fi .SH "توضیحات (DESCRIPTION)" .PP زبان UIL برای توصیف وضعیت اولیه واسط کاربری یک برنامه مبتنی بر ویجت (widget) به کار می‌رود\&. UIL ویجت‌های به‌کاررفته در واسط، منابع (resources) آن ویجت‌ها، و بازخوانی‌های (callbacks) آن‌ها را توصیف می‌کند\&. پرونده UIL با استفاده از دستور \fBuil\fP یا توسط کامپایلر قابل فراخوانی \fBUil()\fP به یک پرونده UID کامپایل می‌شود\&. سپس محتویات پرونده UID کامپایل‌شده می‌تواند از طریق توابع مختلف مدیریت منابع موتیف (MRM) از درون یک برنامه کاربردی در دسترس قرار گیرد\&. .PP پرونده UID مستقل از بستری است که برنامه Motif در نهایت روی آن اجرا خواهد شد\&. به عبارت دیگر، همان پرونده UID را می‌توان در هر سیستمی که قادر به اجرای Motif باشد استفاده کرد\&. .SS "پرونده (File)" .PP یک پرونده UIL از یک ماژول کامل منفرد (که در ساختار نحوی بالا توضیح داده شد) تشکیل می‌شود، یا اگر قرار باشد پرونده در یک پرونده UIL بزرگ‌تر گنجانده شود، از یک «بخش» کامل (همان‌طور که در ادامه شرح داده شده) تشکیل می‌گردد\&. زبان UIL از پنج نوع بخش مختلف استفاده می‌کند: مقدار (value)، روال (procedure)، فهرست (list)، شیء (object)، و شناسه (identifier)\&. .PP زبان UIL یک زبان آزاد‌قالب (free\-form) است\&. این بدان معناست که سازه‌های سطح بالا مانند اعلان‌های شیء و مقدار نیازی به شروع از ستون خاصی ندارند و می‌توانند در چند خط امتداد یابند\&. سازه‌های سطح پایین مانند کلمات کلیدی و نشانه‌های نگارشی نیز می‌توانند در هر ستونی آغاز شوند؛ با این حال، به استثنای رشته‌های متنی صریح و توضیحات درون‌کد، نمی‌توانند در چند خط شکسته شوند\&. .PP کامپایلر UIL خطوط ورودی با طول حداکثر ۱۳۲ کاراکتر را می‌پذیرد\&. .IP "\fBMODULE\fP \fImodule_name\fP" 10 نامی که ماژول UIL در پرونده UID با آن شناخته می‌شود\&. این نام در پرونده UID ذخیره می‌شود تا بعداً توسط MRM برای بازیابی منابع مورد استفاده قرار گیرد\&. این نام در پرونده UID همواره با حروف بزرگ ذخیره می‌شود\&. .IP "\fBNAMES\fP\ \fB=\fP\ \fBCASE_INSENSITIVE\fP\ |\ \fBCASE_SENSITIVE\fP" 10 .iX "UIL" "case sensitivity clause" .IP "" 10 مشخص می‌کند که آیا نام‌ها باید حساس به حروف بزرگ و کوچک در نظر گرفته شوند یا غیرحساس به حروف بزرگ و کوچک\&. مقدار پیش‌فرض حساس به حروف بزرگ و کوچک (case sensitive) است\&. بند حساسیت به حروف باید نخستین بند در هدر ماژول باشد، و در هر صورت باید بر هر عبارتی که شامل یک نام است تقدم داشته باشد\&. اگر نام‌ها در یک ماژول UIL حساس به حروف باشند، کلمات کلیدی UIL در آن ماژول باید با حروف کوچک نوشته شوند\&. هر نام با همان حالتی که در ماژول UIL ظاهر شده در پرونده UIL ذخیره می‌شود\&. اگر نام‌ها غیرحساس به حروف باشند، کلمات کلیدی می‌توانند با حروف بزرگ، کوچک، یا ترکیبی نوشته شوند، و معادل با حروف بزرگ هر نام در پرونده UID ذخیره می‌شود\&. .IP "\fBCHARACTER_SET\fP\ \fB=\fP\ \fBcharacter_set\fP" 10 .iX "UIL" "default character set clause" .IP "" 10 مجموعه نویسه (character set) پیش‌فرض را برای رشته‌های متنی صریح در ماژول که به صراحت مجموعه نویسه خود را تعیین نکرده‌اند مشخص می‌کند\&. مجموعه نویسه پیش‌فرض در صورت نبود این بند، بخش کدبندی متغیر محیطی \fBLANG\fP، یا مقدار \fBXmFALLBACK_CHARSET\fP در صورتی است که \fBLANG\fP تنظیم نشده باشد یا فاقد بخش کدبندی باشد\&. مقدار \fBXmFALLBACK_CHARSET\fP توسط ارائه‌دهنده UIL تعریف می‌شود، اما معمولاً ISO8859\-1 (معادل با ISO_LATIN1) است\&. استفاده از این بند، تمام پردازش‌های رشته‌های بومی‌سازی‌شده را که توسط فلگ کامپایلر \fB\-s\fP یا عنصر ساختار داده \fBUil_command_type\fP با نام \fBuse_setlocale_flag\fP فعال شده باشد خاموش می‌کند\&. .IP "\fBOBJECTS\ =\ {\fP\ \fIwidget_name\fP = \fBGADGET\fP | \fBWIDGET;\ }\fP" 10 .iX "UIL" "objects clause" .IP "" 10 مشخص می‌کند که آیا حالت ویجت (widget) یا گجت (gadget) کنترلی که با \fIwidget_name\fP مشخص شده به صورت پیش‌فرض استفاده شود یا خیر\&. به صورت پیش‌فرض حالت ویجت استفاده می‌شود، بنابراین معمولاً کلمه کلیدی gadget تنها کلمه‌ای است که استفاده می‌شود\&. کنترل مشخص‌شده باید کنترلی باشد که هر دو نسخه ویجت و گجت را داشته باشد: XmCascadeButton، XmLabel، XmPushButton، XmSeparator، و XmToggleButton\&. حالت بیش از یک کنترل را می‌توان با جدا کردن آن‌ها با نقطه\-ویرگول (semicolon) مشخص کرد\&. حالت گجت یا ویجت یک نمونه از کنترل را می‌توان با کلمات کلیدی \fBGADGET\fP و \fBWIDGET\fP در اعلان شیء خاص تعیین کرد\&. .IP "\fIvalue_section\fP" 10 روشی برای نام‌گذاری یک عبارت مقدار یا یک مقدار صریح فراهم می‌کند\&. سپس می‌توان به نام مقدار در اعلان‌هایی که در جای دیگر ماژول UIL رخ می‌دهند در هر زمینه‌ای که مقدار قابل استفاده باشد ارجاع داد\&. مقادیر را می‌توان به صورت ارجاع به جلو (forward reference) استفاده کرد\&. بخش‌های مقدار بعداً در این صفحه راهنما با جزئیات بیشتر شرح داده شده‌اند\&. .IP "\fIprocedure_section\fP" 10 روال‌های بازخوانی (callback routines) مورد استفاده توسط یک ویجت و روال‌های ایجاد را برای ویجت‌های تعریف‌شده توسط کاربر تعریف می‌کند\&. این تعاریف برای بررسی خطا استفاده می‌شوند\&. بخش‌های روال بعداً در این صفحه راهنما با جزئیات بیشتر شرح داده شده‌اند\&. .IP "\fIlist_section\fP" 10 روشی برای گروه‌بندی مجموعه‌ای از آرگومان‌ها، کنترل‌ها (فرزندان)، بازخوانی‌ها، یا روال‌ها برای استفاده‌های بعدی در ماژول UIL فراهم می‌کند\&. فهرست‌ها می‌توانند شامل فهرست‌های دیگر باشند، تا بتوانید یک سلسله‌مراتب ایجاد کنید که به روشنی نشان دهد کدام آرگومان‌ها، کنترل‌ها، بازخوانی‌ها، و روال‌ها میان کدام ویجت‌ها مشترک هستند\&. بخش‌های فهرست بعداً در این صفحه راهنما با جزئیات بیشتر شرح داده شده‌اند\&. .IP "\fIobject_section\fP" 10 اشیا تشکیل‌دهنده واسط کاربری برنامه را تعریف می‌کند\&. شما می‌توانید به نام اشیا در اعلان‌هایی که در جای دیگر ماژول UIL قرار دارند در هر زمینه‌ای که نام شیء قابل استفاده است ارجاع دهید (برای مثال، در یک فهرست کنترل‌ها، به عنوان ارجاع نمادین به شناسه ویجت، یا به عنوان آرگومان \fItag_value\fP برای یک روال بازخوانی)\&. اشیا می‌توانند ارجاع به جلو داشته باشند\&. بخش‌های شیء بعداً در این صفحه راهنما با جزئیات بیشتر شرح داده شده‌اند\&. .IP "\fIidentifier_section\fP" 10 یک اتصال زمان اجرا (run\-time binding) از داده‌ها به نام‌هایی که در ماژول UIL ظاهر می‌شوند تعریف می‌کند\&. بخش‌های شناسه بعداً در این صفحه راهنما با جزئیات بیشتر شرح داده شده‌اند\&. .PP پرونده UIL همچنین می‌تواند حاوی توضیحات درون‌کد (comments) و دستورالعمل‌های include باشد که در بخش‌های بعدی همراه با عناصر اصلی قالب پرونده UIL شرح داده شده‌اند\&. .SS "توضیحات درون‌کد (Comments)" .PP توضیحات درون‌کد می‌توانند به یکی از دو شکل زیر باشند: .IP " \(bu" 6 توضیح با توالی \fB/*\fP آغاز می‌شود، با متن توضیح ادامه می‌یابد و با توالی \fB*/\fP پایان می‌پذیرد\&. این شکل از توضیحات می‌تواند در چندین خط منبع امتداد یابد\&. .IP " \(bu" 6 توضیح با علامت ! (علامت تعجب) آغاز می‌شود، با متن توضیح ادامه می‌یابد و با انتهای خط منبع خاتمه می‌یابد\&. .PP هیچ‌یک از دو شکل توضیحات نمی‌توانند به صورت تودرتو (nested) قرار گیرند\&. .SS "بخش‌های مقدار (Value sections)" .PP .iX "UIL" "value section" یک بخش مقدار شامل کلیدواژه \fBVALUE\fP و به‌دنبال آن دنباله‌ای از تعریف‌های مقدار است\&. این بخش دارای نحو (سینتکس) زیر است: .PP \fBVALUE\fP \fIvalue_name\fP \fB:\fP [ \fBEXPORTED\fP | \fBPRIVATE\fP ] \fIvalue_expression\fP | \fBIMPORTED\fP \fIvalue_type\fP \fB;\fP .PP که در آن \fIvalue_expression\fP به \fIvalue_name\fP انتساب داده می‌شود یا یک \fIvalue_type\fP به نام مقدار واردشده (imported) اختصاص می‌یابد\&. یک تعریف مقدار راهی برای نام‌گذاری یک عبارت مقدار یا مقدار صریح (literal) فراهم می‌کند\&. به نام مقدار می‌توان در تعریف‌هایی که بعداً در ماژول UIL رخ می‌دهند، در هر زمینه‌ای که یک مقدار قابل استفاده باشد، ارجاع داد\&. مقادیر را می‌توان به‌صورت ارجاع به جلو (forward reference) نیز به کار برد\&. .iX "IMPORTED" .iX "EXPORTED" .iX "PRIVATE" .IP "\fBEXPORTED\fP" 10 مقداری که به عنوان صادره (exported) تعریف می‌کنید در فایل UID به عنوان یک منبع نام‌گذاری‌شده ذخیره می‌شود و بنابراین می‌توان با نام در سایر فایل‌های UID به آن ارجاع داد\&. هنگامی که مقداری را به عنوان صادره تعریف می‌کنید، MRM در زمان اجرا به خارج از ماژولی که مقدار صادره در آن اعلان شده است می‌نگرد تا مقدار آن را به دست آورد\&. .IP "\fBPRIVATE\fP" 10 یک مقدار خصوصی (private) مقداری است که وارد یا صادر نشده باشد\&. مقداری که به عنوان خصوصی تعریف می‌کنید به عنوان یک منبع مجزا در فایل UID ذخیره نمی‌شود\&. شما فقط می‌توانید در ماژول UIL حاوی تعریف مقدار، به یک مقدار خصوصی ارجاع دهید\&. مقدار یا شیء مستقیماً در هر چیزی در ماژول UIL که به تعریف ارجاع می‌دهد، گنجانده می‌شود\&. .IP "\fBIMPORTED\fP" 10 مقداری که به عنوان واردشده (imported) تعریف می‌کنید مقداری است که به عنوان یک منبع نام‌گذاری‌شده در یک فایل UID تعریف شده باشد\&. MRM این تعریف را با تعریف صادره متناظر در زمان اجرای برنامه حل‌وفصل و تطبیق می‌دهد\&. .PP به‌طور پیش‌فرض، مقادیر و اشیاء خصوصی هستند\&. در ادامه فهرستی از انواع مقادیر پشتیبانی‌شده در UIL آمده است: .IP " \(bu" 6 \fBANY\fP .IP " \(bu" 6 \fBARGUMENT\fP .IP " \(bu" 6 \fBBOOLEAN\fP .IP " \(bu" 6 \fBCOLOR\fP .IP " \(bu" 6 \fBCOLOR_TABLE\fP .IP " \(bu" 6 \fBCOMPOUND_STRING\fP .IP " \(bu" 6 \fBFLOAT\fP .IP " \(bu" 6 \fBFONT\fP .IP " \(bu" 6 \fBFONT_TABLE\fP .IP " \(bu" 6 \fBFONTSET\fP .IP " \(bu" 6 \fBICON\fP .IP " \(bu" 6 \fBINTEGER\fP .IP " \(bu" 6 \fBINTEGER_TABLE\fP .IP " \(bu" 6 \fBKEYSYM\fP .IP " \(bu" 6 \fBREASON\fP .IP " \(bu" 6 \fBSINGLE_FLOAT\fP .IP " \(bu" 6 \fBSTRING\fP .IP " \(bu" 6 \fBSTRING_TABLE\fP .IP " \(bu" 6 \fBTRANSLATION_TABLE\fP .IP " \(bu" 6 \fBWIDE_CHARACTER\fP .IP " \(bu" 6 \fBWIDGET\fP .SS "بخش‌های رویه (Procedure sections)" .PP .iX "UIL" "procedure section" یک بخش رویه شامل کلیدواژه \fBPROCEDURE\fP و به‌دنبال آن دنباله‌ای از تعریف‌های رویه است\&. این بخش دارای نحو (سینتکس) زیر است: .PP .nf PROCEDURE \fIprocedure_name\fP [ ( [ \fIvalue_type\fP ]) ]; .fi .PP .iX "UIL" "procedure declaration" از یک تعریف رویه برای اعلان موارد زیر استفاده کنید: .IP " \(bu" 6 روالی که می‌تواند به عنوان یک روال بازخوانی (callback routine) برای یک ویجت استفاده شود .IP " \(bu" 6 تابع ایجاد برای یک ویجت تعریف‌شده توسط کاربر .PP می‌توانید به نام یک رویه در تعریف‌هایی که بعداً در ماژول UIL رخ می‌دهند در هر زمینه‌ای که یک رویه قابل استفاده باشد ارجاع دهید\&. رویه‌ها را می‌توان به‌صورت ارجاع به جلو (forward reference) نیز به کار برد\&. نمی‌توانید از نامی که در زمینه دیگری استفاده کرده‌اید به عنوان نام رویه استفاده کنید\&. .PP در یک تعریف رویه، این امکان اختیاری را دارید که مشخص کنید یک پارامتر در زمان اجرا به روال بازخوانی متناظر ارسال خواهد شد\&. این پارامتر تگ بازخوانی (callback tag) نامیده می‌شود\&. می‌توانید نوع داده تگ بازخوانی را با قرار دادن نوع داده در پرانتز به‌دنبال نام رویه مشخص کنید\&. هنگامی که ماژول را کامپایل می‌کنید، کامپایلر UIL بررسی می‌کند که آرگومان مشخص‌شده در ارجاع‌ها به رویه، از همین نوع باشد\&. توجه داشته باشید که نوع داده تگ بازخوانی باید یکی از انواع داده معتبر UIL باشد\&. می‌توانید از یک ویجت به عنوان تگ بازخوانی استفاده کنید، تا زمانی که ویجت در همان سلسله‌مراتب ویجت بازخوانی تعریف شده باشد؛ یعنی دارای یک جد مشترک باشند که در همان سلسله‌مراتب UIL قرار دارد\&. .PP فهرست زیر چگونگی بررسی نوع آرگومان و تعداد آرگومان توسط کامپایلر UIL را بسته به تعریف رویه خلاصه می‌کند\&. .IP "بدون\ پارامتر" 10 هیچ بررسی نوع آرگومان یا تعداد آرگومانی انجام نمی‌شود\&. می‌توانید در ارجاع به رویه 0 یا یک آرگومان ارائه دهید\&. .IP "\fB(\ )\fP" 10 بررسی می‌کند که تعداد آرگومان‌ها 0 (صفر) باشد\&. .IP "\fB(ANY)\fP" 10 بررسی می‌کند که تعداد آرگومان‌ها 1 باشد\&. نوع آرگومان را بررسی نمی‌کند\&. برای جلوگیری از بررسی نوع روی تگ‌های رویه، از نوع \fBANY\fP استفاده کنید\&. .IP "\fB(\fP\fItype\fP\fB)\fP" 10 یک آرگومان از نوع مشخص‌شده را بررسی می‌کند\&. .IP "\fB(\fP\fBclass_name\fP\fB)\fP" 10 یک آرگومان ویجت از کلاس ویجت مشخص‌شده را بررسی می‌کند\&. .PP اگرچه استفاده از هر نوع داده UIL برای مشخص کردن نوع یک تگ در تعریف رویه امکان‌پذیر است، اما باید بتوانید آن نوع داده را در زبان برنامه‌نویسی مورد استفاده خود بازنمایی کنید\&. برخی از انواع داده (مانند integer، Boolean و string) انواع داده رایجی هستند که توسط اکثر زبان‌های برنامه‌نویسی شناخته می‌شوند\&. سایر انواع داده UIL (مانند جداول رشته) پیچیده‌تر هستند و ممکن است نیازمند این باشند که ساختار داده متناظر مناسبی را در برنامه برپا کنید تا بتوانید تگی از آن نوع را به یک روال بازخوانی ارسال کنید\&. .PP همچنین می‌توانید از تعریف رویه برای مشخص کردن تابع ایجاد یک ویجت تعریف‌شده توسط کاربر استفاده کنید\&. در این حالت، هیچ پارامتر رسمی مشخص نمی‌کنید\&. رویه با سه آرگومان استاندارد که به تمام توابع ایجاد ویجت ارسال می‌شوند، فراخوانی می‌شود\&. (برای اطلاعات بیشتر درباره توابع ایجاد ویجت، به مستندات Motif Toolkit مراجعه کنید\&.) .SS "بخش‌های فهرست (List sections)" .PP .iX "UIL" "list section" یک بخش فهرست شامل کلیدواژه \fBLIST\fP و به دنبال آن دنباله‌ای از اعلان‌های فهرست است\&. نحو آن به شرح زیر است: .PP .nf LIST \fIlist_name\fP: { list_item; [\&.\&.\&.] } [\&.\&.\&.] .fi .PP همچنین می‌توانید از بخش‌های فهرست برای گروه‌بندی مجموعه‌ای از آرگومان‌ها، کنترل‌ها (فرزندان)، فراخوانی‌های بازگشتی (callbacks) یا رویه‌ها برای استفاده‌های بعدی در ماژول UIL بهره ببرید\&. فهرست‌ها می‌توانند شامل فهرست‌های دیگری نیز باشند، به طوری که می‌توانید ساختاری سلسله‌مراتبی ایجاد کنید تا مشخص شود کدام آرگومان‌ها، کنترل‌ها، فراخوانی‌های بازگشتی و رویه‌ها بین کدام ویجت‌ها مشترک هستند\&. شما نمی‌توانید انواع مختلف فهرست‌ها را با یکدیگر ترکیب کنید؛ یک فهرست با نوعی خاص نمی‌تواند شامل ورودی‌هایی از نوع فهرست دیگر باشد یا به نام یک نوع فهرست متفاوت ارجاع دهد\&. نام فهرست همواره برای همان ماژول UIL که در آن اعلان شده خصوصی (private) است و نمی‌تواند به عنوان یک منبع نام‌گذاری‌شده در فایل UID ذخیره شود\&. .PP انواع دیگر فهرست‌ها در بخش‌های زیر شرح داده شده‌اند\&. .PP \fBساختار فهرست آرگومان‌ها (Arguments List Structure)\fP .PP .iX "List types" "argument" .iX "UIL" "arguments list" فهرست آرگومان‌ها مشخص می‌کند که هنگام فراخوانی روتین ایجاد برای یک شیء خاص در زمان اجرا، چه آرگومان‌هایی باید در پارامتر فهرست آرگومان‌ها تعیین شوند\&. همچنین یک فهرست آرگومان، مقادیر این آرگومان‌ها را مشخص می‌سازد\&. فهرست‌های آرگومان دارای نحو زیر هستند: .PP .nf LIST \fIlist_name\fP: ARGUMENTS { \fIargument_name\fP = \fIvalue_expression\fP; [\&.\&.\&.] } [\&.\&.\&.] .fi .PP نام آرگومان باید یک نام آرگومان توکار (built\-in) یا یک نام آرگومان تعریف‌شده توسط کاربر باشد که با تابع \fBARGUMENT\fP مشخص شده است\&. .PP اگر از یک نام آرگومان توکار به عنوان ورودی فهرست آرگومان‌ها در تعریف شیء استفاده کنید، کامپایلر UIL نام آرگومان را بررسی می‌کند تا مطمئن شود نوع شیئی که تعریف می‌کنید از آن پشتیبانی می‌کند\&. اگر یک نام آرگومان بیش از یک بار در یک فهرست آرگومان مشخص ظاهر شود، آخرین ورودی که از آن نام آرگومان استفاده می‌کند جایگزین تمام ورودی‌های قبلی با همان نام می‌شود و کامپایلر یک پیام هشدار صادر می‌کند\&. .PP برخی از آرگومان‌ها، مانند \fBXmNitems\fP و \fBXmNitemCount\fP، توسط کامپایلر UIL با یکدیگر جفت (coupled) شده‌اند\&. هنگامی که یکی از این آرگومان‌ها را مشخص می‌کنید، کامپایلر آرگومان دیگر را نیز به طور خودکار تنظیم می‌کند\&. آرگومان جفت‌شده در دسترس مستقیم شما نخواهد بود\&. .iX "UIL" "coupled arguments" .iX "Arguments" "coupled in UIL" .PP جعبه‌ابزار Motif و جعبه‌ابزار X (بخش intrinsics) از آرگومان‌های قید (constraint arguments) پشتیبانی می‌کنند\&. یک آرگومان قید، آرگومانی است فراتر از آرگومان‌های معمولیِ در دسترس، که به فرزندان یک شیء ارسال می‌شود\&. برای نمونه، ویجت Form مجموعه‌ای از آرگومان‌های قید را به فرزندان خود اختصاص می‌دهد\&. این آرگومان‌ها موقعیت قرارگیری فرزندان را درون Form کنترل می‌کنند\&. .PP برخلاف آرگومان‌هایی که برای تعریف ویژگی‌های یک ویجت خاص استفاده می‌شوند، آرگومان‌های قید منحصراً برای تعریف ویژگی‌های اضافی فرزندان یک ویجت مشخص به کار می‌روند\&. این ویژگی‌ها بر رفتار فرزندان درون والد خود تأثیر می‌گذارند\&. برای ارائه آرگومان‌های قید به فرزندان، این آرگومان‌ها را در فهرست آرگومان‌های فرزند قرار می‌دهید\&. .PP برای کسب اطلاعات درباره اینکه کدام آرگومان‌ها توسط کدام ویجت‌ها پشتیبانی می‌شوند، به \fBپیوست B (Appendix B)\fP مراجعه کنید\&. برای آگاهی از نوع مقدار معتبر برای هر آرگومان توکار، به \fBپیوست C (Appendix C)\fP مراجعه نمایید\&. .PP \fBساختار فهرست فراخوانی‌های بازگشتی (Callbacks List Structure)\fP .iX "UIL" "callbacks list" .iX "List types" "callback" .PP از فهرست فراخوانی‌های بازگشتی (callbacks list) برای تعیین این که چه دلایل فراخوانی (callback reasons) در زمان اجرا توسط یک ویجت خاص پردازش شوند، استفاده کنید\&. فهرست‌های فراخوانی بازگشتی نحو زیر را دارند: .PP \fBLIST\fP \fIlist_name\fP \fB: CALLBACKS {\fP \fIreason_name\fP \fB= PROCEDURE\fP \fIprocedure_name\fP \fB[\fP \fB(\fP [ \fIvalue_expression\fP ] \fB)\fP ]\fB;\fP | \fIreason_name\fP \fB=\fP \fIprocedure_list\fP \fB;\fP [\&.\&.\&.] \fB}\fP [\&.\&.\&.] .PP برای ویجت‌های جعبه‌ابزار Motif، نام دلیل باید یک نام دلیل توکار (built\-in) باشد\&. برای یک ویجت تعریف‌شده توسط کاربر، می‌توانید از نام دلیلی استفاده کنید که پیش‌تر با استفاده از تابع \fBREASON\fP مشخص کرده‌اید\&. اگر در تعریف یک شیء از دلیل توکار استفاده کنید، کامپایلر UIL اطمینان حاصل می‌کند که آن دلیل توسط نوع شیئی که تعریف می‌کنید پشتیبانی می‌شود\&. پیوست B نشان می‌دهد هر شیء از چه دلایلی پشتیبانی می‌کند\&. .PP اگر همان دلیل بیش از یک بار در فهرست فراخوانی‌های بازگشتی ظاهر شود، آخرین ورودی ارجاع‌دهنده به آن نام، جایگزین تمام ورودی‌های قبلی با همان دلیل شده و کامپایلر UIL یک پیام تشخیصی صادر می‌کند\&. .PP اگر مقداری نام‌گذاری‌شده برای آرگومان رویه (برچسب فراخوانی بازگشتی / callback tag) تعیین کنید، نوع داده مقدار باید با نوع مشخص‌شده برای برچسب فراخوانی بازگشتی در اعلان رویه متناظر مطابقت داشته باشد\&. هنگام تعیین نام ویجت به عنوان عبارت مقدار رویه، باید نوع ویجت و یک فاصله را پیش از نام ویجت نیز مشخص کنید\&. .PP از آنجا که کامپایلر UIL به جای یک ماژول شیء (\&.o) یک فایل UID تولید می‌کند، پیوند دادن نام UIL به آدرس نقطه ورود (entry point) رویه توسط بارگذار (loader) انجام نمی‌شود، بلکه در زمان اجرا از طریق تابع MRM با نام \fBMrmRegisterNames\fP برقرار می‌گردد\&. شما این تابع را پیش از واکشی هر شیء فراخوانی کرده و هم نام‌های UIL و هم آدرس‌های رویه هر فراخوانی بازگشتی را به آن می‌دهید\&. نامی که در برنامه کاربردی با MRM ثبت می‌کنید باید با نامی که برای رویه در ماژول UIL مشخص کرده‌اید دقیقاً مطابقت داشته باشد\&. .PP هر رویه فراخوانی بازگشتی سه آرگومان دریافت می‌کند\&. دو آرگومان نخست برای هر فراخوانی بازگشتی شکل یکسانی دارند\&. شکل آرگومان سوم از شیئی به شیء دیگر متفاوت است\&. .PP آرگومان اول، آدرس ساختار داده‌ای است که توسط جعبه‌ابزار Motif برای نمونه این شیء نگهداری می‌شود\&. این آدرس شناسه ویجت (widget ID) برای این شیء نامیده می‌شود\&. .PP آرگومان دوم، آدرس مقداری است که در فهرست فراخوانی‌های بازگشتی برای این رویه مشخص کرده‌اید\&. اگر آرگومانی تعیین نکنید، این آدرس NULL خواهد بود\&. توجه داشته باشید در حالتی که مقدار مشخص‌شده یک رشته یا \fBXmString\fR باشد، مقدار تعیین‌شده در فهرست فراخوانی‌های بازگشتی خود نمایانگر یک آدرس است نه یک مقدار واقعی\&. برای نمونه در مورد یک رشته ساده، مقدارْ آدرس اولین کاراکتر آن رشته است\&. در این حالت‌ها، UIL یک سطح ارجاع غیرمستقیم (indirection) اضافه نمی‌کند و آرگومان دوم برای رویه فراخوانی بازگشتی صرفاً همان مقدار مشخص‌شده در فهرست فراخوانی‌های بازگشتی خواهد بود\&. .PP آرگومان سوم، نام دلیلی است که در فهرست فراخوانی‌های بازگشتی مشخص کرده‌اید\&. .PP \fBساختار فهرست کنترل‌ها (Controls List Structure)\fP .PP .iX "UIL" "controls list" یک فهرست کنترل‌ها مشخص می‌کند چه اشیائی فرزند یک شیء خاص هستند یا توسط آن کنترل می‌شوند\&. هر ورودی در فهرست کنترل‌ها دارای نحو زیر است: .PP .nf LIST \fIlist_name\fP: CONTROLS { [\fIchild_name\fP: ] [MANAGED | UNMANAGED] \fIobject_definition\fP; [\&.\&.\&.] } [\&.\&.\&.] .fi .PP اگر کلیدواژه \fBMANAGED\fP را مشخص کنید، در زمان اجرا شیء ایجاد و مدیریت (managed) می‌شود؛ اگر \fBUNMANAGED\fP را مشخص نمایید، در زمان اجرا شیء تنها ایجاد می‌گردد\&. اشیاء به طور پیش‌فرض مدیریت می‌شوند\&. .PP می‌توانید از \fIchild_name\fP برای مشخص کردن منابع مربوط به فرزندانِ به‌طور خودکار ایجادشده یک کنترل خاص استفاده کنید\&. نام‌های فرزندانِ خودکار ایجادشده با افزودن \fBXm_\fP به ابتدای نام ویجت فرزند تشکیل می‌شوند\&. این نام در مستندات ویجت والد مشخص شده است\&. .PP برخلاف فهرست آرگومان‌ها و فهرست فراخوانی‌های بازگشتی، ورودی فهرست کنترل‌ها که همسان با ورودی قبلی باشد جایگزین ورودی قبلی نمی‌شود\&. در زمان اجرا، هر ورودی فهرست کنترل‌ها هنگام ایجاد والد باعث ایجاد یک فرزند می‌شود\&. اگر از تعریف شیء یکسانی برای چند فرزند استفاده شود، در زمان اجرا چندین نمونه از آن فرزند ایجاد می‌گردد\&. برای مشاهده فهرستی از این که کدام انواع ویجت می‌توانند توسط کدام انواع دیگر کنترل شوند، به \fBپیوست B (Appendix B)\fP مراجعه کنید\&. .PP \fBساختار فهرست رویه‌ها (Procedures List Structure)\fP .PP می‌توانید با تعریف یک فهرست رویه‌ها در UIL، چندین رویه را برای یک دلیل فراخوانی بازگشتی مشخص کنید\&. همانند سایر انواع فهرست، فهرست‌های رویه‌ها را می‌توان به صورت درون‌خطی (in\-line) یا درون یک بخش فهرست تعریف کرد و با نام به آن‌ها ارجاع داد\&. .PP اگر دلیلی را بیش از یک بار تعریف کنید (به عنوان مثال، زمانی که دلیل هم در یک فهرست رویه ارجاع‌شده و هم در فهرست فراخوانی‌های بازگشتی شیء تعریف شده باشد)، تعریف‌های قبلی با آخرین تعریف بازنویسی می‌شوند\&. نحو فهرست رویه‌ها به شرح زیر است: .PP .nf LIST \fIlist_name\fP: PROCEDURES { \fIprocedure_name\fP [ ( [ \fIvalue_expression\fP ]) ]; [\&.\&.\&.] } [\&.\&.\&.] .fi .PP هنگام تعیین نام ویجت به عنوان عبارت مقدار رویه، باید نوع ویجت و یک فاصله را پیش از نام ویجت نیز مشخص نمایید\&. .SS "بخش‌های شیء (Object Sections)" .PP .iX "UIL" "object section" یک بخش شیء شامل کلیدواژه \fBOBJECT\fP به‌همراه دنباله‌ای از اعلان‌های شیء است\&. نحو آن به شرح زیر است: .PP .nf OBJECT \fIobject_name\fP: [ EXPORTED | PRIVATE | IMPORTED ] \fIobject_type\fP [ PROCEDURE \fIcreation_function\fP ] [ \fIobject_name\fP [ WIDGET | GADGET ] | {\fIlist_definitions\fP } ] .fi .PP .iX "UIL" "object declaration" از اعلان شیء برای تعریف اشیایی که قرار است در فایل UID ذخیره شوند استفاده کنید\&. می‌توانید در هر زمینه‌ای از ماژول UIL که استفاده از نام شیء در آن مجاز است (برای مثال، در فهرست کنترل‌ها، به‌صورت یک ارجاع نمادین به شناسه ویجت، یا به‌عنوان آرگومان \fItag_value\fP برای یک روتین فراخوانی برگشتی)، به نام شیء در اعلان‌هایی که در جای دیگر ماژول رخ داده‌اند ارجاع دهید\&. اشیاء را می‌توان به‌صورت رو به جلو ارجاع داد؛ یعنی می‌توانید نام یک شیء را پس از ارجاع به آن اعلان کنید\&. تمام ارجاعات به نام یک شیء باید با نوع آن شیء که در اعلان شیء مشخص شده است سازگار باشند\&. می‌توانید یک شیء را به‌صورت EXPORTED ،IMPORTED یا PRIVATE مشخص کنید\&. .PP تعریف شیء می‌تواند شامل دنباله‌ای از فهرست‌ها باشد که آرگومان‌ها، سلسله‌مراتب و فراخوانی‌های برگشتی (callbacks) را برای ویجت تعریف می‌کنند\&. برای یک شیء فقط می‌توانید یک فهرست از هر نوع مشخص کنید\&. هنگامی که یک ویجت تعریف‌شده توسط کاربر را اعلان می‌کنید، باید ارجاعی به تابع ایجاد ویجت برای آن ویجت تعریف‌شده بگنجانید\&. .PP نکته: چندین ویجت در جعبه‌ابزار Motif در عمل از دو ویجت پیوندخورده تشکیل شده‌اند\&. برای مثال، \fBXmScrolledText\fP و \fBXmScrolledList\fP هر یک از ویجت‌های فرزند \fBXmText\fP و \fBXmList\fP در زیر یک ویجت \fBXmScrolledWindow\fP تشکیل شده‌اند\&. هنگامی که چنین ویجتی ایجاد می‌شود، منابع آن در دسترس هر دو ویجت زیرین قرار می‌گیرد\&. این مسئله گهگاه می‌تواند مشکلاتی ایجاد کند، مانند زمانی که برنامه‌نویس می‌خواهد یک روتین \fBXmNdestroyCallback\fP تعیین کند تا هنگام تخریب ویجت اجرا شود\&. در این حالت، منبع callback در دسترس هر دو زیرویجت خواهد بود و هنگام تخریب ویجت، موجب بروز خطا می‌شود\&. برای جلوگیری از این مشکلات، برنامه‌نویس باید ویجت‌های والد و فرزند را به‌صورت جداگانه ایجاد کند، به‌جای اینکه به این ویجت‌های پیوندخورده متکی باشد\&. .PP از کلیدواژه \fBGADGET\fP یا \fBWIDGET\fP برای تعیین نوع شیء یا بازنویسی گونه پیش‌فرض برای این نوع شیء استفاده کنید\&. می‌توانید از نام نوع شیء در جعبه‌ابزار Motif که دارای گونه گجت است (برای مثال، \fBXmLabelGadget\fP) به‌عنوان یک مشخصه در اعلان شیء استفاده کنید\&. مقدار \fIobject_type\fP می‌تواند هر نوع شیئی باشد، از جمله گجت‌ها\&. فقط در اعلان یک شیء نیاز به تعیین کلیدواژه \fBGADGET\fP یا \fBWIDGET\fP دارید، نه زمانی که به آن شیء ارجاع می‌دهید\&. شما نمی‌توانید کلیدواژه \fBGADGET\fP یا \fBWIDGET\fP را برای یک شیء تعریف‌شده توسط کاربر مشخص کنید؛ اشیاء تعریف‌شده توسط کاربر همواره ویجت هستند\&. .SS "بخش‌های شناسه (Identifier sections)" .PP .iX "UIL" "identifiers" بخش شناسه به شما امکان می‌دهد یک شناسه (identifier) تعریف کنید؛ سازوکاری که پیوند زمان اجرا (run\-time binding) بین داده‌ها و نام‌های موجود در یک ماژول UIL را محقق می‌سازد\&. بخش شناسه شامل کلیدواژه رزروشده \fBIDENTIFIER\fP است که به‌دنبال آن فهرستی از نام‌ها می‌آید و پس از هر نام یک نقطه‌ویرگول قرار می‌گیرد\&. .PP \fBIDENTIFIER\fP \fIidentifier_name\fP\fB;\fP [\&.\&.\&.\fB;\fP] .PP بعداً می‌توانید از این نام‌ها در ماژول UIL به‌عنوان مقدار یک آرگومان برای یک ویجت یا مقدار تگ برای یک روتین callback استفاده کنید\&. در زمان اجرا، از توابع MRM شامل \fBMrmRegisterNames\fP و \fBMrmRegisterNamesInHierarchy\fP برای پیوند دادن نام شناسه با داده‌ها (یا در مورد callbackها، با نشانی داده‌ها) مرتبط با شناسه استفاده می‌کنید\&. .PP هر ماژول UIL دارای یک فضای نام واحد است؛ بنابراین، نمی‌توانید نامی را که برای یک مقدار، شیء یا روتین (procedure) استفاده کرده‌اید، به‌عنوان نام شناسه در همان ماژول به کار ببرید\&. .PP کامپایلر UIL هیچ‌گونه بررسی نوعی (type checking) روی استفاده از شناسه‌ها در یک ماژول UIL انجام نمی‌دهد\&. بر خلاف مقدار UIL، یک شناسه هیچ نوع UIL مرتبطی ندارد\&. صرف‌نظر از اینکه یک آرگومان ویجت یا تگ روتین فراخوانی برگشتی با چه نوع خاصی تعریف شده باشد، می‌توانید در آن زمینه به‌جای مقداری از نوع متناظر، از یک شناسه استفاده کنید\&. .PP برای ارجاع به این نام‌های شناسه در یک ماژول UIL، از نام شناسه در هر کجایی که می‌خواهید مقدار آن استفاده شود استفاده می‌کنید\&. .SS "دستورالعمل‌های گنجاندن (Include directives)" .PP .iX "UIL" "include directive" دستورالعمل include محتویات یک فایل مشخص‌شده را در یک ماژول UIL ادغام می‌کند\&. این سازوکار به چندین ماژول UIL امکان می‌دهد تعاریف مشترک را به اشتراک بگذارند\&. نحو دستورالعمل include به شرح زیر است: .PP .nf INCLUDE FILE \fIfile_name\fP; .fi .PP کامپایلر UIL دستورالعمل include را با محتویات فایل include جایگزین می‌کند و آن را به‌گونه‌ای پردازش می‌کند که گویی این محتویات در فایل منبع UIL فعلی ظاهر شده‌اند\&. .PP می‌توانید فایل‌های include را به‌صورت تو در تو استفاده کنید؛ یعنی یک فایل include می‌تواند حاوی دستورالعمل‌های include باشد\&. کامپایلر UIL می‌تواند تا ۱۰۰ ارجاع (شامل فایلی که ماژول UIL را در بر دارد) را پردازش کند\&. بنابراین، می‌توانید تا ۹۹ فایل را در یک ماژول UIL منفرد، شامل فایل‌های تو در تو، بگنجانید\&. هر بار باز شدن یک فایل یک ارجاع محسوب می‌شود، بنابراین گنجاندن یک فایل یکسان برای دو بار، دو ارجاع به شمار می‌آید\&. .PP مقدار \fIfile_name\fP یک رشته ساده شامل مشخصات فایلی است که فایل مورد نظر را برای گنجانده شدن مشخص می‌کند\&. قواعد یافتن فایل مشخص‌شده مشابه قواعد یافتن فایل‌های سرایند (header) یا \fB\&.h\fP با استفاده از دستورالعمل \fB#include\fP به‌همراه رشته نقل‌قول‌شده در زبان C است\&. زبان UIL از گزینه \fB\-I\fP برای تعیین دایرکتوری جستجوی فایل‌های include استفاده می‌کند\&. .IP " \(bu" 6 اگر دایرکتوری را مشخص نکنید، کامپایلر UIL فایل include را در دایرکتوری فایل منبع اصلی جستجو می‌کند\&. .IP " \(bu" 6 اگر کامپایلر فایل include را در آنجا پیدا نکند، کامپایلر در همان دایرکتوری فایل منبع جستجو می‌کند\&. .IP " \(bu" 6 اگر دایرکتوری را مشخص کنید، کامپایلر UIL فقط همان دایرکتوری را برای فایل جستجو می‌کند\&. .SS "نام‌ها و رشته‌ها (Names and Strings)" .PP نام‌ها می‌توانند از هر یک از نویسه‌های A تا Z، a تا z، 0 تا 9، $ (علامت دلار) و \^_\^ (زیرخط) تشکیل شوند\&. نام‌ها نمی‌توانند با یک رقم (0 تا 9) آغاز شوند\&. بیشینه طول یک نام 31 نویسه است\&. .PP زبان UIL از طریق یک بند در سرآیند \fBMODULE\fP امکان انتخاب بین نام‌های حساس به بزرگی و کوچکی حروف یا غیرحساس به آن را فراهم می‌کند\&. برای نمونه، اگر نام‌ها به بزرگی و کوچکی حروف حساس باشند، نام‌های «sample» و «Sample» از یکدیگر متمایز هستند\&. اگر نام‌ها حساس به بزرگی و کوچکی حروف نباشند، این نام‌ها یکسان در نظر گرفته می‌شوند و می‌توانند به جای یکدیگر استفاده شوند\&. به طور پیش‌فرض، UIL فرض می‌کند نام‌ها به بزرگی و کوچکی حروف حساس هستند\&. .PP در حالت \fBCASE\-INSENSITIVE\fP\^، کامپایلر تمامی نام‌ها را در فایل UID به شکل حروف بزرگ خروجی می‌دهد\&. در حالت \fBCASE\-SENSITIVE\fP\^، نام‌ها در فایل UIL دقیقاً همان‌گونه که در مبدأ آمده‌اند نمایش داده می‌شوند\&. .PP جدول زیر کلیدواژه‌های رزروشده را فهرست می‌کند که برای تعریف نام‌های تعریف‌شده توسط برنامه‌نویس در دسترس نیستند\&. .iX "UIL" "keywords" .iX "UIL module" "keywords" .iX "UIL specification file" "keywords" .iX "Keywords" .TS tab( ) box; c s s s l l l l. \fBکلیدواژه‌های رزروشده (Reserved Keywords)\fP _ _ _ _ ARGUMENTS CALLBACKS CONTROLS END EXPORTED FALSE GADGET IDENTIFIER INCLUDE LIST MODULE OFF ON OBJECT PRIVATE PROCEDURE PROCEDURES TRUE VALUE WIDGET .TE .PP کلیدواژه‌های غیررزروشده‌ی UIL در فهرست و جدول زیر شرح داده شده‌اند\&. این کلیدواژه‌ها می‌توانند به عنوان نام‌های تعریف‌شده توسط برنامه‌نویس استفاده شوند؛ با این حال، اگر از هر کلیدواژه‌ای به عنوان یک نام استفاده کنید، دیگر نمی‌توانید از کاربرد ارائه‌شده توسط UIL برای آن کلیدواژه استفاده کنید\&. .IP " \(bu" 6 نام‌های آرگومان داخلی (برای نمونه، \fBXmNx\fP\^، \fBXmNheight\fP) .IP " \(bu" 6 نام‌های علت (reason) داخلی (برای نمونه، \fBXmNactivateCallback\fP\^، \fBXmNhelpCallback\fP) .IP " \(bu" 6 نام‌های مجموعه نویسه (برای نمونه، \fBISO_LATIN1\fP\^، \fBISO_HEBREW_LR\fP) .IP " \(bu" 6 نام‌های مقادیر ثابت (برای نمونه، \fBXmMENU_OPTION\fP\^، \fBXmBROWSE_SELECT\fP) .IP " \(bu" 6 انواع شیء (برای نمونه، \fBXmPushButton\fP\^، \fBXmBulletinBoard\fP) .TS tab( ) box; c s s l l l. \fBکلیدواژه‌های غیررزروشده (Unreserved Keywords)\fP _ _ _ ANY ARGUMENT ASCIZ_STRING_TABLE ASCIZ_TABLE BACKGROUND BOOLEAN CASE_INSENSITIVE CASE_SENSITIVE CHARACTER_SET COLOR COLOR_TABLE COMPOUND_STRING COMPOUND_STRING_COMPONENT COMPOUND_STRING_TABLE FILE FLOAT FONT FONT_TABLE FONTSET FOREGROUND ICON IMPORTED INTEGER INTEGER_TABLE KEYSYM MANAGED NAMES OBJECTS REASON RGB RIGHT_TO_LEFT SINGLE_FLOAT STRING STRING_TABLE TRANSLATION_TABLE UNMANAGED USER_DEFINED VERSION WIDE_CHARACTER WIDGET XBITMAPFILE .TE .PP رشته‌های لیترال (تحت‌اللفظی) می‌توانند از حروف کوچک و بزرگ، ارقام و نویسه‌های نشانه‌گذاری تشکیل شوند\&. فاصله‌ها، تب‌ها و کامنت‌ها عناصر ویژه‌ای در این زبان هستند\&. آن‌ها ابزاری برای جداسازی سایر عناصر، مانند دو نام، می‌باشند\&. یک یا چند مورد از این عناصر می‌توانند قبل یا بعد از هر عنصر دیگری در زبان ظاهر شوند\&. با این حال، فاصله‌ها، تب‌ها و کامنت‌هایی که درون رشته‌های لیترال قرار می‌گیرند به عنوان دنباله‌ای از نویسه‌ها در نظر گرفته می‌شوند نه به عنوان جداکننده\&. .SS "انواع داده (Data Types)" .iX "UIL" "literals" .iX "UIL module" "literals" .iX "UIL specification file" "literals" .iX "Values" "literals" .PP زبان UIL برای چندین مورد از انواع مقادیری که پشتیبانی می‌کند، لیترال ارائه می‌دهد\&. برخی از انواع مقادیر به صورت لیترال پشتیبانی نمی‌شوند (برای نمونه، پیکس‌مپ‌ها و جدول‌های رشته)\&. می‌توانید مقادیر این نوع‌ها را با استفاده از توابع شرح داده‌شده در بخش \fIتوابع (Functions)\fP تعیین کنید\&. زبان UIL به طور مستقیم از انواع لیترال زیر پشتیبانی می‌کند: .IP " \(bu" 6 لیترال رشته‌ای (String literal) .IP " \(bu" 6 لیترال عدد صحیح (Integer literal) .IP " \(bu" 6 لیترال بولی (Boolean literal) .IP " \(bu" 6 لیترال ممیز شناور (Floating\-point literal) .PP زبان UIL همچنین شامل نوع داده‌ی \fBANY\fP است که برای غیرفعال کردن بررسی انواع داده در زمان کامپایل استفاده می‌شود\&. .SS "رشته‌های لفظی (String Literals)" .iX "UIL" "string literals" .iX "UIL module" "string literals" .iX "UIL specification file" "string literals" .iX "Values" "string literals" .PP یک رشته‌ی لفظی دنباله‌ای از صفر یا چند نویسه‌ی 8 بیتی یا 16 بیتی یا ترکیبی از آن‌هاست که با \fB\&'\fP (علامت‌های نقل‌قول تکی) یا \fB"\fP (علامت‌های نقل‌قول جفتی) احاطه شده‌اند\&. رشته‌های لفظی همچنین می‌توانند حاوی نویسه‌های چندبایتی احاطه‌شده با علامت‌های نقل‌قول جفتی باشند\&. طول رشته‌های لفظی نمی‌تواند بیش از 2000 نویسه باشد\&. .PP یک رشته‌ی لفظی تک‌گیومه‌ای (با علامت نقل‌قول تکی) می‌تواند در چند خط مبدأ امتداد یابد\&. برای ادامه‌ی یک رشته‌ی لفظی تک‌گیومه‌ای، خط ادامه‌یافته را با یک \fB\e\fP (بک‌اسلش) پایان دهید\&. رشته با نخستین نویسه در خط بعدی ادامه می‌یابد\&. .PP رشته‌های لفظی دوگیومه‌ای (با علامت نقل‌قول جفتی) نمی‌توانند در چند خط مبدأ امتداد یابند\&. (از آنجا که رشته‌های دوگیومه‌ای می‌توانند حاوی توالی‌های گریز و دیگر نویسه‌های خاص باشند، نمی‌توانید از نویسه‌ی بک‌اسلش برای مشخص کردن ادامه‌ی رشته استفاده کنید\&.) برای ساخت مقداری رشته‌ای که باید در چند خط مبدأ امتداد یابد، از عملگر الحاق که در ادامه‌ی این بخش شرح داده شده است استفاده کنید\&. .PP نحو (syntax) یک رشته‌ی لفظی یکی از موارد زیر است: .PP .nf \&'[\fIcharacter_string\fP]\&' [#\fIchar_set\fP]"[\fIcharacter_string\fP]" .fi .PP هر دو شکل رشته، یک مجموعه نویسه را با یک مقدار رشته‌ای مرتبط می‌سازند\&. زبان UIL از قواعد زیر برای تعیین مجموعه نویسه و قالب ذخیره‌سازی رشته‌های لفظی استفاده می‌کند: .IP " \(bu" 6 رشته‌ای که به صورت \fB\&'\fP\fIstring\fP\fB\&'\fP اعلان شود، معادل با \fB#\fP\fIcur_charset\fP\fB"\fP\fIstring\fP\fB"\fP است؛ جایی که \fIcur_charset\fP بخش مجموعه کد (codeset) از مقدار متغیر محیطی \fBLANG\fP (در صورت تنظیم بودن) یا مقدار \fBXmFALLBACK_CHARSET\fP خواهد بود (اگر \fBLANG\fP تنظیم نشده باشد یا فاقد مؤلفه‌ی مجموعه کد باشد)\&. به طور پیش‌فرض، \fBXmFALLBACK_CHARSET\fP برابر با \fBISO8859\-1\fP (معادل با \fBISO_LATIN1\fP) است، اما ممکن است توزیع‌کنندگان پیش‌فرض دیگری تعریف کرده باشند\&. .IP " \(bu" 6 رشته‌ای که به صورت \fB"\fP\fIstring\fP\fB"\fP اعلان شود، معادل با \fB#\fP\fIchar_set\fP\fB"\fP\fIstring\fP\fB"\fP خواهد بود اگر \fIchar_set\fP را به عنوان مجموعه نویسه‌ی پیش‌فرض ماژول مشخص کرده باشید\&. اگر هیچ مجموعه نویسه‌ی پیش‌فرضی برای ماژول مشخص نشده باشد، آن‌گاه اگر گزینه‌ی \fB\-s\fP به دستور \fBuil\fP داده شود یا \fBuse_setlocale_flag\fP برای کامپایلر قابل فراخوانی، \fBUil()\fP، تنظیم شده باشد، رشته به عنوان رشته‌ای در لوکال جاری تفسیر خواهد شد\&. این بدان معناست که رشته با فراخوانی \fIsetlocale\fP در لوکال کاربر تجزیه می‌شود، مجموعه نویسه‌ی آن \fBXmFONTLIST_DEFAULT_TAG\fP است، و اگر رشته به یک رشته‌ی مرکب تبدیل شود، به عنوان یک بخش متنی با کدگذاری لوکال ذخیره می‌گردد\&. در غیر این صورت، \fB"\fP\fIstring\fP\fB"\fP معادل با \fB#\fP\fIcur_charset\fP\fB"\fP\fIstring\fP\fB"\fP است که در آن \fIcur_charset\fP همان‌گونه که برای رشته‌های تک‌گیومه‌ای شرح داده شد تفسیر می‌شود\&. .IP " \(bu" 6 رشته‌ای به فرم \fB"\fP\fIstring\fP\fB"\fP یا \fB#\fP\fIchar_set\fP\fB"\fP\fIstring\fP\fB"\fP به عنوان یک رشته‌ی پایان‌یافته با تهی (null\-terminated) ذخیره می‌شود\&. .PP اگر \fIchar_set\fP در رشته‌ای با فرم بالا، یک مجموعه نویسه‌ی داخلی یا تعریف‌شده توسط کاربر نباشد، مجموعه نویسه‌ی رشته بر روی \fBXmFONTLIST_DEFAULT_TAG\fP تنظیم خواهد شد و یک پیام اطلاع‌رسانی به کاربر صادر می‌شود تا اعلام کند این جایگزینی انجام شده است\&. .PP جدول زیر مجموعه‌های نویسه‌ی پشتیبانی‌شده توسط کامپایلر UIL را برای رشته‌های لفظی فهرست می‌کند\&. توجه داشته باشید که چندین نام UIL به یک مجموعه نویسه‌ی یکسان نگاشت می‌شوند\&. در برخی موارد، نام UIL بر نحوه‌ی خواندن رشته‌های لفظی تأثیر می‌گذارد\&. برای نمونه، رشته‌هایی که با نام مجموعه نویسه‌ی UIL مختوم به \fB_LR\fP مشخص می‌شوند، به صورت چپ‌به‌راست خوانده می‌شوند\&. نام‌هایی که به اعداد متفاوتی ختم می‌شوند نمایانگر قلم‌های متفاوتی هستند (برای نمونه، ISO_LATIN1 یا ISO_LATIN6)\&. تمامی مجموعه‌های نویسه در این جدول با 8 بیت نمایش داده می‌شوند\&. .TS tab() box; c s l l. \fBمجموعه‌های نویسه‌ی پشتیبانی‌شده (Supported Character Sets)\fP __ \fBنام UIL (UIL Name)\fP\fBتوضیحات (Description)\fP __ \fBISO_LATIN1\fPGL: ASCII، GR: مکمل Latin\-1 (Latin\-1 Supplement) \fBISO_LATIN2\fPGL: ASCII، GR: مکمل Latin\-2 (Latin\-2 Supplement) \fBISO_ARABIC\fPT{ GL: ASCII، GR: مکمل Latin\-Arabic (Latin\-Arabic Supplement) T} \fBISO_LATIN6\fPT{ GL: ASCII، GR: مکمل Latin\-Arabic (Latin\-Arabic Supplement) T} \fBISO_GREEK\fPT{ GL: ASCII، GR: مکمل Latin\-Greek (Latin\-Greek Supplement) T} \fBISO_LATIN7\fPT{ GL: ASCII، GR: مکمل Latin\-Greek (Latin\-Greek Supplement) T} \fBISO_HEBREW\fPT{ GL: ASCII، GR: مکمل Latin\-Hebrew (Latin\-Hebrew Supplement) T} \fBISO_LATIN8\fPT{ GL: ASCII، GR: مکمل Latin\-Hebrew (Latin\-Hebrew Supplement) T} \fBISO_HEBREW_LR\fPT{ GL: ASCII، GR: مکمل Latin\-Hebrew (Latin\-Hebrew Supplement) T} \fBISO_LATIN8_LR\fPT{ GL: ASCII، GR: مکمل Latin\-Hebrew (Latin\-Hebrew Supplement) T} \fBJIS_KATAKANA\fPGL: JIS Roman، GR: کاتاکانا (JIS Katakana) .TE .PP در ادامه، قواعد تجزیه برای هر یک از مجموعه‌های نویسه آمده است: .IP "تمامی\ مجموعه‌های\ نویسه (All\ character\ sets)" 10 کدهای نویسه در محدوده‌ی 00\&.\&.\&.1F، 7F و 80\&.\&.\&.9F نویسه‌های کنترلی هستند، شامل هر دو بایتِ نویسه‌های 16 بیتی\&. کامپایلر این موارد را به عنوان نویسه‌های غیرمجاز علامت‌گذاری می‌کند\&. .IP "\fBISO_LATIN1\ ISO_LATIN2\ ISO_LATIN3\ ISO_GREEK\ ISO_LATIN4\fP" 10 این مجموعه‌ها از چپ به راست تجزیه می‌شوند\&. توالی‌های گریز برای رشته‌های پایان‌یافته با تهی نیز توسط این مجموعه‌های نویسه پشتیبانی می‌شوند\&. .IP "\fBISO_HEBREW\ ISO_ARABIC\ ISO_LATIN8\fP" 10 این مجموعه‌ها از راست به چپ تجزیه می‌شوند\&. برای نمونه، رشته‌ی \f(CW#ISO_HEBREW"012345"\fP یک رشته‌ی اولیه به صورت "543210" با مجموعه نویسه‌ی \fBISO_HEBREW\fP تولید خواهد کرد\&. جهت رشته برای چنین رشته‌ای راست‌به‌چپ خواهد بود، بنابراین هنگام رندر شدن، رشته به صورت "012345\&." نمایان خواهد شد\&. توالی‌های گریز برای رشته‌های پایان‌یافته با تهی نیز توسط این مجموعه‌های نویسه پشتیبانی می‌شوند، و نویسه‌هایی که توالی‌های گریز را می‌سازند به ترتیب چپ‌به‌راست هستند\&. برای نمونه، شما باید \en را وارد کنید، نه n\e را\&. .IP "\fBISO_HEBREW_LR\ ISO_ARABIC_LR\ ISO_LATIN8_LR\fP" 10 این مجموعه‌ها از چپ به راست تجزیه می‌شوند\&. برای نمونه، رشته‌ی \f(CW#ISO_HEBREW_LR"012345"\fP یک رشته‌ی اولیه به صورت "012345" با مجموعه نویسه‌ی \fBISO_HEBREW\fP تولید می‌کند\&. با این حال، جهت رشته برای چنین رشته‌ای همچنان راست‌به‌چپ خواهد بود، بنابراین هنگام رندر شدن، به صورت "543210\&." نمایان می‌شود\&. به بیان دیگر، نویسه‌ها در اصل به \fIهمان ترتیبی\fP تایپ شده‌اند که در عبری تایپ می‌شدند (اگرچه در عبری، تایپیست از ویرایشگر متنی استفاده می‌کرد که از راست به چپ حرکت می‌کرد)\&. توالی‌های گریز برای رشته‌های پایان‌یافته با تهی نیز توسط این مجموعه‌های نویسه پشتیبانی می‌شوند\&. .IP "\fBJIS_KATAKANA\fP" 10 این مجموعه از چپ به راست تجزیه می‌شود\&. توالی‌های گریز برای رشته‌های پایان‌یافته با تهی نیز توسط این مجموعه نویسه پشتیبانی می‌شوند\&. توجه داشته باشید که ممکن است \fB\e\fP (بک‌اسلش) به صورت نماد ین نمایش داده شود\&. .PP علاوه بر تعیین قواعد تجزیه برای رشته‌ها، اطلاعات مجموعه نویسه به عنوان یک ویژگی از رشته‌ی مرکب باقی می‌ماند\&. اگر رشته درون رشته‌ای متشکل از چندین بخش الحاق‌شده گنجانده شود، اطلاعات مجموعه نویسه همراه با همان بخش رشته گنجانده می‌شود\&. این امر اطلاعات مورد نیاز را در اختیار جعبه‌ابزار موتیف (Motif Toolkit) قرار می‌دهد تا رشته‌ی مرکب را رمزگشایی کرده و قلم (font) مناسب را برای نمایش رشته انتخاب کند\&. .PP برای رابط کاربری برنامه‌ای که تنها به زبان انگلیسی نمایش داده می‌شود، زبان UIL به شما امکان می‌دهد تمایز میان این دو کاربرد رشته‌ها را نادیده بگیرید\&. کامپایلر بر اساس بافت تشخیص می‌دهد که چه زمانی یک رشته باید به عنوان یک رشته‌ی پایان‌یافته با تهی یا به عنوان یک رشته‌ی مرکب ارسال شود\&. .PP کامپایلر UIL اطلاعات کافی درباره‌ی مجموعه‌های نویسه‌ی گوناگون دارد تا بتواند رشته‌های لفظی را به درستی تجزیه کند\&. همچنین اگر از یک رشته‌ی مرکب در بافتی استفاده کنید که فقط از رشته‌های پایان‌یافته با تهی پشتیبانی می‌کند، کامپایلر خطاهایی صادر می‌نماید\&. .PP از آنجا که نام‌های مجموعه‌های نویسه کلیدواژه هستند، در صورتی که حالت حساس به بزرگی و کوچکی حروف فعال باشد، باید آن‌ها را با حروف کوچک بنویسید\&. اگر نام‌ها به بزرگی و کوچکی حروف حساس نباشند، نام‌های مجموعه‌های نویسه می‌توانند با حروف بزرگ، حروف کوچک یا ترکیبی از هر دو نوشته شوند\&. .PP علاوه بر مجموعه‌های نویسه‌ی داخلی شناخته‌شده توسط UIL، می‌توانید با تابع \fBCHARACTER_SET\fP مجموعه‌های نویسه‌ی خود را تعریف کنید\&. شما می‌توانید از تابع \fBCHARACTER_SET\fP در هر جایی که مشخص کردن مجموعه نویسه مجاز است استفاده نمایید\&. .PP رشته‌های لفظی می‌توانند شامل نویسه‌هایی باشند که بیت هشتم (مرتبه‌بالا) آن‌ها تنظیم شده است\&. شما نمی‌توانید نویسه‌های کنترلی (00\-1F، 7F و 80\-9F) را مستقیماً در یک رشته‌ی لفظی تک‌گیومه‌ای تایپ کنید\&. با این حال، می‌توانید این نویسه‌ها را با توالی‌های گریز نمایش دهید\&. فهرست زیر توالی‌های گریز را برای نویسه‌های خاص نشان می‌دهد\&. .iX "UIL" "escape sequences" .iX "Escape sequences" .IP "\fB\eb\fP" 10 پس‌بر (Backspace) .IP "\fB\ef\fP" 10 برگه‌پران (Form\-feed) .IP "\fB\en\fP" 10 خط جدید (Newline) .IP "\fB\er\fP" 10 بازگشت به ابتدای خط (Carriage return) .IP "\fB\et\fP" 10 تب افقی (Horizontal tab) .IP "\fB\ev\fP" 10 تب عمودی (Vertical tab) .IP "\fB\e\&'\fP" 10 علامت نقل‌قول تکی (Single quotation mark) .IP "\fB\e""\fP" 10 علامت نقل‌قول جفتی (Double quotation mark) .IP "\fB\e\e\fP" 10 بک‌اسلش (Backslash) .IP "\fB\e\fP\fIinteger\fP\^\fB\e\fP" 10 نویسه‌ای که بازنمایی داخلی آن توسط \fIinteger\fP مشخص شده است (در محدوده‌ی 0 تا 255 ده‌دهی) .PP توجه داشته باشید که توالی‌های گریز در رشته‌هایی که در لوکال جاری تجزیه می‌شوند (رشته‌های محلی‌سازی‌شده)، به صورت لفظی پردازش می‌گردند\&. .PP کامپایلر UIL نویسه‌های خط جدید را در رشته‌های مرکب پردازش نمی‌کند\&. تأثیر یک نویسه‌ی خط جدید در یک رشته‌ی مرکب تنها به مجموعه نویسه‌ی آن رشته بستگی دارد، و تضمینی نیست که نتیجه‌ی آن یک رشته‌ی چندخطی باشد\&. .PP \fBرشته‌های لفظی مرکب (Compound String Literals)\fP .PP یک رشته‌ی مرکب متشکل از رشته‌ای از نویسه‌های 8 بیتی، 16 بیتی، یا چندبایتی، یک مجموعه نویسه‌ی نام‌گذاری‌شده، و یک جهت نوشتار است\&. نوع داده‌ی UIL آن \fBcompound_string\fP می‌باشد\&. .PP جهت نوشتار یک رشته‌ی مرکب به طور ضمنی از روی مجموعه نویسه‌ی مشخص‌شده برای رشته تعیین می‌شود\&. شما می‌توانید با استفاده از تابع \fBCOMPOUND_STRING\fP به طور صریح جهت نوشتار را برای یک رشته‌ی مرکب تنظیم کنید\&. .PP یک رشته‌ی مرکب می‌تواند از دنباله‌ای از رشته‌های مرکب الحاق‌شده، رشته‌های پایان‌یافته با تهی، یا ترکیبی از هر دو تشکیل شود، که هر یک می‌تواند ویژگی مجموعه نویسه و جهت نوشتار متفاوتی داشته باشد\&. برای ایجاد دنباله‌ای از رشته‌های مرکب، از عملگر الحاق & (امپرسند) استفاده کنید\&. .PP هر رشته در دنباله، شامل اطلاعات مجموعه نویسه و جهت نوشتار، ذخیره می‌شود\&. .PP به طور کلی، یک رشته‌ی لفظی زمانی در فایل UID به عنوان یک رشته‌ی مرکب ذخیره می‌شود که رشته‌ی لفظی متشکل از رشته‌های الحاق‌شده با مجموعه نویسه‌ها یا جهت‌های نوشتار متفاوت باشد، یا زمانی که از رشته برای تعیین مقداری برای آرگومانی استفاده کنید که نیازمند یک مقدار رشته‌ی مرکب است\&. اگر می‌خواهید تضمین کنید که یک رشته‌ی لفظی به عنوان یک رشته‌ی مرکب ذخیره می‌شود، باید از تابع \fBCOMPOUND_STRING\fP استفاده کنید\&. .PP \fBمیزان مصرف حافظه برای رشته‌های لفظی (Data Storage Consumption for String Literals)\fP .PP نحوه‌ی ذخیره‌سازی یک رشته‌ی لفظی در فایل UID به چگونگی اعلان و استفاده‌ی شما از رشته بستگی دارد\&. کامپایلر UIL در صورتی که از رشته برای تعیین مقدار آرگومانی استفاده کنید که به یک رشته‌ی مرکب نیاز دارد، به طور خودکار رشته‌ی پایان‌یافته با تهی را به یک رشته‌ی مرکب تبدیل می‌کند\&. با این حال، این تبدیل از نظر میزان مصرف فضای ذخیره‌سازی پرهزینه است\&. .PP رشته‌های لفظی \fBPRIVATE\fP\^، \fBEXPORTED\fP و \fBIMPORTED\fP هنگام اعلان رشته‌ی لفظی، نیازمند فضایی برای یک بار تخصیص هستند؛ پس از آن، فضای ذخیره‌سازی تنها برای هر ارجاع به آن رشته‌ی لفظی لازم خواهد بود\&. رشته‌های لفظی که به صورت درون‌خطی (in\-line) اعلان می‌شوند، هم برای تخصیص و هم برای ارجاع نیازمند فضای ذخیره‌سازی هستند\&. .PP جدول زیر میزان مصرف فضای ذخیره‌سازی داده را برای رشته‌های لفظی خلاصه می‌کند\&. فضای مورد نیاز برای یک تخصیص، شامل یک بخش ثابت و یک بخش متغیر است\&. بخش ثابتِ یک تخصیص تقریباً برابر با فضای مورد نیاز برای یک ارجاع است (چند بایت)\&. فضای مصرف‌شده توسط بخش متغیر به اندازه‌ی مقدار رشته‌ی لفظی (یعنی طول رشته) بستگی دارد\&. برای صرفه‌جویی در فضای ذخیره‌سازی، از اعلان رشته‌های لفظی به شیوه‌ای که منجر به تخصیص حافظه در هر بار استفاده می‌شود، خودداری کنید\&. .TS tab() box; c s s s l| l| l| l ^| ^| ^| l. T{ \fBمیزان مصرف حافظه برای رشته‌های لفظی (Data Storage Consumption for String Literals)\fP T} ____ \fBاعلان (Declaration)\fP\fBنوع داده (Data Type)\fP\fBکاربرد به عنوان (Used As)\fP\fBفضای ذخیره‌سازی مورد نیاز\fP   \fBدر هر بار استفاده (Per Use)\fP ____ In\-lineNull\-terminatedNull\-terminatedT{ یک تخصیص و یک ارجاع (درون ماژول) T} PrivateNull\-terminatedNull\-terminatedیک ارجاع (درون ماژول) ExportedNull\-terminatedNull\-terminatedT{ یک ارجاع (درون سلسله‌مراتب UID) T} ImportedNull\-terminatedNull\-terminatedT{ یک ارجاع (درون سلسله‌مراتب UID) T} In\-lineNull\-terminatedCompoundT{ یک تخصیص و یک ارجاع (درون ماژول) T} PrivateNull\-terminatedCompoundT{ یک تخصیص و یک ارجاع (درون ماژول) T} ExportedNull\-terminatedCompoundT{ یک ارجاع (درون سلسله‌مراتب UID) T} ImportedNull\-terminatedCompoundT{ یک ارجاع (درون سلسله‌مراتب UID) T} In\-lineCompoundCompoundT{ یک تخصیص و یک ارجاع (درون ماژول) T} PrivateCompoundCompoundیک ارجاع (درون ماژول) ExportedCompoundCompoundT{ یک ارجاع (درون سلسله‌مراتب UID) T} ImportedCompoundCompoundT{ یک ارجاع (درون سلسله‌مراتب UID) T} .TE .SS "اعداد صحیح لفظی (Integer Literals)" .iX "UIL" "integer literals" .iX "UIL module" "integer literals" .iX "UIL specification file" "integer literals" .iX "Values" "integer literals" .PP یک عدد صحیح لفظی بیانگر مقدار یک عدد کامل (صحیح) است\&. اعداد صحیح لفظی به شکل یک علامت اختیاری و به دنبال آن یک یا چند رقم ده‌دهی هستند\&. یک عدد صحیح لفظی نباید دارای فاصله یا کامای داخلی باشد\&. .PP اعداد صحیح لفظی در فایل UID به عنوان اعداد صحیح ۳۲ بیتی ذخیره می‌شوند\&. اعداد صحیح لفظی صادرشده و واردشده هنگام اعلان به یک تخصیص حافظه نیاز دارند؛ پس از آن، برای هر ارجاع به آن مقدار لفظی تنها چند بایت فضای ذخیره‌سازی لازم است\&. اعداد صحیح لفظی خصوصی و آن‌هایی که به صورت درون‌خطی اعلان شده‌اند، برای هر بار استفاده نیازمند تخصیص حافظه و فضای ذخیره‌سازی ارجاع هستند\&. برای صرفه‌جویی در فضای ذخیره‌سازی، از اعلان اعداد صحیح لفظی به گونه‌ای که منجر به تخصیص حافظه در هر بار استفاده شود، خودداری کنید\&. .PP جدول زیر میزان مصرف فضای ذخیره‌سازی داده را برای اعداد صحیح لفظی نشان می‌دهد\&. .TS tab() box; c s l| l. T{ \fBمیزان مصرف فضای ذخیره‌سازی برای اعداد صحیح لفظی\fP T} __ \fBاعلان (Declaration)\fP\fBالزامات ذخیره‌سازی به ازای هر استفاده\fP __ In-lineT{ یک تخصیص و یک ارجاع (درون ماژول) T} PrivateT{ یک تخصیص و یک ارجاع (درون ماژول) T} ExportedT{ یک ارجاع (درون سلسله‌مراتب UID) T} ImportedT{ یک ارجاع (درون سلسله‌مراتب UID) T} .TE .SS "مقدارهای بولی لفظی (Boolean Literal)" .PP .iX "UIL" "Boolean literals" .iX "UIL module" "Boolean literals" .iX "UIL specification file" "Boolean literals" .iX "Values" "Boolean literals" .iX "Boolean literals" یک مقدار بولی لفظی بیانگر مقدار True (کلیدواژه رزروشده \fBTRUE\fP یا \fBOn\fP) یا False (کلیدواژه رزروشده \fBFALSE\fP یا \fBOff\fP) است\&. این کلیدواژه‌ها تابع قواعد حساسیت به بزرگی و کوچکی حروف هستند\&. .PP در یک فایل UID، \fBTRUE\fP با مقدار عدد صحیح 1 و \fBFALSE\fP با مقدار عدد صحیح 0 (صفر) نمایش داده می‌شود\&. .PP میزان مصرف فضای ذخیره‌سازی داده برای مقدارهای بولی لفظی مشابه اعداد صحیح لفظی است\&. .SS "اعداد ممیز شناور لفظی (Floating-Point Literal)" .iX "UIL" "floating-point literals" .iX "UIL module" "floating-point literals" .iX "UIL specification file" "floating-point literals" .iX "Values" "floating-point literals" .PP یک عدد ممیز شناور لفظی بیانگر مقدار یک عدد حقیقی (یا شناور) است\&. اعداد ممیز شناور لفظی ساختار زیر را دارند: .PP .nf [+|\-][\fIinteger\fP]\&.\fIinteger\fP[E|e[+|\-]\fIexponent\fP] .fi .PP برای بیشترین سازگاری و انتقال‌پذیری، یک عدد ممیز شناور لفظی می‌تواند مقادیر در محدوده 1\&.0E\-37 تا 1\&.0E+37 را با حداقل 6 رقم بااهمیت نمایش دهد\&. در بسیاری از ماشین‌ها این محدوده با ارقام بااهمیت بیشتری گسترده‌تر خواهد بود\&. یک عدد ممیز شناور لفظی نباید دارای فاصله یا کامای داخلی باشد\&. .PP اعداد ممیز شناور لفظی در فایل UID به عنوان اعداد ممیز شناور با دقت مضاعف ذخیره می‌شوند\&. جدول زیر مثال‌هایی از نشانه‌گذاری‌های معتبر و نامعتبر ممیز شناور را برای کامپایلر UIL نشان می‌دهد\&. .TS tab() box; c s l l. \fBFloating Point Literals\fP __ \fBValid Floating-Point Literals\fP\fBInvalid Floating-Point Literals\fP __ 1\&.01e1 (بدون نقطه ممیز) T{ 3\&.1415E\-2 (برابر است با \&.031415) T}2\&.87 e6 (فاصله‌های خالی داخلی) T{ \-6\&.29e7 (برابر است با \-62900000) T}2\&.0e100 (خارج از محدوده) .TE .PP میزان مصرف فضای ذخیره‌سازی داده برای اعداد ممیز شناور لفظی مشابه اعداد صحیح لفظی است\&. .PP .iX "UIL" "ANY value" .iX "UIL module" "ANY value" .iX "UIL specification file" "ANY value" .iX "Functions" "ANY value" .iX "ANY value" هدف از نوع داده \fBANY\fP غیرفعال کردن ویژگی بررسی نوع داده در کامپایلر UIL است\&. می‌توانید از نوع داده \fBANY\fP برای موارد زیر استفاده کنید: .IP " \(bu" 6 مشخص کردن نوع برچسب یک رویه فراخوانی بازگشتی (callback) .IP " \(bu" 6 مشخص کردن نوع یک آرگومان تعریف‌شده توسط کاربر .PP می‌توانید زمانی از نوع داده \fBANY\fP استفاده کنید که نیازمند استفاده از نوعی باشید که توسط کامپایلر UIL پشتیبانی نمی‌شود، یا زمانی که بخواهید محدودیت‌های نوع داده اعمال‌شده توسط کامپایلر کاهش یابد\&. برای نمونه، ممکن است بخواهید یک ویجت را با آرگومانی تعریف کنید که بسته به شرایط زمان اجرا، بتواند انواع مختلفی از مقادیر را بپذیرد\&. .PP اگر مشخص کنید که یک آرگومان مقداری از نوع \fBANY\fP می‌پذیرد، کامپایلر نوع مقدار مشخص‌شده برای آن آرگومان را بررسی نمی‌کند؛ بنابراین، هنگام تعیین مقدار برای آرگومانی از نوع \fBANY\fP باید دقت کافی داشته باشید\&. اگر مقداری با نوع داده‌ای ارسال کنید که ویجت برای آن آرگومان پشتیبانی نمی‌کند، ممکن است در زمان اجرا نتایج غیرمنتظره‌ای دریافت کنید\&. .SS "عبارت‌ها (Expressions)" .PP .iX "UIL" "expressions" .iX "expressions" زبان UIL شامل عبارت‌های مقداری در زمان کامپایل است\&. این عبارت‌ها می‌توانند حاوی ارجاع به سایر مقادیر UIL باشند، اما نمی‌توانند دارای ارجاع به جلو باشند\&. .PP جدول زیر مجموعه‌ای از عملگرهای UIL را فهرست می‌کند که به شما امکان می‌دهند مقادیر صحیح، حقیقی و بولی را بر اساس سایر مقادیر تعریف‌شده درون ماژول UIL ایجاد کنید\&. در این جدول، تقدم 1 بالاترین است\&. .TS tab() box; l s s s l| l| l| l c| l| l| c. \fBValid Operators\fP ____ \fBOperator\fP\fBOperand Types\fP\fBMeaning\fP\fBPrecedence\fP ____ ~Booleanنقیض1 integerمکمل یک \-floatمنفی کردن1 integerمنفی کردن +floatNOP1 integerNOP *float,floatضرب2 integer,integerضرب /float,floatتقسیم2 integer,integerتقسیم +float,floatجمع3 integer,integerجمع \-float,floatتفریق3 integer,integerتفریق >>integer,integerشیفت به راست4 <<integer,integerشیفت به چپ4 &Boolean,Booleanو منطقی5 integer,integerو بیتی string,stringپیوند رشته‌ها |Boolean,Booleanیا منطقی6 integer,integerیا بیتی ^Boolean,Booleanیا مانعه‌الجمع6 integer,integerیا مانعه‌الجمع بیتی .TE .PP یک رشته می‌تواند یک رشته مرکب تکی یا توالی‌ای از رشته‌های مرکب باشد\&. اگر دو رشته‌ی پیوندیافته ویژگی‌های متفاوتی (مانند جهت نگارش یا مجموعه نویسه‌ها) داشته باشند، نتیجه‌ی پیوند یک رشته مرکب چندبخشی خواهد بود\&. .PP رشته حاصل از پیوند، یک رشته پایان‌یافته با تهی است مگر اینکه یک یا چند مورد از شرایط زیر برقرار باشد: .IP " \(bu" 6 یکی از عملوندها یک رشته مرکب باشد .IP " \(bu" 6 عملوندها ویژگی‌های مجموعه نویسه متفاوتی داشته باشند .IP " \(bu" 6 عملوندها جهت‌های نگارش متفاوتی داشته باشند .PP در این صورت رشته حاصل یک رشته مرکب خواهد بود\&. شما نمی‌توانید از مقادیر واردشده یا صادرشده به عنوان عملوندهای عملگر پیوند استفاده کنید\&. .PP نتیجه هر عملگر همان نوع عملوندهایش را دارد\&. نمی‌توانید بدون استفاده از توابع تبدیل، انواع مختلف را در یک عبارت ترکیب کنید\&. .PP می‌توانید از پرانتزها برای نادیده گرفتن اولویت عادی عملگرها استفاده کنید\&. در توالی‌ای از عملگرهای یکانی، عملیات به ترتیب از راست به چپ انجام می‌شوند\&. برای نمونه، \fB\- + \-A\fP معادل \fB\-(\+(\-A))\fP است\&. در توالی‌ای از عملگرهای دوتایی با اولویت یکسان، عملیات به ترتیب از چپ به راست انجام می‌شوند\&. برای نمونه، \fBA*B/C*D\fP معادل \fB((A*B)/C)*D\fP است\&. .PP یک اعلان مقدار، به یک مقدار نام اختصاص می‌دهد\&. شما نمی‌توانید مقدار آن نام را در یک اعلان مقدار بعدی دوباره تعریف کنید\&. می‌توانید از مقداری که حاوی عملگرها و توابع است در هر کجای ماژول UIL که استفاده از مقدار مجاز است، استفاده کنید\&. نمی‌توانید از مقادیر واردشده به عنوان عملوند در عبارت‌ها استفاده کنید\&. .iX "UIL" "data type conversions" .iX "Data type" "conversions" .iX "Conversions" "data type" .PP چندین مورد از عملگرهای دوتایی برای چندین نوع داده تعریف شده‌اند\&. برای نمونه، عملگر ضرب (\fB*\fP) هم برای عملوندهای ممیز شناور و هم برای عملوندهای عدد صحیح تعریف شده است\&. .PP برای اینکه کامپایلر UIL بتواند این عملیات دوتایی را انجام دهد، هر دو عملوند باید از یک نوع باشند\&. اگر عملوندهایی از انواع داده مختلف ارائه دهید، کامپایلر UIL به طور خودکار یکی از عملوندها را بر اساس قواعد تبدیل زیر به نوع عملوند دیگر تبدیل می‌کند: .IP " \(bu" 6 اگر عملوندها یک عدد صحیح و یک بولی باشند، مقدار بولی به یک عدد صحیح تبدیل می‌شود\&. .IP " \(bu" 6 اگر عملوندها یک عدد صحیح و یک ممیز شناور باشند، عدد صحیح به یک ممیز شناور تبدیل می‌شود\&. .IP " \(bu" 6 اگر عملوندها یک ممیز شناور و یک بولی باشند، مقدار بولی به یک ممیز شناور تبدیل می‌شود\&. .PP همچنین می‌توانید نوع داده یک مقدار را با استفاده از یکی از توابع تبدیل \fBINTEGER\fP\^، \fBFLOAT\fP یا \fBSINGLE_FLOAT\fP به صورت صریح تبدیل کنید\&. .SS "توابع (Functions)" .PP .iX "UIL Functions" .iX "UIL module" "functions" .iX "UIL specification file" "functions" .iX "Functions" زبان UIL توابعی را برای تولید انواع مقادیر زیر ارائه می‌دهد: .IP " \(bu" 6 مجموعه‌های نویسه (Character sets) .IP " \(bu" 6 نمادهای کلید (Keysyms) .IP " \(bu" 6 رنگ‌ها .IP " \(bu" 6 نقشه‌بیت‌ها (Pixmaps) .IP " \(bu" 6 اعداد ممیز شناور با دقت یگانه (Single\-precision) .IP " \(bu" 6 اعداد ممیز شناور با دقت مضاعف (Double\-precision) .IP " \(bu" 6 قلم‌ها (Fonts) .IP " \(bu" 6 مجموعه‌های قلم (Fontsets) .IP " \(bu" 6 جدول‌های قلم .IP " \(bu" 6 رشته‌های ترکیبی (Compound strings) .IP " \(bu" 6 جدول‌های رشته‌های ترکیبی .IP " \(bu" 6 جدول‌های رشته‌ای ASCIZ (پایان‌یافته با null) .IP " \(bu" 6 رشته‌های نویسه پهن (Wide character strings) .IP " \(bu" 6 نام‌های کلاس ویجت .IP " \(bu" 6 جدول‌های عدد صحیح .IP " \(bu" 6 آرگومان‌ها .IP " \(bu" 6 علت‌ها (Reasons) .IP " \(bu" 6 جدول‌های ترجمه (Translation tables) .PP به یاد داشته باشید که تمامی مثال‌های بخش‌های زیر حالت غیرحساس به حروف کوچک و بزرگ (case\-insensitive) را فرض می‌کنند\&. کلمات کلیدی با حروف بزرگ نشان داده شده‌اند تا از نام‌های مشخص‌شده توسط کاربر که با حروف کوچک نمایش یافته‌اند، متمایز شوند\&. استفاده از حروف بزرگ در حالت غیرحساس به حروف الزامی نیست\&. در حالت حساس به حروف (case\-sensitive)، کلمات کلیدی باید با حروف کوچک نوشته شوند\&. .IP "\fBCHARACTER_SET(\fP\fIstring_expression[\fP,\ property[,\ \&.\&.\&.]]\fB)\fP" 10 .iX "UIL" "user-defined character set" .iX "UIL module" "user-defined character set" .iX "UIL specification file" "user-defined character set" .iX "UIL Functions" "CHARACTER_SET" .iX "User-defined character set" .iX "Character set" "user-defined" .iX "CHARACTER_SET function" .IP "" 10 شما می‌توانید مجموعه‌های نویسه سفارشی خود را با تابع \fBCHARACTER_SET\fP تعریف کنید\&. شما می‌توانید از تابع \fBCHARACTER_SET\fP در هر جایی که مشخص کردن مجموعه نویسه مجاز باشد، استفاده نمایید\&. .IP "" 10 نتیجه تابع \fBCHARACTER_SET\fP یک مجموعه نویسه با نام \fBstring_expression\fP و ویژگی‌های مشخص‌شده توسط شما است\&. \fBstring_expression\fP باید یک رشته پایان‌یافته با null باشد\&. می‌توانید برای تعیین ویژگی‌های مجموعه نویسه حاصل، به صورت اختیاری یک یا هر دو عبارت زیر را درج کنید: .PP .nf RIGHT_TO_LEFT = \fIboolean_expression\fP SIXTEEN_BIT = \fIboolean_expression\fP .fi .IP "" 10 عبارت \fBRIGHT_TO_LEFT\fP جهت نوشتار پیش‌فرض رشته را در صورت True بودن \fIboolean_expression\fP از راست به چپ، و در غیر این صورت از چپ به راست تنظیم می‌کند\&. .IP "" 10 عبارت \fBSIXTEEN_BIT\fP به رشته‌های مرتبط با این مجموعه نویسه اجازه می‌دهد در صورت True بودن \fIboolean_expression\fP به عنوان نویسه‌های ۱۶ بیتی، و در غیر این صورت به عنوان نویسه‌های ۸ بیتی تفسیر شوند\&. .IP "\fBKEYSYM(\fP\fIstring_literal\fP\fB)\fP" 10 .iX "UIL" "keysyms" .iX "UIL module" "keysyms" .iX "UIL specification file" "keysyms" .iX "UIL Functions" "KEYSYM" .iX "Keysyms" "defining in UIL" .IP "" 10 تابع \fBKEYSYM\fP برای مشخص کردن یک keysym جهت منبع مِنمونیک (mnemonic resource) به کار می‌رود\&. \fIstring_literal\fP باید حاوی یک نام معتبر \fBKeySym\fP باشد\&. (برای اطلاعات بیشتر به XStringToKeysym(3 X11) مراجعه کنید\&.) .IP "\fBCOLOR(\fP\fBstring_expression\fP[\fB,FOREGROUND\fP|\fBBACKGROUND\fP]\fB)\fP" 10 .iX "UIL" "color values" .iX "UIL module" "color values" .iX "UIL specification file" "color values" .iX "UIL Functions" "COLOR" .iX "Color values" "defining in UIL" .IP "" 10 تابع \fBCOLOR\fP از تعریف رنگ‌ها پشتیبانی می‌کند\&. با استفاده از تابع \fBCOLOR\fP می‌توانید مقداری را برای تعیین یک رنگ اختصاص داده و سپس از آن مقدار برای آرگومان‌هایی که نیازمند مقدار رنگ هستند استفاده کنید\&. عبارت رشته‌ای نام رنگی را که می‌خواهید تعریف کنید مشخص می‌سازد؛ کلمات کلیدی اختیاری \fBFOREGROUND\fP و \fBBACKGROUND\fP نحوه نمایش رنگ را روی دستگاه تک‌رنگ (monochrome) در هنگامی که از این رنگ در تعریف جدول رنگ استفاده شده باشد، تعیین می‌کنند\&. .IP "" 10 کامپایلر UIL نام‌های رنگ توکار ندارد\&. رنگ‌ها یک صفت وابسته به سرور برای یک شیء هستند\&. رنگ‌ها روی هر سرور تعریف می‌شوند و ممکن است مقادیر قرمز\-سبز\-آبی (RGB) متفاوتی در هر سرور داشته باشند\&. رشته‌ای که به عنوان آرگومان رنگ مشخص می‌کنید باید توسط سروری که برنامه شما روی آن اجرا می‌شود، شناخته شود\&. .IP "" 10 در یک فایل UID، زبان UIL یک رنگ را به عنوان رشته نویسه‌ای نمایش می‌دهد\&. سیستم MRM روال‌های ترجمه X را فراخوانی می‌کند که رشته رنگ را به مقدار پیکسل خاص دستگاه تبدیل می‌کنند\&. اگر برنامه را روی یک سرور تک‌رنگ اجرا کنید، تمام رنگ‌ها به سیاه یا سفید تبدیل می‌شوند\&. اگر روی یک سرور رنگی باشید، در صورت برآورده شدن شرایط زیر نام‌های رنگ به رنگ‌های مناسب خود تبدیل می‌شوند: .RS .IP " \(bu" 6 رنگ تعریف شده باشد\&. .IP " \(bu" 6 جدول رنگ (colormap) هنوز پر نشده باشد\&. .RE .IP "" 10 اگر جدول رنگ پر باشد، حتی رنگ‌های معتبر نیز به سیاه یا سفید (پیش‌زمینه یا پس‌زمینه) تبدیل می‌شوند\&. .IP "" 10 رابط‌های کاربری معمولاً رنگ ویجت‌ها را به طور مستقیم تعیین نمی‌کنند، تا انتخاب رنگ‌ها بتواند توسط کاربر از طریق فایل \fB\&.Xdefaults\fP کنترل شود\&. .IP "" 10 برای نوشتن برنامه‌ای که هم روی دستگاه‌های تک‌رنگ و هم روی دستگاه‌های رنگی اجرا شود، باید مشخص کنید که کدام رنگ‌ها در یک جدول رنگ (تعریف‌شده با تابع \fBCOLOR_TABLE\fP) به پس‌زمینه و کدام رنگ‌ها به پیش‌زمینه نگاشت می‌شوند\&. زبان UIL به شما امکان می‌دهد با استفاده از تابع \fBCOLOR\fP این نگاشت را در تعریف رنگ تعیین نمایید\&. مثال زیر نحوه استفاده از تابع \fBCOLOR\fP را برای نگاشت رنگ قرمز به رنگ پس‌زمینه در یک دستگاه تک‌رنگ نشان می‌دهد: .PP .nf \f(CWVALUE c: COLOR ( \&'red\&',BACKGROUND );\fR .fi .PP .IP "" 10 این نگاشت تنها زمانی اعمال می‌شود که رنگی به MRM داده شود و برنامه قرار باشد روی یک دستگاه تک‌رنگ نمایش یابد\&. در این حالت، هر رنگ در یکی از سه دسته زیر قرار می‌گیرد: .RS .IP " \(bu" 6 رنگ به رنگ پس‌زمینه در دستگاه تک‌رنگ نگاشت شده است\&. .IP " \(bu" 6 رنگ به رنگ پیش‌زمینه در دستگاه تک‌رنگ نگاشت شده است\&. .IP " \(bu" 6 نگاشت تک‌رنگ برای این رنگ تعریف نشده است\&. .RE .IP "" 10 اگر رنگ به رنگ پیش‌زمینه یا پس‌زمینه نگاشت شده باشد، MRM به ترتیب رنگ پیش‌زمینه یا پس‌زمینه را جایگزین می‌کند\&. اگر نگاشت تک‌رنگ را برای یک رنگ مشخص نکنید، MRM رشته رنگ را برای نگاشت به رنگ پیش‌زمینه یا پس‌زمینه به جعبه‌ابزار موتیف (Motif Toolkit) ارسال می‌کند\&. .IP "\fBRGB(\fP\fIred_integer\fP,\ \fIgreen_integer\fP, \fIblue_integer\fP\fB)\fP" 10 .iX "UIL" "color values" .iX "UIL module" "color values" .iX "UIL specification file" "color values" .iX "UIL Functions" "RGB" .iX "Color values" "defining in UIL" .IP "" 10 سه عدد صحیح مقادیر مولفه‌های قرمز، سبز و آبی رنگ را به همان ترتیب تعریف می‌کنند\&. مقادیر این مولفه‌ها می‌توانند در بازه ۰ تا ۶۵٬۵۳۵ (شامل هر دو) باشند\&. این مقادیر را می‌توان به صورت عبارت‌های عدد صحیح نیز نشان داد\&. .IP "" 10 در یک فایل UID، زبان UIL یک مقدار \fBRGB\fP را به صورت سه عدد صحیح نمایش می‌دهد\&. سیستم MRM روال‌های ترجمه X را فراخوانی می‌کند که اعداد صحیح را به مقدار پیکسل خاص دستگاه تبدیل می‌کنند\&. اگر برنامه را روی یک سرور تک‌رنگ اجرا کنید، تمام رنگ‌ها به سیاه یا سفید تبدیل می‌شوند\&. اگر روی یک سرور رنگی باشید، در صورتی که جدول رنگ هنوز پر نشده باشد، مقادیر \fBRGB\fP به رنگ‌های مناسب خود تبدیل می‌شوند\&. اگر جدول رنگ پر باشد، مقادیر به سیاه یا سفید (پیش‌زمینه یا پس‌زمینه) تبدیل می‌شوند\&. .IP "\fBCOLOR_TABLE(\fP\fIcolor_expression\fP\fB=\&'\fP\fIcharacter\fP\fB\&'\fP[,\&.\&.\&.]\fB)\fP" 10 .iX "COLOR_TABLE Function" .IP "" 10 عبارت رنگ (\fIcolor_expression\fP) یک رنگ از قبل تعریف‌شده، رنگی که به صورت درخط با تابع \fBCOLOR\fP تعریف شده باشد، یا عبارت \fBBACKGROUND COLOR\fP یا \fBFOREGROUND COLOR\fP است\&. نویسه (\fIcharacter\fP) می‌تواند هر نویسه معتبر UIL باشد\&. .IP "" 10 تابع \fBCOLOR_TABLE\fP روشی مستقل از دستگاه برای مشخص کردن مجموعه‌ای از رنگ‌ها فراهم می‌کند\&. تابع \fBCOLOR_TABLE\fP یا نام‌های رنگ UIL از قبل تعریف‌شده یا تعاریف درخط رنگ (با استفاده از تابع \fBCOLOR\fP) را می‌پذیرد\&. یک جدول رنگ باید به صورت اختصاصی (private) باشد زیرا محتوای آن برای ساخت آیکون باید توسط کامپایلر UIL شناخته شده باشد\&. با این حال، رنگ‌های درون یک جدول رنگ می‌توانند وارداتی (imported)، صادراتی (exported) یا اختصاصی (private) باشند\&. .IP "" 10 تک‌حرف مرتبط با هر رنگ، نویسه‌ای است که برای نمایش آن رنگ هنگام ایجاد آیکون استفاده می‌کنید\&. هر حرف به‌کاررفته برای نمایش یک رنگ باید در داخل جدول رنگ یکتا باشد\&. .IP "\fBICON(\fP[\fBCOLOR_TABLE=\fP\fIcolor_table_name\fP,]\ \fIrow\fP[,\&.\&.\&.\fB)\fP" 10 \fIcolor-table-name\fP باید به یک جدول رنگ از قبل تعریف‌شده اشاره کند، و \fIrow\fP یک عبارت نویسه‌ای است که یک سطر از آیکون را مشخص می‌سازد\&. .IP "" 10 تابع \fBICON\fP یک آیکون مستطیلی را با پهنای x پیکسل و ارتفاع y پیکسل توصیف می‌کند\&. رشته‌های محصور در نقل‌قول تکی (single quotation marks) آیکون را توصیف می‌کنند\&. هر رشته نشان‌دهنده یک سطر در آیکون است؛ هر نویسه در رشته نشان‌دهنده یک پیکسل است\&. .IP "" 10 سطر اول در تعریف آیکون، پهنای آیکون را مشخص می‌کند\&. تمام سطرها باید تعداد نویسه‌هایی برابر با سطر اول داشته باشند\&. ارتفاع آیکون با تعداد سطرها تعیین می‌شود\&. حداکثر تعداد سطرها ۹۹۹ است\&. .IP "" 10 آرگومان اول تابع \fBICON\fP (مشخصات جدول رنگ) اختیاری است و رنگ‌های موجود در این آیکون را تعیین می‌کند\&. با استفاده از تک‌حرف مرتبط با هر رنگ، می‌توانید رنگ هر پیکسل را در آیکون تعیین نمایید\&. آیکون باید از نویسه‌هایی ساخته شود که در جدول رنگ تعیین‌شده تعریف شده باشند\&. .IP "" 10 اگر آرگومان مشخص‌کننده جدول رنگ را حذف کنید، از جدول رنگ پیش‌فرض استفاده می‌شود\&. برای استفاده از جدول رنگ پیش‌فرض، سطرهای آیکون شما فقط باید حاوی فاصله‌ها (spaces) و ستاره‌ها (asterisks) باشند\&. جدول رنگ پیش‌فرض به صورت زیر تعریف می‌شود: .PP .nf \f(CWCOLOR_TABLE( BACKGROUND COLOR = \&' \&', FOREGROUND COLOR = \&'*\&')\fR .fi .PP .IP "" 10 می‌توانید نویسه‌های دیگری را برای نمایش رنگ پس‌زمینه و رنگ پیش‌زمینه با جایگزین کردن فاصله و ستاره در عبارت‌های \fBBACKGROUND COLOR\fP و \fBFOREGROUND COLOR\fP نشان‌داده‌شده در دستور قبلی تعریف کنید\&. می‌توانید آیکون‌ها را به صورت اختصاصی (private)، وارداتی (imported) یا صادراتی (exported) تعیین نمایید\&. برای بازیابی یک آیکون صادرشده در زمان اجرا، از تابع MRM به نام \fBMrmFetchIconLiteral\fP استفاده کنید\&. .IP "\fBXBITMAPFILE(\fP\fBstring_expression\fP\fB)\fP" 10 تابع \fBXBITMAPFILE\fP مشابه تابع \fBICON\fP است از این جهت که هر دو یک آیکون مستطیلی با پهنای x پیکسل و ارتفاع y پیکسل را توصیف می‌کنند\&. با این حال، \fBXBITMAPFILE\fP به شما امکان می‌دهد یک فایل خارجی حاوی تعریف یک بیت‌مپ X را تعیین کنید، در حالی که تمام تعاریف تابع \fBICON\fP باید مستقیماً در UIL کدنویسی شوند\&. فایل‌های بیت‌مپ X می‌توانند توسط برنامه‌های کاربردی مختلف X تولید شوند\&. زبان UIL این فایل‌ها را از طریق تابع \fBXBITMAPFILE\fP می‌خواند، اما از ایجاد این فایل‌ها پشتیبانی نمی‌کند\&. فایل بیت‌مپ X که به عنوان آرگومان به تابع \fBXBITMAPFILE\fP داده می‌شود، در زمان اجرای برنامه توسط MRM خوانده می‌شود\&. .IP "" 10 تابع \fBXBITMAPFILE\fP مقداری از نوع \fIpixmap\fP برمی‌گرداند و می‌توان از آن در هر جایی که نوع داده pixmap مورد انتظار است استفاده کرد\&. .IP "\fBSINGLE_FLOAT(\fP\fIreal_number_literal\fP\fB)\fP" 10 .iX "UIL" "floating-point values" .iX "UIL module" "floating-point values" .iX "UIL specification file" "floating-point values" .iX "UIL Functions" "SINGLE_FLOAT" .iX "Floating-point values" .IP "" 10 تابع \fBSINGLE_FLOAT\fP به شما امکان می‌دهد لیترال‌های ممیز شناور را در فایل‌های UIL به عنوان اعداد ممیز شناور با دقت یگانه (single\-precision) ذخیره کنید\&. اعداد ممیز شناور با دقت یگانه اغلب می‌توانند با مصرف حافظه کمتری نسبت به اعداد ممیز شناور با دقت مضاعف (double\-precision) ذخیره شوند\&. مقدار \fIreal_number_literal\fP می‌تواند یک لیترال عدد صحیح یا یک لیترال ممیز شناور باشد\&. .IP "\fBFLOAT(\fP\fIreal_number_literal\fP\fB)\fP" 10 .iX "UIL" "floating-point values" .iX "UIL module" "floating-point values" .iX "UIL specification file" "floating-point values" .iX "UIL Functions" "FLOAT" .iX "Floating-point values" .IP "" 10 تابع \fBFLOAT\fP به شما امکان می‌دهد لیترال‌های ممیز شناور را در فایل‌های UIL به عنوان اعداد ممیز شناور با دقت مضاعف (double\-precision) ذخیره نمایید\&. مقدار \fIreal_number_literal\fP می‌تواند یک لیترال عدد صحیح یا یک لیترال ممیز شناور باشد\&. .IP "\fBFONT(\fP\fBstring_expression\fP[\fB,\ CHARACTER_SET=\fP\fIchar_set\fP]\fB)\fP" 10 .iX "UIL" "font values" .iX "UIL module" "font values" .iX "UIL specification file" "font values" .iX "UIL Functions" "FONT" .iX "Font values" .IP "" 10 شما قلم‌ها را با تابع \fBFONT\fP تعریف می‌کنید\&. با استفاده از تابع \fBFONT\fP، مقداری را برای تعیین یک قلم مشخص می‌کنید و سپس از آن مقدار برای آرگومان‌هایی که نیازمند مقدار قلم هستند استفاده می‌نمایید\&. کامپایلر UIL هیچ قلم توکاری (built\-in) ندارد\&. .IP "" 10 هر قلم فقط در بستر (context) یک مجموعه نویسه معنادار است\&. تابع \fBFONT\fP دارای یک پارامتر اضافی است تا به شما امکان دهد مجموعه نویسه را برای قلم مشخص کنید\&. این پارامتر اختیاری است؛ اگر آن را حذف کنید، مجموعه نویسه پیش‌فرض به مقدار متغیر محیطی \fBLANG\fP در صورت تنظیم بودن، یا به مقدار \fBXmFALLBACK_CHARSET\fP در صورت تنظیم نبودن \fBLANG\fP بستگی خواهد داشت\&. .IP "" 10 عبارت \fBstring_expression\fP نام قلم را تعیین می‌کند و عبارت \fBCHARACTER_SET\fP = \fIchar_set\fP مجموعه نویسه را برای قلم مشخص می‌سازد\&. عبارت رشته‌ای استفاده‌شده در تابع \fBFONT\fP نمی‌تواند یک رشته ترکیبی (compound string) باشد\&. .IP "\fBFONTSET(\fP\fBstring_expression\fP[,\&.\&.\&.][\fB,\ CHARACTER_SET=\fP\fIcharset\fP]\fB)\fP" 10 .iX "UIL" "fontset value" .iX "UIL module" "fontset value" .iX "UIL specification file" "fontset value" .iX "Functions" "fontset value" .iX "UIL Functions" "FONT_TABLE" .iX "fontset value" "defining" .IP "" 10 شما مجموعه‌های قلم (fontsets) را با تابع \fBFONTSET\fP تعریف می‌کنید\&. با استفاده از تابع \fBFONTSET\fP، مجموعه‌ای از مقادیر را برای تعیین قلم‌ها مشخص می‌کنید و سپس از آن مقادیر برای آرگومان‌هایی که نیازمند یک مجموعه قلم هستند استفاده می‌نمایید\&. کامپایلر UIL هیچ قلم توکاری ندارد\&. .IP "" 10 هر قلم فقط در بستر یک مجموعه نویسه معنادار است\&. تابع \fBFONTSET\fP دارای یک پارامتر اضافی است تا به شما امکان دهد مجموعه نویسه را برای قلم مشخص کنید\&. این پارامتر اختیاری است؛ اگر آن را حذف کنید، مجموعه نویسه پیش‌فرض به مقدار متغیر محیطی \fBLANG\fP در صورت تنظیم بودن، یا به مقدار \fBXmFALLBACK_CHARSET\fP در صورت تنظیم نبودن \fBLANG\fP بستگی خواهد داشت\&. .IP "" 10 عبارت رشته‌ای نام قلم را تعیین می‌کند و عبارت \fBCHARACTER_SET\fP = \fIchar_set\fP مجموعه نویسه را برای قلم مشخص می‌سازد\&. عبارت رشته‌ای استفاده‌شده در تابع \fBFONTSET\fP نمی‌تواند یک رشته ترکیبی باشد\&. .IP "\fBFONT_TABLE(\fP\fIfont_expression\fP[,\&.\&.\&.]\fB)\fP" 10 .iX "UIL" "font table value" .iX "UIL module" "font table value" .iX "UIL specification file" "font table value" .iX "Functions" "font table value" .iX "UIL Functions" "FONT_TABLE" .iX "Font table value" "defining" .IP "" 10 یک جدول قلم دنباله‌ای از جفت‌های قلم و مجموعه نویسه است\&. در زمان اجرا، هنگامی که شیئی نیاز به نمایش یک رشته دارد، آن شیء جدول قلم را برای یافتن مجموعه نویسه‌ای که با مجموعه نویسه رشته مورد نمایش مطابقت دارد جستجو می‌کند\&. زبان UIL تابع \fBFONT_TABLE\fP را فراهم می‌سازد تا بتوانید چنین آرگومانی را ارائه دهید\&. مقدار \fIfont_expression\fP با توابع \fBFONT\fP و \fBFONTSET\fP ایجاد می‌شود\&. .IP "" 10 اگر یک مقدار قلم منفرد را برای مشخص کردن آرگومانی که نیازمند جدول قلم است تعیین کنید، کامپایلر UIL به طور خودکار مقدار قلم را به یک جدول قلم تبدیل می‌کند\&. .IP "\fBCOMPOUND_STRING(\fP\fBstring_expression\fP[,\fIproperty\fP[,\&.\&.\&.]]\fB)\fP" 10 از تابع \fBCOMPOUND_STRING\fP برای تنظیم ویژگی‌های یک رشته پایان‌یافته با null (null\-terminated) و تبدیل آن به یک رشته ترکیبی (compound string) استفاده کنید\&. ویژگی‌هایی که می‌توانید تنظیم کنید جهت نگارش و جداکننده (separator) هستند\&. .IP "" 10 نتیجه تابع \fBCOMPOUND_STRING\fP یک رشته ترکیبی با مقدار عبارت رشته‌ای به عنوان مقدار آن است\&. شما می‌توانید به صورت اختیاری یک یا چند مورد از عبارت‌های زیر را برای تعیین ویژگی‌های رشته ترکیبی حاصل درج کنید: .IP "" 10 \fBRIGHT_TO_LEFT\fP = \fIboolean_expression\fP \fBSEPARATE\fP = \fIboolean_expression\fP .IP "" 10 عبارت \fBRIGHT_TO_LEFT\fP در صورتی که \fIboolean_expression\fP برابر با True باشد، جهت نگارش رشته را از راست به چپ و در غیر این صورت از چپ به راست تنظیم می‌کند\&. مشخص کردن این آرگومان تغییری در مقدار عبارت رشته‌ای ایجاد نمی‌کند\&. اگر آرگومان \fBRIGHT_TO_LEFT\fP را حذف کنید، رشته حاصل دارای همان جهت نگارش \fBstring_expression\fP خواهد بود\&. .IP "" 10 عبارت \fBSEPARATE\fP در صورتی که \fIboolean_expression\fP برابر با True باشد، یک جداکننده به انتهای رشته ترکیبی اضافه می‌کند\&. اگر عبارت \fBSEPARATE\fP را حذف کنید، رشته حاصل دارای جداکننده نخواهد بود\&. .IP "" 10 نمی‌توانید از مقادیر وارداتی (imported) یا صادراتی (exported) به عنوان عملوندهای تابع \fBCOMPOUND_STRING\fP استفاده کنید\&. .IP "\fBCOMPOUND_STRING_COMPONENT\fP(\fIcomponent_type\fP [, {\fIstring\fP | \fIenumval\fP}])" 10 از تابع \fBCOMPOUND_STRING_COMPONENT\fP برای ایجاد رشته‌های ترکیبی در UIL متشکل از مؤلفه‌های منفرد استفاده کنید\&. این تابع معادل \fBXmStringComponentCreate\fP است\&. این تابع به شما امکان می‌دهد رشته‌های ترکیبی ساده‌ای شامل مؤلفه‌هایی مانند \fBXmSTRING_COMPONENT_TAB\fP و \fBXmSTRING_COMPONENT_RENDITION_BEGIN\fP ایجاد کنید که توسط تابع \fBCOMPOUND_STRING\fP تولید نمی‌شوند\&. سپس این مؤلفه‌ها می‌توانند به رشته‌های ترکیبی دیگر الحاق شوند تا رشته‌های ترکیبی پیچیده‌تری ساخته شوند\&. .IP "" 10 آرگومان اول باید یک ثابت شمارشی \fBXmStringComponentType\fR باشد\&. نوع و تفسیر آرگومان دوم به آرگومان اول بستگی دارد\&. به عنوان مثال، اگر هر یک از ثابت‌های شمارشی زیر را برای آرگومان اول مشخص کنید، نباید آرگومان دومی را مشخص نمایید: \fBXmSTRING_COMPONENT_SEPARATOR\fP، \fBXmSTRING_COMPONENT_LAYOUT_POP\fP، \fBXmSTRING_COMPONENT_TAB\fP و \fBXmSTRING_COMPONENT_LOCALE\fP\&. اما اگر ثابت شمارشی‌ای از گروه زیر را مشخص کنید، باید یک \fIstring\fP را به عنوان آرگومان دوم ارائه دهید: \fBXmSTRING_COMPONENT_CHARSET\fP، \fBXmSTRING_COMPONENT_TEXT\fP، \fBXmSTRING_COMPONENT_LOCALE_TEXT\fP، \fBXmSTRING_COMPONENT_WIDECHAR_TEXT\fP، \fBXmSTRING_COMPONENT_RENDITION_BEGIN\fP و \fBXmSTRING_COMPONENT_RENDITION_END\fP\&. اگر \fBXmSTRING_COMPONENT_DIRECTION\fP را به عنوان آرگومان اول مشخص کنید، باید یک ثابت شمارشی \fBXmStringDirection\fR را به عنوان آرگومان دوم تعیین نمایید\&. در نهایت، اگر \fBXmSTRING_COMPONENT_LAYOUT_PUSH\fP را به عنوان آرگومان اول مشخص کنید، باید یک ثابت شمارشی \fBXmDirection\fR را به عنوان آرگومان دوم مشخص کنید\&. .IP "" 10 مؤلفه‌های رشته ترکیبی \fBXmSTRING_COMPONENT_RENDITION_BEGIN\fP و \fBXmSTRING_COMPONENT_RENDITION_END\fP به عنوان آرگومان خود، «برچسب» (tag) یا نام یک بازنمایی (rendition) را از جدول رندر فعلی دریافت می‌کنند\&. برای اطلاعات بیشتر درباره نحوه مشخص کردن یک جدول رندر، بخش بعدی را ببینید\&. .IP "\fBCOMPOUND_STRING_TABLE(\fP\fBstring_expression\fP[,\&.\&.\&.]\fB)\fP" 10 یک جدول رشته ترکیبی آرایه‌ای از رشته‌های ترکیبی است\&. اشیایی که به فهرستی از مقادیر رشته‌ای نیاز دارند، مانند آرگومان‌های \fBXmNitems\fP و \fBXmNselectedItems\fP برای ویجت فهرست (list widget)، از مقادیر جدول رشته استفاده می‌کنند\&. تابع \fBCOMPOUND_STRING_TABLE\fP مقادیر این دو آرگومان از ویجت فهرست را می‌سازد\&. تابع \fBCOMPOUND_STRING_TABLE\fP مقداری از نوع \fIstring_table\fP تولید می‌کند\&. نام \fBSTRING_TABLE\fP مترادفی برای \fBCOMPOUND_STRING_TABLE\fP است\&. .IP "" 10 رشته‌های درون جدول رشته باید رشته‌های ساده باشند که کامپایلر UIL آن‌ها را به طور خودکار به رشته‌های ترکیبی تبدیل می‌کند\&. .IP "\fBASCIZ_STRING_TABLE(\fP\fBstring_expression\fP[,\&.\&.\&.]\fB)\fP" 10 یک جدول رشته ASCIZ آرایه‌ای از مقادیر رشته‌ای ASCIZ (پایان‌یافته با null) است که با کاما از یکدیگر جدا شده‌اند\&. این تابع به شما اجازه می‌دهد بیش از یک رشته ASCIZ را به عنوان مقدار برچسب فراخوانی (callback tag) ارسال کنید\&. تابع \fBASCIZ_STRING_TABLE\fP مقداری از نوع \fBasciz_table\fP تولید می‌کند\&. نام \fBASCIZ_TABLE\fP مترادفی برای \fBASCIZ_STRING_TABLE\fP است\&. .IP "\fBWIDE_CHARACTER(\fP\fBstring_expression\fP\fB)\fP" 10 .iX "UIL" "wide character strings" .iX "UIL module" "wide character strings" .iX "UIL specification file" "wide character strings" .iX "UIL Functions" "WIDE_CHARACTER" .iX "wide character strings" "defining in UIL" .IP "" 10 از تابع \fBWIDE_CHARACTER\fP برای تولید یک رشته نویسه پهن (wide character string) از یک رشته پایان‌یافته با null در محلی‌سازی (locale) فعلی استفاده کنید\&. .IP "\fBCLASS_REC_NAME(\fP\fBstring_expression\fP\fB)\fP" 10 .iX "UIL" "widget class names" .iX "UIL module" "widget class names" .iX "UIL specification file" "widget class names" .iX "UIL Functions" "CLASS_REC_NAME" .iX "widget class names" "defining in UIL" .IP "" 10 از تابع \fBCLASS_REC_NAME\fP برای تولید نام یک کلاس ویجت استفاده کنید\&. برای یک کلاس ویجت تعریف‌شده توسط جعبه‌ابزار (toolkit)، آرگومان رشته‌ای نام آن کلاس است\&. برای یک ویجت سفارشی (تعریف‌شده توسط کاربر)، آرگومان رشته‌ای نام روال ایجاد (creation routine) برای آن ویجت است\&. .IP "\fBINTEGER_TABLE(\fP\fIinteger_expression\fP[,\&.\&.\&.]\fB)\fP" 10 یک جدول عدد صحیح، آرایه‌ای از مقادیر عدد صحیح جداشده با کاما است\&. این تابع به شما اجازه می‌دهد بیش از یک عدد صحیح را به ازای هر مقدار برچسب فراخوانی (callback tag) ارسال کنید\&. تابع \fBINTEGER_TABLE\fP مقداری از نوع \fBinteger_table\fP تولید می‌کند\&. .IP "\fBARGUMENT(\fP\fBstring_expression\fP[,\ \fIargument_type\fP]\fB)\fP" 10 .iX "UIL" "argument values" .iX "UIL module" "argument values" .iX "UIL specification file" "argument values" .iX "UIL Functions" "ARGUMENT" .iX "Argument values" "defining in UIL" .IP "" 10 تابع \fBARGUMENT\fP آرگومان‌های یک ویجت تعریف‌شده توسط کاربر (user\-defined widget) را تعریف می‌کند\&. هر یک از اشیایی که می‌توانند توسط UIL توصیف شوند، مجموعه‌ای از آرگومان‌ها را می‌پذیرند که در ضمیمه B فهرست شده‌اند\&. برای مثال، \fBXmNheight\fP آرگومانی برای بیشتر اشیاء است و دارای نوع داده عدد صحیح (integer) می‌باشد\&. برای تعیین ارتفاع برای یک ویجت تعریف‌شده توسط کاربر، می‌توانید از نام آرگومان توکار \fBXmNheight\fP استفاده کرده و هنگام اعلان ویجت تعریف‌شده توسط کاربر، یک مقدار عدد صحیح را مشخص کنید\&. شما از تابع \fBARGUMENT\fP برای مشخص کردن آرگومان‌هایی که در کامپایلر UIL توکار هستند، استفاده نمی‌کنید\&. .IP "" 10 نام \fBstring_expression\fP نامی است که کامپایلر UIL برای آرگومان در فایل UID استفاده می‌کند\&. \fIargument_type\fP نوع مقداری است که می‌تواند با آرگومان مرتبط شود\&. اگر آرگومان دوم را حذف کنید، نوع پیش‌فرض \fBANY\fP است و هیچ‌گونه بررسی نوع مقدار انجام نمی‌شود\&. از یکی از کلیدواژه‌های زیر برای مشخص کردن نوع آرگومان استفاده کنید: .RS .IP " \(bu" 6 ANY .IP " \(bu" 6 ASCIZ_TABLE .IP " \(bu" 6 BOOLEAN .IP " \(bu" 6 COLOR .IP " \(bu" 6 COMPOUND_STRING .IP " \(bu" 6 FLOAT .IP " \(bu" 6 FONT .IP " \(bu" 6 FONT_TABLE .IP " \(bu" 6 FONTSET .IP " \(bu" 6 ICON .IP " \(bu" 6 INTEGER .IP " \(bu" 6 INTEGER_TABLE .IP " \(bu" 6 KEYSYM .IP " \(bu" 6 PIXMAP .IP " \(bu" 6 REASON .IP " \(bu" 6 SINGLE_FLOAT .IP " \(bu" 6 STRING .IP " \(bu" 6 STRING_TABLE .IP " \(bu" 6 TRANSLATION_TABLE .IP " \(bu" 6 WIDE_CHARACTER .IP " \(bu" 6 WIDGET .RE .IP "" 10 می‌توانید از تابع \fBARGUMENT\fP استفاده کنید تا به کامپایلر UIL امکان شناسایی افزونه‌های جعبه‌ابزار موتیف (Motif Toolkit) را بدهید\&. برای مثال، یک ویجت موجود ممکن است یک آرگومان جدید را بپذیرد\&. با استفاده از تابع \fBARGUMENT\fP، می‌توانید این آرگومان جدید را پیش از انتشار نسخه به‌روزشده کامپایلر، در دسترس کامپایلر UIL قرار دهید\&. .IP "\fBREASON(\fP\fBstring_expression\fP\fB)\fP" 10 .iX "UIL" "reason value" .iX "UIL Functions" "reason value" .iX "UIL module" "reason value" .iX "UIL specification file" "reason value" .iX "Functions" "reason value" .iX "Reason value" .IP "" 10 تابع \fBREASON\fP برای تعریف علت‌های جدید برای ویجت‌های تعریف‌شده توسط کاربر کاربرد دارد\&. .IP "" 10 هر یک از اشیاء در جعبه‌ابزار موتیف (Motif Toolkit) مجموعه‌ای از شرایط را تعریف می‌کنند که تحت آن‌ها یک تابع تعریف‌شده توسط کاربر را فراخوانی می‌نمایند\&. این شرایط به عنوان علت‌های بازفراخوانی (callback reasons) شناخته می‌شوند\&. به توابع تعریف‌شده توسط کاربر، روال‌های بازفراخوانی (callback procedures) گفته می‌شود\&. در یک ماژول UIL، از لیست بازفراخوانی‌ها (callbacks list) برای تعیین اینکه کدام توابع تعریف‌شده توسط کاربر برای چه علت‌هایی فراخوانی شوند، استفاده می‌کنید\&. .IP "" 10 ضمیمه B فهرست علت‌های بازفراخوانی پشتیبانی‌شده توسط اشیاء جعبه‌ابزار موتیف را ارائه می‌دهد\&. .IP "" 10 هنگامی که یک ویجت تعریف‌شده توسط کاربر را اعلان می‌کنید، می‌توانید با استفاده از تابع \fBREASON\fP علت‌های بازفراخوانی را برای آن ویجت تعریف نمایید\&. عبارت رشته‌ای، نام آرگومان ذخیره‌شده در فایل UID را برای علت مشخص می‌کند\&. این نام علت در زمان اجرا به روال ایجاد ویجت تحویل داده می‌شود\&. .IP "\fBTRANSLATION_TABLE(\fP\fBstring_expression\fP[,\&.\&.\&.]\fB)\fP" 10 .iX "UIL" "translation table value" .iX "UIL module" "translation table value" .iX "UIL specification file" "translation table value" .iX "Functions" "translation table value" .iX "Translation table value" .IP "" 10 هر یک از ویجت‌های جعبه‌ابزار موتیف دارای یک جدول ترجمه (translation table) هستند که رویدادهای سامانه X (برای مثال، فشرده شدن کلید ۱ ماوس) را به دنباله‌ای از کنش‌ها (actions) نگاشت می‌کند\&. از طریق آرگومان‌های ویجت، مانند آرگومان رایج translations، می‌توانید مجموعه‌ای جایگزین از رویدادها یا کنش‌ها را برای یک ویجت خاص مشخص کنید\&. تابع \fBTRANSLATION_TABLE\fP یک جدول ترجمه ایجاد می‌کند که می‌تواند به عنوان مقدار آرگومانی از نوع داده \fBtranslation_table\fP به کار رود\&. .IP "" 10 می‌توانید از یکی از دستورالعمل‌های جدول ترجمه زیر به همراه تابع \fBTRANSLATION_TABLE\fP استفاده کنید: \fB#override\fP، \fB#augment\fP، یا \fB#replace\fP\&. حالت پیش‌فرض \fB#replace\fP است\&. اگر یکی از این دستورالعمل‌ها را مشخص کنید، باید نخستین مدخل در جدول ترجمه باشد\&. .IP "" 10 دستورالعمل \fB#override\fP سبب نادیده گرفته شدن هرگونه ترجمه تکراری می‌شود\&. برای مثال، اگر ترجمه‌ای برای <\fBBtn1Down\fP> از قبل در ترجمه‌های جاری یک PushButton تعریف شده باشد، ترجمه تعریف‌شده توسط \fInew_translations\fP تعریف جاری را بازنویسی (override) می‌کند\&. اگر دستورالعمل \fB#augment\fP مشخص شده باشد، تعریف جاری اولویت می‌یابد\&. دستورالعمل \fB#replace\fP تمامی ترجمه‌های جاری را با موارد مشخص‌شده در منبع \fBXmNtranslations\fP جایگزین می‌کند\&. .SS "بازنمایی‌ها و جدول‌های بازنمایی (Renditions and Render Tables)" .iX "Renditions" .iX "Render Tables" .PP علاوه بر جهت رشته (string direction)، هر رشته ترکیبی حاوی حجم زیادی از اطلاعات درباره چگونگی بازنمایی (رندر شدن) متن خود است\&. هر رشته ترکیبی شامل یک «برچسب» (tag) است که «بازنمایی» (rendition) مورد استفاده برای ترسیم آن رشته را مشخص می‌کند\&. بازنمایی شامل اطلاعاتی همچون قلم، اندازه، رنگ، زیرخط‌دار بودن متن یا خط‌خوردگی آن، و موقعیت و سبک هر توقف‌گاه تب (tab stop) است\&. بازنمایی‌های متعددی در یک «جدول بازنمایی» (render table) با یکدیگر ترکیب می‌شوند، که از طریق منبع \fBXmNrenderTable\fP و در فهرست \fIcontrols\fP ویجت برای هر ویجتی مشخص می‌گردد\&. .PP زبان UIL جدول‌های بازنمایی، بازنمایی‌ها، فهرست‌های تب (tab lists) و توقف‌گاه‌های تب (tab stops) را به عنوان رده‌ای ویژه از اشیاء، در قالبی شبیه به رده ویجت پیاده‌سازی می‌کند\&. این اشیاء خود ویجت یا گجت نیستند، اما قالبی که توسط UIL برای تعیین منابع ویجت استفاده می‌شود، روشی مناسب برای تعیین ویژگی‌ها و وابستگی‌های این اشیاء فراهم می‌آورد\&. .PP برای مثال، یک جدول بازنمایی که در فهرست \fIcontrols\fP یک ویجت گنجانده شده است، باید خود نیز دارای یک فهرست \fIcontrols\fP در مشخصات خود باشد که دربردارنده نام بازنمایی‌های عضو آن است\&. هر بازنمایی در مشخصات خود، دارای فهرست \fIarguments\fP خواهد بود که ویژگی‌هایی نظیر قلم، رنگ، و زیرخط‌دار بودن متن را مشخص می‌سازد\&. هر یک از بازنمایی‌ها ممکن است یک tablist را نیز کنترل کنند، که آن هم به نوبه خود یک یا چند توقف‌گاه تب را کنترل خواهد کرد\&. .PP لطفاً برای شرح کامل بازنمایی‌ها و جدول‌های بازنمایی، و مشاهده مثالی از چگونگی استفاده از آن‌ها در UIL، به \fIMotif Programmer\&'s Guide\fP مراجعه کنید\&. .SH "اطلاعات مرتبط (RELATED INFORMATION)" .PP \fBuil\fP(1), \fBUil\fP(3) ...\" created by instant / docbook-to-man, Sun 22 Dec 1996, 20:37