Platzhalter von AddToMenu() umgestellt.

Fuer bessere Wartbarkeit benutzt der Pub jetzt replace_personal() fuer
Platzhalter. Die alten funktionieren weiterhin, sollten aber nicht mehr
verwendet werden.

Change-Id: Iaf96d9b21ca47e1a921e58fbb612035cad4ecb5b
diff --git a/doc/lfun/AddToMenu b/doc/lfun/AddToMenu
index 82407f4..7ceacbb 100644
--- a/doc/lfun/AddToMenu
+++ b/doc/lfun/AddToMenu
@@ -127,6 +127,9 @@
         dieser maechtigeren Funktion aus Gruenden der Abwaertskompatibilitaet
         simuliert, sollen aber nicht mehr eingesetzt werden.
         
+        Die alten Platzhalter && etc. (s.u.) werden weiterhin unterstuetzt,
+        sollten aber fuer bessere Wartbarkeit nicht mehr verwendet werden.
+        
         Fuer das Testen der Kneipe gibt es in jeder Kneipe den Befehl
         'pubinit'. Hiermit lassen sich die Speisen und Getraenke durch-
         checken. Steht in der Ausgabe bei einem Getraenk/Essen ein FAIL,
@@ -143,13 +146,13 @@
         AddToMenu("'Opa's Drachenkeule'",({"drachenkeule","keule"}),
         ([P_HP:63,P_SP:63,P_FOOD:9,P_VALUE:528]), 5,
         ({"Du isst die Keule mit einem schlechten Gewissen.",
-          "&& isst die Keule mit einem schlechten Gewissen."}),
+          "@WER1 isst die Keule mit einem schlechten Gewissen."}),
         ([ PR_USER : 4; 1 , PR_ALL : 20; 3 ]), 9,
         ({"Der unsichtbare Kneipier schneidet einem Rentner ein grosses "
           "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss "
           "wohl ein Tippfehler auf der Karte gewesen sein.",
           "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
-          "Stueck aus dessen Keule und braet diese fuer &&."}) );
+          "Stueck aus dessen Keule und braet diese fuer @WEN1."}) );
         }
 
         1) Name der Speise (des Getraenks) auf der Karte (bei menue).
@@ -175,28 +178,11 @@
            ben werden (also NICHT der Bestell-Text).
 
            ({"Du isst die Keule mit einem schlechten Gewissen.",
-             "&& isst die Keule mit einem schlechten Gewissen."}),
+             "@WER1 isst die Keule mit einem schlechten Gewissen."}),
 
-           Verfuegbare Platzhalter sind (pl = this_player()):
-
-           &&  - pl->name(WER,2)
-           &1& - pl->name(WER,2)
-           &2& - pl->name(WESSEN,2)
-           &3& - pl->name(WEM,2)
-           &4& - pl->name(WEN,2)
-           &1# - capitalize(pl->name(WER,2))
-           &2# - capitalize(pl->name(WESSEN,2))
-           &3# - capitalize(pl->name(WEM,2))
-           &4# - capitalize(pl->name(WEN,2))
-           &!  - pl->QueryPronoun(WER)
-           &5& - pl->QueryPronoun(WE);
-           &6& - pl->QueryPronoun(WESSEN)
-           &7& - pl->QueryPronoun(WEM)
-           &8& - pl->QueryPronoun(WEN)
-           &5# - capitalize(pl->QueryPronoun(WER))
-           &6# - capitalize(pl->QueryPronoun(WESSEN))
-           &7# - capitalize(pl->QueryPronoun(WEM))
-           &8# - capitalize(pl->QueryPronoun(WEN))
+           Die Ausgabe-Strings werden vor der Ausgabe mit dem Empfaenger
+           als Objekt an replace_personal() uebergeben. Fuer die
+           moeglichen Platzhalter siehe dort.
           
         6) Die Speise ist in ihrer Anzahl begrenzt. Fuer jeden Spieler
            sind 4 Keulen pro reset() da. Ausserdem gibt es noch einen
@@ -224,10 +210,31 @@
            "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss "
            "wohl ein Tippfehler auf der Karte gewesen sein.",
            "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
-           "Stueck aus dessen Keule und braet diese fuer &&."}));
+           "Stueck aus dessen Keule und braet diese fuer @WEN1."}));
+
+LISTE DER ALTEN PLATZHALTER (DEPRECATED):
+           &&  - pl->name(WER,2)
+           &1& - pl->name(WER,2)
+           &2& - pl->name(WESSEN,2)
+           &3& - pl->name(WEM,2)
+           &4& - pl->name(WEN,2)
+           &1# - capitalize(pl->name(WER,2))
+           &2# - capitalize(pl->name(WESSEN,2))
+           &3# - capitalize(pl->name(WEM,2))
+           &4# - capitalize(pl->name(WEN,2))
+           &!  - pl->QueryPronoun(WER)
+           &5& - pl->QueryPronoun(WE);
+           &6& - pl->QueryPronoun(WESSEN)
+           &7& - pl->QueryPronoun(WEM)
+           &8& - pl->QueryPronoun(WEN)
+           &5# - capitalize(pl->QueryPronoun(WER))
+           &6# - capitalize(pl->QueryPronoun(WESSEN))
+           &7# - capitalize(pl->QueryPronoun(WEM))
+           &8# - capitalize(pl->QueryPronoun(WEN))
+
 
 SIEHE AUCH:
         AddFood(), AddDrink(), /sys/pub.h
-        RemoveFromMenu()
+        RemoveFromMenu(), replace_personal()
 ----------------------------------------------------------------------------
 Last modified: Sam, 01. Okt 2011, 23:40 by Arathorn
diff --git a/std/room/pub.c b/std/room/pub.c
index c15e33e..92eb9f8 100644
--- a/std/room/pub.c
+++ b/std/room/pub.c
@@ -71,6 +71,34 @@
   set_next_reset(-1);
 }
 
+// Die alten durch die neuen Platzhalter ersetzen
+private string replace_dummy(string str)
+{
+  switch(str)
+  {
+    case "&&": return "@WERU1";
+    case "&1&": return "@WERU1";
+    case "&2&": return "@WESSENU1";
+    case "&3&": return "@WEMU1";
+    case "&4& ": return "@WENU1";
+    case "&1#": return "@WERU1";
+    case "&2#": return "@WESSENU1";
+    case "&3#": return "@WEMU1";
+    case "&4# ": return "@WENU1";
+    case "&!": return "@WERQP1";
+    case "&5&": return "@WERQP1";
+    case "&6&": return "@WESSENQP1";
+    case "&7&": return "@WEMQP1";
+    case "&8&": return "@WENQP1";
+    case "&5#": return "@WERQP1";
+    case "&6#": return "@WESSENQP1";
+    case "&7#": return "@WEMQP1";
+    case "&8#": return "@WENQP1";
+    default: return str;
+  }
+  return str;
+}
+
 /* Zur Syntax:
  *
  * menuetext - Der Text steht im Menue
@@ -136,6 +164,18 @@
   for( i=sizeof(ids)-1;i>=0;i-- )
     id_list += ([ ids[i] : ident ]);
 
+  if(pointerp(msg) && sizeof(msg)>=2)
+  {
+    msg[0]=regreplace(msg[0],"[&][1-8,&,#,!]*", #'replace_dummy, 1);
+    msg[1]=regreplace(msg[1],"[&][1-8,&,#,!]*", #'replace_dummy, 1);
+  }
+
+  if(pointerp(d_msg) && sizeof(d_msg)>=2)
+  {
+    d_msg[0]=regreplace(msg[0],"[&][1-8,&,#,!]*", #'replace_dummy, 1);
+    d_msg[1]=regreplace(msg[1],"[&][1-8,&,#,!]*", #'replace_dummy, 1);
+  }    
+  
   if ( intp(refresh) && (refresh>0) )
     refresh = ([ PR_ALL : refresh; 1 ]);
   else if ( !mappingp(refresh) )
@@ -509,35 +549,16 @@
   return 0;
 }
 
-/* Hier hats jede Menge neue Platzhalter */
+
 string mess(string str,object pl)
 {
-  string dummy1, dummy2;
-
   if ( !pl )
     pl=PL;
 
   if ( !stringp(str) || str=="" )
     return str;
 
-  str=implode(explode(str,"&&"),pl->name(WER,2));
-  str=implode(explode(str,"&1&"),pl->name(WER,2));
-  str=implode(explode(str,"&2&"),pl->name(WESSEN,2));
-  str=implode(explode(str,"&3&"),pl->name(WEM,2));
-  str=implode(explode(str,"&4&"),pl->name(WEN,2));
-  str=implode(explode(str,"&1#"),capitalize(pl->name(WER,2)));
-  str=implode(explode(str,"&2#"),capitalize(pl->name(WESSEN,2)));
-  str=implode(explode(str,"&3#"),capitalize(pl->name(WEM,2)));
-  str=implode(explode(str,"&4#"),capitalize(pl->name(WEN,2)));
-  str=implode(explode(str,"&!"),pl->QueryPronoun(WER));
-  str=implode(explode(str,"&5&"),pl->QueryPronoun(WER));
-  str=implode(explode(str,"&6&"),pl->QueryPronoun(WESSEN));
-  str=implode(explode(str,"&7&"),pl->QueryPronoun(WEM));
-  str=implode(explode(str,"&8&"),pl->QueryPronoun(WEN));
-  str=implode(explode(str,"&5#"),capitalize(pl->QueryPronoun(WER)));
-  str=implode(explode(str,"&6#"),capitalize(pl->QueryPronoun(WESSEN)));
-  str=implode(explode(str,"&7#"),capitalize(pl->QueryPronoun(WEM)));
-  str=implode(explode(str,"&8#"),capitalize(pl->QueryPronoun(WEN)));
+  str=replace_personal(str,({pl}),1);
 
   return break_string(capitalize(str),78,"", BS_LEAVE_MY_LFS);
 }