Silbentrennung in HTML - Teil 1

Project has moved

For the most recent documentations and versions of Hyphenator please go to http://code.google.com/p/hyphenator/

Abstract

Dieser Artikel behandelt im ersten Teil die Problematik der Silbentrennung in Webbrowsern und führt im zweiten Teil als möglichen Lösungsansatz eine automatische Silbentrennung an. Diese beruht auf dem Ansatz von Liang, verwendet die Trennmuster für die deutsche Silbentrennung aus der LaTeX-Distribution und ist in JavaScript implementiert.
In diesem Dokument wurde die Silbentrennung durch das Script vorgenommen; verändern Sie die Fenstergrösse um das Resultat zu sehen.

This article treats in its first part the problem of word hyphenation in current webbrowsers. In its second part a javascript doing automatic word hyphenation is presented as a possible solution. This script relies on Liangs thesis and uses hyphenation patterns from the LaTeX-Distribution.

Block- und Flattersatz

Normalerweise werden Textabsätze von den Browsern in linksbündigem Flattersatz angezeigt. Mit dem CSS-Befehl text-align:justify; ist es möglich, die Absätze im Blocksatz anzuzeigen, was aber bei schmalen Textspalten mangels Silbentrennung zu einem hässlichen Schriftbild führen kann.

Auch sonst ist Blocksatz auf Webseiten nicht unumstritten. Man geht davon aus, dass der Flattersatz (zusammen mit einer nicht zu langen Zeilenlänge und genügendem Zeilenabstand) dem Auge hilft, sich zwischen den Zeilen zurechtzufinden. Mit anderen Worten, bei Texten mit Flattersatz kommt es seltener vor, dass sich das Auge beim Sprung auf die nächste Zeile verirrt.

Für Bildschirmtexte gilt allgemein, dass der Abstand zu den Augen grösser ist, als bei gedruckten Texten. Ausserdem wird beim Lesen am Bildschirm kaum je der Finger als Orientierungshilfe verwendet. Um einen Bildschirmtext leserfreundlich zu gestalten sollte er deshalb eher im Flattersatz gesetzt werden. Geht es aber darum, eine Webseite mittels CSS für den Druck aufzubereiten, können Blocksatz und Silbentrennung sehr erwünscht sein.

Silbentrennung kann aber auch im Flattersatz nötig sein, nicht nur um den Flattersatz zu «beruhigen», sondern auch um lange Wörter in schmalen Spalten oder Boxen umzubrechen.

Animation zeigt die Wikrung von Silbentrennung

Automatische Silbentrennung

In professionellen Layoutprogrammen aus dem Printbereich wird der Silbentrennung grosse Aufmerksamkeit geschenkt. Fragen wie optischer Randausgleich spielen wegen der viel geringeren Auflösung der Darstellung im Web aber kaum eine Rolle. Im Gegenteil: Im Web gibt es keine (oder «noch keine» oder «kaum», mehr dazu später) Silbentrennung!

Die automatische Silbentrennung ist aus verschiedenen Gründen ein schwieriges Kapitel der Informatik.
Einerseits ist sie stark abhängig von der jeweiligen Sprache. Englisch hat eher kürzere Wörter, während die deutsche Sprache lange Wortkombinationen zulässt. Ganz anders verhalten sich asiatische Sprachen. So werden zum Beispiel in Thai nicht einmal Wortzwischenräume gesetzt.

In den meisten Textverarbeitungsprogrammen werden lexikalische Algorithmen eingesetzt, die zu jedem zu trennenden Wort die Trennstellen und Wortbestandteile in einer Wörterliste nachschlagen. Wörter oder Wortbestandteile, die nicht auf der Liste sind, müssen aber vom Benutzer manuell getrennt werden. Der Nachteil dieses Ansatzes ist der hohe Speicherbedarf und der Umstand, dass Komposita nicht immer erkannt werden.

Eine andere Möglichkeit sind musterbasierte Algorithmen, welche versuchen aus einer Wörterliste Muster zu erkennen und davon Trennstellen ableiten. Der bekannteste Algorithmus stammt von Frankling Mark Liang (Word Hy-phen-a-tion by Com-put-er), wurde 1983 entwickelt und wird seither in vielen Programmen wie LaTeX oder OpenOffice verwendet. Musterbasierte Algorithmen können abhängig von der Länge der Musterliste ca 90% aller Trennstellen finden, wobei es aber auch zu schlechten, weil sinnverzerrenden Trennstellen kommen kann (Beispiel: bein-halten), welche wiederum manuell korrigiert werden müssen.

Silbentrennung im Web heute

Der HTML401-Standard besagt folgendes:

In HTML gibt es zwei Typen von Trennzeichen: den normalen Trennstrich und das weiche Trennzeichen (soft hyphen). Der normale Trennstrich sollte von den Benutzerprogrammen wie jedes andere Zeichen behandelt werden. Das weiche Trennzeichen zeigt dem Benutzerprogramm, wo ein Zeilenumbruch auftreten kann.

Diejenigen Browser, die weiche Trennzeichen interpretieren, müssen folgende Semantik beachten: Wenn eine Zeile an einem weichen Trennzeichen umgebrochen wird, muss ein Trennstrich am Ende der ersten Zeile stehen. Wenn eine Zeile an einem weichen Trennzeichen nicht umgebrochen wird, darf das Benutzerprogramm keinen Trennstrich ausgeben. Bei Operationen wie Suchen und Sortieren sollte das weiche Trennzeichen immer ignoriert werden.

In HTML wird der normale Trennstrich durch das '-'-Zeichen (- or -) repräsentiert. Das weiche Trennzeichen wird repräsentiert durch die Zeichen-Entity-Referenz ­ (soft hyphen, ­ oder ­)

Der HTML-Standard schreibt also nicht vor, dass Browser das ­-Zeichen als Trennstelle erkennen müssen. Zur Zeit nehmen aber alle aktuellen Browser (Internet Explorer ab Verion 5, Safari 2, Opera ab Version 7.1) ausser Firefox 2.0 Trennungen vor.
(Update vom 5.7.2007: Die zukünftige Browserengine von Firefox, Gecko 1.9 unterstützt ­ seit dem sechsten Alpha-Release. Diese Entwicklungen werden voraussichtlich in Firefox 3.0 integriert.)
Die Trennstellen (­) muss der Autor aber manuell einfügen.

Der grosse Nachteil der vorgängigen Trennung mit ­ ist, dass Wörter, welches dieses Sonderzeichen enthalten, in allen Browsern von Suchfunktionen nicht mehr gefunden werden.
Ich gehe davon aus, dass auch Suchmaschinen solche Wörter nicht indizieren.

Silbentrennung im Web morgen

Mit CSS 3 (heute ist CSS 2.1 aktuell), wird es möglich sein, das Trennungsverhalten von Textabsätzen mittels CSS zu steuern. Aber auch hier wird nicht vorgeschrieben, dass Browser diese Silbentrennung vornehmen müssen.

Zusammenfassung

Silbentrennung im Web ist nicht so wichtig, da der Blocksatz ohnehin keinen hohen Stellenwert hat. Trotzdem kann sie – auch im Flattersatz – bei schmalen Spalten nötig bzw. hilfreich sein. Silbentrennungen müssen zur Zeit vom Autor manuell mit dem Sonderzeichen ­ vorgenommen werden, welches aber vom Firefox derzeit nicht unterstützt wird. Eine automatische browserseitige Silbentrennung für HTML gibt es bislang nicht.

Wie weiter?

Mit der kommenden Version 3.0 wird auch Firefox ­ unterstützen. Eine Automatisierung der Silbentrennung wird deshalb immer interessanter. Bis die Browser selbst eine Silbentrennung integriert haben, muss diese entweder beim Schreiben der Texte (durch den Texteditor), vor dem Ausliefern auf dem Server (mittels CGI-Skript) oder im Browser (JavaScript) vorgenommen werden.

Eine Umsetzung in JavaScript hat den Vorteil, dass die Silbentrennung den Text für Suchfunktionen nicht a priori unleserlich macht und vom Benutzer ein- oder ausgeschaltet werden kann.

Der zweite Teil dieses Artikels befasst sich mit der Implementierung einer automatischen Silbentrennung in JavaScript.