diff options
-rw-r--r-- | src/auxiliary/functions.cc | 22 | ||||
-rw-r--r-- | src/auxiliary/functions.h | 6 | ||||
-rw-r--r-- | src/game/game.cc | 24 |
3 files changed, 44 insertions, 8 deletions
diff --git a/src/auxiliary/functions.cc b/src/auxiliary/functions.cc index dbfc799..a6187af 100644 --- a/src/auxiliary/functions.cc +++ b/src/auxiliary/functions.cc @@ -143,4 +143,26 @@ void trim(std::string &text) } } +void to_label(std::string &text) +{ + trim(text); + size_t pos = 0; + + while (pos < text.size()) { + if ((text[pos] == ' ') || (text[pos] == '-')) { + text[pos] = '_'; + pos++; + } else if ((text[pos] >= 'A') && (text[pos] <= 'Z')) { + text[pos] = text[pos] + 'a' - 'A'; + pos++; + } else if ((text[pos] >= 'a') && (text[pos] <= 'z')) { + pos++; + } else if ((text[pos] >= '0') && (text[pos] <= '9')) { + pos++; + } else { + text.erase(pos, 1); + } + } +} + } diff --git a/src/auxiliary/functions.h b/src/auxiliary/functions.h index 557ab45..65b6a2b 100644 --- a/src/auxiliary/functions.h +++ b/src/auxiliary/functions.h @@ -55,6 +55,12 @@ const std::string text_strip_lowercase(const std::string &text); /// trim leading ad trailing spaces from a string void trim(std::string &text); +/// convert a string to a valid label string +/** trim leading and trealing spaces, convert remaining spaces to underscores, and make lowercase + * remove any non-alphanumeric character + */ +void to_label(std::string &text); + } #endif // __INCLUDED_AUX_FUNCTIONS_H__ diff --git a/src/game/game.cc b/src/game/game.cc index 5a937ca..e5b13d2 100644 --- a/src/game/game.cc +++ b/src/game/game.cc @@ -268,8 +268,7 @@ bool Game::load_world() } else if (worldini.section().compare("world") == 0 ) { if (worldini.got_key_string("zone", label)) { - aux::trim(label); - aux::to_lowercase(label); + aux::to_label(label); zone = new core::Zone(label); core::Zone::add(zone); } @@ -347,9 +346,11 @@ bool Game::load_zone(core::Zone *zone) con_warn << zoneini.name() << " unknown key '" << zoneini.key() << "' at line " << zoneini.line() << std::endl; } } else if (zoneini.section().compare("star") == 0) { - if (zoneini.got_key_string("label", star->entity_label)) + if (zoneini.got_key_string("label", strval)) { + aux::to_label(strval); + star->entity_label.assign(strval); continue; - else if (zoneini.got_key_string("name", star->entity_name)) + } else if (zoneini.got_key_string("name", star->entity_name)) continue; else if (zoneini.got_key_vector3f("location", star->entity_location )) continue; @@ -361,9 +362,11 @@ bool Game::load_zone(core::Zone *zone) con_warn << zoneini.name() << " unknown key '" << zoneini.key() << "' at line " << zoneini.line() << std::endl; } else if (zoneini.section().compare("planet") == 0) { - if (zoneini.got_key_string("label", planet->entity_label)) + if (zoneini.got_key_string("label", strval)) { + aux::to_label(strval); + planet->entity_label.assign(strval); continue; - else if (zoneini.got_key_string("name", planet->entity_name)) + } else if (zoneini.got_key_string("name", planet->entity_name)) continue; else if (zoneini.got_key_string("texture", planet->entity_texture)) continue; @@ -391,7 +394,9 @@ bool Game::load_zone(core::Zone *zone) con_warn << zoneini.name() << " unknown shape '" << shapename << "' at line " << zoneini.line() << std::endl; } continue; - } else if (zoneini.got_key_string("label", entity->entity_label)) { + } else if (zoneini.got_key_string("label", strval)) { + aux::to_label(strval); + entity->entity_label.assign(strval); continue; } else if (zoneini.got_key_string("name", entity->entity_name)) { continue; @@ -464,12 +469,15 @@ bool Game::load_ships() } ShipModel *shipmodel = 0; + std::string label; bool b; while (shipsini.getline()) { if (shipsini.got_key()) { if (shipsini.section().compare("ship") == 0) { - if (shipsini.got_key_string("label", shipmodel->shipmodel_label)) { + if (shipsini.got_key_string("label", label)) { + aux::to_label(label); + shipmodel->shipmodel_label.assign(label); ShipModel::add(shipmodel); continue; } else if (shipsini.got_key_string("name",shipmodel->shipmodel_name)) { |