Textantrieb

Textengine

Integer-Konfiguration

Integer-Konfiguration

Die Textengine verfügt über Unterstützung für die Formatierung von Ganzzahlen, d.h. diese lassen sich als Zeichenketten ein- und ausgeben. Wie die Zahlen beim Parsen erwartet und wie sie beim Formatieren generiert werden, ist konfigurierbar. So sieht beispielsweise eine Konfiguration aus:

Quelle integer-cf1, Schema integerf format

~= cf :integer format { 
    ~base { ~digit #1; ~digit #0; }; 
    ~order #big-endian;
    ~padding { ~digit #1; };
    ~group { 
        ~separator #chars."."; 
        ~count { ~digit #3; }; 
        ~backward; 
    };
    ~chars {
        ~negative #chars."-";
        ~digits "0123456789";
    };
};

Das gibt die Zahlen in der üblichen Form aus, der Punkt dient als Tausendertrennzeichen. Man kann auch mit ~order #little-endian die Ziffer in umgekehrter Reihenfolge bekommen, die Zeichen für positive und negative Zahlen jeweils definieren, und die Ziffer nach anderen Kriterien gruppieren.

Sehen wir ein Beispiel. Wenn man Basis 4, Padding 4 und die Zeichen „·” für 0, A für 1, B für 2 und C für 3 nimmt, werden die Zahlen 0 bis 12 wie folgt ausgedrückt. Das gilt sowohl fürs Parsen wie fürs Formatieren:

Quelle integer-cf2, Schema integerf format

~= cf2 :integer format { 
    ~base { ~digit #4; }; 
    ~order #big-endian;
    ~padding { ~digit #4; };
    ~chars {
        ~negative #chars."-";
        ~digits "·ABC";
    };
};
FMT(0)
····
FMT(1)
···A
FMT(2)
···B
FMT(3)
···C
FMT(4)
··A·
FMT(5)
··AA
FMT(6)
··AB
FMT(7)
··AC
FMT(8)
··B·
FMT(9)
··BA
FMT(10)
··BB
FMT(11)
··BC
FMT(12)
··C·

Das System stellt eine Konfiguration bereit, die standardmäßig angewendet wird. Wenn man eine andere Darstellung möchte, kann man entweder eine neue Konfiguration wie die obige definieren, oder von der standardmäßigen ableiten und sie ergänzen.

Quelle integer-cf3, Schema system integerf format

~= Zahlenformat : default integer format { ~sign { ~after; }; };

Die obige Definition zum Beispiel verursacht eine herkömmliche Zahlendarstellung, nur mit dem Negativzeichen am Schluß.


FMT(-346)
346-

In C implementiert ist eine Konfiguration als der Typ intcf_t. Man kann eine neue Konfiguration programmatisch erstellen, indem man diesen Typ initialisiert und die Funktion te_store_intcf aufruft. Man kann anders herum mit der Funktion te_retrieve_intcf eine beliebige Konfiguration aus dem Textkorpus als Instanz diesen Typs erhalten.