Mehrsprachigkeit
Der speedata Publisher kann seit jeher mit mehrsprachigen Texten umgehen. Für sehr viele (westliche) Sprachen gibt es Trennmuster. Einfache Texte in Chinesisch waren schon immer möglich. Mit der Version 4.1 hat sich sehr viel im Bereich der Sprachfähigkeit getan. Nun können auch komplexe Sprachen wie Arabisch und gemischte rechts-nach-links (RTL) und links-nach-rechts (LTR) Texte korrekt dargestellt werden.
Der speedata Publisher integriert zwei wichtige Funktionen bzw. Bibliotheken, um das zu können. Das sind
- harfbuzz Bibliothek
- Bidi-Algorithmus
Harfbuzz
Über die Harfbuzz-Bibliothek hatte ich schon geschrieben. Das ist eine Bibliothek, die OpenType Fonts lädt und aus einem UTF8-String für eine Sprache die richtigen Zeichen in der richtigen Reihenfolge heraus sucht und positioniert (bzw. Positionsangaben liefert). Dabei beachtet die Bibliothek alle eingestellten OpenType Features als auch die Sprachbesonderheiten.
Auf macOS kann man ganz nett mit der App Font Goggles herum spielen, diese hat Harfbuzz eingebaut.
Harfbuzz ist eine sehr stabile und leistungsfähige Bibliothek, die in sehr vielen Anwendungen (z.B. Adobe Indesign) enthalten ist.
Mit Harfbuzz sind auch komplexe Ligaturen kein Problem:
<Layout xmlns="urn:speedata.de:2009/publisher/en"
xmlns:sd="urn:speedata:2009/publisher/functions/en">
<LoadFontfile name="Zapfino" filename="Zapfino.ttf"
mode="harfbuzz"/>
<DefineFontfamily fontsize="10" leading="12"
name="text">
<Regular fontface="Zapfino" />
</DefineFontfamily>
<Record element="data">
<PlaceObject>
<Textblock>
<Paragraph>
<Value>Zapfino</Value>
</Paragraph>
</Textblock>
</PlaceObject>
</Record>
</Layout>
Die Eingabe in Harfbuzz besteht aus den Unicode-Werten:
Z U+005A LATIN CAPITAL LETTER Z
a U+0061 LATIN SMALL LETTER A
p U+0070 LATIN SMALL LETTER P
f U+0066 LATIN SMALL LETTER F
i U+0069 LATIN SMALL LETTER I
n U+006E LATIN SMALL LETTER N
o U+006F LATIN SMALL LETTER O
Harfbuzz ersetzt diese durch die Angaben im Font durch ein Zeichen mit der Glyph-ID 1059 und dem internen Namen Z_a_p_f_i_n_o
. Die Ausgabe ist:
Ohne Harfbuzz bzw. einem äquivalenten Ligaturmechanismus sieht es nicht so gut aus:
Unicode Bidirectional Algorithm (UBA)
Die zweite große Änderung ist die Einbettung eines Algorithmus zum Mischen von RTL und LTR Texten.
Die Zeichenkette »العاشر ليونيكود (Unicode Conference)، الذي سيعقد في 10-12 آذار 1997 مبدينة« beispielsweise besteht aus mehreren Abschnitten, die jeweils ihre eigene Schreibrichtung haben. Damit der Text im PDF korrekt dargestellt wird, muss die Schreibrichtung erkannt werden und mit Markierungen für die Ausgabe versehen werden. Die einzelnen Segmente der Zeichenkette sind
العاشر ليونيكود (
Unicode Conference
)، الذي سيعقد في
10
-
12
آذار
1997
مبدينة
Die ungeraden Einträge haben die Schreibrichtung rechts nach links.
Im speedata Publisher sieht das dann so aus:
<Layout xmlns="urn:speedata.de:2009/publisher/en"
xmlns:sd="urn:speedata:2009/publisher/functions/en">
<LoadFontfile name="Amiri-Regular" filename="amiri-regular.ttf"
mode="harfbuzz"/>
<DefineFontfamily fontsize="10" leading="12" name="text">
<Regular fontface="Amiri-Regular" />
</DefineFontfamily>
<Record element="data">
<PlaceObject>
<Textblock width="5">
<Paragraph direction="rtl" bidi="yes">
<Value>العاشر ليونيكود (Unicode Conference)، الذي سيعقد في 10-12 آذار 1997 مبدينة</Value>
</Paragraph>
</Textblock>
</PlaceObject>
</Record>
</Layout>
Die Verfahren, um die Schreibrichtung einzelner Texte zu erkennen, sind im Unicode-Standard definiert, damit alle Programme sich gleich verhalten. Der speedata Publisher nimmt für die Implementierung die Logik aus der Go-Bibliothek text/unicode/bidi genommen (zu der ich auch die API implementiert habe).
Beispiele im Netz
Die Mehrsprachigkeit von speedata wurde sehr intensiv getestet. Die Webseite www.aionianbible.org bietet eine besondere Bibelübersetzung in vielen Sprachen. Die PDF-Dateien werden alle mit dem speedata Publisher erzeugt.