From e44729cd43a98ee35bea3b123f3e021cdc6dceee Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 9 Jan 2013 00:17:42 -0800 Subject: [PATCH] Make the text keys lower-case when extracting them I think it's safe to assume all text keys are treated in a case-insensitive manner. So far the only known NiTextKeyExtraData records are for animation keys, which effectively are. --- apps/openmw/mwrender/animation.cpp | 5 ----- components/nifogre/ogre_nif_loader.cpp | 13 +++++++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/apps/openmw/mwrender/animation.cpp b/apps/openmw/mwrender/animation.cpp index 6da3ad583..4e33873d3 100644 --- a/apps/openmw/mwrender/animation.cpp +++ b/apps/openmw/mwrender/animation.cpp @@ -75,11 +75,6 @@ void Animation::createEntityList(Ogre::SceneNode *node, const std::string &model if(mTextKeys.size() > 0) { - NifOgre::TextKeyMap::iterator keyiter; - for(keyiter = mTextKeys.begin();keyiter != mTextKeys.end();keyiter++) - std::transform(keyiter->second.begin(), keyiter->second.end(), - keyiter->second.begin(), ::tolower); - Ogre::AnimationStateSet *aset = mEntityList.mSkelBase->getAllAnimationStates(); Ogre::AnimationStateIterator as = aset->getAnimationStateIterator(); while(as.hasMoreElements()) diff --git a/components/nifogre/ogre_nif_loader.cpp b/components/nifogre/ogre_nif_loader.cpp index e71c57efa..803496bf9 100644 --- a/components/nifogre/ogre_nif_loader.cpp +++ b/components/nifogre/ogre_nif_loader.cpp @@ -286,13 +286,18 @@ static TextKeyMap extractTextKeys(const Nif::NiTextKeyExtraData *tk) std::string::size_type pos = 0; while(pos < str.length()) { - while(pos < str.length() && ::isspace(str[pos])) + if(::isspace(str[pos])) + { pos++; - if(pos >= str.length()) - break; + continue; + } std::string::size_type nextpos = std::min(str.find('\r', pos), str.find('\n', pos)); - textkeys.insert(std::make_pair(tk->list[i].time, str.substr(pos, nextpos-pos))); + std::string result; + result.reserve(str.length()); + std::transform(str.begin()+pos, str.begin()+std::min(str.length(), nextpos), + std::back_inserter(result), ::tolower); + textkeys.insert(std::make_pair(tk->list[i].time, result)); pos = nextpos; }