--- deliantra/server/common/player.C 2008/09/08 18:34:35 1.43
+++ deliantra/server/common/player.C 2008/09/09 10:51:59 1.44
@@ -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;
@@ -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 == ' ');
+
+ while (*cfpod == '\n')
+ buf << *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;
}