Merged pull request #1876

This commit is contained in:
Marc Zinnschlag 2018-08-26 09:15:38 +02:00
commit 327f36b081
3 changed files with 34 additions and 5 deletions

View file

@ -306,10 +306,22 @@ namespace Compiler
int i = 0;
std::string lowerCase = Misc::StringUtils::lowerCase(name);
bool isKeyword = false;
for (; sKeywords[i]; ++i)
if (lowerCase==sKeywords[i])
{
isKeyword = true;
break;
}
// Russian localization and some mods use a quirk - add newline character directly
// to compiled bytecode via HEX-editor to implement multiline messageboxes.
// Of course, original editor will not compile such script.
// Allow messageboxes to bybass the "incomplete string or name" error.
if (lowerCase == "messagebox")
enableIgnoreNewlines();
else if (isKeyword)
mIgnoreNewline = false;
if (sKeywords[i])
{
@ -357,9 +369,14 @@ namespace Compiler
// }
else if (c=='\n')
{
error = true;
mErrorHandler.error ("incomplete string or name", mLoc);
break;
if (mIgnoreNewline)
mErrorHandler.warning ("string contains newline character, make sure that it is intended", mLoc);
else
{
error = true;
mErrorHandler.error ("incomplete string or name", mLoc);
break;
}
}
}
else if (!(c=='"' && name.empty()))
@ -588,7 +605,7 @@ namespace Compiler
const Extensions *extensions)
: mErrorHandler (errorHandler), mStream (inputStream), mExtensions (extensions),
mPutback (Putback_None), mPutbackCode(0), mPutbackInteger(0), mPutbackFloat(0),
mStrictKeywords (false), mTolerantNames (false)
mStrictKeywords (false), mTolerantNames (false), mIgnoreNewline(false)
{
}
@ -641,6 +658,11 @@ namespace Compiler
mExtensions->listKeywords (keywords);
}
void Scanner::enableIgnoreNewlines()
{
mIgnoreNewline = true;
}
void Scanner::enableStrictKeywords()
{
mStrictKeywords = true;