process_string()
================

process_string(E)

FUNKTION
--------

     string process_string(string str)
     string process_string(closure cl)

BESCHREIBUNG
------------

     Beschreibung s. efun/process_string.

     Abweichend zu der Beschreibung gibt es im MG folgende wichtige Punkte:
     
     * nicht in neuem Code nutzen, aus altem Code ausbauen
     * nicht nutzbar fuer Objekte mit einer UID mit einem Level > 30.
     * nicht rufbar durch Magiershells
     * kann Funktionen in anderen Objekten nur rufen, wenn diese zum gleichen
       Magier gehoeren.

     Folgendes Properties und Details werden bei der Abfrage ueber
     process_string() gefiltert:
       
     * P_LONG
     * P_SHORT
     * Details
     * NPC-Chats
     * P_INT_LONG
     * P_INT_SHORT

     Die Nutzung kann zu Sicherheitsproblemen fuehren, siehe auch
     process_call().

BEISPIEL
--------

.. code-block:: pike

     // komplette Ersetzung ...
     SetProp(P_LONG,"@@current_long@@");
     ...
     string current_long() {
      if(x) return(break_string("Die Beschreibung."));
      else return(break_string("Die andere Beschreibung."));
     }

     -> bei Abfrage: "Die Beschreibung." oder "Die andere Beschreibung."

     // Teilersetzung
     SetProp(P_SHORT, "Ein @@farbenfun|huebsch@@ Ding");
     ...
     string farbenfun(string str) {
      return(str+" "+"gelbes");
     }

     -> bei Abfrage: "Ein huebsch gelbes Ding."


SIEHE AUCH
----------

     :doc:`process_call`, :doc:`replace_personal`

02.09.2020 Zesstra

