replace_personal(): Grossschreibung am Stringanfang

Wenn der Ersetzungsstring am Anfang des Strings ist,
sollte er gross geschrieben werden, falls <caps>
wahr ist. (#21994)

Change-Id: Ie953f7258cfb4f5e3a578c61ffa8433d99301b41
diff --git a/secure/simul_efun/spare/simul_efun.c b/secure/simul_efun/spare/simul_efun.c
index 84e0b78..f27bdea 100644
--- a/secure/simul_efun/spare/simul_efun.c
+++ b/secure/simul_efun/spare/simul_efun.c
@@ -1810,7 +1810,8 @@
   parts = regexplode(str, "@WE[A-SU]*[0-9]");
   i = sizeof(parts);
 
-  if (i>1) {
+  if (i>1)
+  {
     int j, t;
     closure *name_cls;
 
@@ -1823,7 +1824,8 @@
       else if (stringp(obs[j]))
         name_cls[j] = obs[j];
 
-    while ((i-= 2)>0) {
+    while ((i-= 2)>0)
+    {
       int ob_nr;
       // zu ersetzendes Token in Fall und Objektindex aufspalten
       ob_nr = parts[i][<1]-'1';
@@ -1889,28 +1891,37 @@
         default:
           continue;
       }
-      
+
       // wenn tmp ein String war, weisen wir es hier pauschal zu
       if (stringp(tmp))
         parts[i] = tmp;
 
       // auf Wunsch wird nach Satzenden gross geschrieben
       if (caps)
-        switch (parts[i-1][<2..]) {
-          case ". ":  case "! ":  case "? ":
-          case ".":   case "!":   case "?":
-          case ".\n": case "!\n": case "?\n":
-          case "\" ": case "\"\n":
+      {
+        // Wenn das vorhergehende parts[i] == "" ist, sind wir am Anfang vom
+        // String und dies wird wie ein Satzende vorher behandelt.
+        if (parts[i-1] == "")
             parts[i] = capitalize(parts[i]);
-            break;
+        else
+        {
+          switch (parts[i-1][<2..])
+          {
+            case ". ":  case "! ":  case "? ":
+            case ".":   case "!":   case "?":
+            case ".\n": case "!\n": case "?\n":
+            case "\" ": case "\"\n":
+              parts[i] = capitalize(parts[i]);
+              break;
+          }
         }
+      }
     }
     return implode(parts, "");
   }
   return str;
 }
 
-
 //replacements for dropped efuns in LD
 #if !__EFUN_DEFINED__(extract)
 deprecated varargs string extract(string str, int from, int to) {