public bool Execute(string script, out ScriptExecutionException exception)
{
string line = null;
int i = -1;
try{
string[] lines = script.Split('\n');
for(i = 0; i < lines.Length; i++)
{
line = lines[i].Trim();
if(line.Length == 0)
{
continue;
}else if(line[0] == ';')
{
OnComment(line.Substring(1));
}else{
string[] parts = line.Split(new[]{' '}, StringSplitOptions.RemoveEmptyEntries);
int[] args = new int[parts.Length-1];
for(int j = 1; j < parts.Length; j++)
{
if(!int.TryParse(parts[j], out args[j-1]))
{
throw new ScriptExecutionException(i+1, line, string.Format("Cannot parse argument \"{0}\".", parts[j]), null);
}
}
OnFunction(parts[0], args);
}
}
exception = null;
return true;
}catch(ScriptExecutionException e)
{
exception = e;
return false;
}catch(Exception e)
{
exception = new ScriptExecutionException(i+1, line, e.Message, e);
return false;
}
}