internal object GetNextNumberToken() { object token = ConsumeNextToken(false, false, false); VRMLTokenNumber numberToken = token as VRMLTokenNumber; if (numberToken == null) { VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken != null) { string id = idToken.id.ToLower(); if (id == "infinity") { return(double.PositiveInfinity); } if (id == "nan") { return(double.NaN); } } ErrorParsingToken("number", token); } return(numberToken.number); }
internal X3DFieldBase ParseUntypedFieldValue() { object token = PeekNextToken(); #region sfboolValue or sfnodeValue (NULL or Node(s)) VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken != null) { switch (idToken.id) { case "TRUE": GetNextIDToken(); return(new SFBool(true)); case "FALSE": GetNextIDToken(); return(new SFBool(false)); case "NULL": GetNextIDToken(); return(null); default: return(ParseNodeStatement()); } } #endregion #region mf*Values ([-Token) VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null) { if (tsToken.symbol != '[') { ErrorParsingToken("[", tsToken.symbol.ToString(), "unknown type value"); } return(ParseUntypedFieldValueArray()); } #endregion #region sfstringValue VRMLTokenString strToken = token as VRMLTokenString; if (strToken != null) { return(new SFString(GetNextStringToken())); } #endregion #region sfcolorValue, sffloatValue, sfimageValue, sfint32Value, sfrotationValue, sftimeValue, sfvec2fValue or sfvec3fValue VRMLTokenNumber numberToken = token as VRMLTokenNumber; if (numberToken != null) { return(new SFNumbers(ParseUntypedFieldValueNumbers())); } #endregion return(null); }
List <object> ParseUntypedFieldValueNumbers() { List <object> ret = new List <object>(); for (; ;) { object token = PeekNextToken(); VRMLTokenNumber n = token as VRMLTokenNumber; if (n == null) { return(ret); } ret.Add(n.number); ConsumeNextToken(false, false, false); } }
X3DFieldBase ParseUntypedFieldValueArray() { char ts = GetNextTerminalSymbolToken(); // [ object token = PeekNextToken(); X3DFieldBase ret = null; VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken != null) { ret = new MFNode(ParseUntypedFieldValueNodeArray()); } VRMLTokenString strToken = token as VRMLTokenString; if (strToken != null) { ret = new MFString(ParseUntypedFieldValueStringArray()); } VRMLTokenNumber numberToken = token as VRMLTokenNumber; if (numberToken != null) { ret = new MFNumbers(ParseUntypedFieldValueNumbers()); } ts = GetNextTerminalSymbolToken(); if (ts != ']') { ErrorParsingToken("]", ts.ToString(), "unknown type value (array)"); } if (ret == null) { ret = new MFEmpty(); } return(ret); }