Folgende Punkte fassen die wesentlichen Elemente einer Shape-Definition in einer SHP-Datei zusammen:

  • Die Syntaxbeschreibung für Shapes oder Buchstaben ist immer identisch.
  • Wird eine Schriftdatei erstellt, dann ist der erste Eintrag in der Datei kein Buchstabe, sondern die Schriftbeschreibung. Es wird kein Shape definiert.
  • Wenn der erste Eintrag ein Shape beschreibt, dann ist es eine Shape-Datei und keine Shape-Schrift.
  • Eine Zeile in einer Shape-Datei darf maximal 128 Buchstaben lang sein. (Unser shpc verarbeitet längere Zeilen, gibt aber eine Warnung aus.)
  • Leerzeilen werden ignoriert. Zwischen einem Semikolon (;) und dem Zeilenende können Kommentare stehen.
  • Jede Shape-Beschreibung hat eine Kopfzeile in folgender Form und wird gefolgt von einer oder mehreren Zeilen, die das Shape Byteweise beschreiben. Das letzte Byte ist immer 0.
  • Die Bytes werden mit einem Komma getrennt.
*shapenumber,defbytes,shapename
specbyte1,specbyte2,specbyte3,...,0

Name Beschreibung
shapenumber Eine eindeutige Zahl zwischen 1 und 258 für gewöhnliche Schriftdateien und 1 bis 32768 für Unicode-Schriften. Der Asterisk symbolisiert den Anfang eines Shapes. Bei Nicht-Unicode-Schriften liegen auf den Nummern 256-258 die Symbole für Grad-Zeichen (°), Plusminus (±) und das Durchmesser-Symbol (⌀). Entgegen der Unicoderefezenz liegt das Durchmesserzeichen nicht auf U+2230 sondern auf U+2205. Die beiden Symbole sehen ähnlich aus.
defbytes Diese Zahl gibt die Anzahl der Bytes (specbytes) für dieses Shape inkl. dem Nullbyte an. (Maximal 2000)
shapename Der Name des Shapes. Namen für Shapes müssen in Großbuchstaben geschrieben werden, ansonsten werden sie ignoriert. Bezeichnungen für Buchstaben bei Schriften werden hingegen in kleinbuchstaben angegeben.
specbyte Jedes Byte beschreibt entweder einen Vektor oder eine Reihe von Befehlen. Ein Byte kann dezimal oder hexadezimal angegeben werden. Wenn die Zahl mit einer 0 beginnt, dann sind die zwei folgenden Zahlen hexadezimal. Ansonsten dezimal.

Tabelle: Shape-Aufbau

Schriftdateien

Schriftdateien müssen als erstes einen speziellen Eintrag besitzen. Das 0-Shape mit der Schriftdefinition. Das sieht wie folgt aus:

*0,4,font-name
above,below,mode,0 

Name Beschreibung
0 Die Shapenummer (siehe oben).
4 Die Anzahl an Specbytes (siehe oben).
font-name Der Name der Schrift.
above Anzahl der Vektorlängen, die Großbuchstaben über der Grundlinie hinausragen.
below Anzahl der Vektorlängen, die Kleinbuchstaben wie y oder g unter der Grundlinie hinausragen.
mode Der Modus der Schriftdatei: 0, wenn die Schrift rein horizontal gesetzt werden kann. 2, wenn die Schrift vertikal und horizontal gesetzt werden kann.

Tabelle: Schriftmetadaten für "normale" Schriftdateien

Unicode Schriftdateien

Bei Unicode Schriftdateien sieht der erste Eintrag in der Schriftdatei etwas anders aus:

*UNIFONT,6,font-name
above,below,mode,encoding,type,0

Name Beschreibung
*UNIFONT Hier stünde eigentlich die Shapenummer. Das Literal deutet auf eine Unicode-Schrift hin.
6 Die Anzahl an Specbytes (siehe oben).
font-name Der Name der Schrift.
above Anzahl der Vektorlängen, die Großbuchstaben über der Grundlinie hinausragen.
below Anzahl der Vektorlängen, die Kleinbuchstaben wie y oder g unter der Grundlinie hinausragen.
mode Der Modus der Schriftdatei: 0, wenn die Schrift rein horizontal gesetzt werden kann. 2, wenn die Schrift vertikal und horizontal gesetzt werden kann.
encoding Die Schriftcodierung der Quelldatei. (0: Unicode, 1: Packed multibyte, 2: Shape file)
type Der Typ der Schriftlizenzierung. (0: Schrift darf eingebettet werden, 1: Schrift darf nicht eingebettet werden, 2: Eingebette Schriften dürfen nur gelesen werden)

Tabelle: Schriftmetadaten für Unicode Schriftdateien