Folgende Themen werden behandelt:
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
innerhalb 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 beispielsweise der Fall, wenn
eine Anwendung in einem Browser mit dem Natural Web I/O Interface läuft.
Der Profilparameter 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.
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
wobei "margorp" die umgekehrte Version von "program" ist.
Wenn der Parameter PM bei IO-Statements wie INPUT
oder DISPLAY verwendet wird, ist seine Wirkung noch komplexer. In diesem Fall
richtet sich die Feldrichtung nach der Richtung des Bildschirms:
Wenn die Richtung des Bildschirms von links nach rechts verläuft und
PM=I auf ein Feld angewendet wird, ändert sich die Feldrichtung in
rechts nach links.
Wenn die Richtung des Bildschirms von rechts nach links verläuft und
PM=I auf ein Feld angewendet wird, ändert sich die Richtung des Feldes
in links nach rechts.
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:
![]()
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 := 'abc123' 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 abc123 TEST 321
cba
Im arabischen Text sind normalerweise alle Zeichen einer Zeichenkette miteinander verbunden. Aus diesem Grund haben arabische Zeichen bis zu vier Darstellungsformen: die isolierte, die finale, die initiale 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 MEEM | |
| U+FEE1 | ARABIC LETTER MEEM ISOLATED FORM | |
| U+FEE2 | ARABIC LETTER MEEM FINAL FORM | |
| U+FEE3 | ARABIC LETTER MEEM INITIAL FORM | |
| U+FEE4 | 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 "Ligatur" bezeichnet. Beispiel: Die Zeichen
| U+0644 | ARABIC LETTER LAM | |
| U+0627 | ARABIC LETTER ALEF |
haben die folgende zusammengesetzte Form:
| U+FEFB | 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 MEEM | |
| H’BB’ | ARABIC LETTER MEEM INITIAL FORM |
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.