{"id":2687,"date":"2008-10-03T13:11:55","date_gmt":"2008-10-03T11:11:55","guid":{"rendered":"http:\/\/www.boscarol.com\/blog\/?p=2687"},"modified":"2010-03-05T23:53:11","modified_gmt":"2010-03-05T22:53:11","slug":"postscript-linguaggio-interprete-rip","status":"publish","type":"post","link":"http:\/\/www.boscarol.com\/blog\/?p=2687","title":{"rendered":"PostScript: linguaggio, interprete, Rip"},"content":{"rendered":"<p>Adobe PostScript \u00e8 un <span style=\"text-decoration: underline;\">linguaggio di programmazione<\/span> (come Java, Basic, Pascal, C, non un linguaggio di descrizione come HTML, RTF, XML). \u00c8 un linguaggio di programmazione <span style=\"text-decoration: underline;\">orientato alla stampa<\/span>, per qualunque tipo di periferica di stampa: stampanti da scrivania (laser, getto d&#8217;inchiostro), stampanti fotografiche, <em>imagesetter<\/em> (impressione di pellicole), <em>platesetter<\/em> (incisione di lastre).<\/p>\n<p>La sintassi del linguaggio PostScript \u00e8 stata pubblicata in tre versioni successive:<\/p>\n<ul>\n<li>1985: esce il PostScript originale;<\/li>\n<li>1991: esce la seconda versione che Adobe chiama PostScript Level 2;<\/li>\n<li>1997: esce la terza versione che Adobe chiama PostScript 3.<\/li>\n<\/ul>\n<p>Questi sono i manuali di riferimento delle tre versioni di PostScript, chiamati confidenzialmente &#8220;Red Book&#8221;:<\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-3326\" title=\"PostScript\" src=\"https:\/\/i1.wp.com\/www.boscarol.com\/blog\/wp-content\/uploads\/2008\/10\/isbn0201101742.jpg?resize=120%2C154\" alt=\"\" width=\"120\" height=\"154\" data-recalc-dims=\"1\" \/> <img loading=\"lazy\" class=\"alignnone size-full wp-image-3332\" title=\"PostScript Level 2\" src=\"https:\/\/i0.wp.com\/www.boscarol.com\/blog\/wp-content\/uploads\/2008\/10\/51hcegkaqwl.jpg?resize=122%2C154\" border=\"0\" alt=\"\" width=\"122\" height=\"154\" data-recalc-dims=\"1\" \/> <a class=\"border 0px\" href=\"http:\/\/www.adobe.com\/products\/postscript\/pdfs\/PLRM.pdf\" target=\"_blank\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-3333\" title=\"PostScript 3\" src=\"https:\/\/i0.wp.com\/www.boscarol.com\/blog\/wp-content\/uploads\/2008\/10\/517cxw545wl_sl500_aa240_.jpg?resize=126%2C154\" alt=\"\" width=\"126\" height=\"154\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<p>Dal punto di vista della sintassi, PostScript utilizza la cosiddetta notazione &#8220;polacca inversa&#8221; (<em>reverse polish notation)<\/em> che consiste nello scrivere l&#8217;operatore dopo gli operandi. Per indicare la somma dei numeri 5 e 3, si possono infatti usare tre notazioni:<\/p>\n<p><tt>5 + 3<\/tt> \u00e8 l&#8217;usuale notazione cosiddetta infissa o algebrica<\/p>\n<p><tt>+ 5 3<\/tt> \u00e8 la notazione prefissa o &#8220;polacca&#8221;<\/p>\n<p><tt>5 3 +<\/tt> \u00e8 la notazione postfissa o &#8220;polacca inversa&#8221;, PostScript usa questa notazione<\/p>\n<p>PostScript prende il proprio nome proprio dall&#8217;uso della notazione postfissa.\u00a0L&#8217;aggettivo &#8220;polacca&#8221; deriva dal fatto che le propriet\u00e0 di queste notazioni sono state studiate per la prima volta dal matematico e logico polacco<a href=\"http:\/\/en.wikipedia.org\/wiki\/Jan_\u0141ukasiewicz\" target=\"_blank\"> Jan Lukasiewicz<\/a> (1878-1956).<\/p>\n<p>&#8212;<\/p>\n<p>Per esempio, questo \u00e8 un frammento di programma PostScript che traccia 30 linee lunghe 400 punti tipografici una sotto l\u2019altra:<\/p>\n<div style=\"padding-left: 30px;\"><tt>35 300 moveto<br \/>\n1 1 30 {400 0 rlineto -400 10 rmoveto} for<br \/>\nstroke<br \/>\n<\/tt><\/div>\n<p><span style=\"color: #ffffff;\"> <\/span><br \/>\nDa notare l\u2019istruzione <tt>for<\/tt>, tipica di un linguaggio di programmazione. L\u2019interpretazione di questo programma PostScript d\u00e0 luogo alla <em>display list<\/em> dei 30 segmenti da tracciare, e al loro tracciamento, all&#8217;interno del foglio (l&#8217;origine \u00e8 in alto a sinistra e l&#8217;unit\u00e0 di misura \u00e8 il punto tipografico):<\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-10096\" style=\"border: 0px none;\" title=\"Risultato in stampa del programma PostScript\" src=\"https:\/\/i2.wp.com\/www.boscarol.com\/blog\/wp-content\/uploads\/2008\/10\/foglio.jpg?resize=300%2C389\" alt=\"Risultato in stampa del programma PostScript\" width=\"300\" height=\"389\" srcset=\"https:\/\/i2.wp.com\/www.boscarol.com\/blog\/wp-content\/uploads\/2008\/10\/foglio.jpg?w=300 300w, https:\/\/i2.wp.com\/www.boscarol.com\/blog\/wp-content\/uploads\/2008\/10\/foglio.jpg?w=231 231w\" sizes=\"(max-width: 300px) 100vw, 300px\" data-recalc-dims=\"1\" \/><\/p>\n<p>Si noti che un file PostScript non ha conoscenza della struttura del proprio documento fino al momento della costruzione della <em>display list<\/em>.<\/p>\n<p>Essendo PostScript un linguaggio, un file PostScript (suffisso .ps) \u00e8 un file di testo che contiene un programma (dati e istruzioni) che viene eseguito su un processore collegato con (o incorporato in) una stampante.<\/p>\n<p>&#8212;<\/p>\n<p>Una stampante PostScript \u00e8 una stampante che accetta istruzioni in linguaggio PostScript.\u00a0Le stampanti PostScript sono composte di due parti principali: il\u00a0<strong>Rip<\/strong> (<em>Raster Image Processor<\/em>) e la stampante vera e propria (la parte meccanica\/elettronica).<\/p>\n<p>Il Rip PostScript \u00e8 un programma che risiede nell&#8217;hardware della stampante (cio\u00e8 in ROM) oppure in un software separato. Se \u00e8 hardware \u00e8 un vero e proprio computer con processore e memoria (separato o congiunto con la stampante vera e propria). Se \u00e8 software \u00e8 installato su un proprio computer con processore e memoria.<\/p>\n<div>\n<p>Il Rip PostScript ha il compito di<\/p>\n<ul>\n<li>eseguire le istruzioni PostScript mediante un\u00a0<strong>interprete<\/strong>;<\/li>\n<li>calcolarne il risultato, che \u00e8 una\u00a0<strong>lista<\/strong> di oggetti grafici detta\u00a0<em>display list<\/em>;<\/li>\n<li><strong>rasterizzare<\/strong> questi oggetti grafici (<em>rendering<\/em>);<\/li>\n<li><strong>retinare<\/strong> il raster (<em>screening)<\/em>;<\/li>\n<li>passare il tutto alla parte meccanica per la\u00a0<strong>stampa<\/strong> vera e propria (<em>imaging<\/em>, con inchiostro su carta).<\/li>\n<\/ul>\n<p>Tutte le operazioni del Rip (interpretazione, rasterizzazione, retinatura) avvengono in memoria, fino alla costruzione di ogni singolo pixel da spedire alla stampante.<\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-2690\" title=\"Raster Image Processor\" src=\"https:\/\/i2.wp.com\/www.boscarol.com\/blog\/wp-content\/uploads\/2008\/09\/rip.jpg?resize=583%2C116\" alt=\"\" width=\"583\" height=\"116\" srcset=\"https:\/\/i2.wp.com\/www.boscarol.com\/blog\/wp-content\/uploads\/2008\/09\/rip.jpg?w=583 583w, https:\/\/i2.wp.com\/www.boscarol.com\/blog\/wp-content\/uploads\/2008\/09\/rip.jpg?resize=300%2C59 300w\" sizes=\"(max-width: 583px) 100vw, 583px\" data-recalc-dims=\"1\" \/><\/p>\n<p>Il primo componente del RIP, l&#8217;<strong>interprete<\/strong>, interpreta appunto il linguaggio PostScript, esegue una ad una le istruzioni e memorizza i risultati nella cosiddetta\u00a0<em>display list<\/em> nella quale\u00a0sono dunque contenuti tutti gli oggetti grafici di ogni pagina in un formato uniforme. La <em>display list<\/em> non \u00e8 un programma, ma l&#8217;elenco degli oggetti grafici in attesa di essere sottoposti alla rendering e alla retinatura.<\/p>\n<p>Il secondo componente, la parte di\u00a0<em><strong>rendering<\/strong><\/em>, converte (o rasterizza) gli oggetti della\u00a0<em>display list<\/em> in singoli pixel (mappa di byte) alla risoluzione richiesta, che vengono memorizzati.<\/p>\n<p>Il terzo componente, la parte di\u00a0<em><strong>screening<\/strong><\/em>, retina le immagini a colori e a grigi e memorizza il risultato (mappa di bit) nella memoria del RIP.<\/p>\n<p>Riassumendo: le istruzioni PostScript vengono presentate al RIP. L&#8217;interprete PostScript interpreta questa istruzioni e ne ricava una\u00a0<em>display list<\/em>, cio\u00e8 una descrizione dettagliata e ordinata delle pagine con i singoli oggetti grafici. Gli elementi della\u00a0<em>display list<\/em> vengono resi (rasterizzati) in memoria e quindi retinati. Infine il risultato, la mappa di bit, viene trasferito alla stampante che fa la cosiddetta\u00a0<em>imaging<\/em>, cio\u00e8 stampa l&#8217;immagine.<\/p>\n<p>&#8212;<\/p>\n<p>Per quanto riguarda l&#8217;<span style=\"text-decoration: underline;\">interpretazione<\/span>, Adobe ha un proprio interprete &#8220;originale&#8221; \u00a0chiamato CPSI (<em>Configurable PostScript Software Interpreter<\/em>) anch&#8217;esso in tre versioni, corrispondenti alle versioni del linguaggio. Questo \u00e8 il logo dell&#8217;interprete PostScript nelle tre versioni:<\/p>\n<p><img class=\"alignnone size-full wp-image-3337\" title=\"PostScript\" src=\"https:\/\/i1.wp.com\/www.boscarol.com\/blog\/wp-content\/uploads\/2008\/10\/ps1.jpg?h=109\" alt=\"\" data-recalc-dims=\"1\" \/> <img class=\"alignnone size-full wp-image-3339\" title=\"PostScript Level 2\" src=\"https:\/\/i0.wp.com\/www.boscarol.com\/blog\/wp-content\/uploads\/2008\/10\/adobe_postscript.gif?h=109\" alt=\"\" data-recalc-dims=\"1\" \/> <img loading=\"lazy\" class=\"alignnone size-full wp-image-3171\" title=\"PostScript 3\" src=\"https:\/\/i1.wp.com\/www.boscarol.com\/blog\/wp-content\/uploads\/2008\/10\/187px-postscript_3svg.png?resize=187%2C109\" alt=\"\" width=\"187\" height=\"109\" data-recalc-dims=\"1\" \/><\/p>\n<p>Sono stati prodotti anche numerosi interpreti cosiddetti &#8220;compatibili&#8221; tra i quali <a href=\"http:\/\/www.globalgraphics.com\/products\/jaws_rip\/\" target=\"_blank\">Jaws<\/a>, \u00a0<a href=\"http:\/\/pages.cs.wisc.edu\/~ghost\/\" target=\"_blank\">Ghostscript<\/a>, TrueImage, PhoenixPage.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Adobe PostScript \u00e8 un linguaggio di programmazione (come Java, Basic, Pascal, C, non un linguaggio di descrizione come HTML, RTF, XML). \u00c8 un linguaggio di programmazione orientato alla stampa, per qualunque tipo di periferica di stampa: stampanti da scrivania (laser, getto d&#8217;inchiostro), stampanti fotografiche, imagesetter (impressione di pellicole), platesetter (incisione di lastre). La sintassi del [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[251],"tags":[261,256,1572,257],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/pjoVH-Hl","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2687"}],"collection":[{"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2687"}],"version-history":[{"count":35,"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2687\/revisions"}],"predecessor-version":[{"id":14317,"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2687\/revisions\/14317"}],"wp:attachment":[{"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2687"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}