Signatur
Beschreibung
ps_hyphenate() ist Teil der PS-Erweiterung (PostScript) in PHP und ermöglicht die automatische Silbentrennung eines einzelnen Wortes. Die Funktion nutzt intern ein Trennmuster-Wörterbuch (z. B. nach dem TeX-Algorithmus von Frank Liang), das zuvor mit ps_load_font() bzw. der Konfiguration des PostScript-Dokuments geladen worden sein muss.
Das Ergebnis ist ein Array von Integer-Positionen, die angeben, an welchen Zeichenstellen im übergebenen Wort ein gültiger Trennstrich gesetzt werden darf. Diese Positionen können anschließend genutzt werden, um Wörter korrekt umzubrechen und so Blocksatz oder Flattersatz in PS-Dokumenten typografisch zu verbessern.
Die Funktion ist besonders nützlich beim automatisierten Erzeugen von Druckdokumenten in deutsch- oder fremdsprachiger Umgebung, wo eine korrekte Silbentrennung essenziell für das Schriftbild ist. Sie setzt voraus, dass für die verwendete Sprache ein entsprechendes Trennmuster-Wörterbuch geladen wurde.
Wird kein Wörterbuch geladen oder schlägt die Trennung fehl, gibt die Funktion false zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $psdoc Pflicht | resource | Eine gültige PostScript-Dokumentressource, die zuvor mit ps_new() erzeugt wurde. |
|
| $word Pflicht | string | Das zu trennende Wort als einfache Zeichenkette. Es sollte nur ein einzelnes Wort ohne Leerzeichen übergeben werden. |
Rückgabewert
false zurückgegeben.Beispiele
Silbentrennung eines deutschen Wortes
<?php
// PostScript-Dokument erstellen
$ps = ps_new();
ps_open_file($ps, 'dokument.ps');
// Parameter setzen (Hyphenation-Wörterbuch muss als ps_parameter gesetzt werden)
ps_set_parameter($ps, 'hyphenation-file', '/usr/share/texmf/tex/generic/hyph-utf8/patterns/tex/hyph-de-1901.pat');
ps_set_parameter($ps, 'hyphenate', 'true');
// Wort trennen
$wort = 'Silbentrennung';
$positionen = ps_hyphenate($ps, $wort);
if ($positionen !== false) {
echo 'Trennpositionen in "' . $wort . '": ';
echo implode(', ', $positionen) . PHP_EOL;
// Wort an der ersten möglichen Stelle trennen
if (!empty($positionen)) {
$pos = $positionen[0];
$teil1 = substr($wort, 0, $pos);
$teil2 = substr($wort, $pos);
echo 'Erstes Trennmuster: ' . $teil1 . '-' . $teil2 . PHP_EOL;
}
} else {
echo 'Trennung fehlgeschlagen oder kein Wörterbuch geladen.' . PHP_EOL;
}
ps_close($ps);
ps_delete($ps);
Trennpositionen zur Darstellung im PS-Dokument nutzen
<?php
$ps = ps_new();
ps_open_file($ps, 'ausgabe.ps');
ps_set_parameter($ps, 'hyphenation-file', '/etc/tex/hyph-de.pat');
ps_set_parameter($ps, 'hyphenate', 'true');
$woerter = ['Donaudampfschifffahrtsgesellschaft', 'Programmierung', 'Datenbankverwaltung'];
foreach ($woerter as $wort) {
$stellen = ps_hyphenate($ps, $wort);
if (is_array($stellen) && count($stellen) > 0) {
$letztePosition = $stellen[count($stellen) - 1];
$zeile1 = substr($wort, 0, $letztePosition) . '-';
$zeile2 = substr($wort, $letztePosition);
echo $zeile1 . PHP_EOL . $zeile2 . PHP_EOL . PHP_EOL;
}
}
ps_close($ps);
ps_delete($ps);
// Wichtig · Fallstricke
Voraussetzung: Die PS-Erweiterung (ps) muss in PHP kompiliert und aktiviert sein. Sie ist nicht standardmäßig enthalten und muss separat installiert werden (z. B. über PECL: pecl install ps).
Wörterbuch: Damit die Silbentrennung funktioniert, muss ein sprachspezifisches Trennmuster-Wörterbuch explizit über ps_set_parameter() mit dem Schlüssel hyphenation-file gesetzt werden. Ohne gültiges Wörterbuch gibt die Funktion false oder ein leeres Array zurück.
Zeichensatz: Es wird empfohlen, nur Wörter in der Kodierung zu übergeben, die auch das verwendete Wörterbuch erwartet (häufig ISO-8859-1 oder UTF-8 je nach Wörterbuch). Falsche Kodierungen können zu fehlerhaften Trennpositionen führen.