Konventionen zur Struktur, Kommentare





Konventionen

Für ein PostScript-Programm ist keine zwingende Gesamtstruktur vorgeschrieben. Jede beliebige Sequenz von Syntax- und Semantik-konformen Programmteilen ergeben ein gültiges, ausführbares Programm.
Es ist allerdings von Vorteil, sich an die zwei folgenden Konventionen zu halten, was die Programmstruktur angeht:
An diese beiden Konventionen sollte man sich halten, da dann z.B. gewährleistet ist, daß diverse Tools/Filter das PostScript-Programm in der gewünschten Weise verarbeiten können. Es können dann z.B. zwei oder vier Seiten auf einem Blatt ausgedruckt werden (psnup-Filter) oder bestimmte Seiten aus einem Dokument herausgefiltert werden (psselect-Filter). Auch ist es vorstellbar weitere Filter zu entwickeln, die z.B. aus einem PostScript Dokument eine einfache Textdatei, oder eine Datei mit einem Format eines anderen Textverarbeitungs- oder Darstellungsprogramm (wie z.B. PDF-Dateien für den Acrobat Reader).
Neben diesen Konventionen gibt es noch die Möglichkeit dem Drucker, bzw. dem Drucker-Spooler zusätzliche Informationen über das auszudruckende Dokument mitzugeben. Solche Informationen können z.B. sein: die verwendeten Fonts; Hoch- oder Querformat; die Seitengröße; Seitenzahlen; usw.
Im folgenden werden noch weitere Konventionen zur Struktur angegeben. PostScript Programme, die diesen Konventionen folgen nennt man konform (bzw. unkonform, falls die Konventionen nicht eingehalten werden). Obwohl diese Konventionen keinerlei Effekt auf die Ausführung eines PostScript-Programms haben, so gibt es doch viele Applikationen, die mit PostScript Seitenbeschreibungen arbeiten (inkl. einiger Drucker-Spooler), die nur konforme Programme als Eingabe zulassen.
Um konforme Programme zu schreiben müssen nun nicht alle weiter unten beschriebenen Informationen enthalten. Um ein sogenanntes minimal-konformes PostScript-Programm zu bekommen sind lediglich die Grundinformationen anzugeben (diese sind in der folgenden Tabelle mit '#' gekennzeichnet), welche Programmstruktur und benötigte Fonts beinhalten.
Diese Strukturinformationen sollen ggf. auch von anderen Programmen ausgelesen werden können. Deshalb sollten diese Informationen nicht vom PostScript-Interpreter ausgeführt werden und es sollte auch nicht nötig sein irgendwelche Funktionen auszuführen, nur um an diese Informationen zu kommen. Aus diesem Grund sehen die Informationen aus wie Kommentare.



Kommentare

Syntax: Kommentare beginnen mit einem '%'-Zeichen und enden mit einem 'newline'.
Um nun 'normale' Kommentare von diesen Strukturinformationen zu unterscheiden, beginnen die Informationen mit '%!' oder mit '%%'. Diese Zeichen müssen zu Beginn einer Zeile stehen, da sie sonst auch als 'normale' Kommentare angesehen werden. Ein PostScript-Programm sollte immer mit '%!' beginnen. So können andere Applikationen feststellen, daß es sich bei der Datei um eine PostScript-Datei und nicht etwa um eine Textdatei handelt. (Insbesondere unter UNIX ist es so, daß die ersten 16 Bit einer Datei eine 'magic number' darstellen, anhand derer der Dateityp festgestellt wird.)

Soll ein PostScript-Programm konform sein, so muß in der ersten Zeile die Versionsnummer der verwendeten Operatoren stehen:
   %!PS-Adobe-1.0
Steht ein Kommentar, der mit '%!' beginnt nicht in der ersten Zeile eines Programms, so wird er als Strukturinformation ignoriert und als 'normaler' Kommentar betrachtet.

Aufbau der Strukturinformationen:
Beachte: Bei den Schlüsselworten ist auf Groß-/Kleinschreibung zu achten und es dürfen keine zusätzlichen Leerzeichen eingefügt werden. (Auch am Zeilenende vor dem 'newline' dürfen keine Leerzeichen stehen.)

Es gibt drei Klassen von solchen 'Struktur-Kommentaren':


Header Comments

Header Comments beginnen in der Zeile direkt nach der Versionsnummer und enden bei einem '%%EndComments' oder bei der ersten Zeile, die nicht mehr mit '%!' oder '%%' beginnt. Die Reihenfolge dieser Kommentare ist beliebig, solange nicht ein- und derselbe Kommentar zweimal auftaucht. In diesem Fall (doppeltes Auftauchen eines Kommentars) wird der Kommentar berücksichtigt, der an erster Stelle steht.

Einige dieser Kommentare können auch am Ende des Programms im Abschnitt der Trailer Comments stehen. Dies erleichtert die 'on-the-fly'-Generierung von PostScript-Code, da hierbei i.d.R. erst am Schluß bekannt ist, wieviele Seiten etwa das Dokument besitzt oder welche Fonts es benutzt. Wird von dieser Möglichkeit gebrauch gemacht, so muß in den Header Comments dieser Kommentar auch auftauchen allerdings mit dem Wert '(atend)'.
%%DocumentFonts: font1 font2 ... #
gibt an, welche Fonts im Dokument verwendet werden. Kann mit '(atend)' auch ans Ende gestellt werden.
%%Title: Titel
identifiziert das Dokument. (z.B. Dateiname, o.ä.)
%%Creator: Name
Person oder Programm, welche die PostScript-Datei erzeugt haben.
%%CreationDate: Datum
Datum (und Uhrzeit) des Erstellens. Es gibt hier keine Vorschriften, wie das Datum (und die Uhrzeit) auszusehen haben. Aussehen des
%%For: Name
für wen ist das Dokument erstellt worden, i.d.R. der Name der Person, die das Dokument ausdrucken möchte. Wird dieser Kommentar nicht angegeben, so darf angenommen werden, daß hier derselbe Name stehen würde wie bei '%%Creator:'.
%%Pages: Gesamtseitenzahl
sollte eine natürliche Dezimal-Zahl sein. Hier ist die Benutzung von '(atend)' erlaubt.
%%BoundingBox: ulx uly orx ory
gibt ein Rechteck an (untere linke Ecke; obere rechte Ecke). Sinnvoll, falls das Programm keine komplette Seite sein soll, sondern etwa eine Grafik (z.B. eine EPS-Datei), die in ein anderes Dokument eingefügt werden soll.
%%EndComments
beendet die Header Comments explizit.


Es gibt auch noch Kommentare, die in der Hauptsache von Darstellungsprogrammen (wie etwa ghostview) verstanden werden:
%%DocumentMedia: A4 595 842 0 () ()
%%DocumentMedia: Letter 612 792 0 () ()
gibt die Bezeichnung des Seitenformats und die entsprechende Größe an
%%Orientation: Portrait
%%Orientation: Landscape
Voreinstellung von Hoch- oder Querformat
%%PageOrder: Ascend
%%PageOrder: Descend
Sollen die Seiten entsprechend ihrer Numerierung aufsteigend oder absteigend angezeigt werden.

#: für Minimal-Konformität nötig



Body Comments

Body Comments dienen in der Hauptsache dazu Seitenbeschreibungen zu begrenzen, so daß andere Programme z.B. einzelne Seiten aus dem PostScript-Dokument herausfiltern können (wobei der Prolog und der Trailer immer mit herausgefiltert werden müssen).
%%EndProlog #
markiert Ende des Prologs und Beginn des Skripts.
%%Page: label ordinal #
markiert den Beginn einer neuen Seite (und das Ende der vorhergehenden). ordinal gibt die laufende Nummer der Seite im Programm an, d.h. ordinal läuft von 1 bis n für ein n-seitiges Dokument. label ist ein beliebiger String, der dazu dient ein Dokument in Abschnitte aufzuteilen. Soll ein Dokument nicht in Abschnitte aufgeteilt werden, so ist es üblich für label dieselbe Zahl zu setzen, wie ordinal.
%%PageFonts: font1 font2 ...
wird dieser Kommentar angegeben, so muß er direkt auf den '%%Page:'-Kommentar folgen. Die angegebenen Fonts müssen eine Teilmenge der Fonts bilden, die zu Beginn des Dokuments mit '%%DocumentFonts:' angegeben wurden. Dieser Kommentar dient der Verfeinerung des Dokuments und wiederum für andere Programme, die einzelne Seiten aus einem PostScript-Dokument filtern.
%%Trailer #
markiert das Ende der letzten Seite des Dokuments und den Beginn der Trailer Comments. Alle folgenden Zeilen werden aufgefaßt als zum gesamten Dokument gehörend und nicht mehr nur zur letzten Seite. Hier können z.B. Aufräumarbeiten (etwa mittels restore) erledigt werden.

#: für Minimal-Konformität nötig



Trailer Comments

Nach dem '%%Trailer'-Kommentar der Body Comments folgen die Trailer Comments. Hier stehen die Header Comments, die mittels '(atend)' hierher umgeleitet wurden. Nur solche umgeleitete Kommentare werden hier berücksichtigt und gelten alsTrailer Comments. Bei diesen Kommentaren ist die Reihenfolge unerheblich, falls nicht mehrere gleiche Kommentare auftauchen. Hier ist es so, daß im Falle doppelter Kommentare, der letzte den Ausschlag gibt (im Gegensatz zu den Header Comments, bei denen der erste zählt).


Beispiel


   %!PS-Adobe-1.0
   %%Creator: Holger Gehringer
   %%Title: Beispiel fuer Kommentare
   %%CreationDate: Mo, 16.11.1998
   %%Pages: (atend)
   %%DocumentFonts: Times-Roman Helvetica Helvetica-Bold
   %%EndComments
   
   ... Prolog (Definitionen, Prozeduren, usw.) ...
   
   %%EndProlog
   
   %%Page: 1 1
   ... Seite Eins ...
   
   %%Page: 2 2
   ... Seite Zwei (letzte Seite) ...
   
   %%Trailer
   %%Pages: 2

© Holger Gehringer, Dezember 1998