Folgende Themen werden behandelt:
Manche Sprachen, z. B. Arabisch und Hebräisch, werden von rechts nach links (Right-to-left, RTL) geschrieben, während die meisten Sprachen, z. B. Englisch und Deutsch, von links nach rechts geschrieben werden (Left-to-right, LTR). Text, der Zeichen sowohl in von links nach rechts als auch von rechts nach links laufender 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 von links nach rechts. Ist
der Profilparameter PM
auf I
(Invers),
gesetzt, dann ist die Standard-Laufrichtung 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 von rechts nach links
ist.
Das Terminalkommando %V
kann benutzt
werden, um die Laufrichtung der Schriftzeichen im Bildschirm zu ändern. Wenn
Laufrichtung im Bildschirm von rechts nach links ist, wird das Layout des
aktuellen Fensters gespiegelt, was bedeutet, dass der Ausgangspunkt aller
Fensterbestandteile oder Felder in der rechten oberen Ecke des Bildschirms
liegt. Durch Eingabe von %VON
wird die Laufrichtung
im Bildschirm in von rechts nach links geändert. Durch Eingabe von
%VOFF
wird sie umgekehrt und in von links nach
rechts 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 Session-Parameter PM
in
einem MOVE
-Statement benutzt, dann 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.
Wird der Session-Parameter PM
bei
Ein-/Ausgabe-Statements, z.B. INPUT
oder DISPLAY
benutzt, ist seine Wirkung noch komplexer. In diesem Fall basiert die
Zeichenlaufrichtung im Feld auf der Zeichenlaufrichtung im Bildschirm:
Wenn die Zeichenlaufrichtung im Bildschirm von links nach rechts
ist und die Parametereinstellung PM=I
bei einem Feld angewendet
wird, dann ändert sich die Zeichenlaufrichtung im Feld in von rechts nach
links.
Wenn die Zeichenlaufrichtung im Bildschirm von rechts nach links
ist und die Parametereinstellung PM=I
bei einem Feld angewendet
wird, dann ändert sich die Zeichenlaufrichtung im Feld in von links nach
rechts.
Bei 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 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 arabischem 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.