--- 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; }