strip invalid characters when evaluating Actor command parameters

This commit is contained in:
Chris Danford
2004-11-06 06:00:58 +00:00
parent 4b29db0667
commit 7e17fd9615
4 changed files with 19 additions and 10 deletions
+3 -1
View File
@@ -17,7 +17,9 @@ void IncorrectActorParametersWarning( const ParsedCommand &command, int iMaxInde
void ParsedCommandToken::Set( const CString &sParam )
{
s = sParam;
f = Lua::RunExpressionF( sParam );
CString s = sParam;
Lua::PrepareExpression( s ); // strip invalid chars
f = Lua::RunExpressionF( s );
bColorIsValid = c.FromString( sParam );
}
+11
View File
@@ -184,6 +184,17 @@ void Lua::UpdateGlobals()
lua_setglobal( L, "SCREEN_CENTER_Y" );
}
void Lua::PrepareExpression( CString &sInOut )
{
// HACK: Many metrics have "//" comments that Lua fails to parse.
// Replace them with Lua-style comments.
sInOut.Replace( "//", "--" );
// Remove leading +, eg. "+50"; Lua doesn't handle that.
if( sInOut.size() >= 1 && sInOut[0] == '+' )
sInOut.erase( 0, 1 );
}
void RunExpression( const CString &str )
{
LoadFromString( L, "return " + str );
+1
View File
@@ -4,6 +4,7 @@
struct lua_State;
namespace Lua
{
void PrepareExpression( CString &sInOut ); // strip "//" comments and "+"
bool RunExpressionB( const CString &str );
float RunExpressionF( const CString &str );
+4 -9
View File
@@ -615,13 +615,8 @@ int ThemeManager::GetMetricI( CString sClassName, CString sValueName )
float ThemeManager::GetMetricF( CString sClassName, CString sValueName )
{
CString str = GetMetricRaw( sClassName,sValueName );
// HACK: Many metrics have "//" comments that Lua fails to parse.
// Replace them with Lua-style comments.
str.Replace( "//", "--" );
// Remove leading +, eg. "+50"; Lua doesn't handle that.
if( str.size() >= 1 && str[0] == '+' )
str.erase( 0, 1 );
Lua::PrepareExpression( str );
return Lua::RunExpressionF( str );
}
@@ -634,9 +629,9 @@ bool ThemeManager::GetMetricB( CString sClassName, CString sValueName )
return false; /* optimization */
if( str == "1" )
return true; /* optimization */
// HACK: Many metrics have "//" comments that Lua fails to parse.
// Replace them with Lua-style comments.
str.Replace( "//", "--" );
Lua::PrepareExpression( str );
return Lua::RunExpressionB( str );
}