Unterstützung bidirektionaler Sprachen

Folgende Themen werden behandelt:


Allgemeines zu bidirektionalen Sprachen

Einige Sprachen, z. B. Arabisch und Hebräisch, werden von rechts nach links (rechtsläufig, right-to-left, RTL) geschrieben, während die meisten Sprachen, z. B. Englisch und Deutsch, von links nach rechts geschrieben werden (linksläufig, left-to-right, LTR). Text, der Zeichen sowohl in rechtsläufiger als auch linksläufiger Schreibweise enthält, wird als bidirektionaler Text bezeichnet.

Die Unterstützung bidirektionaler Sprachen wird nicht automatisch aktiviert. Der Benutzer muss dazu immer alle erforderlichen Parameter (z.B. PM=I) so wie nachfolgend beschrieben angeben

Die Ausgabe von Natural-Programmen kann durch Angabe des Profilparameters PM (Druck-/Anzeige-Modus), des Terminalkommandos %V (Steuerung des Print-Modus) und des Session-Parameters PM gesteuert werden.

Zusätzlich wird der Profilparameter DO (Anzeige-Reihenfolge von Ausgabedaten) benutzt, um Anwendungen zu unterstützen, die ursprünglich für Terminals geschrieben wurden, die inversen Print-Modus (von rechts nach links), jedoch keine bidirektionalen Daten unterstützen. Diese Anwendungen erzeugen die Anzeigereihenfolge von bidirektionalen Daten inerhalb des Codes der Anwendung. Mit dem Profilparameter DO werden diese Anwendungen in die Lage versetzt, auch mit Eingabe-/Ausgabegeräten kompatibel zu laufen, die bidirektionale Daten unterstützen. Dies ist besipielsweise der Fall, wenn eine Anwendung in einem Browser mit dem Natural Web I/O Interface läuft.

Zeichenlaufrichtung im Bildschirm

Der Profileparameter PM definiert die Standard-Laufrichtung der Schriftzeichen im Bildschirm. Wenn PM auf R (Reset) gesetzt ist, ist die Standard-Laufrichtung linksläufig (von links nach rechts). Wenn PM auf I (Invers), gesetzt ist, ist die Standard-Laufrichtung rechtsläufig (von rechts nach links). Alle nicht-alphanumerischen Felder, Systemvariablen und PF-Tastenzeilen werden durch Natural automatisch invertiert, damit sie korrekt von rechts nach links laufend angezeigt werden, wenn die Laufrichtung im Bildschirm rechtsläufig ist.

Das Terminalkommando %V kann benutzt werden, um die Laufrichtung der Schriftzeichen im Bildschirm zu ändern. Laufrichtung im Bildschirm von rechts nach links verläuft, wird das Layout des aktuellen Fensters gespiegelt. was bedeutet, das der Ausgangspunkt aller Fensterbestandteile oder Felder in der rechten oberen Ecke des Bildschirms liegt. Durch Eingabe von %VON wird die Laufrichtung im Bildschirm in rechtsläufig geändert. Durch Eingabe von %VOFF wird sie umgekehrt und in linksläufig geändert.

Zeichenlaufrichtung im Feld

Der Session-Parameter PM dient zur Umkehr der Zeichenlaufrichtung in einem Feld. Die Wirkung, die mit der "Umkehr der Zeichenlaufrichtung" in einem Feld erzielt wird, ist abhängig von dem Statement, in dem der Session-Parameter PM benutzt wird und von der Plattform. Wird der Parameter PM in einem MOVE-Statement benutzt, wird der Inhalt des Feldes einfach nur umgekehrt (d.h. das erste Zeichen wird zum letzten Zeichen usw.). Das Ergebnis ist nicht abhängig von den Zeichen im Feld. Leerzeichen am Ende werden entfernt, bevor die Zeichenlaufrichtung im Feld umgekehrt wird.

Beispiel: Das folgende Programm

DEFINE DATA LOCAL
1  TEST1  (A10)
1  TEST2  (A10)
END-DEFINE
TEST1 := 'program'

MOVE TEST1 (PM=I) TO TEST2
INPUT TEST1 (AD=O) TEST2 (AD=O)

END

erzeugt folgende Ausgabe:

TEST1 program    TEST2 margorp

where "margorp" is the reversed version of "program".

When the PM parameter is used for IO statements such as INPUT or DISPLAY, its effect is even more complex. In this case, the field direction is based on the screen direction:

  • If the screen direction is left-to-right and PM=I is applied to a field, the field direction changes to right-to-left.

  • If the screen direction is right-to-left and PM=I is applied to a field, the field direction changes to left-to-right.

Auf Browser-Terminals (Natural Web I/O Interface) bedeutet "Umkehrung der Feldrichtung" nicht, dass die Zeichen des Feldes einfach umgedreht werden. Stattdessen wird der komplexe bidirektionale Algorithmus angewendet. Auf zeichenorientierten Terminals hingegen werden die Zeichen eines Feldes nicht umgeordnet, sondern einfach umgekehrt.

Im folgenden Beispiel wurden die Zeichen, die der Variablen TEST zugewiesen sind, in der folgenden Reihenfolge eingegeben:

Test variable

Wenn die Zeichen in der oben beschriebenen Reihenfolge eingegeben werden, wird das Programm wie folgt angezeigt, da die Zeichen einfach in der Reihenfolge der Tastatureingabe angezeigt werden.

DEFINE DATA LOCAL
1  TEST  (A20)
END-DEFINE
TEST := 'abc graphics/uni-testvariable.png 123'
 
SET CONTROL 'voff'
 
INPUT TEST (AD=O)  /
      TEST (AD=O PM=I) 
 
SET CONTROL 'von'
 
INPUT TEST (AD=O)  /
      TEST (AD=O PM=I) 
END

Dieses Programm erzeugt zwei identische Bildschirme, weil die Statements SET CONTROL 'voff' und SET CONTROL 'von' nicht für alphanumerische Felder gelten. Beide Bildschirme sehen wie folgt aus:

TEST abc graphics/uni-testvariable.png 123 
TEST          321 graphics/uni-testvariable-reversed.png  cba

Arabische Formgebung

Im arabischen Text sind normalerweise alle Zeichen einer Zeichenkette miteinander verbunden. Aus diesem Grund haben arablische Zeichen bis zu vier Darstellungsformen: die isolierte, die finale, die initale und die mediale Form. Welche Form verwendet wird, hängt von der Position des Zeichens in der Zeichenkette ab. Zum Beispiel hat das arabische Zeichen "MEEM" die folgenden Formen in Unicode:

U+0645 Arabic letter ARABIC LETTER MEEM
U+FEE1 Arabic letter ARABIC LETTER MEEM ISOLATED FORM
U+FEE2 Arabic letter ARABIC LETTER MEEM FINAL FORM
U+FEE3 Arabic letter ARABIC LETTER MEEM INITIAL FORM
U+FEE4 Arabic letter ARABIC LETTER MEEM MEDIAL FORM

Darüber hinaus werden Zeichen zu einer neuen Form zusammengesetzt, wenn sie nacheinander in einer Zeichenkette erscheinen. Das wird als "lLgatur" bezeichnet. Beispiel: Die Zeichen

U+0644 Arabic letter ARABIC LETTER LAM
U+0627 Arabic letter ARABIC LETTER ALEF

haben die folgende zusammengesetzte Form:

U+FEFB Arabic letter ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM

Unicode-Zeichenketten sollten nur die arabischen Zeichen des arabischen Blocks (U+0600 bis U+06FF) oder des arabischen Ergänzungsblocks (U+0750 bis U+077F) enthalten. Es wird nicht empfohlen, die Darstellungsformen in normalem arabischen Text zu verwenden. Es ist Aufgabe der Benutzeroberfläche, die korrekten Formen der Zeichen anzuzeigen.

"Geformt" (Shaped) bedeutet, dass jedes arabische Basiszeichen in die entsprechende arabische Darstellungsform umgewandelt wird. Die Zeichenfolge kann jede der vier Darstellungsformen eines Zeichens enthalten. Wenn zum Beispiel das Zeichen (Buchstabe) U+0645 (ARABIC LETTER MEEM) als letztes Zeichen einer Zeichenfolge verwendet wird, wird es in U+FEE2 (ARABIC LETTER MEEM FINAL FORM) umgewandelt.

"Ungeformt" (Unshaped) bedeutet, dass jedes Zeichen nur durch seine Grundform dargestellt wird. Zum Beispiel wird anstelle von U+FEE2 (ARABIC LETTER MEEM FINAL FORM) U+0645 (ARABIC LETTER MEEM) verwendet. Die Umwandlung in die richtige Darstellungsform wird von der Rendering-Engine des Ausgabegeräts vorgenommen.

Natural-Zeichenketten werden intern als ungeformte Alpha- oder Unicode-Zeichenketten dargestellt. Werden Zeichenketten mit einem Browser unter Verwendung des Natural Web I/O Interface-Clients oder des PROCESS PAGE-Statements angezeigt, ist keine Umwandlung erforderlich, da die Rendering-Engine des Browsers für die korrekte Darstellung sorgt. Eingehende Zeichenketten von solchen Geräten sind bereits ungeformt und können direkt an Natural übergeben werden. Wird eine Zeichenkette auf einem Terminal wie 3279 oder einem Terminalemulator wie IBM Personal Communications angezeigt, muss sie in die geformte Form umgewandelt werden, da das Terminal selbst nicht für die korrekte Darstellung sorgt. Dementsprechend liegen eingehende Zeichenketten in der geformten Form vor und müssen in die ungeformte Form umgewandelt werden, damit sie von Natural korrekt verarbeitet werden können. Die am meisten verbreitete Codepage für arabische Terminals auf dem Großrechner ist IBM420. Im Vergleich zu Unicode ist die Anzahl der Zeichen reduziert und nicht jede Form eines Zeichens ist enthalten. Bei der Umwandlung von Zeichenketten in IBM420 werden nicht verfügbare Formen eines Zeichens durch eine ähnliche Darstellungsform ersetzt. Zum Beispiel wird die mediale Form des arabischen Buchstabens MEEM (U+FEE4) durch die Anfangsform (U+FEE3) des Zeichens ersetzt.

In der arabischen EBCDIC-Codepage IBM420 wird das arabische Zeichen "MEEM" durch die folgenden Darstellungsformen dargestellt:

H’BA’ Arabic letter ARABIC LETTER MEEM
H’BB’ Arabic letter ARABIC LETTER MEEM INITIAL FORM

Arabisches Endfragment

Die arabischen Zeichen SEEN (U+0633), SHEEN (U+0634), SAD (U+0635) und DAD (U+0636) (Seen-Familie) werden auf Terminals als zwei Bytes angezeigt, wenn sie in der Endform erscheinen. Die Codepage IBM420 enthält ein so genanntes "arabisches Endfragment", das die Endform eines Zeichens der Seen-Familie auf Terminals oder Terminalemulatoren vervollständigt. Natürlich benötigt das arabische Endfragment eine zusätzliche Position auf dem Bildschirm. Das arabische Endfragment wird von den Browsern nicht benötigt. Wird eine Zeichenkette mit der Endform eines Zeichens der Seen-Familie in einen Browser eingegeben (Natural Web I/O Interface-Client oder PROCESS PAGE-Statement) und anschließend auf einem Terminal angezeigt, wird das arabische Endfragment an die Zeichenkette angehängt, was zur Folge hat, dass die Länge der Zeichenkette zunimmt. Wird eine Zeichenkette mit der Endform eines Zeichens der Seen-Familie über ein Terminal oder einen Terminalemulator eingegeben und anschließend in einem Browser angezeigt, wird das arabische Endfragment aus der Zeichenkette entfernt.