SYNOPSIS
        varargs string terminal_colour(string str,
                                       null | mapping | closure map,
                                       int wrap, int indent)
BESCHREIBUNG
        Ist <map> ein Wert ungleich 0, ersetzt diese Efun alle Farb-
        Definitionen der Form "%^KEY%^" (siehe unten fuer Details) im
        String <str> und ersetzt sie durch die entsprechenden Werte aus dem
        unter <map> angegebenen Farbschluessel.

        Ist <map> ein Mapping, muessen die Eintraege das Format
        "KEY" : "wert" haben; Eintraege, die keine Strings enthalten,
        werden ignoriert. Einzige Ausnahme dazu: enthaelt <map> einen
        Eintrag der Form 0:wert, wird dieser fuer alle Farbdefinitionen
        verwendet, die keinem anderen Schluessel zugeordnet werden koennen.
        <wert> kann in diesem Fall ein String oder eine Closure sein. Handelt
        es sich um eine Closure, erhaelt diese den <KEY> als Argument und
        muss einen String zurueck liefern, der <KEY> ersetzt.

        Ist <map> eine Closure, wird diese mit den Farbdefinitionen <KEY>
        als Argument aufgerufen und muss einen String zurueck liefern, der
        die <KEY>s ersetzt.

        Die speziellen Schluessel "%^%^" und "%%^^" werden immer durch das
        Literal "%^" ersetzt.

        Die Parameter <wrap> und <indent> sind optional. Ist nur <wrap>
        angegeben, wird <str> in der Spalte <wrap> umgebrochen. Ist
        zusaetzlich <indent> angegeben, werden alle umgebrochenen Zeilen
        um <indent> Spalten eingerueckt.

        Der Zeilenumbruch ignoriert die Laenge der Farbmakros und ihrer
        Inhalte. Er bricht <str> anhand der Laenge der uebrigen Zeichen
        um, ist also farb-neutral.

        Ist <map> als 0 angegeben, fuehrt die Efun kein Suchen und Ersetzen
        von Farbdefinitionen durch. Die Funktionalitaet von Zeilenumbruch
        und Einrueckung bleiben erhalten, wenn gewuenscht. Auf diese Weise
        dupliziert terminal_colour() die Funktion von sprintf("%-=s") und
        wirkt als einfache Zeilenumbruch Funktion.


        ERKENNEN VON FARBDEFINITIONEN

        Wie bereits erwaehnt, werden die speziellen Schluessel "%^%^" und
        "%%^^" durch das Literal "%^" ersetzt und spielen im Weiteren
        keine Rolle.

        Fuer den Eingabestring wird das folgende Format vorausgesetzt:

            text { '%^' colorkey '%^' text } [ '%^' colorkey ]

        Oder in Worten: die Efun trennt den String bei jedem '%^', das
        sie antrifft und behandelt anschliessend jeden zweiten Teilstring
        als Farbschluessel.

        Merke: dieses Verhalten unterscheidet sich von der Behandlung des
        Eingabestrings unter MudOS. Dort lautet die Syntax:

            key_oder_text { '%^' key_oder_text }

        Oder in Worten: die MudOS Efun trennt den String bei jedem '%^'
        und versucht dann jeden Teilstring als Farbschluessel zu behandeln.
        Dieses Verhalten laesst sich auch unter LPC erreichen:

          string mudos_terminal_colour(string str, mapping ext, int w, int i) {
            return terminal_colour("%^"+implode(explode(str, "%^")-({""})
                                               ,"%^%^")
                                  , ext, w, i);
          }


BEISPIELE
        mapping trans;
        string str;

        trans = ([ "GREEN" : "ansi-green", "RED" : "", "BLUE" : 1 ]);

        str = terminal_colour( "%^GREEN%^ and %^RED%^ and %^BLUE%^", trans );

        Dies fuehrt zu str == "ansi-green and  and BLUE".

        "%^GREEN^%" wird ersetzt durch "ansi-green", weil <trans> das so
        definiert,
        "%^RED%^" wird aus <str> entfernt, weil es mit "" ersetzt wird, und
        "%^BLUE%^" wird um die "%^" verkuert, weil der Eintrag zu BLUE in
        <trans> keinen gueltigen Wert enthaelt (d.h. kein String ist). Das
        selbe wuerde passieren, wenn <str> "%^DEFINE%^" enthalten wuerde,
        zu dem es keinen Eintrag in <trans> gibt.

        Merke: um direkt benachbarte Schluessel zu ersetzen, soll die
        Efun wie folgt verwendet werden:

            str = terminal_colour( "%^GREEN%^%^RED%^", trans );

        Eine Eingabe der Form

            str = terminal_colour( "%^GREEN%^RED%^", trans );

        fuehrt zum logischen, aber vielleicht unerwarteten Ergebnis
        "ansi-greenRED".


        Einige Worte zum Zeilenumbruch:

        Ein String, der ohne Einrueckung umgebrochen wird (<indent> ist 0),
        sieht so aus:

            "dies ist die erste Zeile\nund dies ist die zweite Zeile"

        Ein String, der mit <indent> 3 umgebrochen wird, sieht so aus:

            "dies ist die erste Zeile\n   und dies ist die zweite Zeile"

GESCHICHTE
        Die Idee fuer diese Efun und die erste Implementierung stammen
        aus MudOS; die Strategie fuer das Erkennen von Schluesseln
        (eingeschlossen die pure Zeilenumbruch Funktion) wurde in
        LDMud 3.2.8 geglaettet.
        LDMud 3.2.9 fuegte die Verwendung von Closures zur Definition
        von Farbschluesseln hinzu. Es erklaerte zudem offiziell das
        Verhalten betreffen "%%^^" aus Gruenden besserer Kompatibilitaet
        mit MudOS.

SIEHE AUCH
        sprintf(E)
