| 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) |