void ParseComponentStatements() { // componentStatement | componentStatement componentStatements | empty for (; ;) { object token = PeekNextToken(); if (token == null) { ErrorUnexpectedEndOfStream(); } VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("statement keyword or node id", "", "statement"); } switch (idToken.id) { case "COMPONENT": ParseComponentStatement(); break; default: return; } } }
X3DPrototypeInstance ParseProtoStatement(out string nodeTypeId) { // proto | externproto object token = PeekNextToken(); if (token == null) { ErrorUnexpectedEndOfStream(); } VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("PROTO or EXTERNPROTO", "", "proto statement"); } switch (idToken.id) { case "PROTO": return(ParseProto(out nodeTypeId)); case "EXTERNPROTO": return(ParseExternProto(out nodeTypeId)); default: nodeTypeId = ""; ErrorParsingToken("PROTO or EXTERNPROTO", idToken.id, "proto statement"); return(null); } }
void ParseMetaStatement() { // META metakey metavalue object token = PeekNextToken(); if (token == null) { ErrorUnexpectedEndOfStream(); } VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("META", "", "META statement"); } if (idToken.id == "META") { GetNextIDToken(); // META keyword string metakey = GetNextStringToken(); string metavalue = GetNextStringToken(); } }
void ParseComponentStatement() { // COMPONENT componentNameId : componentSupportLevel object token = PeekNextToken(); if (token == null) { ErrorUnexpectedEndOfStream(); } VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("COMPONENT", "", "COMPONENT statement"); } if (idToken.id != "COMPONENT") { return; } GetNextIDToken(); // COMPONENT keyword string componentNameId = GetNextIDToken(true); GetNextColonToken(); // : int componentSupportLevel = GetIntNumber(GetNextNumberToken()); }
internal X3DNode ParseSFNodeValue() { // nodeStatement | NULL try { object token = PeekNextToken(); if (token == null) { ErrorUnexpectedEndOfStream(); } VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("node statement keyword, node id or NULL", "", "sfnodeValue"); } switch (idToken.id) { case "NULL": string tokenNULL = GetNextIDToken(); return(null); default: return(ParseNodeStatement()); } } catch (UserCancellationException) { throw; } catch (Exception ex) { ErrorParsingField(VRMLReaderError.SFNodeInvalid, ex); } return(null); }
internal List <X3DNode> ParseSFNodeOrMFNodeValue() { // nodeStatement | [ ] | [ nodeStatements ] try { object token = PeekNextToken(); List <X3DNode> ret = new List <X3DNode>(); VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == '[') { char ts = GetNextTerminalSymbolToken(); for (; ;) { token = PeekNextToken(); tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == ']') { ts = GetNextTerminalSymbolToken(); break; } X3DNode node = ParseNodeStatement(); if (node != null) { ret.Add(node); } } } else { VRMLTokenIdKeywordOrFieldType nullToken = token as VRMLTokenIdKeywordOrFieldType; if (nullToken != null && nullToken.id == "NULL") { GetNextIDToken(); // consume NULL ErrorParsing(VRMLReaderError.ImproperInitializationOfMFNode); } else { X3DNode node = ParseNodeStatement(); if (node != null) { ret.Add(node); } } } return(ret); } catch (UserCancellationException) { throw; } catch (Exception ex) { ErrorParsingField(VRMLReaderError.MFNodeInvalid, ex); } return(null); }
void ParseProtoStatements() { // protoStatement | protoStatement protoStatements | empty for (; ;) { object token = PeekNextToken(); if (token == null) { ErrorUnexpectedEndOfStream(); } VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("statement keyword or node id", "", "proto statements"); } switch (idToken.id) { case "PROTO": case "EXTERNPROTO": string nodeTypeId; X3DPrototypeInstance proto = ParseProtoStatement(out nodeTypeId); protoDefinitions.Add(nodeTypeId, proto); break; default: return; } } }
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 string GetNextIDToken(bool colonIsTerminalSymbol) { object token = ConsumeNextToken(false, colonIsTerminalSymbol, false); VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("keyword or id", token); } return(idToken.id); }
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); }
void ParseStatement() { // nodeStatement | protoStatement | exportStatement | importStatement | routeStatement object token = PeekNextToken(); if (token == null) { ErrorUnexpectedEndOfStream(); } VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("statement keyword or node id", "", "statement"); } switch (idToken.id) { case "PROTO": case "EXTERNPROTO": string nodeTypeId; int lineOfProtoStart = line; X3DPrototypeInstance proto = ParseProtoStatement(out nodeTypeId); if (protoDefinitions.ContainsKey(nodeTypeId)) { ErrorParsing(VRMLReaderError.PROTOAlreadyDefined, lineOfProtoStart); } else { protoDefinitions.Add(nodeTypeId, proto); } break; case "EXPORT": ParseExportStatement(); break; case "IMPORT": ParseImportStatement(); break; case "ROUTE": ParseRouteStatement(); break; default: X3DNode node = ParseNodeStatement(); if (node != null) { nodes.Add(node); } break; } }
X3DNode ParseNodeStatement() { // node | DEF nodeNameId node | USE nodeNameId object token = PeekNextToken(); if (token == null) { ErrorUnexpectedEndOfStream(); } VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("DEF, USE or node id", "", "node statement"); } switch (idToken.id) { case "DEF": { string tokenDEF = GetNextIDToken(); string nodeNameId = GetNextIDToken(); X3DNode node = ParseNode(nodeNameId); if (node == null) { ErrorUnexpectedEndOfStream(); } instances[nodeNameId] = node; return(node); } case "USE": { string tokenUSE = GetNextIDToken(); string nodeNameId = GetNextIDToken(); if (instances.ContainsKey(nodeNameId)) { return(instances[nodeNameId]); } ErrorParsing(VRMLReaderError.USENameNotDefined); return(null); } default: return(ParseNode(null)); } }
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); }
List <InterfaceDeclaration> ParseExternInterfaceDeclarations() { // externInterfaceDeclaration | externInterfaceDeclaration externInterfaceDeclarations | empty List <InterfaceDeclaration> ret = new List <InterfaceDeclaration>(); for (; ;) { object token = PeekNextToken(); VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == ']') { return(ret); // done } VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("interface declaration keyword", "", "EXTRENPROTO statement interface declarations"); } switch (idToken.id) { case "eventIn": case "inputOnly": case "eventOut": case "outputOnly": case "field": case "initializeOnly": case "exposedField": case "inputOutput": ret.Add(ParseExternInterfaceDeclaration()); break; default: ErrorParsingToken("interface declaration keyword", idToken.id, "EXTRENPROTO statement interface declarations"); return(null); } } }
void ParseProfileStatement() { // PROFILE profileNameId object token = PeekNextToken(); if (token == null) { ErrorUnexpectedEndOfStream(); } VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("statement keyword or node id", "", "statement"); } if (idToken.id == "PROFILE") { GetNextIDToken(); // PROFILE keyword string profileNameId = GetNextIDToken(); } }
X3DNode ParseRootNodeStatement() { // node | DEF nodeNameId node object token = PeekNextToken(); if (token == null) { ErrorUnexpectedEndOfStream(); } VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("DEF or node id", "", "root node statement"); } switch (idToken.id) { case "DEF": { string tokenDEF = GetNextIDToken(); string nodeNameId = GetNextIDToken(); X3DNode node = ParseNode(nodeNameId); if (node == null) { ErrorUnexpectedEndOfStream(); } instances[nodeNameId] = node; return(node); } default: return(ParseNode(null)); } }
internal FieldType GetNextFieldTypeToken() { object token = ConsumeNextToken(false, false, false); VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("fieldType", token); } switch (idToken.id) { case "MFBool": return(FieldType.MFBool); case "MFColor": return(FieldType.MFColor); case "MFColorRGBA": return(FieldType.MFColorRGBA); case "MFDouble": return(FieldType.MFFloat); case "MFFloat": return(FieldType.MFFloat); case "MFImage": return(FieldType.MFImage); case "MFInt32": return(FieldType.MFInt32); case "MFMatrix3d": case "MFMatrix3f": return(FieldType.MFMatrix3f); case "MFMatrix4d": case "MFMatrix4f": return(FieldType.MFMatrix4f); case "MFNode": return(FieldType.MFNode); case "MFRotation": return(FieldType.MFRotation); case "MFString": return(FieldType.MFString); case "MFTime": return(FieldType.MFTime); case "MFVec2d": case "MFVec2f": return(FieldType.MFVec2f); case "MFVec3f": case "MFVec3d": return(FieldType.MFVec3f); case "MFVec4d": case "MFVec4f": return(FieldType.MFVec4f); case "SFBool": return(FieldType.SFBool); case "SFColor": return(FieldType.SFColor); case "SFColorRGBA": return(FieldType.SFColorRGBA); case "SFDouble": case "SFFloat": return(FieldType.SFFloat); case "SFImage": return(FieldType.SFImage); case "SFInt32": return(FieldType.SFInt32); case "SFMatrix3d": case "SFMatrix3f": return(FieldType.SFMatrix3f); case "SFMatrix4d": case "SFMatrix4f": return(FieldType.SFMatrix4f); case "SFNode": return(FieldType.SFNode); case "SFRotation": return(FieldType.SFRotation); case "SFString": return(FieldType.SFString); case "SFTime": return(FieldType.SFTime); case "SFVec2d": case "SFVec2f": return(FieldType.SFVec2f); case "SFVec3d": case "SFVec3f": return(FieldType.SFVec3f); case "SFVec4d": case "SFVec4f": return(FieldType.SFVec4f); default: ErrorParsingToken("fieldType", idToken.id); return(FieldType.SFInt32); // dummy to silence the compiler } }