بوست سكريبت

تاريخ اللغة

ظهرت لأول مرة مفاهيم لغة الـ PostScript في عام 1976، عندما كان (جون ورنيك) يعمل بشركة (إيفانز آند ساذرلاند) وهي إحدى الشركات المتخصصة في رسوميات الجرافيك. حيث كان وورنيك في ذلك الوقت يطوّر تطبيقًا لترجمة قاعدة بيانات رسومية كبيرة ثلاثية الأبعاد لميناء نيويورك. وقد فكر وورنيك في هذه اللغة الخاصة بأنظمة التصميم من أجل معالجة الرسوميات.
وبالتزامن مع وورنيك، طور الباحثون في شركة (Xerox PARC) أول طابعة ليزر، وقد رأوا حاجة لطريقة معيارية لتعريف الصور الموجودة في الصفحات. وفي الأعوام 1975-1976، قام فريق يقوده (بوب سبرول) بتطوير الصيغة Press ، والتي استخدمت في النهاية في نظام (Xerox star) لتشغيل طابعات الليزر. ولكن الصيغة Press، وهي صيغة بيانات عنها لغة، كانت تفتقد للمرونة، لذلك قامت PARC بتطوير لغة الـ InterPress كبديل لـ Press.
وفي عام 1978، طلبت شركة (إيفانز وساذرلاند) من (وورنيك) الانتقال من (سان فرانسيسكو باي أريا) إلى مقرهم الرئيسي في ولاية يوتا، ولكنه لم يكن مهتمًا بالانتقال. وقد التحق بعد ذلك بشركة (Xerox PARC) للعمل مع (مارتن نيويل)، ليعيدا كتابة نظام التصميم ويقوما بإنشاء JaM (وهي تحمل الحروف الأولى من John وMartin) (والتي استخدمت في تصميم دارات التكامل الفائق VLSI وبحث نوع طباعة الحروف الطباعية والرسوميات. وقد نما هذا الجهد لاحقًا واتسع ليتحول إلى لغة الـ InterPress.
وقد غادر وورنيك الشركة مع (شوك جيشكي) وأسسا شركة Adobe Systems في ديسمبر 1982. وأنشأ لغة أكثر بساطة، تشبه الـ InterPress، وأسموها PostScript، والتي طُرحت في السوق عام 1984. وخلال هذه الفترة زارهم (ستيف جوبز)، والذي شجعهم على موائمة PostScript لاستخدامها كلغة في تشغيل طابعات الليزر.
وفي مارس 1985، كانت طابعة Apple Laser Writer هي أول طابعة تكون مزودة بـ PostScript، وهو ما أشعل ثورة تطبيقات النشر المكتبي desktop publishing في منتصف الثمانينات من القرن المنصرم. وكانت المزايا الفنية للغة الجديدة إلى جانب انتشارها الواسع قد جعلا من PostScript اللغة المفضلة للمخرجات الرسومية الخاصة بتطبيقات الطباعة. ولفترة من الوقت، كان أحد تطبيقات الترجمة (والذي يُشار إليه باسم RIP أو معالج الصور النقطية) الخاصة بلغة الـ PostScript أحد المكونات شائعة الاستخدام في طابعات الليزر حتى فترة التسعينات.
ومع ذلك، كانت تكلفة التطبيق مرتفعة؛ حيث كان الكمبيوتر يصدر مخرجات من الأسطر البرمجية الخام من PostScript والتي تقوم الطابعة بترجمتها إلى صورة نقطية عند مستوى الدقة الطبيعية للطابعة. وقد تطلب هذا معالجات ميكرو microprocessors مرتفعة الأداء وذاكرة كبيرة. وكانت طابعة الـLaserWriter تستخدم معالج Motorola 68000 بقدرة 12 ميجاهرتز، وهو ما يجعلها أسرع من أي أجهزة ماكنتوش متصلة بها. وعندما تتكلف محركات طابعات الليزر نفسها أكثر من ألف دولار، فإن التكلفة المُضافة لـ PostScript بالتاكيد تصبح أعلى، ولكن الآليات التشغيلية للطابعات هبطت في أسعارها، وهو ما جعل تكلفة تطبيق PostScript تزداد بشكل هائل.
وبعد أن كان الـ PostScript هو السائد في التوزيع الإلكتروني للمستندات النهائية المعدة للنشر، إذا بأحد التطبيقات الآخرة المنحدرة منه يحل محله في السوق وهو تنسيق المستند المحمول أو PDF. وبحلول عام 2001، تراجع عدد موديلات الطابعات المزودة بدعم لـ PostScript ، وكان السبب في ذلك المنافسة القوية والمتنامية من طابعات نفث الحبر غير المزودة بهذا التطبيق والأقل تكلفة بكثير، وكذلك نشوء الطرق البرامجية الجديدة لإظهار صور PostScript على الكمبيوتر، وبما يجعلها ملائمة للاستخدام على أي نوع من الطابعات (وكانت PDF توفر هذه الخاصية). ومع ذلك، كان استخدام طابعات الليزر المزودة بـ PostScript يقلل بشكل كبير من حمل العمل workload على وحدة المعالجة المركزية. وهو ما ينقل عبء إنشاء صور الـ PostScript من الكمبيوتر إلى الطابعة. ولا يزال PostScript هو الخيار المفضل على معظم موديلات المستخدمين الأعلى في القدرة الشرائية.

بوست سكريبت المستوى 1

خرجت النسخة الأولى من لغة الـ PostScript إلى السوق في عام 1984.

بوست سكريبت المستوى 2

طرُحت لغة الـ PostScript من المستوى 2 في عام 1991، وتضمنت العديد من التحسينات منها تحسين السرعة والمصداقية، ودعم عمليات الفصل في معالج الصور النقطية RIP، وفك ضغط الصور (حيث أمكن مثلاً التعامل مع صور الـ JPEG باستخدام برنامج الـ PostScript)، والدعم للخطوط المرُكّبة، وآلية تشكيل لتخزين المحتوى القابل لإعادة الاستخدام.

بوست سكريبت 3

خرج PostScript 3 (حيث شطبت شركة أدوبي كلمة "مستوى" بُغية التبسيط) إلى النور في نهاية 1997، إلى جانب نسخ كثيرة جديدة تقوم على القواميس dictionary-based من المشغلات الأقدم، وقد طرحت إمكانيات أفضل في التعامل مع الألوان ومرشّحات (فلاتر) جديدة (والتي مكنت من إجراء عمليات الضغط وفك الضغط داخل البرنامج، وتجزئة البرنامج program chunking، والتعامل المتقدّم مع الأخطاء).
وقد كان لـ PostScript 3 تأثيره المهم من حيث أنه حلّ محل أنظمة عمليات ما قبل الطباعة الإلكترونية الملوّنة، والتي كانت شائعة الاستخدام في إنتاج المجلات، من خلال طرح عمليات التظليل الناعمة لما يصل إلى 4096 ظل رمادي (وذلك بدلاً من 256 في PostScript 2)، بالإضافة إلى DeviceN، أو الفضاء اللوني color space الذي أتاح إضافة ألوان حبر إضافية (يطلق عليها اسم ألوان النقط spot colors) في صفحات الألوان المُركّبة.

قبل بوست سكريبت

قبل طرح PostScript، كانت الطابعات تُصمّم لكي تطبع مخرجات من المحارف characters، وكانت مدخلاتها هي النصوص المكتوبة بلغة الـ ASCII. وقد استخدم عدد من التقنيات لهذه المهمة، ولكن أغلبها اشتركت في خاصية أن صور المحارف glyphs كان من الصعب تغييرها ماديّا، حيث كان يتم صكّها على مفاتيح آلة كاتبة أو قطع معدنية أو صفائح بصرية.
وقد تغير هذا الوضع بدرجة معينة مع زيادة شعبية طابعات مصفوفة النقط dot matrix. وكانت تُرسم المحارف على هذه الأنظمة كسلسلة من النقاط، على نحو ما يحدده جدول خطوط بداخل الطابعة. ومع زيادتها في التعقيد، بدأت طابعات مصفوفات النقط تضم العديد من الخطوط المدمجة built-in بحيث يستطيع المستخدم الاختيار من بينها، وكانت بعض الموديلات تسمح للمستخدم بتحميل صور محارفه الخاصة إلى الطابعة.
كذلك فقد أتاحت طابعات مصفوفة النقط إمكانية طباعة الرسوميات النقطية raster graphics. وكان يتولى ترجمة هذه الرسوميات جهاز الكمبيوتر ويُرسلها على هيئة سلسلة من النقط إلى الطابعة باستخدام سلسلة من متتاليات الهروب escape sequences. وهذه اللغات الخاصة بالتحكم في الطابعة كانت تختلف من طابعة إلى أخرى، وكانت تستلزم من مؤلفي البرامج إنشاء عدد هائل من التعريفات drivers.
وكانت طباعة الرسوميات المتجهية vector graphics قد تُركت إلى أجهزة خاصة بهذا الغرض تدعى plotters (طابعات الرسوم الهندسية والخرائط). وكانت كافة هذه الطابعات تشترك في لغة أوامر مشتركة وهي لغة تخزين الصور الرسومية (HPGL)، ولكنها كانت محدودة الاستخدام في غير طباعة الرسوميات. بالإضافة إلى ذلك، فقد كانت مكلفة الثمن وبطيئة، ومن ثم نادرة.

طباعة بوست سكريبت

تجمع طابعات الليزر بين أفضل خصائص الطابعات العادية وطابعات الرسوم الهندسية. فعلى غرار طابعات الرسوم الهندسية، توفر طابعات الليزر درجة عالية من الجودة في الرسوم الخطية (الخالية من الظلال) line art. وعلى غرار طابعات مصفوفات النقط، نجد طابعات الليزر قادرة على توليد صفحات من النصوص والرسوميات النقطية. بيد أنها، وعلى خلاف طابعات النقط وطابعات الرسوم الهندسية، تجعل من الممكن وضع النصوص والرسوميات عالية الجودة على نفس الصفحة. ويجعل PostScript من الممكن الاستغلال الكامل لهذه المميزات، وذلك من خلال توفير لغة تحكم وحيدة يمكن استخدامها على أي ماركة من الطابعات.
وقد تجاوزت لغة PostScriptكونها مجرد لغة تحكم عادية في الطابعات وأصبحت لغة برمجة مكتملة في حد ذاتها. وتستطيع الكثير من التطبيقات تحويل أي مستند إلى برنامج PostScript يؤدي تنفيذه إلى ظهور المستند الأصلي. ويمكن إرسال هذا البرنامج إلى أحد تطبيقات الترجمة interpreter في أي طابعة، لينجم عنه مستند مطبوع، أو إلى أحد التطبيقات التي تقوم بعرض المستند على الشاشة. ونظرًا لأن برنامج المستند يكون هو نفسه بغض النظر عن الجهاز الذي ينزل عليه، فإنه يطلق عليه برنامج مستقل عن الجهاز device-independent.
وتتميز لغة الـ PostScript بإمكانيات تطبيق الرسترة (التنقيط) الفورية؛ فكل شيء، حتى النصوص، يتم تعيينه على هيئة خطوط مستقيمة وانحناءات بيزيير Bézier مكعّبة (والتي كانت في السابق توجد في تطبيقات الـ CAD فقط)، وهو ما يتيح إجراء التحجيم العشوائي والتدوير وغيرها من عمليات التحويل. وعندما تتم ترجمة برنامج PostScript، يقوم المترجم بتحويل هذه التعليمات إلى النقاط المطلوبة لتشكيل المخرجات. ولهذا السبب، يُطلق أحيانًا على مترجمات الـ PostScript اسم معالجات الصور النقطية أو الـ RIPs.

التعامل مع الخطوط

يقع على نفس مستوى تعقيد لغة الـ PostScript طريقة تعاملها مع الخطوط. فنظام الخطوط الغني استخدم البدائيات الرسومية للـ PostScript لرسم صور المحارف كرسوم خطيّة (خالية من الظلال)، وليتم إظهارها بعد ذلك عند أي مستوى دقّة resolution. ورغم أن المفهوم يبدو واضح المعالم، إلا أنه ينطوي على بعض المشكلات التيبوغرافية (الخاصة بالحروف والخطوط).
ومن بين هذه المشكلات أن الخطوط لا تتخذ أشكالا خطية تمامًا عند الأحجام الصغيرة؛ حيث تصبح صور المحارف صغيرة أو ضخمة للغاية ويبدأ شكلها في التشوّه. وقد تلافى الـ PostScript هذه المشكلة من إخلال إدراج التلميحات التي يمكن حفظها مع الحدود المحيطية outlines للخطوط. وهي في الأصل عبارة عن معلومات إضافية توجد ضمن أحزمة أفقية أو رأسية تسهم في تحديد الخصائص الحرفية التي ينبغي على آلية الرسترة (التنقيط) المحافظة عليها. ونتيجة استخدام هذه التلميحات كانت تحسن شكل الخطوط حتى عند المستويات المنخفضة من دقة الشاشة؛ وكان يعتقد في السابق أن الخطوط النقطية bitmap المضبوطة يدويًا هي الحل لهذه المشكلة.
في ذلك العصر، كانت التكنولوجيا المستخدمة في إدراج هذه التلميحات في الخطوط تحظى بمستوى عال من الحماية، وكانت الخطوط المزودة بالتلميحات تُضغط وتُشفّر فيما أطلقت عليه Adobe اسم Type 1 Font (ويعرف كذلك باسم PostScript Type 1 أو PS1 أو T1 أو Adobe Type 1). وكان Type 1 عبارة عن مجرد تبسيط لنظام PostScript لتخزين معلومات الحدود فقط، وليس لغة مكتملة الخصائص (وصيغة الـ PDF مشابهة في هذا الخصوص). وبعد ذلك، قامت Adobe ببيع التراخيص الخاصة بتكنولوجيا Type 1 إلى الراغبين في إضافة التلميحات لخطوطهم. أما من لم يرخّصوا التكنولوجيا فقد اضطروا لاستعمال Type 3 Font (والذي يعرف أيضًا بـ PostScript Type 3 Font أو PS3 أو T3). وكانت الخطوط من النوع Type 3 تتيح الاستفادة من كافة الأدوات المتطورة المدمجة في لغة الـ PostScript، ولكنها بدون الأسلوب الموحد الخاص بالتلميحات. وكانت هناك اختلافات أخرى أضافت هي الأخرى الفوضى الدائرة.
وقد صُمم النوع Type 2 لكي يُستخدم مع تنسيق الخط المُدمج Compact Font Format (CFF) وتم تطبيقه للتمثيل المدمج لتعليمات توصيف صور المحارف لتقليل الحجم الإجمالي لملفات الخطوط. وقد أصبحت ذلك التنسيق لاحقًا هو الأساس للخطوط المفتوحة Type 1 OpenType.
كما صمم أيضاً تنسيق خطوط سِيد CID-keyed fonts (وهي خطوط بتنسيق PostScript لا تُسمى فيها المحارف ولكن تُفهرس ضمن فهرس index حيث تُعرف بأرقام سيد) سعياً لحل المشكلات الموجودة في الخطوط OCF/Type 0، ولمعالجة التكوين المعقد للغات الآسيوية (أي اللغات الصينية واليابانية والكورية CJK) والمشاكل الخاصة بمجموعات المحارف شديدة الضخامة. ويُمكن استخدام خطوط سِيد مع تنسيق الخطوط Type 1 وذلك لخطوط سيد المعيارية، أو الخطوط Type 2 للخطوط سيد من النوع OpenType.
وكانت الأسعار التي وضعتها Adobe مرتفعة بدرجة منعت الكثير من المستخدمين من شراءها، وهي المشكلة  التي دفعت Apple لكي تصمم نظامها الخاص TrueType في عام 1991. وقد أعقب الإعلان عن خط TrueType إصدار Adobe للمواصفة الخاصة بتنسيق الخط Type 1. وقد أضافت أدوات التجزئة مثل Fontographer من Altsys (والذي استحوذت عليه شركة Macromedia في يناير 1995، وتملكته شركة FontLab منذ مايو 2005) القدرة على إنشاء الخطوط من النوع Type 1. ومنذ ذلك الحين، صدرت الكثير من الخطوط Type 1 المجانية؛ فمثلاً، تأتي الخطوط المستخدمة مع نظام التنضيد TeX متوافرة في هذا التنسيق.
وفي مطلع التسعينات، كانت هناك العديد من الأنظمة الأخرى لتخزين الخطوط القائمة على الحدود المحيطية outline، مثل تلك التي طورتها Bitstream وMETAFONT، ولكن أيًا منها لم يشتمل على حل طباعي عمومي ومن ثم لم يُقدّر لها الانتشار الواسع.
وفي نهاية التسعينات، انضمت شركة Adobe إلى مايكروسوفت في تطوير الخطوط OpenType، وهي في الأصل مجموعة وظيفية شاملة للنوعين Type 1 وTrueType. وعندما تطبع هذه الخطوط إلى أحد الأجهزة المزودة بالـ PostScript، يتم حذف الأجزاء غير الضرورية من الخط OpenType، وما يتم إرساله إلى الجهاز عن طريق ملف التعريف هو نفسه ما يتم إرساله في العادة مع الخطوط TrueType أو Type 1، وذلك اعتمادًا على نوع الحدود المحيطية (الأوتلاين) الموجودة في الخط OpenType.

تطبيقات أخرى

في الثمانينات من القرن المنصرم، استمدت Adobe معظم إيراداتها من رسوم الترخيص الخاصة بتطبيق PostScript للطابعات، والمعروف باسم معالج الصور النقطية أو RIP. ومع توافر المنصّات الجديدة القائمة على RISC في منتصف الثمانينات، وجد البعض أن دعم Adobe للأجهزة الجديدة غائبًا.
وقد أدى ذلك – بالإضافة إلى عامل التكلفة- لشيوع تطبيقات أخرى للـ PostScript من قبل شركات أخرى، خاصة في الطابعات منخفضة التكلفة (حيث كانت رسوم الترخيص هي الحجرة العثرة في الموضوع) أو في أجهزة التنضيد الطباعي (والتي استلزمت فيها الحاجة للسرعة دعمًا لمنصات جديدة أسرع مما استطاعت Adobe توفيره).
وعند مرحلة معينة، اجتمعت فرق من شركتي Apple ومايكروسوفت لمحاولة فك احتكار Adobe لطابعات الليزر، حيث رخّصت مايكروسوفت لشركة أبل تطبيق ترجمة متوافق مع PostScript كانت قد اشترته ويُدعى TrueImage، وفي المقابل رخّصت Apple لمايكروسوفت نسق خطوطها الجديد TrueType (وقد انتهى الحال بـ Apple للوصول إلى اتفاق مع Adobe قامت بمقتضاه بترخيص PostScript الأصلي لطابعاتها، ولكن TrueType ظل هو تقنية الخط الحدودي القياسية المستخدمة مع كل من أنظمة الويندوز والماكينتوش).
واليوم، شاع استخدام تطبيقات الترجمة المتوافقة مع PostScript في الطابعات والملحقات والأجهزة الطرفية متعددة الوظائف (MFPs). فمثلاً، صار المترجم IPS PS3 من شركة Zoran Corporation، والذي عرف في السابق باسم PhoenixPage، هو تطبيق الترجمة السائد في الكثير من الطابعات والملحقات الطرفية، ومنه ما طورته شركة HP وتم بيعه ضمن خطوط إنتاج طابعات الليزر العادية والملونة. ومن حلول الـ PostScript التي طورتها شركات أخرى والتي استخدمتها شركات صناعة الطابعات والملحقات متعددة الوظائف حلول مثل Jaws  وHarlequin RIP، والتي تقدمها شركة Global Graphics. وهناك قائمة بالعديد من تطبيقات الترجمة المتوافقة في Undocumented Printing Wiki. .
ومع ذلك، لا نزال نجد بعض طابعات الليزر الأساسية غير المكلفة لا تدعم PostScript، حيث تأتي بتعريفات تقوم ببساطة برسترة (تنقيط) تنسيقات الرسوميات المحلية الخاصة بالمنصة بدلاً من تحويلها أولاً إلى PostScript. وعندما يكون دعم الـ PostScript مطلوباً لهذه الطابعات، يمكن استخدام تطبيق ترجمة مجاني متوافق مع PostScript يُدعى Ghostscript. ويقوم الـ Ghostscript بطباعة مستندات الـ PostScript على الطابعات غير المزودة بالـ PostScript وذلك باستخدام وحدة المعالجة المركزية (CPU) للكمبيوتر المستضيف للقيام بعملية الرسترة (التنقيط)، وذلك من خلال إرسال النتيجة كصورة نقطية bitmap واحدة كبيرة إلى الطابعة. كما يمكن استخدام Ghostscript كذلك في استعراض مستندات الـ PostScript على أي شاشة كمبيوتر وتحويل صفحات الـ PostScript إلى رسوميات نقطية raster graphics مثل TIFF وPNG، والتنسيقات المتجهية مثل PDF. وهناك عدد من تطبيقات الترجمة التجارية للـ PostScript كذلك، مثل T-Script من شركة TeletypeSetting Co.
ولا تزال بعض الأجهزة العالية الدقة، مثل طابعات الـ imagesetters أو الـ CTP platesetters، والتي تتجاوز فيها قيمة الدقة 2500 نقطة/بوصة (2500 dpi)، تستلزم معالجات صور نقطية (RIPs) خارجية بذاكرة ومساحات ضخمة. كما تستخدم أيضاً أنظمة طابعات الليزر المكلفة (والتي تعرف بالمطابع الرقمية digital presses) معالجات صور نقطية خارجية لفصل الكمبيوتر الذي يمكن ترقيته بسهولة عن مكونات الطباعة المتخصصة. وتتخصص شركات مثل EFI وXitron في مثل هذه البرمجيات.

اللغة

لغة الـ PostScript هي لغة برمجة متكاملة مع معايير تورنغ Turing-complete، وتنتمي إلى المجموعة المتسلسلة concatenative.ومن الناحية النموذجية، لا يكتب البشر برامج الـ PostScript، بل برامج أخرى هي التي تتولى ذلك. ورغم ذلك، من الممكن كتابة برامج حاسوبية في PostScript مثل أي لغة برمجة أخرى.
ولغة PostScript هي لغة قابلة للترجمة وقائمة على الحزم stack-based، وتشبه لغة Forth، ولكنها ذات نظام نوعي ديناميكي قوي، وهياكل بيانات مستلهمة من الموجودة في لغة الـ Lisp وذاكرة نطاقية scoped memory، وأيضاً آلية لجمع القمامة garbage collection (وذلك بداية من المستوى 2). ويستخدم النظام التركيبي (السينتاكس) للغة نظامThis language is bullshit التنويت البولندي العكسي reverse Polish notation، والذي يجعل ترتيب العمليات خاليًا من الغموض، ولكن قراءة أي برنامج تستلزم بعض الممارسة، نظرًا لأن على من يقرأ أن يحتفظ بتنسيق الحزمة في ذهنه. ومعظم المؤثرات operators (وهو ما تسميه اللغات الأخرى بالدوال functions) تتخذ وسائطها من الحزمة، وتضع نتائجها على الحزمة. أما الحرفيات literals (مثل الأرقام) فتقوم بعمل نسخة من نفسها في الحزمة. ويمكن بناء هياكل البيانات المتطورة على المصفوفات array والقواميس dictionary، ولكن لا يمكن إعلانها لنظام النوع، والذي يراها كمصفوفات وقواميس فقط، ولذلك فإن أي نظام تنويع typing يطبق على هذه "الأنواع" المعرّفة من قبل المستخدم يتم تركه للكود الذي يقوم بتطبيقه.
ويُستخدم الرمز "%" في استهلال التعليقات في برامج الـ PostScript. وكتقليد متبع، يجب أن يبدأ كل برنامج من برامج PostScript بالرموز "!%" بحيث تترجمها كافة الأجهزة على أنها تنتمي للـ PostScript.

تطبيق على برنامج "Hello World"

يبدو الكود الخاص ببرنامج "Hello World"، وهو البرنامج الذي يشيع استخدامه كمثال على أي برنامج مكتمل في أي لغة، على النحو التالي في PostScript2:
%!PS
/Courier             % name the desired font
20 selectfont        % choose the size in points and establish 
                     % the font as the current one
72 500 moveto        % position the current point at 
                     % coordinates 72, 500 (the origin is at the 
                     % lower-left corner of the page)
(Hello world!) show  % stroke the text in parentheses
showpage             % print all on the page
أو إذا كان جهاز المخرجات يتضمن لوحة تحكم:
%!PS
(Hello world!) =