--- deliantra/server/common/player.C 2008/09/08 18:34:35 1.43
+++ deliantra/server/common/player.C 2008/12/28 06:59:26 1.48
@@ -294,7 +294,7 @@
// end == 0, till eos
// end >= 1, levels of " >>>"
static const char *
-expand_cfpod (const player *pl, dynbuf_text &buf, const char *cfpod, int end)
+expand_cfpod (const player *pl, dynbuf_text &buf, const char *cfpod, int end = 0)
{
static dynbuf_text nest(128, 128);
@@ -305,6 +305,13 @@
return cfpod - 1;
case ' ':
+ // verbatim block?
+ if (!buf.size () && !end)
+ {
+ --cfpod;
+ goto verbatim;
+ }
+
if (end < 1)
goto passthrough;
@@ -354,21 +361,9 @@
else if (*cfpod != ' ')
buf << ' ';
- // start verbatim block's?
+ // verbatim block?
if (*cfpod == ' ')
- {
- // elements cannot currently span multiple lines
- do
- {
- buf << "";
- cfpod = expand_cfpod (pl, buf, cfpod, -2);
- buf << "\n";
- }
- while (*cfpod == ' ');
-
- while (*cfpod == '\n')
- buf << *cfpod++;
- }
+ goto verbatim;
break;
@@ -428,7 +423,7 @@
case 'G': // gender
{
- expand_cfpod (pl, nest, cfpod, end);
+ cfpod = expand_cfpod (pl, nest, cfpod, end);
nest << '\0'; // zero-terminate
const char *str = nest.linearise ();
@@ -436,7 +431,7 @@
if (sep)
{
- if (pl->gender || 1)
+ if (pl->gender)
buf.add (sep + 1, nest.size () - (sep - str) - 2);
else
buf.add (str, sep - str);
@@ -460,6 +455,21 @@
buf << ch;
skip:
break;
+
+ verbatim:
+ // elements cannot currently span multiple lines
+ do
+ {
+ buf << "";
+ cfpod = expand_cfpod (pl, buf, cfpod, -2);
+ buf << "\n";
+
+ while (*cfpod == '\n')
+ buf << *cfpod++;
+ }
+ while (*cfpod == ' ');
+
+ break;
}
}
@@ -469,7 +479,7 @@
static dynbuf_text buf(1024, 1024);
buf.clear ();
- ::expand_cfpod (this, buf, cfpod, 0);
+ ::expand_cfpod (this, buf, cfpod);
return &buf;
}