mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-29 22:20:33 +00:00
Cast to the unsigned char expected by cctype functions
This commit is contained in:
parent
f23bd51175
commit
6daefe3ddc
@ -17,6 +17,19 @@
|
|||||||
#include "textnode.hpp"
|
#include "textnode.hpp"
|
||||||
#include "valuenode.hpp"
|
#include "valuenode.hpp"
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
bool isAlpha(char c)
|
||||||
|
{
|
||||||
|
return std::isalpha(static_cast<unsigned char>(c));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isDigit(char c)
|
||||||
|
{
|
||||||
|
return std::isdigit(static_cast<unsigned char>(c));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
namespace CSMFilter
|
namespace CSMFilter
|
||||||
{
|
{
|
||||||
struct Token
|
struct Token
|
||||||
@ -103,7 +116,7 @@ CSMFilter::Token CSMFilter::Parser::getStringToken()
|
|||||||
{
|
{
|
||||||
char c = mInput[mIndex];
|
char c = mInput[mIndex];
|
||||||
|
|
||||||
if (std::isalpha (c) || c==':' || c=='_' || (!string.empty() && std::isdigit (c)) || c=='"' ||
|
if (isAlpha(c) || c==':' || c=='_' || (!string.empty() && isDigit(c)) || c=='"' ||
|
||||||
(!string.empty() && string[0]=='"'))
|
(!string.empty() && string[0]=='"'))
|
||||||
string += c;
|
string += c;
|
||||||
else
|
else
|
||||||
@ -150,7 +163,7 @@ CSMFilter::Token CSMFilter::Parser::getNumberToken()
|
|||||||
{
|
{
|
||||||
char c = mInput[mIndex];
|
char c = mInput[mIndex];
|
||||||
|
|
||||||
if (std::isdigit (c))
|
if (isDigit(c))
|
||||||
{
|
{
|
||||||
string += c;
|
string += c;
|
||||||
hasDigit = true;
|
hasDigit = true;
|
||||||
@ -225,10 +238,10 @@ CSMFilter::Token CSMFilter::Parser::getNextToken()
|
|||||||
case '!': ++mIndex; return Token (Token::Type_OneShot);
|
case '!': ++mIndex; return Token (Token::Type_OneShot);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c=='"' || c=='_' || std::isalpha (c) || c==':')
|
if (c=='"' || c=='_' || isAlpha(c) || c==':')
|
||||||
return getStringToken();
|
return getStringToken();
|
||||||
|
|
||||||
if (c=='-' || c=='.' || std::isdigit (c))
|
if (c=='-' || c=='.' || isDigit(c))
|
||||||
return getNumberToken();
|
return getNumberToken();
|
||||||
|
|
||||||
error();
|
error();
|
||||||
|
@ -42,9 +42,9 @@ namespace MWInput
|
|||||||
|
|
||||||
bool consumed = SDL_IsTextInputActive() && // Little trick to check if key is printable
|
bool consumed = SDL_IsTextInputActive() && // Little trick to check if key is printable
|
||||||
(!(SDLK_SCANCODE_MASK & arg.keysym.sym) &&
|
(!(SDLK_SCANCODE_MASK & arg.keysym.sym) &&
|
||||||
(arg.keysym.sym >= 0 && arg.keysym.sym <= 255 && std::isprint(arg.keysym.sym) ||
|
|
||||||
// Don't trust isprint for symbols outside the extended ASCII range
|
// Don't trust isprint for symbols outside the extended ASCII range
|
||||||
(kc == MyGUI::KeyCode::None && arg.keysym.sym > 0xff)));
|
((kc == MyGUI::KeyCode::None && arg.keysym.sym > 0xff) ||
|
||||||
|
(arg.keysym.sym >= 0 && arg.keysym.sym <= 255 && std::isprint(arg.keysym.sym))));
|
||||||
if (kc != MyGUI::KeyCode::None && !mBindingsManager->isDetectingBindingState())
|
if (kc != MyGUI::KeyCode::None && !mBindingsManager->isDetectingBindingState())
|
||||||
{
|
{
|
||||||
if (MWBase::Environment::get().getWindowManager()->injectKeyPress(kc, 0, arg.repeat))
|
if (MWBase::Environment::get().getWindowManager()->injectKeyPress(kc, 0, arg.repeat))
|
||||||
|
@ -30,6 +30,11 @@ namespace LuaUtil
|
|||||||
{"POTION", ESM::LuaScriptCfg::sPotion},
|
{"POTION", ESM::LuaScriptCfg::sPotion},
|
||||||
{"WEAPON", ESM::LuaScriptCfg::sWeapon},
|
{"WEAPON", ESM::LuaScriptCfg::sWeapon},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool isSpace(char c)
|
||||||
|
{
|
||||||
|
return std::isspace(static_cast<unsigned char>(c));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<int> ScriptsConfiguration::sEmpty;
|
const std::vector<int> ScriptsConfiguration::sEmpty;
|
||||||
@ -101,11 +106,11 @@ namespace LuaUtil
|
|||||||
if (!line.empty() && line.back() == '\r')
|
if (!line.empty() && line.back() == '\r')
|
||||||
line = line.substr(0, line.size() - 1);
|
line = line.substr(0, line.size() - 1);
|
||||||
|
|
||||||
while (!line.empty() && std::isspace(line[0]))
|
while (!line.empty() && isSpace(line[0]))
|
||||||
line = line.substr(1);
|
line = line.substr(1);
|
||||||
if (line.empty() || line[0] == '#') // Skip empty lines and comments
|
if (line.empty() || line[0] == '#') // Skip empty lines and comments
|
||||||
continue;
|
continue;
|
||||||
while (!line.empty() && std::isspace(line.back()))
|
while (!line.empty() && isSpace(line.back()))
|
||||||
line = line.substr(0, line.size() - 1);
|
line = line.substr(0, line.size() - 1);
|
||||||
|
|
||||||
if (!Misc::StringUtils::ciEndsWith(line, ".lua"))
|
if (!Misc::StringUtils::ciEndsWith(line, ".lua"))
|
||||||
@ -118,7 +123,7 @@ namespace LuaUtil
|
|||||||
throw std::runtime_error(Misc::StringUtils::format("No flags found in: %s", std::string(line)));
|
throw std::runtime_error(Misc::StringUtils::format("No flags found in: %s", std::string(line)));
|
||||||
std::string_view flagsStr = line.substr(0, semicolonPos);
|
std::string_view flagsStr = line.substr(0, semicolonPos);
|
||||||
std::string_view scriptPath = line.substr(semicolonPos + 1);
|
std::string_view scriptPath = line.substr(semicolonPos + 1);
|
||||||
while (std::isspace(scriptPath[0]))
|
while (isSpace(scriptPath[0]))
|
||||||
scriptPath = scriptPath.substr(1);
|
scriptPath = scriptPath.substr(1);
|
||||||
|
|
||||||
// Parse flags
|
// Parse flags
|
||||||
@ -126,10 +131,10 @@ namespace LuaUtil
|
|||||||
size_t flagsPos = 0;
|
size_t flagsPos = 0;
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
while (flagsPos < flagsStr.size() && (std::isspace(flagsStr[flagsPos]) || flagsStr[flagsPos] == ','))
|
while (flagsPos < flagsStr.size() && (isSpace(flagsStr[flagsPos]) || flagsStr[flagsPos] == ','))
|
||||||
flagsPos++;
|
flagsPos++;
|
||||||
size_t startPos = flagsPos;
|
size_t startPos = flagsPos;
|
||||||
while (flagsPos < flagsStr.size() && !std::isspace(flagsStr[flagsPos]) && flagsStr[flagsPos] != ',')
|
while (flagsPos < flagsStr.size() && !isSpace(flagsStr[flagsPos]) && flagsStr[flagsPos] != ',')
|
||||||
flagsPos++;
|
flagsPos++;
|
||||||
if (startPos == flagsPos)
|
if (startPos == flagsPos)
|
||||||
break;
|
break;
|
||||||
|
@ -187,7 +187,7 @@ public:
|
|||||||
const auto notSpace = [](char ch)
|
const auto notSpace = [](char ch)
|
||||||
{
|
{
|
||||||
// TODO Do we care about multibyte whitespace?
|
// TODO Do we care about multibyte whitespace?
|
||||||
return !std::isspace(ch);
|
return !std::isspace(static_cast<unsigned char>(ch));
|
||||||
};
|
};
|
||||||
// left trim
|
// left trim
|
||||||
s.erase(s.begin(), std::find_if(s.begin(), s.end(), notSpace));
|
s.erase(s.begin(), std::find_if(s.begin(), s.end(), notSpace));
|
||||||
|
@ -311,7 +311,7 @@ void Settings::SettingsFileParser::saveSettingsFile(const std::string& file, con
|
|||||||
|
|
||||||
bool Settings::SettingsFileParser::skipWhiteSpace(size_t& i, std::string& str)
|
bool Settings::SettingsFileParser::skipWhiteSpace(size_t& i, std::string& str)
|
||||||
{
|
{
|
||||||
while (i < str.size() && std::isspace(str[i], std::locale::classic()))
|
while (i < str.size() && std::isspace(static_cast<unsigned char>(str[i]), std::locale::classic()))
|
||||||
{
|
{
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user