Add ToLower/ToUpper
This commit is contained in:
parent
36a545124e
commit
30dd49235d
@ -468,9 +468,7 @@ std::vector<ByteString> Client::DirectorySearch(ByteString directory, ByteString
|
||||
{
|
||||
std::vector<ByteString> extensions;
|
||||
extensions.push_back(extension);
|
||||
for (ByteString::iterator iter = search.begin(); iter != search.end(); ++iter)
|
||||
*iter = toupper(*iter);
|
||||
return DirectorySearch(directory, search, extensions);
|
||||
return DirectorySearch(directory, search.ToUpper(), extensions);
|
||||
}
|
||||
|
||||
std::vector<ByteString> Client::DirectorySearch(ByteString directory, ByteString search, std::vector<ByteString> extensions)
|
||||
@ -531,12 +529,10 @@ std::vector<ByteString> Client::DirectorySearch(ByteString directory, ByteString
|
||||
if(filename.EndsWith(*extIter))
|
||||
{
|
||||
extensionMatch = true;
|
||||
tempfilename = filename.SubstrFromEnd(0, (*extIter).size());
|
||||
tempfilename = filename.SubstrFromEnd(0, (*extIter).size()).ToUpper();
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (ByteString::iterator iter = tempfilename.begin(); iter != tempfilename.end(); ++iter)
|
||||
*iter = toupper(*iter);
|
||||
bool searchMatch = !search.size();
|
||||
if(search.size() && tempfilename.Contains(search))
|
||||
searchMatch = true;
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <limits>
|
||||
#include <ios>
|
||||
|
||||
/*
|
||||
@ -56,6 +57,11 @@
|
||||
Contains(value_type infix)
|
||||
Self-explanatory.
|
||||
|
||||
ToLower()
|
||||
ToUpper()
|
||||
Lowercases/Uppercases characters in the string. Only works on
|
||||
characters in the ASCII range.
|
||||
|
||||
ByteString::FromUtf8(bool ignoreError = true)
|
||||
Decodes UTF-8 byte sequences into Unicode codepoints.
|
||||
If ignoreError is true, then invalid byte sequences are widened
|
||||
@ -324,6 +330,24 @@ public:
|
||||
inline ByteString &Erase(size_t pos, size_t count) { super::erase(pos, count); return *this; }
|
||||
inline ByteString &EraseBetween(size_t from, size_t to) { if(from < to) super::erase(from, to - from); return *this; }
|
||||
|
||||
inline ByteString ToLower() const
|
||||
{
|
||||
std::locale const &loc = std::locale::classic();
|
||||
ByteString value(*this);
|
||||
for(value_type &ch : value)
|
||||
ch = std::tolower(ch, loc);
|
||||
return value;
|
||||
}
|
||||
|
||||
inline ByteString ToUpper() const
|
||||
{
|
||||
std::locale const &loc = std::locale::classic();
|
||||
ByteString value(*this);
|
||||
for(value_type &ch : value)
|
||||
ch = std::toupper(ch, loc);
|
||||
return value;
|
||||
}
|
||||
|
||||
String FromUtf8(bool ignoreError = true) const;
|
||||
inline String FromAscii() const;
|
||||
template<typename... Ts> static ByteString Build(Ts&&... args);
|
||||
@ -479,6 +503,26 @@ public:
|
||||
inline String &Erase(size_t pos, size_t count) { super::erase(pos, count); return *this; }
|
||||
inline String &EraseBetween(size_t from, size_t to) { if(from < to) super::erase(from, to - from); return *this; }
|
||||
|
||||
inline String ToLower() const
|
||||
{
|
||||
std::locale const &loc = std::locale::classic();
|
||||
String value(*this);
|
||||
for(value_type &ch : value)
|
||||
if(ch <= std::numeric_limits<ByteString::value_type>::max())
|
||||
ch = std::tolower(ch, loc);
|
||||
return value;
|
||||
}
|
||||
|
||||
inline String ToUpper() const
|
||||
{
|
||||
std::locale const &loc = std::locale::classic();
|
||||
String value(*this);
|
||||
for(value_type &ch : value)
|
||||
if(ch <= std::numeric_limits<ByteString::value_type>::max())
|
||||
ch = std::toupper(ch, loc);
|
||||
return value;
|
||||
}
|
||||
|
||||
ByteString ToUtf8() const;
|
||||
ByteString ToAscii() const;
|
||||
template<typename... Ts> static String Build(Ts&&... args);
|
||||
|
@ -104,8 +104,7 @@ void ElementSearchActivity::searchTools(String query)
|
||||
ui::Point viewPosition = searchField->Position + ui::Point(2+0, searchField->Size.Y+2+8);
|
||||
ui::Point current = ui::Point(0, 0);
|
||||
|
||||
ByteString queryLower = query.ToAscii();
|
||||
std::transform(queryLower.begin(), queryLower.end(), queryLower.begin(), ::tolower);
|
||||
ByteString queryLower = query.ToUtf8().ToLower();
|
||||
|
||||
std::vector<Tool *> matches;
|
||||
std::vector<Tool *> frontmatches;
|
||||
@ -113,8 +112,7 @@ void ElementSearchActivity::searchTools(String query)
|
||||
|
||||
for(std::vector<Tool*>::const_iterator iter = tools.begin(), end = tools.end(); iter != end; ++iter)
|
||||
{
|
||||
ByteString nameLower = (*iter)->GetName();
|
||||
std::transform(nameLower.begin(), nameLower.end(), nameLower.begin(), ::tolower);
|
||||
ByteString nameLower = (*iter)->GetName().ToLower();
|
||||
if(nameLower == queryLower)
|
||||
exactmatches.push_back(*iter);
|
||||
else if(nameLower.BeginsWith(queryLower))
|
||||
|
@ -58,11 +58,7 @@ class LoadFilesTask: public Task
|
||||
virtual bool doWork()
|
||||
{
|
||||
std::vector<ByteString> files = Client::Ref().DirectorySearch(directory, search, ".cps");
|
||||
std::sort(files.rbegin(), files.rend(), [](ByteString a, ByteString b) {
|
||||
std::transform(a.begin(), a.end(), a.begin(), ::tolower);
|
||||
std::transform(b.begin(), b.end(), b.begin(), ::tolower);
|
||||
return a < b;
|
||||
});
|
||||
std::sort(files.rbegin(), files.rend(), [](ByteString a, ByteString b) { return a.ToLower() < b.ToLower(); });
|
||||
|
||||
notifyProgress(-1);
|
||||
for(std::vector<ByteString>::iterator iter = files.begin(), end = files.end(); iter != end; ++iter)
|
||||
|
@ -289,8 +289,7 @@ void PreviewView::CheckComment()
|
||||
{
|
||||
if (!commentWarningLabel)
|
||||
return;
|
||||
String text = addCommentBox->GetText();
|
||||
std::transform(text.begin(), text.end(), text.begin(), ::tolower);
|
||||
String text = addCommentBox->GetText().ToLower();
|
||||
if (!userIsAuthor && (text.Contains("stolen") || text.Contains("copied")))
|
||||
{
|
||||
if (!commentHelpText)
|
||||
|
@ -56,9 +56,7 @@ void initLegacyProps()
|
||||
|
||||
else
|
||||
{
|
||||
ByteString temp = ByteString(prop.Name);
|
||||
std::transform(temp.begin(), temp.end(), temp.begin(), ::tolower);
|
||||
legacyPropNames.insert(std::pair<ByteString, StructProperty>(temp, prop));
|
||||
legacyPropNames.insert(std::pair<ByteString, StructProperty>(prop.Name.ToLower(), prop));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -138,7 +138,6 @@ LuaScriptInterface::LuaScriptInterface(GameController * c, GameModel * m):
|
||||
initPlatformAPI();
|
||||
|
||||
//Old TPT API
|
||||
char tmpname[12];
|
||||
int currentElementMeta, currentElement;
|
||||
const static struct luaL_Reg tptluaapi [] = {
|
||||
{"test", &luatpt_test},
|
||||
@ -295,10 +294,6 @@ tpt.partsdata = nil");
|
||||
tptElements = lua_gettop(l);
|
||||
for (int i = 1; i < PT_NUM; i++)
|
||||
{
|
||||
for (size_t j = 0; j < luacon_sim->elements[i].Name.size(); j++)
|
||||
tmpname[j] = tolower(luacon_sim->elements[i].Name[j]);
|
||||
tmpname[luacon_sim->elements[i].Name.size()] = 0;
|
||||
|
||||
lua_newtable(l);
|
||||
currentElement = lua_gettop(l);
|
||||
lua_pushinteger(l, i);
|
||||
@ -312,7 +307,7 @@ tpt.partsdata = nil");
|
||||
lua_setfield(l, currentElementMeta, "__index");
|
||||
lua_setmetatable(l, currentElement);
|
||||
|
||||
lua_setfield(l, tptElements, tmpname);
|
||||
lua_setfield(l, tptElements, luacon_sim->elements[i].Name.ToLower().c_str());
|
||||
}
|
||||
lua_setfield(l, tptProperties, "el");
|
||||
|
||||
@ -320,10 +315,6 @@ tpt.partsdata = nil");
|
||||
tptElementTransitions = lua_gettop(l);
|
||||
for (int i = 1; i < PT_NUM; i++)
|
||||
{
|
||||
for (size_t j = 0; j < luacon_sim->elements[i].Name.size(); j++)
|
||||
tmpname[j] = tolower(luacon_sim->elements[i].Name[j]);
|
||||
tmpname[luacon_sim->elements[i].Name.size()] = 0;
|
||||
|
||||
lua_newtable(l);
|
||||
currentElement = lua_gettop(l);
|
||||
lua_newtable(l);
|
||||
@ -336,7 +327,7 @@ tpt.partsdata = nil");
|
||||
lua_setfield(l, currentElementMeta, "__index");
|
||||
lua_setmetatable(l, currentElement);
|
||||
|
||||
lua_setfield(l, tptElementTransitions, tmpname);
|
||||
lua_setfield(l, tptElementTransitions, luacon_sim->elements[i].Name.ToLower().c_str());
|
||||
}
|
||||
lua_setfield(l, tptProperties, "eltransition");
|
||||
|
||||
@ -810,10 +801,8 @@ void LuaScriptInterface::initSimulationAPI()
|
||||
particleProperties = new StructProperty[particlePropertiesV.size()];
|
||||
for(std::vector<StructProperty>::iterator iter = particlePropertiesV.begin(), end = particlePropertiesV.end(); iter != end; ++iter)
|
||||
{
|
||||
ByteString propertyName = (*iter).Name;
|
||||
std::transform(propertyName.begin(), propertyName.end(), propertyName.begin(), ::toupper);
|
||||
lua_pushinteger(l, particlePropertiesCount);
|
||||
lua_setfield(l, -2, ("FIELD_"+propertyName).c_str());
|
||||
lua_setfield(l, -2, ("FIELD_" + (*iter).Name.ToUpper()).c_str());
|
||||
particleProperties[particlePropertiesCount++] = *iter;
|
||||
}
|
||||
|
||||
@ -2533,10 +2522,8 @@ int LuaScriptInterface::elements_allocate(lua_State * l)
|
||||
ByteString group, id, identifier;
|
||||
luaL_checktype(l, 1, LUA_TSTRING);
|
||||
luaL_checktype(l, 2, LUA_TSTRING);
|
||||
group = ByteString(lua_tostring(l, 1));
|
||||
std::transform(group.begin(), group.end(), group.begin(), ::toupper);
|
||||
id = ByteString(lua_tostring(l, 2));
|
||||
std::transform(id.begin(), id.end(), id.begin(), ::toupper);
|
||||
group = ByteString(lua_tostring(l, 1)).ToUpper();
|
||||
id = ByteString(lua_tostring(l, 2)).ToUpper();
|
||||
|
||||
if(group == "DEFAULT")
|
||||
return luaL_error(l, "You cannot create elements in the 'default' group.");
|
||||
|
Loading…
Reference in New Issue
Block a user