پست‌اسکریپت

پست‌اسکریپت (PostScript و به‌طور خلاصه PS) یک زبان برنامه‌نویسی پویا و الحاقی است که توسط John Warnock و Charles Geschke در سال ۱۹۸۲ طراحی شد. پست اسکریپت یک زبان توصیف صفحه است که با یک مفسر اجرا می‌شود تا یک تصویر را ایجاد کند.

پست‌اسکریپت
الگو برنامه‌نویسیپارادایم برنامه‌نویسی: stack-based، برنامه‌نویسی رویه‌ای
طراحی شده توسطجان وارناک، چارلز گسچه، Doug Brotz, Ed Taft, Bill Paxton
توسعه‌دهندهادوبی
ظهوریافته در۱۹۸۲ (۱۹۸۲)
انتشار پایدار
PostScript 3
۱۹۹۷ (۱۹۹۷)
dynamic, strong
پیاده‌سازی‌های بزرگ
Adobe PostScript, TrueImage، گوست‌اسکریپت
متأثر از
Interpress, لیسپ
تأثیر گذاشته بر
پی‌دی‌اف

پست‌اسکریپت بهترین زبان شناخته شده برای توصیف صفحات در زمینه‌های الکترونیک و منتشر کردن دسکتاپ است.

تاریخچه

مفاهیم زبان پست‌اسکریپت در سال ۱۹۷۶ هنگامی که جان وارناک روی Evans & Sutherland، شرکت مشهور گرافیک کامپیوتری، کار می‌کرد، شکل گرفت. در آن زمان جان وارناک در حال گسترش و توسعهٔ یک مفسر برای پایگاه‌داده گرافیکی سه بعدی بزرگ پناه‌گاه نیویورک بود. وارناک سیستم طراحی زبان را به منظور پردازش گرافیک شکل داد.

در همان زمان محققان Xerox PARC اولین چاپگر لیزری را گسترش دادند و متوجه نیاز برای یک استاندارد تعریف صفحات تصویر شدند. در سال ۱۹۷۵–۷۶ یک تیم به رهبری باب اسپرول قالب پرس را ساختند که در نهایت در سیستم Xerox PARC برای پرینترهای لیزری استفاده شد. اما پرس بیش‌تر به عنوان یک قالب داده، و نه یک زبان، انعطاف‌پذیری کافی را نداشت و PARAC تلاش کرد با ایجاد اینترپرس جایگزینی برای آن ایجاد کند.

در سال ۱۹۷۸، Evand & Sutherland از وارناک خواست تا از منطقهٔ خلیج سانفرانسیسکو به دفتر مرکزی آن‌ها در یوتا برود، اما او مشتاق به این کار نبود. او سپس به Xerox PARAC پیوست تا با مارتین نیول همکاری کند. آن‌ها دوباره سیستم طراحی JaM (جان و مارتین) را ساختند که در طراحی VLSI و بدست آوردن اطلاعات مقدماتی برای تایپ و چاپ گرافیکی استفاده شد. این تلاش در نهایت به زبان اینترپرس انجامید.

در سال ۱۹۸۲ وارناک به همراه چاک گشک Adobe Systems را در دسامبر ۱۹۸۲ پایه‌گذاری کردند. آن‌ها یک زبان ساده‌تر، مشابه اینترپرس با نام پست‌اسکریپت طراحی کردند که در سال ۱۹۸۴ به بازار آمد. در همین زمان‌ها، استیو جابز، آن‌ها را ملاقات کرد و آن‌ها را متقاعد کرد تا پست‌اسکریپت را طوری تغییر دهند تا بتواند به عنوان زبانی برای چاپگرهای لیزری مورد استفاده قرار گیرد.

در مارس ۱۹۸۵، Apple LaserWriter، اولین چاپگری بود که از پست‌اسکریپت استفاده کرد و اولین جرقه‌های انقلاب انتشار دسکتاپ در اواسط دههٔ ۱۹۸۰ زده شد. ترکیب ویژگی‌های تکنیکی و در دسترس بودن پست‌اسکریپت، آن را یک زبان مطرح برای خروجی‌های گرافیکی برای کاربردهای چاپ کردن ساخت. برای مدتی مفسر این زبان (پردازش تصویر بیت به بیت یا RIP) یک بخش از همان پرینترهای لیزری بود تا ۱۹۹۰.

هرچند که هزینهٔ پیاده‌سازی بالا بود، با این حال کامپیوترها کد PS را به چاپگرها می‌دادند و چاپگرها آن را به صورت تصویر درمی‌آوردند؛ که این به حافظهٔ وسیع و ریزپردازنده‌هایی با کارایی بالا احتیاج داشت. در زمانی که موتور چاپگرهای لیزری خودشان بیش از هزار میلیارد دلار هزینه داشتند، اضافه شدن قیمت PS ارزش داشت، اما با کاهش قیمت چاپگرها، هزینهٔ پیاده‌سازی PS به شدت گران شد.

پست اسکریپت که زمانی استاندارد غیررسمی پذیرفته شده برای نسخه الکترونیکی نهایی مقالات بود، به تدریج توسط فرمت PDF که نواده آن است، در حال جایگزینی است. در سال ۲۰۰۱ پرینترهای کمتری با پشتیبانی پست اسکریپت نسبت به سال‌های قبل وارد بازار شدند که علت اصلی آن افزایش رقابت با پرینترهای جوهرافشان به مراتب ارزان قیمتتر غیر پست اسکریپتی و همچنین ابداع روش‌های جدید نرم‌افزار محور برای پردازش عکس‌های پست‌اسکریپت بر روی کامپیوتر (مثل PDF) بوده‌است. اما استفاده از پرینتر لیزری پست‌اسکریپتی هنوز می‌تواند میزان کار لازم توسط CPU برای چاپ نوشته‌ها را از طریق انتقال پردازش تصویر از کامپیوتر به پرینتر به میزان قابل توجهی کاهش دهد. در نتیجه PS هنوز یک گزینهٔ معقول برای مدل‌های گران‌قیمت است.

پست‌اسکریپت سطح ۱

زبان پست‌اسکریپت دو پیشرفت اساسی داشت که اولین آن‌ها پست‌اسکریپت سطح ۱ است که در سال ۱۹۸۴ معرفی شد.

پست‌اسکریپت سطح ۲

پست‌اسکریپت سطح ۲ در سال ۱۹۹۱ معرفی شد و چندین برتری مثل سرعت و قابلیت اطمینان آن بیش، پشتیبانی از جداسازی‌های in-RIP و همچنین پشتیبانی از بازسازی تصویر و فونت‌های مرکب را دارا بود.

پست‌اسکریپت ۳

پست‌اسکریپت ۳ (کلمهٔ سطح را به خاطر راحتی برداشتند) در اواخر ۱۹۹۷ آمد و علاوه بر استفاده از نسخه‌های جدیدتر عملگرهای قدیمی‌تر لغت نامه‌ای، فیلترهای جدید و کار با رنگ را پشتیبانی می‌کرد.

پست‌اسکریپت ۳ به دلیل جایگزینی سیستم پردازش الکترونیکی خصوصی موجود، اهمیت زیادی داشت و از آن به خاطر دارا بودن عملگرهای سایه‌دهی هموار تا ۴۰۹۶ سایهٔ خاکستری (در مقایسه با ۲۵۶ تایی که در پست‌اسکریپت ۲ وجود داشت) استفادهٔ وسیعی در تولید مجله‌ها و همچنین DeviceN (که یک فضای رنگی بود که اضافه کردن جوهرهای رنگی اضافی را در صفحات رنگی مرکب را دارا بود) شد.

استفاده در چاپ

قبل از پست‌اسکریپت

قبل از به وجود آمدن زبان پست‌اسکریپت، پرینترها با گرفتن ورودی به صورت کد اسکی کاراکترهای خروجی را چاپ می‌کردند. تعدادی تکنولوژی برای انجام این عملیات وجود داشت اما بیش‌ترشان اینگونه بودند که نشانه‌ها به صورت فیزیکی طراحی شده بودند و تغییر دادن آن‌ها سخت بود. مثلاً روی کلیدهای فلزی، صفحات نوری و… منقوش شده بودند.

با گسترش محبوبیت پرینترهای نقطه‌ای این روند تغییر کرد. در این سیستم کاراکترها به صورت تعدادی از نقطه‌ها نشان داده شده و مانند یک فونت در داخل پرینتر عمل می‌کردند. با پیچیده شدن این سیستم، پرینترهای نقطه‌ای شروع به استفاده از فونت‌های مختلف کردند که کاربر امکان انتخاب آن‌ها را داشت و حتی برخی از مدل‌ها به کاربر اجازهٔ استفاده از فونت‌های خودشان را می‌دادند.

پرینترهای نقطه‌ای این قابلیت را نیز داشتند که که تصویرهای گرافیکی را نیز چاپ کنند. تصاویر توسط کامپیوتر تفسیر شده و به صورت یک سری از نقطه‌ها به چاپگر فرستاده می‌شدند. سیستم‌های کنترلی چاپگرها متفاوت بود و برنامه نویسان نیاز به ساختن درایورهای متعدد داشتند. چاپ کردن تصویرهای برداری به دستگاه‌های خاص‌منظوره‌ای با نام پلاترهای سپرده شد. پلاترها یک زبان مشترک به نام HPGL داشتند. اما به ندرت برای کاربردهایی غیر از چاپ کردن تصاویر استفاده شد. به علاوه آن‌ها اکثراً گران و کند و در نتیجه کمیاب بودند.

چاپ پست‌اسکریپت

چاپگرهای لیزری خصوصیات خوب چاپگرها و پلاترها را ترکیب کرد. مانند پلاترها، چاپگرهای لیزری توانایی چاپ خط‌هایی با کیفیت بالا و مانند چاپگرهای نقطه‌ای توانایی تولید صفحات متن و تصویر را داشتند. اما برخلاف هر دوی چاپگرهای نقطه‌ای و پلاترها، چاپگرهای لیزری می‌توانستند همزمان تصویر و متن را در یک صفحه قرار دهند. پست‌اسکریپت با استفاده از زبان کنترلی خود که می‌توانست روی انواع مارک‌های چاپگرها استفاده شود، این امکان را فراهم ساخت تا این ویژگی‌ها به خوبی به کار گرفته شوند.

به تدریج پست‌اسکریپت، به زبانی فراتر از یک زبان کنترلی برای چاپگرها تبدیل شد و به صورت یک زبان کامل برای خودش درآمد. برنامه‌های زیادی برای تبدیل متن به برنامهٔ پست‌اسکریپت به وجود آمدند که کد متن اصلی را تولید می‌کردند. این برنامه می‌توانست به یک مفسر در چاپگر فرستاده شود تا آن را چاپ کند، یا در داخل یک برنامه دیگر مثلاً با نشان دادن آن روی صفحه به کار برده شود. چون این فایل مستقل از مقصدش ساخته می‌شود به آن مستقل از دستگاه (Device independent) می‌گویند.

پست‌اسکریپت به دلیل قابلیت پیاده‌سازی تبدیل بیت به بیت به صورت آنی مورد توجه‌است. همه چیز حتی متن در قالب خط‌های صاف و منحنی‌های بزیر (Bézier curves) مکعبی بیان می‌شود. به همین دلیل امکان مقیاس‌دهی دلخواه، چرخاندن و دیگر تبدیلات در آن وجود دارد. وقتی برنامهٔ پست‌اسکریپت تفسیر می‌شود، مفسر دستورها را به نقاطی برای تولید خروجی تبدیل می‌کند. به همین دلیل مفسرهای پست‌اسکریپت گاهی پردازنده‌های تصویر بیت به بیت پست‌اسکریپت یا RIP نامیده می‌شوند.

به کار بردن فونت

برطرف کردن مشکلات فونت نیز، تقریباً به اندازهٔ خود پست‌اسکریپت پیچیده بود. سیستم فونت از PS برای کشیدن کاراکترها و علائم به عنوان خطوط استفاده می‌کرد و می‌توانست آن‌ها را با هر وضوحی نمایش دهد. با وجود اینکه این موضوع بدیهی به نظر می‌رسید، تعدادی موضوع تایپی بودند که باید در نظر گرفته می‌شدند.

اولین موضوع این است که فونت‌ها در واقع به صورت خطی در سایزهای کوچک مقیاس نشوند. چون در این صورت جزئیات کاراکترها و علائم محو شده و غلط به نظر می‌آیند. پست‌اسکریپت با نگهداری نکات کلیدی آن‌ها مانند خطوط افقی و عمودی (که در تشخیص یک حرف کمک زیادی می‌کردند) از این خطا جلوگیری می‌کرد که. نتیجهٔ حاصل از این کار، نمایش هرچه بهتر این فونت حتی در وضوح‌های پایین شد در حالی که قبلاً تصور می‌شد این کار تنها با استفاده از فونت‌های دست ساز بیت به بیتی ممکن است.

در آن زمان تکنولوژی پیدا کردن و دارا شدن این نکات در فونت به خوبی اجرا و نگه‌داری شد و این نکات فشرده‌سازی و رمزنگاری شدند و به صورت فونت تایپ ۱ که ادوبی آن را اینگونه خواند، درآمدند (همچنین با نام فونت پست‌اسکریپت نوع ۱، PS1, T۱ و تایپ ۱ ادوبی از آن‌ها یاد شد). تایپ ۱ یک مدل ساده شده از سیستم PS برای نگه‌داری اطلاعات کلی قالب بود و نگذاشت به یک زبان کامل تبدیل شود. سپس ادوبی مجوز تکنولوژی تایپ۱ را به افرادی که می‌خواستند نکات خودشان را اضافه کنند فروخت. آن‌هایی که مجوز این تکنولوژی را نگرفتند در تایپ۳ استفاده شد. فونت تایپ ۳ اجازهٔ تمام پیچیدگی‌های زبان پست‌اسکریپت را داد اما هیچ راهی برای استاندارد کردن نکات نداشت. تفاوت‌های بیش‌تر باعث سردرگمی بیشتر شد.

تایپ ۲ برای استفاده در قالب فونت فشرده طراحی شد و برای نمایش فشرده توابع توصیف علائم به منظور کم کردن سایز فایل، پیاده‌سازی شد. بعدها قالب تایپ۲ پایه‌ای برای تایپ۱ فونتهای تایپ‌باز شد.

فونت کلید CID نیز برای برطرف کردن مشکلات موجود در فونت تایپ OCF طراحی شد. برای آدرس دادن زبان‌های پیچیدهٔ آسیایی و مجموعه‌های کاراکترهای بزرگ. فونت کلید CID به همراه فونت تایپ۱ برای فونتهای کلید CID استاندارد و به همراه تایپ۲ در فونت‌های تایپ باز استفاده می‌شود.

به نظر می‌آمد که رتبهٔ ادوبی به صورت وسیع و غیرقابل پیش‌گیری زیاد بود و این موضوع بود که باعث شد تا Apple سیستم خود را یعنی تروتایپ در حدود سال ۱۹۹۱ طراحی کند. بلافاصله بعد از اعلام تروتایپ، ادوبی مشخصات قالب فونت ۱ را منتشر کرد. ابزارهای جرئی مانند فونتساز آلتسیس، قابلیت ساخت فونت تایپ ۱ را اضافه کرند. از آن زمان تعداد زیادی از فونت‌های تایپ۱ به صورت مجانی به بازار آمد. برای مثال فونت‌های استفاده شده در سیستم تایپ تک (TEX) در این قالب در دسترسند.

در اویل دههٔ ۱۹۹۰ سیستم‌های متعددی برای ذخیره‌سازی فونت‌های شکلی وجود داشت، برای مثال بیتستریم و متافونت، آن را گسترش دادند. اما هیچ‌یک شامل جوابی برای چاپ همه‌منظوره نبود و در نتیجه به صورت گسترده استفاده نشدند.

در اواخر دههٔ ۱۹۹۰ ادوبی برای گسترش تایپ باز که یک ابردسته قالب‌های تایپ۱ و تروتایپ بود به مایکروسافت پیوست. هنگامی که به یک دستگاه خروجی پست‌اسکریپت متصل می‌شد، قسمت‌های اضافی فونت آن حذف شده و قسمت‌های فرستاده شده به دستگاه همانند تایپ۱ و تروتایپ ولی بسته به نوع شکل و طرح آن در فون موجود در تایپ باز بود.

دیگر پیاده‌سازی‌ها

در دههٔ ۱۹۸۰، ادوبی بیش‌تر سود خود را از دادن مجوز برای پیاده‌سازی پست‌اسکریپت برای چاپگرها بدست می‌آورد که به RIP (raster image processor) معروف بود. اما هنگامی که در اواسط دههٔ ۸۰ تعدادی کامپیوتر RISK به بازار آمد، به نظر آمد که پشتیبانی ادوبی برای ماشین‌های جدید ناقص است.

این مسئله و مسائل مربوط به هزینه باعث به وجود آمدن پیاده‌سازی‌های شخص ثالث برای پست‌اسکریپت به خصوص برای چاپگرهای ارزان قیمت یا چاپگرهایی با تجهزات حروفچینی گرانقیمت و لوکس شد (که باعث افزایش سرعت نسبت به ادوبی شد). در این زمان مایکروسافت و اپل به هم پیوستند تا امتیاز انحصاری چاپگرهای لیزری را از ادوبی بگیرند. مایکروسافت به شرکت اپل مجوز استفاده از مفسری برای پست‌اسکریپت به نام تروایمیج را که خریده بود داد و اپل نیز مجوز قالب فونت جدید مایکروسافت با نام تروتایپ را داد (البته اپل با ادوبی به نفاهم رسیده و مجوز اصلی پست‌اسکریپت را به چاپگرهای آن داد اما تروتایپ به عنوان فونت استاندارد برای ویندوز و مکینتاش انتخاب شد).

امروزه مفسرهای شخص ثالث برای پست‌اسکریپت به صورت وسیع در چاپگرها و دیگر دستگاه‌های جانبی چند منظوره (MFP) کاربرد دارد. برای مثال مفسر IPS PS۳ شرکت زوران (Zoran) که به نام PhoenixPage معروف بود در بسیاری از چاپگرها و MFPها به عنوان استاندارد انتخاب شد مانند Jaws و Harlequin.

هنوز هم برخی چاپگرهای لیزری ارزان و پایه‌ای از پست‌اسکریپت پشتیبانی نمی‌کنند و هنگامی که به پشتیبانی از آن احتیاج دارند از یک مفسر رایگان سازگار با پست‌اسکریپت با نام گست‌اسکریپت استفاده می‌کنند. پرینترها گست‌اسکریپت یک فایل غیرپست‌اسکریپت را گرفته و با استفاده از CPU کامپیوتر میزبان عمل تبدیل تصویر به نقشهٔ بیت به بیت (rasterization) و فرستادن آن به چاپگر را انجام می‌دهند. گست‌اسکریپت همچنان می‌تواند جهت نمایش یک فایل روی صفحهٔ مانیتور و تبدیل صفحات پست‌اسکریپت به به نقشهٔ بیت به بیت (bitmap) مانند TIFF, PNG و PDF استفاده شود.

دستگاه‌های با وضوح بالا مانند imagesetter یا CTP platesetter که در آن‌ها وضوح بیش از ۲۵۰۰ dpi رایج بود، همچنان به RIPهای خارجی با حجم زیادی حافظه نرم و سخت نیاز داشت. چاپگرهای لیزری گرانقیمت (معروف به چاپ دیجیتال) نیز از یک RIP خارجی به منظور جداسازی کامپیوترهای قابل ارتقا از دستگاه‌های سخت‌افزاری چاپ استفاده می‌کردند. شرکت‌هایی مانند EFI و Xitron در زمینهٔ نرم‌افزار RIP تخصص داشتند.

استفاده به عنوان سیستم نمایش

پست‌اسکریپت به خاطر معرفی واسط گرافیکی کاربر (GUI) از نظر تجاری موفق بود. چون به کاربرها اجازهٔ انتخاب ساختار نهایی صفحات خروجی روی پرینترهای لیزری را می‌داد. با این حال، سیستم گرافیکی GUI بسیار کمتر از پست‌اسکریپت پیشرفته بود. برای مثال QuickDraw شرکت اپل تنها خط‌ها و منحنی‌های پایه و ابتدایی را پشتیبانی می‌کرد. برای استفادهٔ بهینه و کامل از چاپ کردن توسط پست‌اسکریپت، برنامه‌ها روی کامپیوتر مجبور به اجرای مجدد آن خصیصه‌ها روی سیستم گرافیکی دستگاه میزبان داشتند. این منجر به موضوعاتی در زمینهٔ ناهماهنگی طرح‌بندی روی صفحه و طرح‌بندی چاپ شده داشت که به دلیل پیاده‌سازی‌های مختلف آن‌ها بود.

با رشد توان کامپیوترها، این امکان به وجود آمد که سیستم PS به جای چاپگرها، روی کامپیوترهای میزبان اجرا شود. این باعث شد تا سیر تکامل طبیعی PS از یک زبان برای چاپگرها به یک زبان گرافیکی برای کامپیوترهای میزبان تبدیل شود. این روند تعداد زیادی مزیت داشت. نه تنها باعث حذف خروجی‌های ناهماهنگ شد بلکه سیستم گرافیکی قدرتمندی برای کامپیوترها به وجود آمد و به چاپگرها اجازه داد تا هیچ پردازشی انجام ندهند در زمانی که قیمت موتورهای لیزری در حال کاهش بود. در روند تولید، استفاده از پست‌اسکریپت به عنوان سیستم نمایش به این معنی بود که کامپیوتر میزبان توانایی درآوردن وضوح پایین در روی صفحه، وضوح بالاتر روی چاپگر یا فرستادن کد PS به چاپگرهای هوشمند را دارد.

با این حال پست‌اسکریپت با چاپ ضمنی نوشته شده بود و تعدادی خصیصه داشت که آن را برای سیستم‌های نمایش تعاملی نامناسب می‌ساخت. به ویژه PS بر مبنای این ایده بود که تمامی دستورات را جمع می‌کرد و هنگامی که به دستور showpage می‌رسید، تمامی دستورات جمع شده، تفسیر شده و خروجی حاصل می‌شد؛ که به وضوح برای سیستم‌های تعاملی مناسب نبود.

هنگامی که استیو جابز شرکت اپل را ترک کرد و NeXT را شروع کرد. او با ادوبی روی ایدهٔ استفاده از PS به عنوان سیستم نمایش در ایستگاه کار (workstation) کامپیوترها همکاری کرد. نتیجهٔ این کار به پست‌اسکریپت نمایشی یا DPS انجامید. DPS برای بهبود کارایی از تعدادی کاربرد پایه استفاده کرد. این کار را با تغییر خیلی از جستارهای رشته‌ها به اعداد ۳۲ بیتی، اضافه کردن پشتیبانی از خروجی‌های مستقیم با هر دستور و اضافه کردن توابعی برای اجازه دادن به GUI برای رسیدگی کردن به نمودار انجام داد. به علاوه تعدادی وابسته‌سازی نیز فراهم شد تا کد PS بتواند به‌طور مستقیم از زبان C فراخوانی شود. NeXT از این وابسته‌سازی‌ها برای سیستم NeXTStep استفاده کرد تا یک سیستم گرافیکی شئ‌گرا فراهم کند. با اینکه DPS به همراه NeXT نوشته شد، ادوبی آن را به صورت تجاری فروخت که از خصیصه‌های رایج بیشتر ایستگاه‌های کار یونیکس در دههٔ ۱۹۹۰ شد.

ریزسیستم‌های شرکت سان (Sun)، با ساختن NeWS روش دیگری را اتخاذ کردند. به جای این مفهوم که DPS می‌توانست با برنامه‌های C تعامل برقرار کند، NeWS، توانست PS را به زبانی مناسب برای اجرای کامل GUI یک کامپیوتر گسترش دهد. سان تعدادی دستور برای زمان، کنترل ماوس، منقطع‌سازی و سیستم‌های دیگری که برای تعامل لازم بود اضافه کرد. همچنین تعدادی داده‌ساختار و عنصر زبان نیز برای شئ‌گرا کردن داخلی کامل آن اضافه کرد. در آن زمان روی ایستگاه‌های کار آن‌ها یک (در واقع سه) GUI کامل به زبان NeWS فراهم شد. با این حال تلاش‌های در حال انجام برای استاندارد کردن سیستم X۱۱ باعث معرفی شدن و استفادهٔ وسیع آن در سیستم سان شد و NeWS هیچ وقت به صورت وسیع کاربرد پیدا نکرد.

زبان

پست‌اسکریپت یک زبان تورینگ کامل است که به زبان‌های الحاقی تعلق دارد. برنامه‌های پست‌اسکریپت به صورت معمول توسط افراد نوشته نشده بلکه توسط برنامه‌های دیگر نوشته می‌شوند. با این حال این امکان وجود دارد که برنامه‌های پست‌اسکریپت نیز همانند برنامه‌های دیگر در رایانه نوشته شود.

پست‌اسکریپت یک زبان تفسیر شده و بر مبنای پشته‌است که به Forth شبیه‌است اما با سیستم تایپ قوی، الهام گرفته از داده‌ساختارهای موجود در زبان لیسپ و حافظهٔ حوزه‌ای است که بعد از پست‌اسکریپت سطح۲، آشغال‌جمع‌کن نیز به آن اضافه شد. نحو زبان از نمادگذاری معکوس لهستانی (reverse Polish notation) استفاده می‌کند که ترتیب عملیات را نامبهم می‌کند. اما خواندن یک برنامه به مقداری تمرین نیاز دارد چون فرد باید طرح پشته را در نظر داشته باشد. بیشتر عملگرها (یا به زبانی توابع) عملوندهای خود را از پشته می‌گیرد و نتیجهٔ خود را نیز در پشته می‌گذارند. الفاظ (literal) مانند اعداد، این تأثیر را دارند که یک کپی از خودشان را روی پشته بگذارند. داده‌ساختارهای پیشرفته روی آرایه‌ها و تایپ‌های لغت‌نامه‌ای، قابل ساخت بوده اما نمی‌توانستند به سیستم تایپ اعلان شوند چون سیستم تایپ همهٔ آن‌ها را را به صورت آرایه و لغت‌نامه می‌بیند.

مفاهیم موجود در زبان به این صورت است:

  • کاراکتر ‘٪’ برای تعریف توضیح (comment) در زبان استفاده می‌شود. به عنوان یک قرارداد کلی هر برنامه پست‌اسکریپت باید با “٪!” شروع شود که تمام دستگاه‌ها آن را به عنوان یک برنامهٔ پست‌اسکریپت بفهمند.
  • تعدادی پشته در این زبان وجود دارد اما دو پشتهٔ مهم آن شامل پشتهٔ عملوندها که برای اعمال عملگرها و فراخوانی توابع به کار می‌آید و پشتهٔ لغت‌نامه که شامل متغیرها و مقادیر آن‌هاست.
  • لغتنامه که شامل دوتایی‌هایی از متغیرها و مقادیر آن هاست. همچنین عملگرها و کد مربوط به آن‌ها نیز در آن ذخیره می‌شوند.
  • نام شامل ر شته‌ای از کاراکترهاست که در این زبان می‌تواند با رقم نیز شروع شود.
  • اعداد شامل اعداد صحیح و حقیقی هستند و به دو نوع قابل نمایشند. یکی به صورت دادن مبنا و مقدار و دیگری با همان نمایش مانتیس و نما.
  • رشته‌ها نیز در این زبان پشتیبانی می‌شوند.
  • آرایه‌ها نیز مانند سایر زبان‌ها هستند و می‌توانند شئ‌های از انواع مختلف را همزمان داشته باشند. یک تابع در این زبان مانند یک آرایه قابل اجرا است.
  • مفاهیم گرافیکی موجود در این زبان نیز شامل فضای دستگاه، فضای کاربر، ماتریس تبدیل جاری، مسیر، مسیر فعلی، مسیر برش و حالت گرافیکی هستند.

“Hello World”

در پست‌اسکریپت یک برنامهٔ کامل “Hello World”، به صورت زیر است:

٪!PS
/Courier findfont
20 scalefont
setfont
72 500 moveto
(Hello world!) show
showpage

یا اگر دستگاه خروجی، میز فرمان (console) داشته باشد.

٪!PS
(Hello world!) =

اولین دستور این زبان def است که برای تعریف یک متغیر و مقدار دهی آن استفاده می‌شود. برای مثال داریم:

/x 5 def

که معنی / در آن این است که مقدار x به پشته اضافه می‌شود و تا به حال مقداری در پشتهٔ لغت‌نامه ندارد. همچنین این دستور برای تعریف عملگرهای جدید نیز استفاده می‌شود. کد زیر یک عملگر foo تعریف می‌کند که دو عنصر بالای پشته را با هم جمع کرده و حاصل را در عنصر سوم ضرب می‌کند و نتیجه را به پشته اضافه می‌کند:

/foo {add mul} def

در زیر نیز یک مثال می‌بینیم که چگونه یک متن را به یک جعبه متصل می‌کنیم:

٪!
٪ operator box: xcoord ycoord box -
٪ Creates one inch box at xcoord, ycoord
/box {
 newpath
 moveto
 72 0 rlineto
 0 72 rlineto
 -72 0 rlineto
 closepath
} def
/Times-Roman findfont 30 scalefont setfont
gsave ٪ Save the old clip path
 72 72 box ٪ Set up our box
 gsave ٪ Don't allow box to be lost after stroke
 stroke
 grestore ٪ Restore the box path
 clip ٪ Clip to the box
 60 60 moveto
 (This is Times-Roman clipped to a box) show
 70 90 moveto
 (This is Times-Roman clipped to a box) show
 50 120 moveto
 (This is Times-Roman clipped to a box) show
grestore ٪ Get the clip path back
showpage

واحدهای طول

پست‌اسکریپت از نقطه به عنوان واحد طول استفاده می‌کند. با این حال برخلاف بقیهٔ نسخه‌های نقطه‌ای، پست‌اسکریپت، دقیقاً ۷۲ نقطه برای یک اینچ استفاده می‌کند. پس:

www.tailrecursive.org/postscript/postscript.html

برای مثال، برای کشیدن یک خط افقی به طول ۴cm این کافیست که بنویسیم:

۰ ۰ moveto
0 113.385827 lineto stroke

پست‌اسکریپت از اعداد حقیقی تک‌دقتی (با مانتیس ۲۴ بیتی) استفاده می‌کند. پس این معنی ندارد که از بیش از ۹ رقم دهدهی برای یک عدد حقیقی استفاده شود. برای گرافیک‌های سطح پایین، تعداد ارقام مهم و ممکن است کم شود.

جستارهای وابسته

منابع

    پیوند به بیرون

    در ویکی‌کتاب کتابی با عنوان: PostScript FAQ وجود دارد.
    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.