public override void HandleToken(Token<ScriptToken> token) { switch (token.Type) { case ScriptToken.String: if (!String.IsNullOrEmpty(_varname) && _equals) { int bv=Variable.StringToBool(token.ToString()); if (bv!=-1) { AddVariableAndReset(_currentnode, new BoolVariable(bv==1 ? true : false, _varname), false, false); break; } else { AddVariableAndReset(_currentnode, new StringVariable(token.ToString(), _varname), false, false); } } else if ((!String.IsNullOrEmpty(_varname) || _currentiden!=null) && !_equals) { MakeIdentifier(token); int bv=Variable.StringToBool(token.ToString()); if (bv!=-1) { AddVariableAndReset(_currentiden, new BoolVariable(bv==1 ? true : false), false, false); break; } AddVariableAndReset(_currentiden, new StringVariable(token.ToString()), false, false); } else { _varname=token.ToString(); } break; case ScriptToken.QuotedString: if (!String.IsNullOrEmpty(_varname) && _equals) { AddVariableAndReset(_currentnode, new StringVariable(token.ToString(), _varname), false, false); } else if ((!String.IsNullOrEmpty(_varname) || _currentiden!=null) && !_equals) { MakeIdentifier(token); AddVariableAndReset(_currentiden, new StringVariable(token.ToString()), false, false); } else { _varname=token.ToString(); } break; case ScriptToken.Number: if (!String.IsNullOrEmpty(_varname) && _equals) { _currentvalue=new IntVariable(token.ToInt(), _varname); AddVariableAndReset(_currentnode, _currentvalue, false, false); } else if ((!String.IsNullOrEmpty(_varname) || _currentiden!=null) && !_equals) { MakeIdentifier(token); AddVariableAndReset(_currentiden, new IntVariable(token.ToInt()), false, false); } else { //new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "A number cannot be an identifier"); _varname=token.ToString(); } break; case ScriptToken.Double: if (!String.IsNullOrEmpty(_varname) && _equals) { _currentvalue=new FloatVariable((float)token.ToDouble(), _varname); AddVariableAndReset(_currentnode, _currentvalue, false, false); } else if ((!String.IsNullOrEmpty(_varname) || _currentiden!=null) && !_equals) { MakeIdentifier(token); AddVariableAndReset(_currentiden, new FloatVariable((float)token.ToDouble()), false, false); } else { new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "A number cannot be an identifier"); _varname=token.ToString(); } break; case ScriptToken.Equals: if (_currentiden!=null) new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "Unexpected equality sign after identifier declaration"); else if (_varname.Length==0) new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "Expected string, got equality sign"); else if (_equals) new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "Expected value, got equality sign"); else _equals=true; break; case ScriptToken.OpenBrace: if (_currentiden!=null) new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "Node cannot contain values (possible openbrace typo)"); Node tempnode=new Node(_varname, _currentnode); AddVariableAndReset(_currentnode, tempnode, false, false); _currentnode=tempnode; break; case ScriptToken.CloseBrace: if (_currentnode.Parent==null) { new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "Mismatched node brace"); } else if (_equals) { new ScriptParserException(ScriptParserError.PARSER, "StandardScriptParserHandler.HandleToken", token, _parser, "Expected value, got close-brace"); } else { if (_currentiden!=null) Reset(true, true); _currentnode=(Node)_currentnode.Parent; } break; case ScriptToken.Comment: case ScriptToken.CommentBlock: // Do nothing break; case ScriptToken.EOL: case ScriptToken.EOF: Finish(); break; //default: // //DebugLog("(StandardScriptParserHandler.handleToken) Unhandled token of type "+token.typeAsString()) // break; } }