X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=blobdiff_plain;f=src%2Fexman.cc;h=e5cdd9fe09d6dc6fc702fc5b6ec7f9b24e0a8e73;hp=31ee1aec95457deb536f237c25fd593133c738f6;hb=7ffa5c50d9254af9bd746fc5e6bc8e5db8eda675;hpb=37b68f014b46922b885c6344d6b069cba3c9c3c5 diff --git a/src/exman.cc b/src/exman.cc index 31ee1ae..e5cdd9f 100644 --- a/src/exman.cc +++ b/src/exman.cc @@ -8,6 +8,7 @@ #include "geomdraw.h" static Exhibit *create_exhibit(const char *type); +static void clean_desc_text(char *dest, const char *src); ExhibitSlot::ExhibitSlot(Exhibit *ex) @@ -244,7 +245,10 @@ bool ExhibitManager::load(MetaScene *mscn, const char *fname) ExData exd; if(desc) { - exd.text = std::string(desc); + char *fixed_desc = new char[strlen(desc) + 1]; + clean_desc_text(fixed_desc, desc); + exd.text = std::string(fixed_desc); + delete [] fixed_desc; } if(voice) { exd.voice = new OggVorbisStream; @@ -368,3 +372,27 @@ static Exhibit *create_exhibit(const char *type) error_log("unknown exhibit type: %s\n", type); return 0; } + +/* clean up description text to be more easily layed out later. + * more specifically: + * - remove redundant spaces + * - remove all newlines except as paragraph separators + * - remove all other whitespace chars + * destination buffer must be as large as the source buffer + */ +static void clean_desc_text(char *dest, const char *src) +{ + while(*src) { + if(isspace(*src)) { + if(*src == '\n' && *(src + 1) == '\n') { + *dest++ = '\n'; + } else { + *dest++ = ' '; + } + while(*src && isspace(*src)) ++src; + } else { + *dest++ = *src++; + } + } + *dest = 0; +}