11. Anlage
 
zurück
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_String’Length + Currency_Length_Adjustment - Radix_Adjustment ist, und
  • Currency_Length_Adjustment = Currency’Length -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:
  1. 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.
  2. 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.
  3. 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.
  4. 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:
  1. 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.
  2. Das nächste Zeichen weiter links wird durch ein Zeichen aus der Tabelle "Aufbereitete Ausgabe für Vorzeichensteuerungssymbole" entsprechend dem "LHS_Sign_Character" ersetzt.
  3. Ein kontextsensitives Einfügungszeichen wird wie ein direktes Einfügungszeichen ersetzt, wenn es rechts des am weitesten links stehenden "LHS_signs" erscheint.
  4. Jedes andere Zeichen wird durch ein Leerzeichen ersetzt.
  5. 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 Currency’Length ist. Ein Anordnungsfehler tritt auf, wenn Currency’Length 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:
  1. 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.
  2. Das nächste Zeichen weiter links wird durch die Wähungszeichenkette ersetzt.
  3. Ein kontextsensitives Einfügungszeichen wird wie ein direktes Einfügungszeichen ersetzt, wenn es rechts von dem am weitesten links stehenden "$" erscheint.
  4. Jedes andere Zeichen wird durch ein Leerzeichen ersetzt.
  5. 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:
  1. 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.
  2. Die Teilzeichenkette, deren letztes Zeichen an der dem am weitesten links stehenden Zeichen unmittelbar bevorstehenden Position erscheint, und deren Länge Currency’Length ist, wird durch die Währungszeichenkette ersetzt.
  3. Ein kontextsensitives Einfügungszeichen wird wie ein direktes Einfügungszeichen ersetzt, wenn es rechts von dem am weitesten links stehenden "#" erscheint.
  4. Jedes andere Zeichen wird durch ein Leerzeichen ersetzt.
  5. 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.





 
zurück
 Index   Ada Tour - Dokumentation  
© 2003 Förderverein Ada Deutschland e.V.