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 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.
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.
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:
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 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 123 TEST 321 cba
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 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 "lLgatur" 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.