|
11.6.2 Erzeugung einer aufbereiteten Ausgabe (edited output
generation)
Der Inhalt einer aufbereiteten Ausgabezeichenkette basiert auf:
- einem Wert "Item" von einem dezimalen Typ "Num",
- einer erweiterten Musterzeichenkette "Pic_String",
- einem booleschen Wert "Blank_When_Zero",
- einer Währungszeichenkette "Currency_String",
- einem Füllzeichen "Fill",
- einem Trennzeichen "Seperator" und
- einem Radixmarkierungszeichen "Radix_Mark".
Die Kombination von einem wahren Wert für "Blank_When_Zero"
und einem "*"-Zeichen in "Pic_String" ist inkonsistent; keine
aufbereitete Ausgabenzeichenkette ist definiert.
Ein Anordnungsfehler (layout error) wird in den nachstehenden Regeln ausgewiesen,
wenn führende Ziffern von "Item", die nicht 0 sind, Zeichen der
Währungszeichenkette oder ein negatives Vorzeichen abgeschnitten werden;
in solchen Fällen ist keine aufbereitete Ausgabezeichenkette definiert.
Die aufbereitete Zeichenkette hat eine untere Grenze von 1 und eine obere Grenze
von N, wobei N = Pic_StringLength + Currency_Length_Adjustment - Radix_Adjustment
ist, und
- Currency_Length_Adjustment = CurrencyLength -1, wenn "$" in
"Pic_String" auftritt, oder andernfalls 0.
- Radix_Adjustment=1, wenn "V" oder "v" in "Pic_String"
auftritt, oder andernfalls 0.
Die Ausdehnung von "Item" soll als Zahl zur Basis 10 ausgedrückt
sein Ip...I1.F1...Fq. Sie wird als angezeigte Ausdehnung (displayed magnitude)
von "Item" bezeichnet, wobei:
- q=Min(Max(Num'Scale,0),n), wobei n 0 ist, wenn "Pic_String" keinen
Radix hat, oder andernfalls
die Anzahl von Zifferpositionen, die Radix in "Pic_String" folgen, wobei
eine Zifferposition einer "9",
einem Nullunterdrückungszeichen (für ein "all_zero_suppression_number"),
einem Währungszeichen (für ein "all_currency_number") oder
einem Vorzeichen (für ein "all_sign_number") entspricht.
- Ip /= 0, wenn p>0.
Wenn n < Num'Scale, dann ist die obige Zahl das Ergebnis einer Rundung (in
der Mitte zwischen zwei Werten wird aufgerundet).
Wenn "Blank_When_Zero" wahr ist und die angezeigte Ausdehnung von
"Item" null ist, dann enthält die aufbereitete Ausgabezeichenkette
nur Leerzeichen. Andernfalls wird die Musterzeichenkette als Folge von Vorkommen
von syntaktischen Kategorien behandelt und die aufbereitete Ausgabezeichenkette
ist das Aneinanderfügen von Zeichenketten, die aus diesen Kategorien entsprechend
den folgenden Abbildungsregeln abgeleitet sind.
Abbildungsregeln
Die folgende Tabelle zeigt die Abbildung von einem Vorzeichensteuerungssymbol
auf ein entsprechendes Zeichen oder eine Zeichenkette in der aufbereiteten Ausgabezeichenkette.
In den Spalten, die die aufbereitete Ausgabe zeigen, stellt ein kleines "b"
ein Leerzeichen dar. Wenn es kein Vorzeichensteuerungssymbol gibt, aber der Wert
von "Item" negativ ist, erscheint ein Anordnungsfehler (layout error)
und es wird keine aufbereitete Ausgabe-
zeichenkette erzeugt.
Tabelle: Aufbereitete Ausgabe für Vorzeichensteuerungssymbole
Eine Instanz von "fixed_LHS_sign" wird auf ein Zeichen abgebildet.
Eine Instanz von "fixed_$_char" wird auf die Währung abgebildet.
Eine Instanz von "direct_insertion" wird auf das Trennzeichen abgebildet,
wenn direct_insertion = "_" oder andernfalls auf das Zeichen "direct_insertion".
Eine Instanz von Zahl wird auf die Zeichenkette integer_part & radix_part
& fraction_part abgebildet, wobei:
- Die Zeichenkette für "integer_part" wie folgt erzielt wird:
1. Das Auftreten von "9" in "fore_digits" wird von rechts
nach links nacheinander durch die dezimalen Ziffern I1, ..., Ip ersetzt.
2. Jedes Auftreten von "9" in "fore_digits" links von der
am weitesten links stehenden "9" wird durch "0" ersetzt.
3. Wenn p die Anzahl des Auftretens von "9" in "fore_digits"
überschreitet, dann können die überschüssigen links stehenden
Ziffern in einer Abbildung einer Instanz einer Nullunterdrückung, eines "floating_LHS_sign",
floating_$_currency oder floating_#_currency links von der Zahl verwendet werden.
Wenn es keine Instanz gibt, dann tritt ein Anordnungsfehler
auf und es wird keine aufbereitete Ausgabezeichenkette erzeugt.
- Der "radix_part" ist:
- "", wenn die Zahl keinen Radix enthält oder radix="V"
oder radix="v".
- Radixmarkierung, wenn die Zahl einen "." als Radix enthält.
- Die Zeichenkette für "fraction" wird wie folgt erzielt:
- Das Auftreten von "9" in "aft_digits" wird von rechts
nach links durch die dezimalen Ziffern für F1, ..., Fq ersetzt.
- Jedes Auftreten von "9" in "aft_digits" rechts von der
weitesten rechts stehenden "9" wird durch "0"ersetzt.
Eine Instanz einer Nullunterdrückung wird auf eine wie folgt gewonnene
Zeichenkette abgebildet:
- Die am weitesten rechts stehenden Zeichen "Z", "z" oder
"*" werden durch die überschüssigen Zeichen (wenn es welche
gibt) von "integer_part" rechts von der Nullunterdrückung ersetzt.
- Ein kontextabhängiges Zeichen wird wie ein direktes Einfügungszeichen
ersetzt, wenn es rechts von "Z", "z" oder "*" in
der Nullunterdrückung auftritt, die auf die überschüssige Ziffer
abgebildet wurde.
- Jedes Zeichen links des am weitesten links stehenden Zeichens wird ersetzt
durch:
das Leerzeichen, wenn das Nullunterdrückungszeichen "Z"
oder "z" ist, oder
das Füllzeichen, wenn das Nullunterdrückungszeichen "*"
ist.
- Ein Anordungsfehler erscheint, wenn überschüssige Zeichen verbleiben,
nachdem "Z"-, "z"- und
"*"-Zeichen in der Nullunterdrückung gemäß der Regel
1 ersetzt wurden; es wird keine aufbereitete Zeichenkette erzeugt.
Eine Instanz von "RHS_sign" wird auf ein Zeichen oder eine Zeichenkette
wie in der Tabelle "Aufbereitete Ausgabe für Vorzeichensteuerungssymbole"
abgebildet.
Eine Instanz von "floating_LHS_sign" wird auf eine wie folgt gewonnene
Zeichenkette abgebildet:
- Bis auf eines der am weitesten rechts stehenden "LHS_sign" werden
Zeichen durch die überschüssigen Ziffern von "integer_part"
rechts von der "floating_LHS_sign"-Instanz ersetzt.
- Das nächste Zeichen weiter links wird durch ein Zeichen aus der Tabelle
"Aufbereitete Ausgabe für Vorzeichensteuerungssymbole" entsprechend
dem "LHS_Sign_Character" ersetzt.
- Ein kontextsensitives Einfügungszeichen wird wie ein direktes Einfügungszeichen
ersetzt, wenn es rechts des am weitesten links stehenden "LHS_signs"
erscheint.
- Jedes andere Zeichen wird durch ein Leerzeichen ersetzt.
- Ein Anordungsfehler erscheint, wenn überschüssige Zeichen verbleiben,
nachdem gemäß der Regel 1 ersetzt wurde; es wird keine aufbereitete
Zeichenkette erzeugt.
Eine Instanz von "fixed_#_currency" wird auf die Währungszeichenkette
mit n verketteten Leerzeichen auf der linken Seite, wenn die Instanz keinem Radix
folgt, abgebildet oder auf der rechten Seite, wenn die Instanz einem Radix folgt,
wobei n die Differenz zwischen der Länge der "fixed_#_currency"-Instanz
und CurrencyLength ist. Ein Anordnungsfehler tritt auf, wenn CurrencyLength
die Länge der "fixed_#_currency"-Instanz überschreitet; es
wird keine aufbereitete Zeichenkette erzeugt.
Eine Instanz von "floating_$_currency" wird auf eine wie folgt gewonnene
Zeichenkette abgebildet:
- Bis auf eines der am weitesten rechts stehenden "$"-Zeichen, werden
die Zeichen durch die überschüssigen Ziffern von "integer_part"
rechts von der "floating_$_currency"-Instanz ersetzt.
- Das nächste Zeichen weiter links wird durch die Wähungszeichenkette
ersetzt.
- Ein kontextsensitives Einfügungszeichen wird wie ein direktes Einfügungszeichen
ersetzt, wenn es rechts von dem am weitesten links stehenden "$" erscheint.
- Jedes andere Zeichen wird durch ein Leerzeichen ersetzt.
- Ein Anordungsfehler erscheint, wenn überschüssige Zeichen verbleiben,
nachdem gemäß der Regel 1 ersetzt wurde; es wird keine aufbereitete
Zeichenkette erzeugt.
Eine Instanz von "floating_#_currency" wird auf eine wie folgt gewonnene
Zeichenkette abgebildet:
- Bis auf eines der am weitesten rechts stehenden "#"-Zeichen, werden
die Zeichen durch die überschüssigen Ziffern von "integer_part"
rechts von der "floating_#_currency"-Instanz ersetzt.
- Die Teilzeichenkette, deren letztes Zeichen an der dem am weitesten links
stehenden Zeichen unmittelbar bevorstehenden Position erscheint, und deren Länge
CurrencyLength ist, wird durch die Währungszeichenkette ersetzt.
- Ein kontextsensitives Einfügungszeichen wird wie ein direktes Einfügungszeichen
ersetzt, wenn es rechts von dem am weitesten links stehenden "#" erscheint.
- Jedes andere Zeichen wird durch ein Leerzeichen ersetzt.
- Ein Anordungsfehler erscheint, wenn überschüssige Zeichen verbleiben,
nachdem gemäß der Regel 1 ersetzt wurde, oder keine Teilzeichenkette
mit der geforderten Länge für die Ersetzungsregel 2 gibt; es wird keine
aufbereitete Zeichenkette erzeugt.
Eine Instanz von "all_zero_suppression_number" wird abgebildet auf
- eine Zeichenkette, die nur aus Leerzeichen besteht, wenn die Ausdehnung des
"Item" null ist, das Leerzeichenunter- drückungszeichen "Z"
oder "z" ist und die Instanz von "all_zero_suppression_number"
keinen Radix an seiner letzten Zeichenposition hat.
- eine Zeichenkette, die das Füllzeichen an jeder Stelle enthält mit
Ausnahme des Zeichens (wenn es eines gibt), das dem Radix entspricht, wenn zero_suppression_char
= "*" und die angezeigte Ausdehnung von "Item" null ist.
- andernfalls das gleiche Ergebnis, als ob jedes Leerzeichenunterdrückungssymbol
in "all_zero_suppression_aft" "9" wäre, wobei die Instanz
von "all_zero_suppresion_number" entweder als "zero_suppression"
Zahl, wenn ein Radix und "all_zero_suppression_aft" vorhanden sind,
oder als "zero_suppression" interpretiert wird.
Eine Instanz von "all_sign_number" wird abgebildet auf
- eine Zeichenkette, die nur aus Leerzeichen besteht, wenn die Ausdehnung des
"Item" null ist und ie Instanz von "all_sign_number" keinen
Radix an seiner letzten Zeichenposition hat.
- andernfalls das gleiche Ergebnis, als ob jedes Vorzeichen in "all_sign_number_aft"
"9" wäre, wobei die Instanz von "all_sign_number" entweder
als "floating_LHS_sign"-Zahl, wenn ein Radix und "all_zero_suppression_aft"
vorhanden sind, oder als "floating_LHS_sign" interpretiert wird.
Eine Instanz von "all_currency_number" wird abgebildet auf
- eine Zeichenkette mit lauter Leerzeichen, wenn die Ausdehnung des "Item"
null ist und die Instanz von "all_currency_number" keinen Radix an seiner
letzten Zeichenposition hat.
- andernfalls das gleiche Ergebnis, als ob jedes Vorzeichen in "all_currency_number_aft"
"9" wäre, wobei die Instanz von "all_currency_number"
entweder als "floating_$_currency" Zahl oder "floating_#_currency"
Zahl, wenn ein Radix und "all_currency_number_aft" vorhanden sind, oder
als "floating_$_currency" oder "floating_#_currency" interpretiert
werden.
Beispiel:
In den untenstehenden Ergebniszeichenketten steht "b" für das
Leerzeichen.
|